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