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

📄 decoder.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
									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/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 0;}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 + -