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

📄 app_decoder_decoder.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		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]);			pfReconYUV [ENHN_LAYER]= fopen (pchTmp, "wb");			fatal_error("cant open enhancement layer output yuv file",pfReconYUV [ENHN_LAYER] != NULL);		}		//OBSS_SAIT_991015		FILE* pfReconSeg[2];		pfReconSeg[0] = NULL;		pfReconSeg[1] = NULL;		sprintf (pchTmp, "%s.seg", argv [2 + bScalability]);		if (pvodec [BASE_LAYER]-> volmd ().fAUsage != RECTANGLE)	{			pfReconSeg[BASE_LAYER] = fopen (pchTmp, "wb");			fatal_error("cant open output seg file",pfReconSeg[BASE_LAYER] != NULL);		}		// MAC (SB) 1-Dec-99		if (pvodec [BASE_LAYER]-> volmd ().fAUsage == EIGHT_BIT)	{			Int iAuxCompCount = pvodec [BASE_LAYER]-> volmd ().iAuxCompCount;			ppfReconAux[0] = new FILE* [iAuxCompCount];			ppfReconAux[1] = new FILE* [iAuxCompCount];			for(Int iAuxComp=0; iAuxComp<iAuxCompCount; iAuxComp++ ) {				sprintf (pchTmp, "%s.%d.aux", argv [2 + bScalability], iAuxComp);				ppfReconAux[BASE_LAYER][iAuxComp] = fopen (pchTmp, "wb");				fatal_error("cant open output seg file",ppfReconAux[BASE_LAYER][iAuxComp] != NULL);			}		}		//~MAC		if (bScalability){			sprintf (pchTmp, "%s_e.seg", argv [2 + bScalability]);			if (pvodec [ENHN_LAYER]-> volmd ().fAUsage != RECTANGLE)	{				pfReconSeg[ENHN_LAYER] = fopen (pchTmp, "wb");				fatal_error("cant open output seg file",pfReconSeg[ENHN_LAYER] != NULL);			}		}		//~OBSS_SAIT_991015		Int iEof = 1;		Int nFrames = 0;		const CVOPU8YUVBA* pvopcQuant;#ifdef __PC_COMPILER_		Int tickBegin = ::GetTickCount ();#endif // __PC_COMPILER_		Bool bCachedRefFrame = FALSE;		Bool bCachedRefFrameCoded = FALSE;		//OBSS_SAIT_991015 //_SS_BASE_BVOP_		Int iBASEVOP_time = 0;		Int iBASEVOP_PredType = 0;		//~OBSS_SAIT_991015 //_SS_BASE_BVOP_		while (iEof != EOF)		{			if (main_short_video_header) // Added by KPN for short headers			{				fprintf(stderr,"Frame number: %d\n", nFrames);				iEof = pvodec [BASE_LAYER] -> h263_decode (false);			}			else				iEof = pvodec [BASE_LAYER] -> decode ();  			if (iEof != EOF)				nFrames++;			if(pvodec [BASE_LAYER] -> fSptUsage () == 1)			{				// sprite				if(iEof != EOF)				{					pvopcQuant = pvodec [BASE_LAYER]->pvopcReconCurr();					dumpFrame (pvopcQuant, &(rgpvopcPrevDisp[BASE_LAYER]), pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER],                     ppfReconAux[BASE_LAYER], pvodec [BASE_LAYER]->volmd().iAuxCompCount,                     pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,						         nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue, 0, pvodec [BASE_LAYER]->vopmd().bInterlace);		//OBSS_SAIT_991015				}			}			else			{				if(iEof == EOF)				{					// dump final cached frame if present					if(bCachedRefFrame)					{						bCachedRefFrame = FALSE;						if(bCachedRefFrameCoded)						{							pvopcQuant = pvodec [BASE_LAYER]->pvopcRefQLater(); // future reference							dumpFrame (pvopcQuant, &(rgpvopcPrevDisp[BASE_LAYER]), pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER],                         ppfReconAux[BASE_LAYER], pvodec [BASE_LAYER]->volmd().iAuxCompCount,                         pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,								         nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue, 0, pvodec [BASE_LAYER]->vopmd().bInterlace);		//OBSS_SAIT_991015						}						else // non coded							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);		//OBSS_SAIT_991015					}				}				else				{					// dump if bvop					if(pvodec[BASE_LAYER]->vopmd().vopPredType == BVOP)					{						// BVOP						if(iEof != FALSE)						{							pvopcQuant = pvodec [BASE_LAYER]->pvopcReconCurr(); // current vop							dumpFrame (pvopcQuant, &(rgpvopcPrevDisp[BASE_LAYER]), pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER],                         ppfReconAux[BASE_LAYER], pvodec [BASE_LAYER]->volmd().iAuxCompCount,                         pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,								         nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue, 0, pvodec [BASE_LAYER]->vopmd().bInterlace);		//OBSS_SAIT_991015						}						else // non coded BVOP							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);		//OBSS_SAIT_991015					}					else					{						// not a BVOP, so dump any previous cached frame						if(bCachedRefFrame)						{							bCachedRefFrame = FALSE;							if(bCachedRefFrameCoded)							{								pvopcQuant = pvodec [BASE_LAYER]->pvopcRefQPrev(); // past reference								dumpFrame (pvopcQuant, &(rgpvopcPrevDisp[BASE_LAYER]), pfReconYUV [BASE_LAYER], pfReconSeg[BASE_LAYER],							        ppfReconAux[BASE_LAYER], pvodec [BASE_LAYER]->volmd().iAuxCompCount,								    pvodec[BASE_LAYER]->volmd().fAUsage, rctDisplay,									nBits, pvodec [BASE_LAYER]->vopmd().iVopConstantAlphaValue, 0, pvodec [BASE_LAYER]->vopmd().bInterlace);		//OBSS_SAIT_991015							}							else // non coded								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);		//OBSS_SAIT_991015						}						// cache current reference						bCachedRefFrame = TRUE;						bCachedRefFrameCoded = (iEof != FALSE);					}				}			}			if (bSpatialScalable == TRUE) {//OBSS_SAIT_991015  //_SS_BASE_BVOP_				if(iEof == FALSE){								pvopcQuant = NULL;							if(pvodec[BASE_LAYER]->volmd().fAUsage == ONE_BIT){											iBASEVOP_time		= pvodec[BASE_LAYER]->show_current_time();							iBASEVOP_PredType	= pvodec[BASE_LAYER]->vopmd().vopPredType;						}																					}											else {					pvopcQuant			= pvodec [BASE_LAYER]->pvopcReconCurr();	//Added by SONY 98/11/25					iBASEVOP_time		= pvodec[BASE_LAYER]->show_current_time();						iBASEVOP_PredType	= pvodec[BASE_LAYER]->vopmd().vopPredType;				}				//These static parameters will be used in the case BVOP is available in the BASE_LAYER (for spatial scalability)				static CVOPU8YUVBA* pBASE_stackVOP=NULL; //Temporal buffer of BASELAYER reconstructed image				static Int iBase_stackTime = -1;				static CRct pBase_stack_rctBase;				Int iENHNVOP_time			= 	pvodec[ENHN_LAYER] -> senseTime ();				static ShapeMode* pBase_stack_Baseshpmd = NULL;				static ShapeMode* pBase_tmp_Baseshpmd = NULL;				static CMotionVector* pBase_stack_mvBaseBY = NULL;				static CMotionVector* pBase_tmp_mvBaseBY = NULL;				static Int iBase_stack_x, iBase_stack_y;				Bool	BGComposition = FALSE;	//for OBSS partial enhancement mode				if (iBASEVOP_time		!= iENHNVOP_time	&& iBASEVOP_PredType	!=BVOP ){					//stack YUV images and paramters					pBase_stack_rctBase = pvodec [BASE_LAYER] -> getBaseRct();					iBase_stackTime		= iBASEVOP_time;		//for OBSS BVOP_BASE : 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						if(iEof) pBASE_stackVOP	= new CVOPU8YUVBA (*pvopcQuant, pvodec[BASE_LAYER]->volmd().fAUsage, (pvodec[BASE_LAYER]->pvopcQuantCurr())->whereY());						iBase_stack_x = pvodec [BASE_LAYER] -> getMBXRef();						iBase_stack_y = pvodec [BASE_LAYER] -> getMBYRef();						pBase_stack_Baseshpmd = new ShapeMode[iBase_stack_x*iBase_stack_y];						pBase_stack_mvBaseBY = new CMotionVector[iBase_stack_x*iBase_stack_y];						for(Int j=0;j<iBase_stack_y;j++){							for(Int i=0;i<iBase_stack_x;i++){								pBase_stack_Baseshpmd[j*iBase_stack_x+i] = (pvodec[BASE_LAYER] ->shapemd())[j*iBase_stack_x+i];								pBase_stack_mvBaseBY[j*iBase_stack_x+i] = (pvodec [BASE_LAYER] ->getmvBaseBY())[j*iBase_stack_x+i];								}						}					} //OBSSFIX_MODE3					else if(pvodec[ENHN_LAYER]->volmd().fAUsage == RECTANGLE ||						(pvodec[ENHN_LAYER]->volmd().iHierarchyType  == 0 &&						 pvodec[ENHN_LAYER]->volmd().iuseRefShape    == 1 &&						 pvodec[ENHN_LAYER]->volmd().iEnhnType       != 0 )){						if(pvodec[BASE_LAYER]->volmd().fAUsage == RECTANGLE)							pBASE_stackVOP= new CVOPU8YUVBA (*pvopcQuant, pvodec[BASE_LAYER]->volmd().fAUsage, pBase_stack_rctBase);						else if(iEof) pBASE_stackVOP = new CVOPU8YUVBA (*pvopcQuant, pvodec[BASE_LAYER]->volmd ().fAUsage, (pvodec[BASE_LAYER]->pvopcQuantCurr())->whereY());//					else if(pvodec[ENHN_LAYER]->volmd().fAUsage == RECTANGLE){//						pBASE_stackVOP	= new CVOPU8YUVBA (*pvopcQuant, pvodec[BASE_LAYER]->volmd().fAUsage, pBase_stack_rctBase);//~OBSSFIX_MODE3					}		//~for OBSS BVOP_BASE : stack				} else if(	iBASEVOP_time != -1 &&iBASEVOP_time == iENHNVOP_time){					//decode VOP using currentry decoded Base layer image					if(pvodec[ENHN_LAYER]->volmd().fAUsage == ONE_BIT) {						pvodec[ENHN_LAYER] -> setShapeMode(pvodec[BASE_LAYER] ->shapemd());						CMotionVector* pmvBaseBY;													pmvBaseBY = pvodec [BASE_LAYER] ->getmvBaseBY();							pvodec [ENHN_LAYER] -> setmvBaseBY(pmvBaseBY);								Int x, y;						x = pvodec [BASE_LAYER] -> getMBBaseXRef();		 						y = pvodec [BASE_LAYER] -> getMBBaseYRef();		 						pvodec [ENHN_LAYER] -> setMBXYRef(x, y);						CRct prctBase;						prctBase = pvodec [BASE_LAYER] -> getBaseRct();						pvodec [ENHN_LAYER] -> setBaseRct(prctBase);					}				// if base layer is non coded, pvopcQuant=NULL, but enh layer should also be non coded.					iEof = pvodec [ENHN_LAYER] -> decode (pvopcQuant);					// for background composition (base layer(background) + partial enhancement layer)					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], pvopcQuant); //					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					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 ()){						//decode VOP using stacked VOP.		//for OBSS BVOP_BASE : stack out//OBSSFIX_MODE3						if(pvodec[ENHN_LAYER]->volmd().fAUsage == ONE_BIT &&						  !(pvodec[ENHN_LAYER]->volmd().iHierarchyType == 0 &&						    pvodec[ENHN_LAYER]->volmd().iEnhnType      != 0 &&							pvodec[ENHN_LAYER]->volmd().iuseRefShape   == 1)) {//						if(pvodec[ENHN_LAYER]->volmd().fAUsage == ONE_BIT) {//~OBSSFIX_MODE3							pBase_tmp_Baseshpmd = pvodec[BASE_LAYER] ->shapemd();							pvodec[ENHN_LAYER] -> setShapeMode(pBase_stack_Baseshpmd);

⌨️ 快捷键说明

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