[x265] [PATCH] analysis: avoid copying lowres vbv data when vbv is disabled

Divya Manivannan divya at multicorewareinc.com
Fri Dec 22 06:13:35 CET 2017


# HG changeset patch
# User Divya Manivannan <divya at multicorewareinc.com>
# Date 1513250624 -19800
#      Thu Dec 14 16:53:44 2017 +0530
# Node ID 5723f3248cd24c8b9f670d503370f644dffe9a6f
# Parent  7a6d244c922b5e9180a0e28363ce578bea0c1d02
analysis: avoid copying lowres vbv data when vbv is disabled

diff -r 7a6d244c922b -r 5723f3248cd2 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp	Thu Dec 21 09:09:46 2017 +0530
+++ b/source/encoder/encoder.cpp	Thu Dec 14 16:53:44 2017 +0530
@@ -1047,11 +1047,14 @@
                 inFrame->m_lowres.sliceType = sliceType;
                 inFrame->m_lowres.bKeyframe = !!inFrame->m_analysisData.lookahead.keyframe;
                 inFrame->m_lowres.bLastMiniGopBFrame = !!inFrame->m_analysisData.lookahead.lastMiniGopBFrame;
-                int vbvCount = m_param->lookaheadDepth + m_param->bframes + 2;
-                for (int index = 0; index < vbvCount; index++)
+                if (m_rateControl->m_isVbv)
                 {
-                    inFrame->m_lowres.plannedSatd[index] = inFrame->m_analysisData.lookahead.plannedSatd[index];
-                    inFrame->m_lowres.plannedType[index] = inFrame->m_analysisData.lookahead.plannedType[index];
+                    int vbvCount = m_param->lookaheadDepth + m_param->bframes + 2;
+                    for (int index = 0; index < vbvCount; index++)
+                    {
+                        inFrame->m_lowres.plannedSatd[index] = inFrame->m_analysisData.lookahead.plannedSatd[index];
+                        inFrame->m_lowres.plannedType[index] = inFrame->m_analysisData.lookahead.plannedType[index];
+                    }
                 }
             }
         }
@@ -1165,26 +1168,29 @@
                         pic_out->analysisData.satdCost *= factor;
                         pic_out->analysisData.lookahead.keyframe = outFrame->m_lowres.bKeyframe;
                         pic_out->analysisData.lookahead.lastMiniGopBFrame = outFrame->m_lowres.bLastMiniGopBFrame;
-                        int vbvCount = m_param->lookaheadDepth + m_param->bframes + 2;
-                        for (int index = 0; index < vbvCount; index++)
+                        if (m_rateControl->m_isVbv)
                         {
-                            pic_out->analysisData.lookahead.plannedSatd[index] = outFrame->m_lowres.plannedSatd[index] * factor;
-                            pic_out->analysisData.lookahead.plannedType[index] = outFrame->m_lowres.plannedType[index];
+                            int vbvCount = m_param->lookaheadDepth + m_param->bframes + 2;
+                            for (int index = 0; index < vbvCount; index++)
+                            {
+                                pic_out->analysisData.lookahead.plannedSatd[index] = outFrame->m_lowres.plannedSatd[index] * factor;
+                                pic_out->analysisData.lookahead.plannedType[index] = outFrame->m_lowres.plannedType[index];
+                            }
+                            for (uint32_t index = 0; index < pic_out->analysisData.numCuInHeight; index++)
+                            {
+                                outFrame->m_analysisData.lookahead.intraSatdForVbv[index] = outFrame->m_encData->m_rowStat[index].intraSatdForVbv * factor;
+                                outFrame->m_analysisData.lookahead.satdForVbv[index] = outFrame->m_encData->m_rowStat[index].satdForVbv * factor;
+                            }
+                            pic_out->analysisData.lookahead.intraSatdForVbv = outFrame->m_analysisData.lookahead.intraSatdForVbv;
+                            pic_out->analysisData.lookahead.satdForVbv = outFrame->m_analysisData.lookahead.satdForVbv;
+                            for (uint32_t index = 0; index < pic_out->analysisData.numCUsInFrame; index++)
+                            {
+                                outFrame->m_analysisData.lookahead.intraVbvCost[index] = outFrame->m_encData->m_cuStat[index].intraVbvCost * factor;
+                                outFrame->m_analysisData.lookahead.vbvCost[index] = outFrame->m_encData->m_cuStat[index].vbvCost * factor;
+                            }
+                            pic_out->analysisData.lookahead.intraVbvCost = outFrame->m_analysisData.lookahead.intraVbvCost;
+                            pic_out->analysisData.lookahead.vbvCost = outFrame->m_analysisData.lookahead.vbvCost;
                         }
