⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decoder.cpp

📁 《Visual C++小波变换技术与工程实践》靳济芳编著的光盘程序。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
							else
								dumpFrameNonCoded(pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER],
									ppfReconAux[ENHN_LAYER], pvodec [ENHN_LAYER]->volmd().iAuxCompCount,
									rgpvopcPrevDisp[ENHN_LAYER],
									pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay, nBits);
// end: added by Sharp (99/1/28)
//							pvodec [ENHN_LAYER]->dumpDataAllFrame (pfReconYUV [ENHN_LAYER], pfReconSeg [ENHN_LAYER], rctDisplay); // deleted by Sharp (99/1/28)
#else
							pvodec [ENHN_LAYER]->dumpDataOneFrame(argv, bScalability, rctDisplay);
#endif
//							} // added by Sharp (98/10/26) // deleted by Sharp (99/1/25)
						}

						tNextEnhc = pvodec[ENHN_LAYER] -> senseTime ();
					}
				}
// begin: added by Sharp (98/11/11)
#ifndef __OUT_ONE_FRAME_
				if ( iEof != FALSE )
				dumpFrame (pvodec[BASE_LAYER]->pvopcReconCurr() , &(rgpvopcPrevDisp[BASE_LAYER]), pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER], 
				    NULL, 0,
					pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,
					nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue,  0, pvodec [BASE_LAYER]->vopmd().bInterlace);
				else
					dumpFrameNonCoded(pfReconYUV[BASE_LAYER], pfReconSeg[BASE_LAYER],
						ppfReconAux[BASE_LAYER], pvodec [BASE_LAYER]->volmd().iAuxCompCount,
						rgpvopcPrevDisp[BASE_LAYER],
						pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay, nBits);
#endif
// end: added by Sharp (98/11/11)
				tNextBase = pvodec[BASE_LAYER] -> senseTime ();
			}


			if(bScalability && (tNextEnhc = pvodec[ENHN_LAYER] -> senseTime ()) != EOF) { // modified by Sharp (99/1/25)
				pvodec[ENHN_LAYER] -> bufferB2flush ();

//				tNextEnhc = pvodec[ENHN_LAYER] -> senseTime (); // deleted by Sharp (99/1/25)
				while((tPvopBase > tNextEnhc) && (tNextEnhc != EOF)) {
					iEof = pvodec[ENHN_LAYER] -> decode ();
					nEnhcFrames ++;
					if (pvodec [ENHN_LAYER] -> volmd ().fAUsage != RECTANGLE) {
						// for background composition
						if(pvodec [ENHN_LAYER] -> volmd ().iEnhnType != 0) { // change for Norio Ito
							// should be changed to background_composition flag later.
							printf("============== background composition (2)\n");
							pvodec [ENHN_LAYER] -> BackgroundComposition(argv, bScalability, rctDisplay.width, rctDisplay.height (), pfReconYUV [ENHN_LAYER]); // modified by Sharp (98/10/26)
						}
						// for back/forward shape
						if(pvodec [ENHN_LAYER] -> vopmd ().iLoadBakShape) {
							printf("---------- output backward shape\n");
							const CVOPU8YUVBA* pvopcQuant = pvodec [ENHN_LAYER]->rgpbfShape[0]->pvopcReconCurr ();
							pvopcQuant->getPlane (BY_PLANE)->dump (pfTestSeg, rctDisplay);
						}
						if(pvodec [ENHN_LAYER] -> vopmd ().iLoadForShape) {
							printf("---------- output forward shape\n");
							const CVOPU8YUVBA* pvopcQuant = pvodec [ENHN_LAYER]->rgpbfShape[1]->pvopcReconCurr ();
							pvopcQuant->getPlane (BY_PLANE)->dump (pfTestSeg, rctDisplay);
						}
					}

				// Output ENHN_LAYER
					if (iEof != EOF) {
//						if ( pvodec [ENHN_LAYER] -> volmd ().iEnhnType != 1 ){ // added by Sharp (98/11/18) // deleted by Sharp (99/1/25)
#ifndef __OUT_ONE_FRAME_
// begin: added by Sharp (99/1/28)
							if ( iEof != FALSE )
								dumpFrame (pvodec[ENHN_LAYER]->pvopcReconCurr(), &(rgpvopcPrevDisp[ENHN_LAYER]), pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER], 
								    NULL, 0,
									pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay,
									nBits, pvodec [ENHN_LAYER]->vopmd().iVopConstantAlphaValue,  pvodec[ENHN_LAYER]->volmd().iEnhnType, 0);
							else
								dumpFrameNonCoded(pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER],
									ppfReconAux[ENHN_LAYER], pvodec [ENHN_LAYER]->volmd().iAuxCompCount,
									rgpvopcPrevDisp[ENHN_LAYER],
									pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay, nBits);
// end: added by Sharp (99/1/28)
//							pvodec [ENHN_LAYER]->dumpDataAllFrame (pfReconYUV [ENHN_LAYER], pfReconSeg [ENHN_LAYER], rctDisplay); // deleted by Sharp (99/1/28)
#else
							pvodec [ENHN_LAYER]->dumpDataOneFrame(argv, bScalability, rctDisplay);
#endif
//						}// added by Sharp (98/11/18) // deleted by Sharp (99/1/25)
					}
					tNextEnhc = pvodec[ENHN_LAYER] -> senseTime ();
				}

