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

📄 decoder.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		fatal_error("cant open output yuv file",pfReconYUV [BASE_LAYER] != NULL);		if (bScalability) {//			sprintf (pchTmp, "%s_e.yuv", argv [2 + bScalability]); // deleted by Sharp (98/10/26)//			pfReconYUV [ENHN_LAYER]= fopen (pchTmp, "wb"); // deleted by Sharp (98/10/26)			pfReconYUV [ENHN_LAYER] = pfReconYUV [BASE_LAYER]; // added by Sharp (98/10/26)			fatal_error("cant open enhancement layer output yuv file",pfReconYUV [ENHN_LAYER] != NULL);		}		sprintf (pchTmp, "%s.seg", argv [2 + bScalability]);		FILE* pfReconSeg [2];		if (pvodec [BASE_LAYER]-> volmd ().fAUsage != RECTANGLE) {			pfReconSeg [BASE_LAYER] = fopen (pchTmp, "wb");			fatal_error("cant open output seg file",pfReconSeg [BASE_LAYER] != NULL);		}		if (bScalability) {			if (pvodec [ENHN_LAYER]-> volmd ().fAUsage != RECTANGLE) {				if (pvodec [ENHN_LAYER]-> volmd ().iEnhnType == 1) { // added by Sharp (98/10/26)					sprintf (pchTmp, "%s_e.seg", argv [2 + bScalability]);					pfReconSeg [ENHN_LAYER]= fopen (pchTmp, "wb");				} else // added by Sharp (98/10/26)					pfReconSeg [ENHN_LAYER]= pfReconSeg [BASE_LAYER]; // added by Sharp (98/10/26)				fatal_error("cant open output enhancement layer seg file",pfReconSeg [ENHN_LAYER] != NULL);			}		}// begin: deleted by Sharp (98/10/26)//		if (bScalability) //			if (pvodec [ENHN_LAYER]-> volmd ().iEnhnType == 1) {//				FILE *pfTemp;//				sprintf (pchTmp, "%s_bgc.yuv", argv [2 + bScalability]);//				pfTemp = fopen (pchTmp, "wb");			 // clear file pointer for background composition//				fclose(pfTemp);//			}// end: delted by Sharp (98/10/26)#endif		// for back/forward shape output 		FILE* pfTestSeg = NULL;		if (bScalability)			if (pvodec [ENHN_LAYER]-> volmd ().iEnhnType == 1) {				sprintf (pchTmp, "%s.bfseg", argv [2 + bScalability]);				pfTestSeg = fopen (pchTmp, "wb"); //reconstructed Seg file(bfShape)				fatal_error("cant open output bfseg file",pfTestSeg!=NULL);			}		int iEof = 1;#ifdef __PC_COMPILER_		Int tickBegin = ::GetTickCount ();#endif // __PC_COMPILER_		Time tPvopBase, tNextBase, tNextEnhc = 0;		int nBaseFrames = 0;		int nEnhcFrames = 0;		Bool bCacheRefFrame = FALSE; // added by Sharp (98/11/18)		Bool bCachedRefFrameCoded = FALSE; // added by Sharp (99/1/28)		tNextBase = pvodec[BASE_LAYER] -> senseTime();		while (iEof != EOF) {			if (pvodec[BASE_LAYER] -> getPredType () != BVOP) {			// for bitstreams stopped at BVOP				iEof = pvodec[BASE_LAYER] -> decode ();				if(iEof == EOF)					break;				if(bScalability)					pvodec[BASE_LAYER] -> updateBuffVOPsBase (pvodec[ENHN_LAYER]);				nBaseFrames ++;				// Output BASE_LAYER#ifndef __OUT_ONE_FRAME_// begin: added by Sharp (98/11/11)				if ( bCacheRefFrame ) {  // modified by by Sharp (98/11/18)					if ( bCachedRefFrameCoded ) // added by Sharp (99/1/28)						dumpFrame (pvodec[BASE_LAYER]->pvopcRefQPrev() , pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER], pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,							nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue,  0 );					else // added by Sharp (99/1/28)						dumpNonCodedFrame( pfReconYUV[BASE_LAYER], pfReconSeg[BASE_LAYER], rctDisplay, nBits); // added by Sharp (99/1/28)				}				// begin: added by Sharp (98/11/18)				else {					bCacheRefFrame = TRUE;				}				// end: added by Sharp (98/11/18)// end: added by Sharp (98/11/11)//				pvodec [BASE_LAYER]->dumpDataAllFrame (pfReconYUV [BASE_LAYER], pfReconSeg [BASE_LAYER], rctDisplay); // deleted by Sharp (98/11/11)#else				pvodec [BASE_LAYER]->dumpDataOneFrame(argv, bScalability, rctDisplay);#endif				bCachedRefFrameCoded = (iEof != FALSE); // added by Sharp(99/1/28)				tPvopBase = pvodec[BASE_LAYER] -> getTime ();			}			else {	// for bitstreams stopped at BVOP				tPvopBase = MAX_TIME;				pvodec[BASE_LAYER] -> copyRefQ1ToQ0 ();			}			tNextBase = pvodec[BASE_LAYER] -> senseTime ();			while((tPvopBase > tNextBase) && (tNextBase != EOF)) {					iEof = pvodec[BASE_LAYER] -> decode ();					if(bScalability)						pvodec[BASE_LAYER] -> updateBuffVOPsBase (pvodec[ENHN_LAYER]);					// Output BASE_LAYER					if (iEof != EOF) {						nBaseFrames ++; // begin: deleted by Sharp (98/11/11)// #ifndef __OUT_ONE_FRAME_// 						pvodec [BASE_LAYER]->dumpDataAllFrame (pfReconYUV [BASE_LAYER], pfReconSeg [BASE_LAYER], rctDisplay); // deleted by Sharp (98/11/11)// #else// end: deleted by Sharp (98/11/11)#ifdef __OUT_ONE_FRAME_ // added by Sharp (98/11/11)						pvodec [BASE_LAYER]->dumpDataOneFrame(argv, bScalability, rctDisplay);#endif					}				if(bScalability && tNextEnhc != EOF) {					tNextEnhc = pvodec[ENHN_LAYER] -> senseTime ();					while((tNextBase > 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 == 1) { 								// should be changed to background_composition flag later.								printf("============== background composition (1)\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/10/26) //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(), pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER], pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay,									nBits, pvodec [ENHN_LAYER]->vopmd().iVopConstantAlphaValue,  pvodec[ENHN_LAYER]->volmd().iEnhnType );							}							else								dumpNonCodedFrame(pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER], 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() , pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER], pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,					nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue,  0 );				else					dumpNonCodedFrame(pfReconYUV[BASE_LAYER], pfReconSeg[BASE_LAYER], 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 == 1) {							// 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(), pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER], pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay,									nBits, pvodec [ENHN_LAYER]->vopmd().iVopConstantAlphaValue,  pvodec[ENHN_LAYER]->volmd().iEnhnType );							else								dumpNonCodedFrame(pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER], 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() , pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER], pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,          nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue,  0 );// begin: added by Sharp (99/1/28)				else					dumpNonCodedFrame(pfReconYUV[BASE_LAYER], pfReconSeg[BASE_LAYER], 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 == 1) {								// 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(), pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER], pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay,								nBits, pvodec [ENHN_LAYER]->vopmd().iVopConstantAlphaValue,  pvodec[ENHN_LAYER]->volmd().iEnhnType );							else								dumpNonCodedFrame(pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER], 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 ();				}			}// begin: deleted by Sharp (99/1/28)//			if (bScalability) //				pvodec[ENHN_LAYER] -> bufferP1flush ();// end: deleted by Sharp (99/1/28)			iEof = tNextBase;// begin: deleted by Sharp (99/1/25)/*// begin: added by Sharp (98/11/11)#ifndef __OUT_ONE_FRAME_			if ( iEof == EOF )				if ( iEof != FALSE )				dumpFrame (pvodec[BASE_LAYER]->pvopcRefQLater() , pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER], pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,					nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue,  0 );				else					dumpNonCodedFrame(pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER], rctDisplay, nBits);#endif// end: added by Sharp (98/11/11)*/// end: deleted by Sharp (99/1/25)		}#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 0;}Void dumpFrame (const CVOPU8YUVBA* pvopcQuant, FILE* pfYUV, FILE* pfSeg, AlphaUsage fAUsage, CRct& rct, UInt nBits, Int iAlphaScale, Int DumpSkip){	if ( DumpSkip == 0 ){	pvopcQuant->getPlane (Y_PLANE)->dump (pfYUV, rct);	pvopcQuant->getPlane (U_PLANE)->dump (pfYUV, rct / 2);	pvopcQuant->getPlane (V_PLANE)->dump (pfYUV, rct / 2);	}	if(pfSeg!=NULL)	{		if (fAUsage == ONE_BIT)			pvopcQuant->getPlane (BY_PLANE)->dump (pfSeg, rct, iAlphaScale);		else if (fAUsage == EIGHT_BIT)			pvopcQuant->getPlane (A_PLANE)->dumpWithMask (pfSeg, pvopcQuant->getPlane (BY_PLANE),				rct, iAlphaScale);	}	return;}

⌨️ 快捷键说明

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