[x265] [PATCH] stats: move FrameStats from ratecontrol.h to framedata.h

Divya Manivannan divya at multicorewareinc.com
Wed Jun 10 14:06:01 CEST 2015


# HG changeset patch
# User Divya Manivannan <divya at multicorewareinc.com>
# Date 1433937731 -19800
#      Wed Jun 10 17:32:11 2015 +0530
# Node ID fbd752fe09427150250cdc13c30506c17d330052
# Parent  6245476add8f0562e3ccb657f572ff94fe96adf0
stats: move FrameStats from ratecontrol.h to framedata.h

diff -r 6245476add8f -r fbd752fe0942 source/common/framedata.h
--- a/source/common/framedata.h	Wed Jun 10 11:54:27 2015 +0530
+++ b/source/common/framedata.h	Wed Jun 10 17:32:11 2015 +0530
@@ -34,6 +34,23 @@
 class PicYuv;
 class JobProvider;
 
+/* Current frame stats for 2 pass */
+struct FrameStats
+{
+    int         mvBits;    /* MV bits (MV+Ref+Block Type) */
+    int         coeffBits; /* Texture bits (DCT coefs) */
+    int         miscBits;
+
+    int         intra8x8Cnt;
+    int         inter8x8Cnt;
+    int         skip8x8Cnt;
+
+    /* CU type counts stored as percentage */
+    double      percent8x8Intra;
+    double      percent8x8Inter;
+    double      percent8x8Skip;
+};
+
 /* Per-frame data that is used during encodes and referenced while the picture
  * is available for reference. A FrameData instance is attached to a Frame as it
  * comes out of the lookahead. Frames which are not being encoded do not have a
@@ -85,6 +102,7 @@
 
     RCStatCU*      m_cuStat;
     RCStatRow*     m_rowStat;
+    FrameStats     m_frameStats; // stats of current frame for multi-pass encodes
 
     double         m_avgQpRc;    /* avg QP as decided by rate-control */
     double         m_avgQpAq;    /* avg QP as decided by AQ in addition to rate-control */
diff -r 6245476add8f -r fbd752fe0942 source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp	Wed Jun 10 11:54:27 2015 +0530
+++ b/source/encoder/frameencoder.cpp	Wed Jun 10 17:32:11 2015 +0530
@@ -59,7 +59,6 @@
     m_cuGeoms = NULL;
     m_ctuGeomMap = NULL;
     m_localTldIdx = 0;
-    memset(&m_frameStats, 0, sizeof(m_frameStats));
     memset(&m_rce, 0, sizeof(RateControlEntry));
 }
 
@@ -313,7 +312,7 @@
     m_SSDY = m_SSDU = m_SSDV = 0;
     m_ssim = 0;
     m_ssimCnt = 0;
-    memset(&m_frameStats, 0, sizeof(m_frameStats));
+    memset(&(m_frame->m_encData->m_frameStats), 0, sizeof(m_frame->m_encData->m_frameStats));
 
     /* Emit access unit delimiter unless this is the first frame and the user is
      * not repeating headers (since AUD is supposed to be the first NAL in the access
@@ -559,17 +558,17 @@
         // accumulate intra,inter,skip cu count per frame for 2 pass
         for (uint32_t i = 0; i < m_numRows; i++)
         {
-            m_frameStats.mvBits    += m_rows[i].rowStats.mvBits;
-            m_frameStats.coeffBits += m_rows[i].rowStats.coeffBits;
-            m_frameStats.miscBits  += m_rows[i].rowStats.miscBits;
-            totalI                 += m_rows[i].rowStats.intra8x8Cnt;
-            totalP                 += m_rows[i].rowStats.inter8x8Cnt;
-            totalSkip              += m_rows[i].rowStats.skip8x8Cnt;
+            m_frame->m_encData->m_frameStats.mvBits    += m_rows[i].rowStats.mvBits;
+            m_frame->m_encData->m_frameStats.coeffBits += m_rows[i].rowStats.coeffBits;
+            m_frame->m_encData->m_frameStats.miscBits  += m_rows[i].rowStats.miscBits;
+            totalI                                     += m_rows[i].rowStats.intra8x8Cnt;
+            totalP                                     += m_rows[i].rowStats.inter8x8Cnt;
+            totalSkip                                  += m_rows[i].rowStats.skip8x8Cnt;
         }
         int totalCuCount = totalI + totalP + totalSkip;
-        m_frameStats.percent8x8Intra = (double)totalI / totalCuCount;
-        m_frameStats.percent8x8Inter = (double)totalP / totalCuCount;
-        m_frameStats.percent8x8Skip  = (double)totalSkip / totalCuCount;
+        m_frame->m_encData->m_frameStats.percent8x8Intra = (double)totalI / totalCuCount;
+        m_frame->m_encData->m_frameStats.percent8x8Inter = (double)totalP / totalCuCount;
+        m_frame->m_encData->m_frameStats.percent8x8Skip  = (double)totalSkip / totalCuCount;
     }
 
     m_bs.resetBits();
@@ -638,7 +637,7 @@
     m_endCompressTime = x265_mdate();
 
     /* rateControlEnd may also block for earlier frames to call rateControlUpdateStats */