// begin: deleted by Sharp (99/1/25)
/*
				if((tPvopBase == tNextEnhc) && (tNextEnhc != EOF)) {						// for Spatial Scalability
					pvodec[ENHN_LAYER] -> copyBufP2ToB1 ();
					iEof = pvodec[ENHN_LAYER] -> decode ();
					nEnhcFrames ++;
				}
*/
// end: deleted by Sharp (99/1/25)

// begin: added by Sharp (99/1/20)
      iEof = tNextBase;
#ifndef __OUT_ONE_FRAME_
// begin: added by Sharp (99/1/28)
      if ( iEof == EOF )
				if ( bCachedRefFrameCoded )
// end: added by Sharp (99/1/28)
        dumpFrame (pvodec[BASE_LAYER]->pvopcRefQLater() , &(rgpvopcPrevDisp[BASE_LAYER]), pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER], 
			NULL, 0,
			pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,
			nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue,  0, pvodec [BASE_LAYER]->vopmd().bInterlace );
// begin: added by Sharp (99/1/28)
				else
					dumpFrameNonCoded(pfReconYUV[BASE_LAYER], pfReconSeg[BASE_LAYER],
						ppfReconAux[BASE_LAYER], pvodec [BASE_LAYER]->volmd().iAuxCompCount,
						rgpvopcPrevDisp[BASE_LAYER],
						pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay, nBits);
// end: added by Sharp (99/1/28)
#endif
// end: added by Sharp (99/1/20)


				pvodec[ENHN_LAYER] -> bufferB1flush ();

				// Enhancement Layer after Base BVOP
				if (tNextBase == EOF && tNextEnhc != EOF) {
					pvodec[ENHN_LAYER] -> copyBufP2ToB1 ();
					while(tNextEnhc != EOF) {
						iEof = pvodec[ENHN_LAYER] -> decode ();
						nEnhcFrames ++;

						if (pvodec [ENHN_LAYER] -> volmd ().fAUsage != RECTANGLE) {
							// for background composition
							if(pvodec [ENHN_LAYER] -> volmd ().iEnhnType != 0) { // change for Norio Ito
								// should be changed to background_composition flag later.
								printf("============== background composition (2)\n");
								pvodec [ENHN_LAYER] -> BackgroundComposition(argv, bScalability, rctDisplay.width, rctDisplay.height (), pfReconYUV [ENHN_LAYER]); // Modified after Sharp (98/10/26)
							}
							// for back/forward shape
							if(pvodec [ENHN_LAYER] -> vopmd ().iLoadBakShape) {
								printf("---------- output backward shape\n");
								const CVOPU8YUVBA* pvopcQuant = pvodec [ENHN_LAYER]->rgpbfShape[0]->pvopcReconCurr ();
								pvopcQuant->getPlane (BY_PLANE)->dump (pfTestSeg, rctDisplay);
							}
							if(pvodec [ENHN_LAYER] -> vopmd ().iLoadForShape) {
								printf("---------- output forward shape\n");
								const CVOPU8YUVBA* pvopcQuant = pvodec [ENHN_LAYER]->rgpbfShape[1]->pvopcReconCurr ();
								pvopcQuant->getPlane (BY_PLANE)->dump (pfTestSeg, rctDisplay);
							}
						}

						// Output ENHN_LAYER
						if (iEof != EOF) {
//							if ( pvodec [ENHN_LAYER] -> volmd ().iEnhnType != 1 ){ // added by Sharp (98/11/18) // deleted by Sharp (99/1/25)
#ifndef __OUT_ONE_FRAME_
							if ( iEof != FALSE )
								dumpFrame (pvodec[ENHN_LAYER]->pvopcReconCurr(), &(rgpvopcPrevDisp[ENHN_LAYER]), pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER], 
									NULL, 0,
									pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay,
									nBits, pvodec [ENHN_LAYER]->vopmd().iVopConstantAlphaValue,  pvodec[ENHN_LAYER]->volmd().iEnhnType, 0);
							else
								dumpFrameNonCoded(pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER],
									ppfReconAux[ENHN_LAYER], pvodec [ENHN_LAYER]->volmd().iAuxCompCount,
									rgpvopcPrevDisp[ENHN_LAYER],
									pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay, nBits);
//								pvodec [ENHN_LAYER]->dumpDataAllFrame (pfReconYUV [ENHN_LAYER], pfReconSeg [ENHN_LAYER], rctDisplay);
#else
								pvodec [ENHN_LAYER]->dumpDataOneFrame(argv, bScalability, rctDisplay);
#endif
//							}// added by Sharp (98/11/18) // deleted by Sharp (99/1/25)
						}
						tNextEnhc = pvodec[ENHN_LAYER] -> senseTime ();
					}
					pvodec[ENHN_LAYER] -> bufferB1flush ();
				}
			}

		}