-                        for (uint32_t index = 0; index < pic_out->analysisData.numCuInHeight; index++)
-                        {
-                            outFrame->m_analysisData.lookahead.intraSatdForVbv[index] = outFrame->m_encData->m_rowStat[index].intraSatdForVbv * factor;
-                            outFrame->m_analysisData.lookahead.satdForVbv[index] = outFrame->m_encData->m_rowStat[index].satdForVbv * factor;
-                        }
-                        pic_out->analysisData.lookahead.intraSatdForVbv = outFrame->m_analysisData.lookahead.intraSatdForVbv;
-                        pic_out->analysisData.lookahead.satdForVbv = outFrame->m_analysisData.lookahead.satdForVbv;
-                        for (uint32_t index = 0; index < pic_out->analysisData.numCUsInFrame; index++)
-                        {
-                            outFrame->m_analysisData.lookahead.intraVbvCost[index] = outFrame->m_encData->m_cuStat[index].intraVbvCost * factor;
-                            outFrame->m_analysisData.lookahead.vbvCost[index] = outFrame->m_encData->m_cuStat[index].vbvCost * factor;
-                        }
-                        pic_out->analysisData.lookahead.intraVbvCost = outFrame->m_analysisData.lookahead.intraVbvCost;
-                        pic_out->analysisData.lookahead.vbvCost = outFrame->m_analysisData.lookahead.vbvCost;
                     }
                     writeAnalysisFile(&pic_out->analysisData, *outFrame->m_encData);
                     if (m_param->bUseAnalysisFile)
@@ -1351,15 +1357,18 @@
             if (m_param->analysisReuseMode == X265_ANALYSIS_LOAD && m_param->bDisableLookahead)
             {
                 frameEnc->m_dts = frameEnc->m_analysisData.lookahead.dts;
-                for (uint32_t index = 0; index < frameEnc->m_analysisData.numCuInHeight; index++)
+                if (m_rateControl->m_isVbv)
                 {
-                    frameEnc->m_encData->m_rowStat[index].intraSatdForVbv = frameEnc->m_analysisData.lookahead.intraSatdForVbv[index];
-                    frameEnc->m_encData->m_rowStat[index].satdForVbv = frameEnc->m_analysisData.lookahead.satdForVbv[index];
-                }
-                for (uint32_t index = 0; index < frameEnc->m_analysisData.numCUsInFrame; index++)
-                {
-                    frameEnc->m_encData->m_cuStat[index].intraVbvCost = frameEnc->m_analysisData.lookahead.intraVbvCost[index];
-                    frameEnc->m_encData->m_cuStat[index].vbvCost = frameEnc->m_analysisData.lookahead.vbvCost[index];
+                    for (uint32_t index = 0; index < frameEnc->m_analysisData.numCuInHeight; index++)
+                    {
+                        frameEnc->m_encData->m_rowStat[index].intraSatdForVbv = frameEnc->m_analysisData.lookahead.intraSatdForVbv[index];
+                        frameEnc->m_encData->m_rowStat[index].satdForVbv = frameEnc->m_analysisData.lookahead.satdForVbv[index];
+                    }
+                    for (uint32_t index = 0; index < frameEnc->m_analysisData.numCUsInFrame; index++)
+                    {
+                        frameEnc->m_encData->m_cuStat[index].intraVbvCost = frameEnc->m_analysisData.lookahead.intraVbvCost[index];
+                        frameEnc->m_encData->m_cuStat[index].vbvCost = frameEnc->m_analysisData.lookahead.vbvCost[index];
+                    }
                 }
             }
             if (m_param->searchMethod == X265_SEA && frameEnc->m_lowres.sliceType != X265_TYPE_B)
@@ -3032,7 +3041,7 @@
 {
     X265_CHECK(analysis->sliceType, "invalid slice type\n");
     analysis->interData = analysis->intraData = NULL;
-    if (m_param->bDisableLookahead)
+    if (m_param->bDisableLookahead && m_rateControl->m_isVbv)
     {
         CHECKED_MALLOC_ZERO(analysis->lookahead.intraSatdForVbv, uint32_t, analysis->numCuInHeight);
         CHECKED_MALLOC_ZERO(analysis->lookahead.satdForVbv, uint32_t, analysis->numCuInHeight);
@@ -3106,7 +3115,7 @@
 
 void Encoder::freeAnalysis(x265_analysis_data* analysis)
 {
-    if (m_param->bDisableLookahead)
+    if (m_param->bDisableLookahead && m_rateControl->m_isVbv)
     {
         X265_FREE(analysis->lookahead.satdForVbv);
         X265_FREE(analysis->lookahead.intraSatdForVbv);
@@ -3312,7 +3321,7 @@
 
     /* Memory is allocated for inter and intra analysis data based on the slicetype */
     allocAnalysis(analysis);
-    if (m_param->bDisableLookahead)
+    if (m_param->bDisableLookahead && m_rateControl->m_isVbv)
     {
         X265_FREAD(analysis->lookahead.intraVbvCost, sizeof(uint32_t), analysis->numCUsInFrame, m_analysisFile, picData->lookahead.intraVbvCost);
         X265_FREAD(analysis->lookahead.vbvCost, sizeof(uint32_t), analysis->numCUsInFrame, m_analysisFile, picData->lookahead.vbvCost);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265-clone.patch
Type: text/x-patch
Size: 9223 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20171222/161ca41e/attachment.bin>


More information about the x265-devel mailing list