-    if (m_top->m_rateControl->rateControlEnd(m_frame, m_accessUnitBits, &m_rce, &m_frameStats) < 0)
+    if (m_top->m_rateControl->rateControlEnd(m_frame, m_accessUnitBits, &m_rce) < 0)
         m_top->m_aborted = true;
 
     /* Decrement referenced frame reference counts, allow them to be recycled */
diff -r 6245476add8f -r fbd752fe0942 source/encoder/frameencoder.h
--- a/source/encoder/frameencoder.h	Wed Jun 10 11:54:27 2015 +0530
+++ b/source/encoder/frameencoder.h	Wed Jun 10 17:32:11 2015 +0530
@@ -29,6 +29,7 @@
 #include "wavefront.h"
 #include "bitstream.h"
 #include "frame.h"
+#include "framedata.h"
 #include "picyuv.h"
 #include "md5.h"
 
@@ -157,7 +158,6 @@
     uint32_t                 m_crc[3];
     uint32_t                 m_checksum[3];
     StatisticLog             m_sliceTypeLog[3];     // per-slice type CU statistics
-    FrameStats               m_frameStats;          // stats of current frame for multi-pass encodes
 
     volatile int             m_activeWorkerCount;        // count of workers currently encoding or filtering CTUs
     volatile int             m_totalActiveWorkerCount;   // sum of m_activeWorkerCount sampled at end of each CTU
diff -r 6245476add8f -r fbd752fe0942 source/encoder/ratecontrol.cpp
--- a/source/encoder/ratecontrol.cpp	Wed Jun 10 11:54:27 2015 +0530
+++ b/source/encoder/ratecontrol.cpp	Wed Jun 10 17:32:11 2015 +0530
@@ -2146,7 +2146,7 @@
 }
 
 /* After encoding one frame, update rate control state */
-int RateControl::rateControlEnd(Frame* curFrame, int64_t bits, RateControlEntry* rce, FrameStats* stats)
+int RateControl::rateControlEnd(Frame* curFrame, int64_t bits, RateControlEntry* rce)
 {
     int orderValue = m_startEndOrder.get();
     int endOrdinal = (rce->encodeOrder + m_param->frameNumThreads) * 2 - 1;
@@ -2217,12 +2217,12 @@
                     "in:%d out:%d type:%c q:%.2f q-aq:%.2f tex:%d mv:%d misc:%d icu:%.2f pcu:%.2f scu:%.2f ;\n",
                     rce->poc, rce->encodeOrder,
                     cType, curEncData.m_avgQpRc, curEncData.m_avgQpAq,
-                    stats->coeffBits,
-                    stats->mvBits,
-                    stats->miscBits,
-                    stats->percent8x8Intra * m_ncu,
-                    stats->percent8x8Inter * m_ncu,
-                    stats->percent8x8Skip  * m_ncu) < 0)
+                    curFrame->m_encData->m_frameStats.coeffBits,
+                    curFrame->m_encData->m_frameStats.mvBits,
+                    curFrame->m_encData->m_frameStats.miscBits,
+                    curFrame->m_encData->m_frameStats.percent8x8Intra * m_ncu,
+                    curFrame->m_encData->m_frameStats.percent8x8Inter * m_ncu,
+                    curFrame->m_encData->m_frameStats.percent8x8Skip  * m_ncu) < 0)
             goto writeFailure;
         /* Don't re-write the data in multi-pass mode. */
         if (m_param->rc.cuTree && IS_REFERENCED(curFrame) && !m_param->rc.bStatRead)
diff -r 6245476add8f -r fbd752fe0942 source/encoder/ratecontrol.h
--- a/source/encoder/ratecontrol.h	Wed Jun 10 11:54:27 2015 +0530
+++ b/source/encoder/ratecontrol.h	Wed Jun 10 17:32:11 2015 +0530
@@ -46,23 +46,6 @@
 #define MIN_AMORTIZE_FRACTION 0.2
 #define CLIP_DURATION(f) x265_clip3(MIN_FRAME_DURATION, MAX_FRAME_DURATION, f)
 
-/* Current frame stats for 2 pass */
-struct FrameStats
-{
-    int         mvBits;    /* MV bits (MV+Ref+Block Type) */
-    int         coeffBits; /* Texture bits (DCT coefs) */
-    int         miscBits;
-
-    int         intra8x8Cnt;
-    int         inter8x8Cnt;
-    int         skip8x8Cnt;
-    
-    /* CU type counts stored as percentage */
-    double      percent8x8Intra;
-    double      percent8x8Inter;
-    double      percent8x8Skip;
-};
-
 struct Predictor
 {
     double coeff;
@@ -241,7 +224,7 @@
     // to be called for each curFrame to process RateControl and set QP
     int  rateControlStart(Frame* curFrame, RateControlEntry* rce, Encoder* enc);
     void rateControlUpdateStats(RateControlEntry* rce);
-    int  rateControlEnd(Frame* curFrame, int64_t bits, RateControlEntry* rce, FrameStats* stats);
+    int  rateControlEnd(Frame* curFrame, int64_t bits, RateControlEntry* rce);
     int  rowDiagonalVbvRateControl(Frame* curFrame, uint32_t row, RateControlEntry* rce, double& qpVbv);
     int  rateControlSliceType(int frameNum);
     bool cuTreeReadFor2Pass(Frame* curFrame);


More information about the x265-devel mailing list