📄 sesenc.cpp
字号:
else dumpNonCodedFrame(rgpfReconYUV [BASE_LAYER], rgpfReconSeg [BASE_LAYER], m_rctOrg, volmd.nBits);// begin deleted by sony// if (m_rgbSpatialScalability [iVOrelative] && !bTemporalScalability)// dumpData (rgpfReconYUV [BASE_LAYER], rgpfReconSeg [BASE_LAYER], rgpvoenc[BASE_LAYER] ->pvopcRefQLater(), m_rctOrgSpatialEnhn, volmd);// end deleted by sony bCachedRefDump = FALSE; // added by Sharp (98/11/11)// begin: deleted by Sharp (98/11/11)//#else// dumpDataOneFrame (iFrame, iVO, rgpvoenc[BASE_LAYER] ->pvopcRefQLater(), volmd); // save one frame// if (m_rgbSpatialScalability [iVOrelative] && !bTemporalScalability)// dumpDataOneFrame (iFrame, iVO, rgpvoenc[ENHN_LAYER] ->pvopcRefQLater(), volmd); // save one frame// end: deleted by Sharp (98/11/11)#endif } cout << "\nBASE VOL " << iVO << "\n"; CStatistics sts = rgpvoenc [BASE_LAYER] -> statVOL ();#ifdef __TRACE_AND_STATS_ sts.print (TRUE); // dumping statistics#endif // __TRACE_AND_STATS_ delete rgpvoenc [BASE_LAYER]; fclose (rgpfReconYUV [BASE_LAYER]); if (m_rgvolmd [BASE_LAYER] [iVOrelative].fAUsage != RECTANGLE) { fclose (rgpfReconSeg [BASE_LAYER]); } delete rgpostrm [BASE_LAYER]; delete rgpostrmTrace [BASE_LAYER]; if (m_rgbSpatialScalability [iVOrelative] == TRUE) { cout << "\nEHNANCED VOL " << iVO << "\n"; sts = rgpvoenc [ENHN_LAYER] -> statVOL ();#ifdef __TRACE_AND_STATS_ sts.print (TRUE); // dumping statistics#endif // __TRACE_AND_STATS_ delete rgpvoenc [ENHN_LAYER]; fclose (rgpfReconYUV [ENHN_LAYER]); if (m_rgvolmd [BASE_LAYER] [iVOrelative].fAUsage != RECTANGLE) { fclose (rgpfReconSeg [ENHN_LAYER]); } delete rgpostrm [ENHN_LAYER]; delete rgpostrmTrace [ENHN_LAYER]; } }}Bool CSessionEncoder::loadDataSpriteCheck(UInt iVOrelative,UInt iFrame, FILE* pfYuvSrc, FILE* pfSegSrc, PixelC pxlcObjColor, CVOPU8YUVBA* pvopcDst, const VOLMode& volmd){ Bool bObjectExists = TRUE; if(m_rguiSpriteUsage [iVOrelative] == 0) bObjectExists = loadData (iFrame,pfYuvSrc,pfSegSrc, pxlcObjColor, pvopcDst, m_rctOrg, volmd); return bObjectExists;}Void CSessionEncoder::encodeVideoObject(Bool bObjectExists, Bool bPrevObjectExists, Int iFrame, VOPpredType predType, Int iDumpMode, Int iVO, Int iVOrelative, Int iLayer, FILE* pfYuvSrc, FILE* pfSegSrc, FILE* rgpfReconYUV[], FILE* rgpfReconSeg[], PixelC pxlcObjColor, CVideoObjectEncoder** rgpvoenc, const VOLMode& volmd, ofstream* rgpostrm[], const CVOPU8YUVBA* pvopcBaseQuant){ CRct rctOrg; if (m_rguiSpriteUsage [iVOrelative] == 0) { rctOrg = m_rctOrg; if (iLayer == ENHN_LAYER) { rctOrg = m_rctOrgSpatialEnhn; if((rgpvoenc [iLayer] -> skipTest((Time)iFrame,predType))) // rate control return; bObjectExists = loadData(iFrame, pfYuvSrc, pfSegSrc, pxlcObjColor, rgpvoenc [iLayer]->m_pvopcOrig, rctOrg, volmd); } rgpvoenc [iLayer] -> encode (bObjectExists, (Time) (iFrame - m_iFirstFrame), predType, pvopcBaseQuant); if (iLayer == ENHN_LAYER) rgpvoenc [iLayer]-> swapSpatialScalabilityBVOP (); } else { rctOrg = m_rctFrame; CRct rctWarp = (m_rgNumOfPnts [iVO - m_iFirstVO] > 0)? findBoundBoxInAlpha (iFrame, iVO) : m_rctOrg; rgpvoenc [BASE_LAYER]->encodeSptTrajectory (iFrame, m_pppstDst [iVO - m_iFirstVO] [iFrame - m_iFirstFrame], rctWarp); bObjectExists = TRUE; } //dump the output// begin: added by Sharp (99/1/28)#ifndef __OUT_ONE_FRAME_ if(iDumpMode==DUMP_CURR || m_rguiSpriteUsage [iVOrelative] != 0) { if (bObjectExists) dumpData (rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rgpvoenc[iLayer] ->pvopcReconCurr(), rctOrg, volmd); else dumpNonCodedFrame(rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rctOrg, volmd.nBits); } else if(iDumpMode==DUMP_PREV){ // dump previous reference frame if ( bPrevObjectExists ) dumpData (rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rgpvoenc[iLayer] ->pvopcRefQPrev(), rctOrg, volmd); else dumpNonCodedFrame(rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rctOrg, volmd.nBits); }#else if (bObjectExists) dumpDataOneFrame (iFrame, iVO, rgpvoenc[iLayer] ->pvopcReconCurr(), volmd); // save one frame else dumpNonCodedFrame(rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rctOrg, volmd.nBits);#endif// end: added by Sharp (99/1/28)// begin: deleted by Sharp (99/1/28)/* if (bObjectExists) {// begin: modified by Sharp (98/11/11)// begin: modification by Sharp (98/2/12)#ifndef __OUT_ONE_FRAME_ if(iDumpMode==DUMP_CURR || m_rguiSpriteUsage [iVOrelative] != 0) { // dump current reconstructed frame dumpData (rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rgpvoenc[iLayer] ->pvopcReconCurr(), rctOrg, volmd); } else if(iDumpMode==DUMP_PREV) // dump previous reference frame { dumpData (rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rgpvoenc[iLayer] ->pvopcRefQPrev(), rctOrg, volmd); }// end: modification by Sharp (98/2/12)#else dumpDataOneFrame (iFrame, iVO, rgpvoenc[iLayer] ->pvopcReconCurr(), volmd); // save one frame#endif// end: modified by Sharp (98/11/11) }#ifndef __OUT_ONE_FRAME_ // added by Sharp (98/11/11) else dumpNonCodedFrame(rgpfReconYUV [iLayer], rgpfReconSeg [iLayer], rctOrg, volmd.nBits);#endif // added by Sharp (98/11/11)*/// end: deleted by Sharp (99/1/28) rgpostrm [iLayer]->write (rgpvoenc [iLayer]->pOutStream ()->str (), rgpvoenc [iLayer]->pOutStream ()->pcount ());}Void CSessionEncoder::readPntFile (UInt iobj){ Char pchtmp [100]; sprintf (pchtmp, SUB_PNTFILE, m_pchSptPntDir, iobj, m_pchPrefix); FILE* pfPnt = fopen (pchtmp, "r"); if(pfPnt==NULL) fatal_error("Can't open sprite point file"); Int numPnt; Int iVOidx = iobj - m_iFirstVO; fscanf (pfPnt, "%d", &numPnt); assert (numPnt == m_rgNumOfPnts [iVOidx]); Int ifrF; Double dblX, dblY; for (Int ip = 0; ip < numPnt; ip++) fscanf (pfPnt, "%lf%lf", &m_ppstSrc [iVOidx] [ip].x, &m_ppstSrc [iVOidx] [ip].y); // not used while (fscanf (pfPnt, "%d", &ifrF) != EOF) { if ((ifrF >= m_iFirstFrame) && (ifrF <= m_iLastFrame)) { for (Int ip = 0; ip < numPnt; ip++) { fscanf (pfPnt, "%lf %lf", &dblX, &dblY); Int iFrmIndex = ifrF - m_iFirstFrame; if (iFrmIndex % (m_rgvolmd [BASE_LAYER] [iVOidx].iTemporalRate) == 0) { m_pppstDst [iVOidx] [iFrmIndex] [ip].x = dblX; m_pppstDst [iVOidx] [iFrmIndex] [ip].y = dblY; } } } else { for (Int ip = 0; ip < numPnt; ip++) { fscanf (pfPnt, "%lf %lf", &dblX, &dblY); } } }}Void CSessionEncoder::loadSpt (UInt iobj, CVOPU8YUVBA* pvopcDst){ Char pchSpt [100]; sprintf (pchSpt, SUB_VDLFILE, m_pchSptDir, iobj, m_pchPrefix); FILE* pf = fopen (pchSpt, "rb"); // read overhead Int c0 = getc (pf); Int c1 = getc (pf); Int c2 = getc (pf); assert (c0 == 'S' && (c1 == 'P' || c2 == 'T') ); CRct rctSpt; Bool bAUsage; fread (&rctSpt.left, sizeof (CoordI), 1, pf); fread (&rctSpt.top, sizeof (CoordI), 1, pf); fread (&rctSpt.right, sizeof (CoordI), 1, pf); fread (&rctSpt.bottom, sizeof (CoordI), 1, pf); fread (&bAUsage, sizeof (Int), 1, pf);#ifndef _FOR_GSSP_ assert (bAUsage != EIGHT_BIT); // sprite with Alpha channel is not supported at this moment#endif Int iYDataHeight = m_rctOrg.height (); Int iUVDataHeight = m_rctOrg.height () / 2; Int iYFrmWidth = pvopcDst->whereY ().width; Int iUvFrmWidth = pvopcDst->whereUV ().width; Int nSkipYPixel = iYFrmWidth * EXPANDY_REF_FRAME + EXPANDY_REF_FRAME; Int nSkipUvPixel = iUvFrmWidth * EXPANDUV_REF_FRAME + EXPANDUV_REF_FRAME; PixelC* ppxlcY = (PixelC*) pvopcDst->pixelsY () + nSkipYPixel; PixelC* ppxlcU = (PixelC*) pvopcDst->pixelsU () + nSkipUvPixel; PixelC* ppxlcV = (PixelC*) pvopcDst->pixelsV () + nSkipUvPixel; CoordI y; for (y = 0; y < iYDataHeight; y++) { Int size = (Int) fread (ppxlcY, sizeof (U8), m_rctOrg.width, pf); if (size == 0) fprintf (stderr, "Unexpected end of file\n"); ppxlcY += iYFrmWidth; } for (y = 0; y < iUVDataHeight; y++) { Int size = (Int) fread (ppxlcU, sizeof (U8), m_rctOrg.width / 2, pf); if (size == 0) fprintf (stderr, "Unexpected end of file\n"); ppxlcU += iUvFrmWidth; } for (y = 0; y < iUVDataHeight; y++) { Int size = (Int) fread (ppxlcV, sizeof (U8), m_rctOrg.width / 2, pf); if (size == 0) fprintf (stderr, "Unexpected end of file\n"); ppxlcV += iUvFrmWidth; } PixelC* ppxlcBY = (PixelC*) pvopcDst->pixelsBY () + nSkipYPixel; //Int iObjectExist = 0; if ((bAUsage == ONE_BIT) && (pvopcDst -> fAUsage () == ONE_BIT)) { // load Alpha //binary for (CoordI y = 0; y < iYDataHeight; y++) { Int size = (Int) fread (ppxlcBY, sizeof (U8), m_rctOrg.width, pf); if (size == 0) fprintf (stderr, "Unexpected end of file\n"); ppxlcBY += iYFrmWidth; } ((CU8Image*) pvopcDst->getPlane (BUV_PLANE))->decimateBinaryShapeFrom (*(pvopcDst->getPlane (BY_PLANE))); }#ifdef _FOR_GSSP_ else if ((bAUsage == EIGHT_BIT) && (pvopcDst -> fAUsage () == EIGHT_BIT)) { // load Alpha //grayscale alpha PixelC* ppxlcA = (PixelC*) pvopcDst->pixelsA () + nSkipYPixel; for (CoordI y = 0; y < iYDataHeight; y++) { for (CoordI x = 0; x < m_rctOrg.width; x++) { PixelC pxlcCurr = getc (pf); ppxlcA [x] = (pxlcCurr >= GRAY_ALPHA_THRESHOLD) ? pxlcCurr : transpValue; ppxlcBY [x] = (pxlcCurr >= GRAY_ALPHA_THRESHOLD) ? opaqueValue : transpValue; } ppxlcBY += iYFrmWidth; ppxlcA += iYFrmWidth; } ((CU8Image*) pvopcDst->getPlane (BUV_PLANE))->decimateBinaryShapeFrom (*(pvopcDst->getPlane (BY_PLANE))); }#endif}Void CSessionEncoder::getInputFiles (FILE*& pfYuvSrc, FILE*& pfAlpSrc, FILE*& pfYuvSrcSpatialEnhn, FILE* rgpfReconYUV [], FILE* rgpfReconSeg [], ofstream* rgpostrm [], ofstream* rgpostrmTrace [], PixelC& pxlcObjColor, Int iobj, const VOLMode& volmd, const VOLMode& volmd_enhn){ static Char pchYUV [100], pchSeg [100], pchCmp [100], pchTrace [100]; //output files createCmpDir (iobj); sprintf (pchCmp, SUB_CMPFILE, m_pchOutStrFiles, iobj, m_pchPrefix); sprintf (pchTrace, SUB_TRCFILE, m_pchOutStrFiles, iobj, m_pchPrefix); rgpostrm [BASE_LAYER] = new ofstream (pchCmp, IOS_BINARY | ios::out); rgpostrmTrace [BASE_LAYER] = NULL; if (volmd.bTrace) rgpostrmTrace [BASE_LAYER] = new ofstream (pchTrace); // prepare for the reconstructed files createReconDir (iobj); // create a directory for the reconstructed YUV in case it doesn't exist sprintf (pchYUV, SUB_YUVFILE, m_pchReconYUVDir, iobj, m_pchPrefix); sprintf (pchSeg, SUB_SEGFILE, m_pchReconYUVDir, iobj, m_pchPrefix); rgpfReconSeg [BASE_LAYER] = NULL; rgpfReconSeg [ENHN_LAYER] = NULL; rgpfReconYUV [BASE_LAYER] = fopen (pchYUV, "wb"); // reconstructed YUV file assert (rgpfReconYUV [BASE_LAYER] != NULL); if (volmd.fAUsage != RECTANGLE) { rgpfReconSeg [BASE_LAYER] = fopen (pchSeg, "wb"); // reconstructed seg file assert (rgpfReconSeg [BASE_LAYER] != NULL); } /* if (m_rgbSpatialScalability [iobj - m_iFirstVO] == TRUE) { sprintf (pchCmp, ENHN_SUB_CMPFILE, m_pchOutStrFiles, iobj, m_pchPrefix); sprintf (pchTrace, ENHN_SUB_TRCFILE, m_pchOutStrFiles, iobj, m_pchPrefix); rgpostrm [ENHN_LAYER] = new ofstream (pchCmp, IOS_BINARY | ios::out); rgpostrmTrace [ENHN_LAYER] = NULL; if (volmd.bTrace) rgpostrmTrace [ENHN_LAYER] = new ofstream (pchTrace); sprintf (pchYUV, ENHN_SUB_YUVFILE, m_pchReconYUVDir, iobj, m_pchPrefix); sprintf (pchSeg, ENHN_SUB_SEGFILE, m_pchReconYUVDir, iobj, m_pchPrefix); rgpfReconYUV [ENHN_LAYER] = fopen (pchYUV, "wb"); // reconstructed YUV file if (volmd.fAUsage != RECTANGLE) { rgpfReconSeg [ENHN_LAYER] = fopen (pchSeg, "wb"); // reconstructed seg file assert (FALSE); // no spatial scalability for shape } } */ //wchen: moved down if (!m_bTexturePerVOP) sprintf (pchYUV, ROOT_YUVFILE, m_pchBmpFiles, m_pchPrefix); else sprintf (pchYUV, SUB_YUVFILE, m_pchBmpFiles, iobj, m_pchPrefix); pfYuvSrc = fopen (pchYUV, "rb"); if (pfYuvSrc == NULL) { fprintf (stderr, "can't open %s\n", pchYUV); exit (1); } if (m_rgbSpatialScalability [iobj - m_iFirstVO] == TRUE) { sprintf (pchCmp, ENHN_SUB_CMPFILE, m_pchOutStrFiles, iobj, m_pchPrefix);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -