📄 decoder.cpp
字号:
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 + -