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

📄 decoder.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
							pvodec[ENHN_LAYER] -> setShapeMode(pBase_stack_Baseshpmd);							pBase_tmp_mvBaseBY = pvodec [BASE_LAYER] ->getmvBaseBY();							pvodec [ENHN_LAYER] -> setmvBaseBY(pBase_stack_mvBaseBY);									pvodec [ENHN_LAYER] -> setMBXYRef(iBase_stack_x, iBase_stack_y);							pvodec [ENHN_LAYER] -> setBaseRct(pBase_stack_rctBase);						}		//~for OBSS BVOP_BASE : stack out						iEof = pvodec [ENHN_LAYER] -> decode (pBASE_stackVOP);						// for background composition with base layer (OBSS partial enhancement mode)						BGComposition = FALSE;//OBSSFIX_MODE3						if(	pvodec [ENHN_LAYER] -> volmd().iHierarchyType == 0 && 							pvodec [ENHN_LAYER] -> volmd().iEnhnType      == 1 && 							pvodec [ENHN_LAYER] -> vopmd().bBGComposition == 1) 							BGComposition = pvodec [ENHN_LAYER] -> BackgroundCompositionSS(rctDisplay_SSenh.width, rctDisplay_SSenh.height (), pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER],pBASE_stackVOP); //						if(	pvodec [ENHN_LAYER] -> volmd().iHierarchyType == 0 && //							pvodec [ENHN_LAYER] -> volmd().iEnhnType == 1 && //							pvodec [ENHN_LAYER] -> volmd().iuseRefShape == 0 ) //							BGComposition = pvodec [ENHN_LAYER] -> BackgroundComposition(rctDisplay_SSenh.width, rctDisplay_SSenh.height (), pfReconYUV[ENHN_LAYER], pfReconSeg[ENHN_LAYER]); //~OBSSFIX_MODE3		//for OBSS BVOP_BASE : free stack//OBSSFIX_MODE3						if(pvodec[ENHN_LAYER]->volmd().fAUsage == ONE_BIT &&						  !(pvodec[ENHN_LAYER]->volmd().iHierarchyType == 0 &&						    pvodec[ENHN_LAYER]->volmd().iuseRefShape   == 1 &&							pvodec[ENHN_LAYER]->volmd().iEnhnType      != 0 )) {//						if(pvodec[ENHN_LAYER]->volmd().fAUsage == ONE_BIT) {//~OBSSFIX_MODE3							pvodec[ENHN_LAYER] -> setShapeMode(pBase_tmp_Baseshpmd);							delete [] pBase_stack_Baseshpmd;							pBase_stack_Baseshpmd = NULL;							pBase_tmp_Baseshpmd = NULL;							pvodec [ENHN_LAYER] -> setmvBaseBY(pBase_tmp_mvBaseBY);								delete [] pBase_stack_mvBaseBY;							pBase_stack_mvBaseBY = NULL;							pBase_tmp_mvBaseBY = NULL;						}		//~for OBSS BVOP_BASE : free stack						delete pBASE_stackVOP;						pBASE_stackVOP = NULL;						iBase_stackTime = -1;						if(iEof!=EOF)							nFrames++; // include enhancement layer						if(iEof==FALSE)							dumpFrameNonCoded(pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER],								ppfReconAux[ENHN_LAYER], pvodec [ENHN_LAYER]->volmd().iAuxCompCount,								rgpvopcPrevDisp[ENHN_LAYER],								pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay_SSenh, nBits);						if (iEof != EOF && iEof!=FALSE)							//for OBSS partial enhancement mode//OBSSFIX_MODE3							if(!(pvodec [ENHN_LAYER]->volmd().iHierarchyType == 0 && pvodec [ENHN_LAYER] -> volmd().iEnhnType == 1 && BGComposition)) //							if(!(pvodec [ENHN_LAYER]->volmd().iHierarchyType == 0 && pvodec [ENHN_LAYER] -> volmd().iEnhnType == 1 && pvodec [ENHN_LAYER] -> volmd().iuseRefShape == 0 && BGComposition)) //~OBSSFIX_MODE3								dumpFrame (pvodec [ENHN_LAYER]->pvopcReconCurr (), &(rgpvopcPrevDisp[ENHN_LAYER]), pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER],                 NULL, 0,                pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay_SSenh,								nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue, 0, 0); // still base layer					} //					if(	iBase_stackTime != -1 && iBase_stackTime == pvodec[ENHN_LAYER] -> senseTime ()){				} //else if(iBASEVOP_time != -1 &&iBASEVOP_time == iENHNVOP_time){//~OBSS_SAIT_991015	//_SS_BASE_BVOP_			}		}#ifdef __PC_COMPILER_		Int tickAfter = ::GetTickCount ();		printf ("Total time: %d\n", tickAfter - tickBegin);		Double dAverage = (Double) (tickAfter - tickBegin) / (Double) (nFrames);		printf ("Total frames: %d\tAverage time: %.6lf\n", nFrames, dAverage);		printf ("FPS %.6lf\n", 1000.0 / dAverage);#endif // __PC_COMPILER_		fclose (pfReconYUV [BASE_LAYER]);		if (pvodec [BASE_LAYER]->volmd ().fAUsage != RECTANGLE)			fclose (pfReconSeg[BASE_LAYER]);		//OBSS_SAIT_991015				delete pvodec [BASE_LAYER];		if (bScalability)	{		//OBSS_SAIT_991015			if (pvodec [ENHN_LAYER]->volmd ().fAUsage != RECTANGLE)						fclose (pfReconSeg[ENHN_LAYER]);								//~OBSS_SAIT_991015			fclose (pfReconYUV [ENHN_LAYER]);			delete pvodec [ENHN_LAYER];		}	}	else { // loop for temporal scalability		CVideoObjectDecoder* pvodec[2];		pvodec[BASE_LAYER] = new CVideoObjectDecoder (argv[1], rctDisplay.width, rctDisplay.height (), NULL, &main_short_video_header); // modified by Sharp (98/7/16)		UInt nBits = pvodec [BASE_LAYER]->volmd ().nBits; // added by Sharp (98/11/11)		if(bScalability){			pvodec[ENHN_LAYER] = new CVideoObjectDecoder (argv[2], rctDisplay.width, rctDisplay.height (), NULL, &main_short_video_header); // modified by Sharp (98/7/16)			// for back/forward shape			pvodec[ENHN_LAYER]->rgpbfShape[0] = new CVideoObjectDecoder (rctDisplay.width, rctDisplay.height ());			pvodec[ENHN_LAYER]->rgpbfShape[1] = new CVideoObjectDecoder (rctDisplay.width, rctDisplay.height ());			pvodec[BASE_LAYER]->setClockRateScale( pvodec[ENHN_LAYER] );			// copy pointers			pvodec[ENHN_LAYER]->copyTobfShape ();		}		// begin changes from Norio Ito 8/16/99		if (pvodec [ENHN_LAYER]-> volmd ().fAUsage != RECTANGLE && pvodec			[BASE_LAYER] -> volmd ().fAUsage != RECTANGLE && pvodec[ENHN_LAYER] ->			volmd().iEnhnType == 1)		{			pvodec[ENHN_LAYER] -> setEnhnType ( 2 ); 			printf("EnhnType = %d\n", pvodec [ENHN_LAYER]-> volmd ().iEnhnType);		}		// end changes from Norio Ito		Char pchTmp [100];		FILE* pfReconYUV [2]; // following two lines are swapped by Sharp (98/10/26)#ifndef __OUT_ONE_FRAME_		sprintf (pchTmp, "%s.yuv", argv [2 + bScalability]);		pfReconYUV [BASE_LAYER] = fopen (pchTmp, "wb");		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 && pvodec				[BASE_LAYER] -> volmd ().fAUsage == RECTANGLE) { // updated from Norio Ito				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 != 0) { // change for Norio Ito				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() , &(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 // added by Sharp (99/1/28)						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); // 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 != 0) { // change for Norio Ito								// 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(), &(rgpvopcPrevDisp[ENHN_LAYER]), pfReconYUV [ENHN_LAYER], pfReconSeg[ENHN_LAYER], 									NULL, 0,							        pvodec[ENHN_LAYER]->volmd().fAUsage, rctDisplay,

⌨️ 快捷键说明

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