#ifdef __PC_COMPILER_
		Int tickAfter = ::GetTickCount ();
		printf ("Total time: %d\n", tickAfter - tickBegin);
		Double dAverage = (Double) (tickAfter - tickBegin) / (Double) (nBaseFrames + nEnhcFrames);
		printf ("Total frames: %d\tAverage time: %.6lf\n", nBaseFrames + nEnhcFrames, dAverage);
		printf ("FPS %.6lf\n", 1000.0 / dAverage);
#endif // __PC_COMPILER_

#ifndef __OUT_ONE_FRAME_
		fclose (pfReconYUV[BASE_LAYER]);
		if (pvodec[BASE_LAYER]->volmd ().fAUsage != RECTANGLE)
			fclose (pfReconSeg [BASE_LAYER]);
#endif
		delete pvodec[BASE_LAYER];
		if (bScalability) {
#ifndef __OUT_ONE_FRAME_
			fclose (pfReconYUV[ENHN_LAYER]);
			if (pvodec[ENHN_LAYER]->volmd ().fAUsage != RECTANGLE)
				fclose (pfReconSeg [ENHN_LAYER]);
#endif
			delete pvodec[ENHN_LAYER];
		}

	}

	return;
}


Void dumpFrame (const CVOPU8YUVBA* pvopcQuant,
				const CVOPU8YUVBA** ppvopcPrevDisp,
                FILE*              pfYUV, 
                FILE*              pfSeg,
                FILE**             ppfAux, 
                Int                iAuxCompCount,
                AlphaUsage         fAUsage, 
                CRct&              rct,
                UInt               nBits, 
                Int                iAlphaScale,
                Int                DumpSkip,
                Bool               bInterlace)
{
	if ( DumpSkip == 0 ){
		if(fAUsage == RECTANGLE)
		{
			*ppvopcPrevDisp = pvopcQuant; // save this output frame, in case later one is skipped
			pvopcQuant->getPlane (Y_PLANE)->dump (pfYUV, rct);
			pvopcQuant->getPlane (U_PLANE)->dump (pfYUV, rct / 2);
			pvopcQuant->getPlane (V_PLANE)->dump (pfYUV, rct / 2);
		}
		else
		{
			PixelC pxlUVZero = 1 << (nBits-1);
			// binary - need to window the output frame
			((CU8Image*) pvopcQuant->getPlane (BUV_PLANE))->decimateBinaryShapeFrom (*(pvopcQuant->getPlane (BY_PLANE)), bInterlace);
			pvopcQuant->getPlane (Y_PLANE)->dumpWithMask (pfYUV, pvopcQuant->getPlane (BY_PLANE), rct, 256, (PixelC)0);
			pvopcQuant->getPlane (U_PLANE)->dumpWithMask (pfYUV, pvopcQuant->getPlane (BUV_PLANE), rct / 2, 256, pxlUVZero);
			pvopcQuant->getPlane (V_PLANE)->dumpWithMask (pfYUV, pvopcQuant->getPlane (BUV_PLANE), rct / 2, 256, pxlUVZero);
		}
	}
	
	if (pfSeg!= NULL && fAUsage != RECTANGLE)
		pvopcQuant->getPlane (BY_PLANE)->dump (pfSeg, rct, iAlphaScale);
	
	if (fAUsage == EIGHT_BIT) {
		if (ppfAux!=NULL) {
			for(Int iAuxComp=0; iAuxComp<iAuxCompCount; iAuxComp++ ) { // MAC (SB) 1-Dec-99
				if (ppfAux[iAuxComp]!=NULL)
					pvopcQuant->getPlaneA (iAuxComp)->dumpWithMask (ppfAux[iAuxComp], pvopcQuant->getPlane (BY_PLANE),
					rct, iAlphaScale, (PixelC)0);
			}
		}
	}
	
}

Void dumpFrameNonCoded(FILE* pfYUV, FILE* pfSeg, FILE **ppfAux, Int iAuxCompCount, const CVOPU8YUVBA* pvopcPrevDisp, AlphaUsage fAUsage, CRct& rctDisplay, UInt nBits)
{
	if(fAUsage != RECTANGLE)
	{
		if (fAUsage == EIGHT_BIT)
			dumpNonCodedFrame(pfYUV, pfSeg, ppfAux, iAuxCompCount, rctDisplay, nBits);
		else
			dumpNonCodedFrame(pfYUV, pfSeg, NULL, 0, rctDisplay, nBits);
	}
	else if(pvopcPrevDisp==NULL)
		dumpNonCodedFrame(pfYUV, pfSeg, NULL, 0, rctDisplay, nBits);
	else
	{
		// dump previous frame again
		pvopcPrevDisp->getPlane (Y_PLANE)->dump (pfYUV, rctDisplay);
		pvopcPrevDisp->getPlane (U_PLANE)->dump (pfYUV, rctDisplay / 2);
		pvopcPrevDisp->getPlane (V_PLANE)->dump (pfYUV, rctDisplay / 2);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -