History

Merge pull request #1308 from dongzha/ModifyEncOutput

add crop output for encoder

ruil2 committed 12 years ago

Commit 8935bfa2 parents 81f7b0c 6d4a6283 files · +27 −17Browse files

Unified · Split

3 files
  1. codec/encoder/core/inc/encoder.h +2 −2
  2. codec/encoder/core/src/encoder.cpp +23 −12
  3. codec/encoder/core/src/encoder_ext.cpp +2 −3
codec/encoder/core/inc/encoder.h+2−2
@@ -91,12 +91,12 @@ int32_t GetTemporalLevel (SSpatialLayerInternal* fDlp, const int32_t kiFrameNum, · 90 unmodified lines
9191 * \brief Dump reconstruction for dependency layer
9292 */
9393
94−extern "C" void DumpDependencyRec (SPicture* pSrcPic, const char* kpFileName, const int8_t kiDid, bool bAppend);
94+extern "C" void DumpDependencyRec (SPicture* pSrcPic, const char* kpFileName, const int8_t kiDid, bool bAppend, SDqLayer* pDqLayer);
9595
9696 /*!
9797 * \brief Dump the reconstruction pictures
9898 */
99−void DumpRecFrame (SPicture* pSrcPic, const char* kpFileName, bool bAppend);
99+void DumpRecFrame (SPicture* pSrcPic, const char* kpFileName, const int8_t kiDid, bool bAppend, SDqLayer* pDqLayer);
100100
101101
102102 /*!
codec/encoder/core/src/encoder.cpp+23−12
@@ -363,10 +363,13 @@ EVideoFrameType DecideFrameType (sWelsEncCtx* pEncCtx, const int8_t kiSpatialNum · 362 unmodified lines
363363 * \brief Dump reconstruction for dependency layer
364364 */
365365
366−extern "C" void DumpDependencyRec (SPicture* pCurPicture, const char* kpFileName, const int8_t kiDid, bool bAppend) {
366+extern "C" void DumpDependencyRec (SPicture* pCurPicture, const char* kpFileName, const int8_t kiDid, bool bAppend, SDqLayer* pDqLayer) {
367367 WelsFileHandle* pDumpRecFile = NULL;
368368 int32_t iWrittenSize = 0;
369369 const char* openMode = bAppend ? "ab" : "wb";
370+ SWelsSPS* pSpsTmp = (kiDid> BASE_DEPENDENCY_ID)? &(pDqLayer->sLayerInfo.pSubsetSpsP->pSps) : pDqLayer->sLayerInfo.pSpsP;
371+ bool bFrameCroppingFlag = pSpsTmp->bFrameCroppingFlag;
372+ SCropOffset* pFrameCrop = &pSpsTmp->sFrameCrop;
370373
371374 if (NULL == pCurPicture || NULL == kpFileName || kiDid >= MAX_DEPENDENCY_LAYER)
372375 return;
@@ -385,13 +388,14 @@ extern "C" void DumpDependencyRec (SPicture* pCurPicture, const char* kpFileName · 12 unmodified lines
385388 int32_t i = 0;
386389 int32_t j = 0;
387390 const int32_t kiStrideY = pCurPicture->iLineSize[0];
388− const int32_t kiLumaWidth = pCurPicture->iWidthInPixel;
389− const int32_t kiLumaHeight = pCurPicture->iHeightInPixel;
391+ const int32_t kiLumaWidth = bFrameCroppingFlag?(pCurPicture->iWidthInPixel-(( pFrameCrop->iCropLeft + pFrameCrop->iCropRight ) << 1 )) : pCurPicture->iWidthInPixel;
392+ const int32_t kiLumaHeight = bFrameCroppingFlag?(pCurPicture->iHeightInPixel-(( pFrameCrop->iCropTop + pFrameCrop->iCropBottom ) << 1 )) : pCurPicture->iHeightInPixel;
390393 const int32_t kiChromaWidth = kiLumaWidth >> 1;
391394 const int32_t kiChromaHeight = kiLumaHeight >> 1;
392−
395+ uint8_t* pSrc = NULL;
396+ pSrc = bFrameCroppingFlag ? (pCurPicture->pData[0] + kiStrideY * ( pFrameCrop->iCropTop << 1 ) + ( pFrameCrop->iCropLeft << 1 )) : pCurPicture->pData[0];
393397 for (j = 0; j < kiLumaHeight; ++ j) {
394− iWrittenSize = WelsFwrite (&pCurPicture->pData[0][j * kiStrideY], 1, kiLumaWidth, pDumpRecFile);
398+ iWrittenSize = WelsFwrite (pSrc + j * kiStrideY, 1, kiLumaWidth, pDumpRecFile);
395399 assert (iWrittenSize == kiLumaWidth);
396400 if (iWrittenSize < kiLumaWidth) {
397401 assert (0); // make no sense for us if writing failed
@@ -401,8 +405,9 @@ extern "C" void DumpDependencyRec (SPicture* pCurPicture, const char* kpFileName · 3 unmodified lines
401405 }
402406 for (i = 1; i < I420_PLANES; ++ i) {
403407 const int32_t kiStrideUV = pCurPicture->iLineSize[i];
408+ pSrc = bFrameCroppingFlag ? (pCurPicture->pData[i] + kiStrideUV * pFrameCrop->iCropTop + pFrameCrop->iCropLeft) : pCurPicture->pData[i];
404409 for (j = 0; j < kiChromaHeight; ++ j) {
405− iWrittenSize = WelsFwrite (&pCurPicture->pData[i][j * kiStrideUV], 1, kiChromaWidth, pDumpRecFile);
410+ iWrittenSize = WelsFwrite (pSrc + j * kiStrideUV, 1, kiChromaWidth, pDumpRecFile);
406411 assert (iWrittenSize == kiChromaWidth);
407412 if (iWrittenSize < kiChromaWidth) {
408413 assert (0); // make no sense for us if writing failed
@@ -420,8 +425,12 @@ extern "C" void DumpDependencyRec (SPicture* pCurPicture, const char* kpFileName · 11 unmodified lines
420425 * \brief Dump the reconstruction pictures
421426 */
422427
423−void DumpRecFrame (SPicture* pCurPicture, const char* kpFileName, bool bAppend) {
428+void DumpRecFrame (SPicture* pCurPicture, const char* kpFileName, const int8_t kiDid, bool bAppend, SDqLayer* pDqLayer) {
424429 WelsFileHandle* pDumpRecFile = NULL;
430+ SWelsSPS* pSpsTmp = (kiDid> BASE_DEPENDENCY_ID)? &(pDqLayer->sLayerInfo.pSubsetSpsP->pSps) : pDqLayer->sLayerInfo.pSpsP;
431+ bool bFrameCroppingFlag = pSpsTmp->bFrameCroppingFlag;
432+ SCropOffset* pFrameCrop = &pSpsTmp->sFrameCrop;
433+
425434 int32_t iWrittenSize = 0;
426435 const char* openMode = bAppend ? "ab" : "wb";
427436
@@ -440,13 +449,14 @@ void DumpRecFrame (SPicture* pCurPicture, const char* kpFileName, bool bAppend) · 12 unmodified lines
440449 int32_t i = 0;
441450 int32_t j = 0;
442451 const int32_t kiStrideY = pCurPicture->iLineSize[0];
443− const int32_t kiLumaWidth = pCurPicture->iWidthInPixel;
444− const int32_t kiLumaHeight = pCurPicture->iHeightInPixel;
452+ const int32_t kiLumaWidth = bFrameCroppingFlag ? (pCurPicture->iWidthInPixel-(( pFrameCrop->iCropLeft + pFrameCrop->iCropRight ) << 1 )) : pCurPicture->iWidthInPixel;
453+ const int32_t kiLumaHeight = bFrameCroppingFlag ? (pCurPicture->iHeightInPixel-(( pFrameCrop->iCropTop + pFrameCrop->iCropBottom ) << 1 )) : pCurPicture->iHeightInPixel;
445454 const int32_t kiChromaWidth = kiLumaWidth >> 1;
446455 const int32_t kiChromaHeight = kiLumaHeight >> 1;
447−
456+ uint8_t* pSrc = NULL;
457+ pSrc = bFrameCroppingFlag ? (pCurPicture->pData[0] + kiStrideY * ( pFrameCrop->iCropTop << 1 ) + ( pFrameCrop->iCropLeft << 1 )) : pCurPicture->pData[0];
448458 for (j = 0; j < kiLumaHeight; ++ j) {
449− iWrittenSize = WelsFwrite (&pCurPicture->pData[0][j * kiStrideY], 1, kiLumaWidth, pDumpRecFile);
459+ iWrittenSize = WelsFwrite (pSrc + j * kiStrideY, 1, kiLumaWidth, pDumpRecFile);
450460 assert (iWrittenSize == kiLumaWidth);
451461 if (iWrittenSize < kiLumaWidth) {
452462 assert (0); // make no sense for us if writing failed
@@ -456,8 +466,9 @@ void DumpRecFrame (SPicture* pCurPicture, const char* kpFileName, bool bAppend) · 3 unmodified lines
456466 }
457467 for (i = 1; i < I420_PLANES; ++ i) {
458468 const int32_t kiStrideUV = pCurPicture->iLineSize[i];
469+ pSrc = bFrameCroppingFlag ? (pCurPicture->pData[i] + kiStrideUV * pFrameCrop->iCropTop + pFrameCrop->iCropLeft) : pCurPicture->pData[i];
459470 for (j = 0; j < kiChromaHeight; ++ j) {
460− iWrittenSize = WelsFwrite (&pCurPicture->pData[i][j * kiStrideUV], 1, kiChromaWidth, pDumpRecFile);
471+ iWrittenSize = WelsFwrite (pSrc + j * kiStrideUV, 1, kiChromaWidth, pDumpRecFile);
461472 assert (iWrittenSize == kiChromaWidth);
462473 if (iWrittenSize < kiChromaWidth) {
463474 assert (0); // make no sense for us if writing failed
codec/encoder/core/src/encoder_ext.cpp+2−3
@@ -3434,7 +3434,7 @@ int32_t WelsEncoderEncodeExt (sWelsEncCtx* pCtx, SFrameBSInfo* pFbi, const SSour · 3433 unmodified lines
34343434 #ifdef ENABLE_FRAME_DUMP
34353435 if (iCurDid + 1 < pSvcParam->iSpatialLayerNum) {
34363436 DumpDependencyRec (fsnr, &pSvcParam->sDependencyLayers[iCurDid].sRecFileName[0], iCurDid,
3437− pCtx->bDependencyRecFlag[iCurDid]);
3437+ pCtx->bDependencyRecFlag[iCurDid], pCtx->pCurDqLayer);
34383438 pCtx->bDependencyRecFlag[iCurDid] = true;
34393439 }
34403440 #endif//ENABLE_FRAME_DUMP
@@ -3601,8 +3601,7 @@ int32_t WelsEncoderEncodeExt (sWelsEncCtx* pCtx, SFrameBSInfo* pFbi, const SSour · 160 unmodified lines
36013601 }
36023602
36033603 #ifdef ENABLE_FRAME_DUMP
3604− DumpRecFrame (fsnr, &pSvcParam->sDependencyLayers[pSvcParam->iSpatialLayerNum - 1].sRecFileName[0],
3605− pCtx->bRecFlag); // pDecPic: final reconstruction output
3604+ DumpRecFrame (fsnr, &pSvcParam->sDependencyLayers[pSvcParam->iSpatialLayerNum - 1].sRecFileName[0], pSvcParam->iSpatialLayerNum - 1, pCtx->bRecFlag, pCtx->pCurDqLayer); // pDecPic: final reconstruction output
36063605 pCtx->bRecFlag = true;
36073606
36083607 #endif//ENABLE_FRAME_DUMP

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t