<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Jun 22, 2017 at 3:35 PM,  <span dir="ltr"><<a href="mailto:bhavna@multicorewareinc.com" target="_blank">bhavna@multicorewareinc.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Bhavna Hariharan <<a href="mailto:bhavna@multicorewareinc.com">bhavna@multicorewareinc.com</a>><br>
# Date 1498114175 -19800<br>
#      Thu Jun 22 12:19:35 2017 +0530<br>
# Node ID 69f316d001b5c1b16e4e2f42442c27<wbr>a12754bcde<br>
# Parent  586d06ad195ae6907282e8a9048770<wbr>145c0bd437<br>
move statistics calculation to csv-log-level<br></blockquote><div><br></div><div>Pushed to default branch</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
diff -r 586d06ad195a -r 69f316d001b5 source/common/picyuv.cpp<br>
--- a/source/common/picyuv.cpp  Wed Jun 21 10:03:53 2017 +0530<br>
+++ b/source/common/picyuv.cpp  Thu Jun 22 12:19:35 2017 +0530<br>
@@ -340,7 +340,7 @@<br>
     pixel *U = m_picOrg[1];<br>
     pixel *V = m_picOrg[2];<br>
<br>
-    if (param.logLevel >= 2)<br>
+    if (param.csvLogLevel >= 2)<br>
     {<br>
         pixel *yPic = m_picOrg[0];<br>
         pixel *uPic = m_picOrg[1];<br>
diff -r 586d06ad195a -r 69f316d001b5 source/encoder/analysis.cpp<br>
--- a/source/encoder/analysis.cpp       Wed Jun 21 10:03:53 2017 +0530<br>
+++ b/source/encoder/analysis.cpp       Thu Jun 22 12:19:35 2017 +0530<br>
@@ -281,7 +281,7 @@<br>
     if (m_param->bEnableRdRefine || m_param->bOptCUDeltaQP)<br>
         qprdRefine(ctu, cuGeom, qp, qp);<br>
<br>
-    if (m_param->logLevel >= 2)<br>
+    if (m_param->csvLogLevel >= 2)<br>
         collectPUStatistics(ctu, cuGeom);<br>
<br>
     return *m_modeDepth[0].bestMode;<br>
diff -r 586d06ad195a -r 69f316d001b5 source/encoder/encoder.cpp<br>
--- a/source/encoder/encoder.cpp        Wed Jun 21 10:03:53 2017 +0530<br>
+++ b/source/encoder/encoder.cpp        Thu Jun 22 12:19:35 2017 +0530<br>
@@ -1709,7 +1709,8 @@<br>
         frameStats->qp = curEncData.m_avgQpAq;<br>
         frameStats->bits = bits;<br>
         frameStats->bScenecut = curFrame->m_lowres.bScenecut;<br>
-        frameStats->ipCostRatio = curFrame->m_lowres.<wbr>ipCostRatio;<br>
+        if (m_param->csvLogLevel >= 2)<br>
+            frameStats->ipCostRatio = curFrame->m_lowres.<wbr>ipCostRatio;<br>
         frameStats->bufferFill = m_rateControl->m_<wbr>bufferFillActual;<br>
         frameStats->frameLatency = inPoc - poc;<br>
         if (m_param->rc.rateControlMode == X265_RC_CRF)<br>
@@ -1734,74 +1735,81 @@<br>
<br>
 #define ELAPSED_MSEC(start, end) (((double)(end) - (start)) / 1000)<br>
<br>
-        frameStats->decideWaitTime = ELAPSED_MSEC(0, curEncoder->m_<wbr>slicetypeWaitTime);<br>
-        frameStats->row0WaitTime = ELAPSED_MSEC(curEncoder->m_<wbr>startCompressTime, curEncoder->m_row0WaitTime);<br>
-        frameStats->wallTime = ELAPSED_MSEC(curEncoder->m_<wbr>row0WaitTime, curEncoder->m_endCompressTime)<wbr>;<br>
-        frameStats->refWaitWallTime = ELAPSED_MSEC(curEncoder->m_<wbr>row0WaitTime, curEncoder->m_<wbr>allRowsAvailableTime);<br>
-        frameStats->totalCTUTime = ELAPSED_MSEC(0, curEncoder->m_<wbr>totalWorkerElapsedTime);<br>
-        frameStats->stallTime = ELAPSED_MSEC(0, curEncoder->m_<wbr>totalNoWorkerTime);<br>
-        frameStats->totalFrameTime = ELAPSED_MSEC(curFrame->m_<wbr>encodeStartTime, x265_mdate());<br>
-        if (curEncoder->m_<wbr>totalActiveWorkerCount)<br>
-            frameStats->avgWPP = (double)curEncoder->m_<wbr>totalActiveWorkerCount / curEncoder->m_<wbr>activeWorkerCountSamples;<br>
-        else<br>
-            frameStats->avgWPP = 1;<br>
-        frameStats->countRowBlocks = curEncoder->m_countRowBlocks;<br>
-<br>
-        frameStats->cuStats.<wbr>percentIntraNxN = curFrame->m_encData->m_<wbr>frameStats.percentIntraNxN;<br>
-        frameStats-><wbr>avgChromaDistortion     = curFrame->m_encData->m_<wbr>frameStats.<wbr>avgChromaDistortion;<br>
-        frameStats->avgLumaDistortion       = curFrame->m_encData->m_<wbr>frameStats.avgLumaDistortion;<br>
-        frameStats->avgPsyEnergy            = curFrame->m_encData->m_<wbr>frameStats.avgPsyEnergy;<br>
-        frameStats->avgResEnergy            = curFrame->m_encData->m_<wbr>frameStats.avgResEnergy;<br>
-        frameStats->avgLumaLevel            = curFrame->m_fencPic->m_<wbr>avgLumaLevel;<br>
-        frameStats->maxLumaLevel            = curFrame->m_fencPic->m_<wbr>maxLumaLevel;<br>
-        frameStats->minLumaLevel            = curFrame->m_fencPic->m_<wbr>minLumaLevel;<br>
-<br>
-        frameStats->maxChromaULevel = curFrame->m_fencPic->m_<wbr>maxChromaULevel;<br>
-        frameStats->minChromaULevel = curFrame->m_fencPic->m_<wbr>minChromaULevel;<br>
-        frameStats->avgChromaULevel = curFrame->m_fencPic->m_<wbr>avgChromaULevel;<br>
-<br>
-        frameStats->maxChromaVLevel = curFrame->m_fencPic->m_<wbr>maxChromaVLevel;<br>
-        frameStats->minChromaVLevel = curFrame->m_fencPic->m_<wbr>minChromaVLevel;<br>
-        frameStats->avgChromaVLevel = curFrame->m_fencPic->m_<wbr>avgChromaVLevel;<br>
-<br>
-        for (uint32_t depth = 0; depth <= m_param->maxCUDepth; depth++)<br>
+        if (m_param->csvLogLevel >= 2)<br>
         {<br>
-            frameStats->cuStats.<wbr>percentSkipCu[depth]  = curFrame->m_encData->m_<wbr>frameStats.percentSkipCu[<wbr>depth];<br>
-            frameStats->cuStats.<wbr>percentMergeCu[depth] = curFrame->m_encData->m_<wbr>frameStats.percentMergeCu[<wbr>depth];<br>
-            frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][0] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][0];<br>
-            frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][1] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][1];<br>
-            frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][2] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][2];<br>
-            for (int n = 0; n < INTRA_MODES; n++)<br>
-                frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][n] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentIntraDistribution[<wbr>depth][n];<br>
-        }<br>
-<br>
-        if (curFrame->m_encData->m_<wbr>frameStats.totalPu[4] == 0)<br>
-            frameStats->puStats.percentNxN = 0;<br>
-        else<br>
-            frameStats->puStats.percentNxN = (double)(curFrame->m_encData-><wbr>m_frameStats.cnt4x4 / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[4]) * 100;<br>
-        for (uint32_t depth = 0; depth <= m_param->maxCUDepth; depth++)<br>
-        {<br>
-            if (curFrame->m_encData->m_<wbr>frameStats.totalPu[depth] == 0)<br>
+            frameStats->decideWaitTime = ELAPSED_MSEC(0, curEncoder->m_<wbr>slicetypeWaitTime);<br>
+            frameStats->row0WaitTime = ELAPSED_MSEC(curEncoder->m_<wbr>startCompressTime, curEncoder->m_row0WaitTime);<br>
+            frameStats->wallTime = ELAPSED_MSEC(curEncoder->m_<wbr>row0WaitTime, curEncoder->m_endCompressTime)<wbr>;<br>
+            frameStats->refWaitWallTime = ELAPSED_MSEC(curEncoder->m_<wbr>row0WaitTime, curEncoder->m_<wbr>allRowsAvailableTime);<br>
+            frameStats->totalCTUTime = ELAPSED_MSEC(0, curEncoder->m_<wbr>totalWorkerElapsedTime);<br>
+            frameStats->stallTime = ELAPSED_MSEC(0, curEncoder->m_<wbr>totalNoWorkerTime);<br>
+            frameStats->totalFrameTime = ELAPSED_MSEC(curFrame->m_<wbr>encodeStartTime, x265_mdate());<br>
+            if (curEncoder->m_<wbr>totalActiveWorkerCount)<br>
+                frameStats->avgWPP = (double)curEncoder->m_<wbr>totalActiveWorkerCount / curEncoder->m_<wbr>activeWorkerCountSamples;<br>
+            else<br>
+                frameStats->avgWPP = 1;<br>
+            frameStats->countRowBlocks = curEncoder->m_countRowBlocks;<br>
+<br>
+            frameStats-><wbr>avgChromaDistortion = curFrame->m_encData->m_<wbr>frameStats.<wbr>avgChromaDistortion;<br>
+            frameStats->avgLumaDistortion = curFrame->m_encData->m_<wbr>frameStats.avgLumaDistortion;<br>
+            frameStats->avgPsyEnergy = curFrame->m_encData->m_<wbr>frameStats.avgPsyEnergy;<br>
+            frameStats->avgResEnergy = curFrame->m_encData->m_<wbr>frameStats.avgResEnergy;<br>
+            frameStats->avgLumaLevel = curFrame->m_fencPic->m_<wbr>avgLumaLevel;<br>
+            frameStats->maxLumaLevel = curFrame->m_fencPic->m_<wbr>maxLumaLevel;<br>
+            frameStats->minLumaLevel = curFrame->m_fencPic->m_<wbr>minLumaLevel;<br>
+<br>
+            frameStats->maxChromaULevel = curFrame->m_fencPic->m_<wbr>maxChromaULevel;<br>
+            frameStats->minChromaULevel = curFrame->m_fencPic->m_<wbr>minChromaULevel;<br>
+            frameStats->avgChromaULevel = curFrame->m_fencPic->m_<wbr>avgChromaULevel;<br>
+<br>
+            frameStats->maxChromaVLevel = curFrame->m_fencPic->m_<wbr>maxChromaVLevel;<br>
+            frameStats->minChromaVLevel = curFrame->m_fencPic->m_<wbr>minChromaVLevel;<br>
+            frameStats->avgChromaVLevel = curFrame->m_fencPic->m_<wbr>avgChromaVLevel;<br>
+<br>
+            if (curFrame->m_encData->m_<wbr>frameStats.totalPu[4] == 0)<br>
+                frameStats->puStats.percentNxN = 0;<br>
+            else<br>
+                frameStats->puStats.percentNxN = (double)(curFrame->m_encData-><wbr>m_frameStats.cnt4x4 / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[4]) * 100;<br>
+            for (uint32_t depth = 0; depth <= m_param->maxCUDepth; depth++)<br>
             {<br>
-                frameStats->puStats.<wbr>percentSkipPu[depth] = 0;<br>
-                frameStats->puStats.<wbr>percentIntraPu[depth] = 0;<br>
-                frameStats->puStats.<wbr>percentAmpPu[depth] = 0;<br>
-                for (int i = 0; i < INTER_MODES - 1; i++)<br>
+                if (curFrame->m_encData->m_<wbr>frameStats.totalPu[depth] == 0)<br>
                 {<br>
-                    frameStats->puStats.<wbr>percentInterPu[depth][i] = 0;<br>
-                    frameStats->puStats.<wbr>percentMergePu[depth][i] = 0;<br>
+                    frameStats->puStats.<wbr>percentSkipPu[depth] = 0;<br>
+                    frameStats->puStats.<wbr>percentIntraPu[depth] = 0;<br>
+                    frameStats->puStats.<wbr>percentAmpPu[depth] = 0;<br>
+                    for (int i = 0; i < INTER_MODES - 1; i++)<br>
+                    {<br>
+                        frameStats->puStats.<wbr>percentInterPu[depth][i] = 0;<br>
+                        frameStats->puStats.<wbr>percentMergePu[depth][i] = 0;<br>
+                    }<br>
+                }<br>
+                else<br>
+                {<br>
+                    frameStats->puStats.<wbr>percentSkipPu[depth] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntSkipPu[depth] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
+                    frameStats->puStats.<wbr>percentIntraPu[depth] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntIntraPu[depth] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
+                    frameStats->puStats.<wbr>percentAmpPu[depth] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntAmp[depth] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
+                    for (int i = 0; i < INTER_MODES - 1; i++)<br>
+                    {<br>
+                        frameStats->puStats.<wbr>percentInterPu[depth][i] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntInterPu[depth]<wbr>[i] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
+                        frameStats->puStats.<wbr>percentMergePu[depth][i] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntMergePu[depth]<wbr>[i] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
+                    }<br>
                 }<br>
             }<br>
-            else<br>
+        }<br>
+<br>
+        if (m_param->csvLogLevel >= 1)<br>
+        {<br>
+            frameStats->cuStats.<wbr>percentIntraNxN = curFrame->m_encData->m_<wbr>frameStats.percentIntraNxN;<br>
+<br>
+            for (uint32_t depth = 0; depth <= m_param->maxCUDepth; depth++)<br>
             {<br>
-                frameStats->puStats.<wbr>percentSkipPu[depth] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntSkipPu[depth] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
-                frameStats->puStats.<wbr>percentIntraPu[depth] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntIntraPu[depth] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
-                frameStats->puStats.<wbr>percentAmpPu[depth] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntAmp[depth] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
-                for (int i = 0; i < INTER_MODES - 1; i++)<br>
-                {<br>
-                    frameStats->puStats.<wbr>percentInterPu[depth][i] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntInterPu[depth]<wbr>[i] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
-                    frameStats->puStats.<wbr>percentMergePu[depth][i] = (double)(curFrame->m_encData-><wbr>m_frameStats.cntMergePu[depth]<wbr>[i] / (double)curFrame->m_encData-><wbr>m_frameStats.totalPu[depth]) * 100;<br>
-                }<br>
+                frameStats->cuStats.<wbr>percentSkipCu[depth] = curFrame->m_encData->m_<wbr>frameStats.percentSkipCu[<wbr>depth];<br>
+                frameStats->cuStats.<wbr>percentMergeCu[depth] = curFrame->m_encData->m_<wbr>frameStats.percentMergeCu[<wbr>depth];<br>
+                frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][0] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][0];<br>
+                frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][1] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][1];<br>
+                frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][2] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][2];<br>
+                for (int n = 0; n < INTRA_MODES; n++)<br>
+                    frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][n] = curFrame->m_encData->m_<wbr>frameStats.<wbr>percentIntraDistribution[<wbr>depth][n];<br>
             }<br>
         }<br>
     }<br>
diff -r 586d06ad195a -r 69f316d001b5 source/encoder/frameencoder.<wbr>cpp<br>
--- a/source/encoder/frameencoder.<wbr>cpp   Wed Jun 21 10:03:53 2017 +0530<br>
+++ b/source/encoder/frameencoder.<wbr>cpp   Thu Jun 22 12:19:35 2017 +0530<br>
@@ -877,43 +877,52 @@<br>
         m_frame->m_encData->m_<wbr>frameStats.percent8x8Inter = (double)totalP / totalCuCount;<br>
         m_frame->m_encData->m_<wbr>frameStats.percent8x8Skip  = (double)totalSkip / totalCuCount;<br>
     }<br>
-    for (uint32_t i = 0; i < m_numRows; i++)<br>
+<br>
+    if (m_param->csvLogLevel >= 1)<br>
     {<br>
-        m_frame->m_encData->m_<wbr>frameStats.cntIntraNxN      += m_rows[i].rowStats.<wbr>cntIntraNxN;<br>
-        m_frame->m_encData->m_<wbr>frameStats.totalCu          += m_rows[i].rowStats.totalCu;<br>
-        m_frame->m_encData->m_<wbr>frameStats.totalCtu         += m_rows[i].rowStats.totalCtu;<br>
-        m_frame->m_encData->m_<wbr>frameStats.lumaDistortion   += m_rows[i].rowStats.<wbr>lumaDistortion;<br>
-        m_frame->m_encData->m_<wbr>frameStats.chromaDistortion += m_rows[i].rowStats.<wbr>chromaDistortion;<br>
-        m_frame->m_encData->m_<wbr>frameStats.psyEnergy        += m_rows[i].rowStats.psyEnergy;<br>
-        m_frame->m_encData->m_<wbr>frameStats.ssimEnergy       += m_rows[i].rowStats.ssimEnergy;<br>
-        m_frame->m_encData->m_<wbr>frameStats.resEnergy        += m_rows[i].rowStats.resEnergy;<br>
+        for (uint32_t i = 0; i < m_numRows; i++)<br>
+        {<br>
+            m_frame->m_encData->m_<wbr>frameStats.cntIntraNxN += m_rows[i].rowStats.<wbr>cntIntraNxN;<br>
+            m_frame->m_encData->m_<wbr>frameStats.totalCu += m_rows[i].rowStats.totalCu;<br>
+            m_frame->m_encData->m_<wbr>frameStats.totalCtu += m_rows[i].rowStats.totalCtu;<br>
+            m_frame->m_encData->m_<wbr>frameStats.lumaDistortion += m_rows[i].rowStats.<wbr>lumaDistortion;<br>
+            m_frame->m_encData->m_<wbr>frameStats.chromaDistortion += m_rows[i].rowStats.<wbr>chromaDistortion;<br>
+            m_frame->m_encData->m_<wbr>frameStats.psyEnergy += m_rows[i].rowStats.psyEnergy;<br>
+            m_frame->m_encData->m_<wbr>frameStats.ssimEnergy += m_rows[i].rowStats.ssimEnergy;<br>
+            m_frame->m_encData->m_<wbr>frameStats.resEnergy += m_rows[i].rowStats.resEnergy;<br>
+            for (uint32_t depth = 0; depth <= m_param->maxCUDepth; depth++)<br>
+            {<br>
+                m_frame->m_encData->m_<wbr>frameStats.cntSkipCu[depth] += m_rows[i].rowStats.cntSkipCu[<wbr>depth];<br>
+                m_frame->m_encData->m_<wbr>frameStats.cntMergeCu[depth] += m_rows[i].rowStats.cntMergeCu[<wbr>depth];<br>
+                for (int m = 0; m < INTER_MODES; m++)<br>
+                    m_frame->m_encData->m_<wbr>frameStats.<wbr>cuInterDistribution[depth][m] += m_rows[i].rowStats.<wbr>cuInterDistribution[depth][m];<br>
+                for (int n = 0; n < INTRA_MODES; n++)<br>
+                    m_frame->m_encData->m_<wbr>frameStats.<wbr>cuIntraDistribution[depth][n] += m_rows[i].rowStats.<wbr>cuIntraDistribution[depth][n];<br>
+            }<br>
+        }<br>
+        m_frame->m_encData->m_<wbr>frameStats.percentIntraNxN = (double)(m_frame->m_encData-><wbr>m_frameStats.cntIntraNxN * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
+<br>
         for (uint32_t depth = 0; depth <= m_param->maxCUDepth; depth++)<br>
         {<br>
-            m_frame->m_encData->m_<wbr>frameStats.cntSkipCu[depth] += m_rows[i].rowStats.cntSkipCu[<wbr>depth];<br>
-            m_frame->m_encData->m_<wbr>frameStats.cntMergeCu[depth] += m_rows[i].rowStats.cntMergeCu[<wbr>depth];<br>
-            for (int m = 0; m < INTER_MODES; m++)<br>
-                m_frame->m_encData->m_<wbr>frameStats.<wbr>cuInterDistribution[depth][m] += m_rows[i].rowStats.<wbr>cuInterDistribution[depth][m];<br>
+            m_frame->m_encData->m_<wbr>frameStats.percentSkipCu[<wbr>depth] = (double)(m_frame->m_encData-><wbr>m_frameStats.cntSkipCu[depth] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
+            m_frame->m_encData->m_<wbr>frameStats.percentMergeCu[<wbr>depth] = (double)(m_frame->m_encData-><wbr>m_frameStats.cntMergeCu[depth] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
             for (int n = 0; n < INTRA_MODES; n++)<br>
-                m_frame->m_encData->m_<wbr>frameStats.<wbr>cuIntraDistribution[depth][n] += m_rows[i].rowStats.<wbr>cuIntraDistribution[depth][n];<br>
+                m_frame->m_encData->m_<wbr>frameStats.<wbr>percentIntraDistribution[<wbr>depth][n] = (double)(m_frame->m_encData-><wbr>m_frameStats.<wbr>cuIntraDistribution[depth][n] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
+            uint64_t cuInterRectCnt = 0; // sum of Nx2N, 2NxN counts<br>
+            cuInterRectCnt += m_frame->m_encData->m_<wbr>frameStats.<wbr>cuInterDistribution[depth][1] + m_frame->m_encData->m_<wbr>frameStats.<wbr>cuInterDistribution[depth][2];<br>
+            m_frame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][0] = (double)(m_frame->m_encData-><wbr>m_frameStats.<wbr>cuInterDistribution[depth][0] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
+            m_frame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][1] = (double)(cuInterRectCnt * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
+            m_frame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][2] = (double)(m_frame->m_encData-><wbr>m_frameStats.<wbr>cuInterDistribution[depth][3] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
         }<br>
     }<br>
-    m_frame->m_encData->m_<wbr>frameStats.avgLumaDistortion   = (double)(m_frame->m_encData-><wbr>m_frameStats.lumaDistortion) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
-    m_frame->m_encData->m_<wbr>frameStats.avgChromaDistortion = (double)(m_frame->m_encData-><wbr>m_frameStats.chromaDistortion) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
-    m_frame->m_encData->m_<wbr>frameStats.avgPsyEnergy        = (double)(m_frame->m_encData-><wbr>m_frameStats.psyEnergy) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
-    m_frame->m_encData->m_<wbr>frameStats.avgSsimEnergy       = (double)(m_frame->m_encData-><wbr>m_frameStats.ssimEnergy) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
-    m_frame->m_encData->m_<wbr>frameStats.avgResEnergy        = (double)(m_frame->m_encData-><wbr>m_frameStats.resEnergy) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
-    m_frame->m_encData->m_<wbr>frameStats.percentIntraNxN     = (double)(m_frame->m_encData-><wbr>m_frameStats.cntIntraNxN * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
-    for (uint32_t depth = 0; depth <= m_param->maxCUDepth; depth++)<br>
+<br>
+    if (m_param->csvLogLevel >= 2)<br>
     {<br>
-        m_frame->m_encData->m_<wbr>frameStats.percentSkipCu[<wbr>depth]  = (double)(m_frame->m_encData-><wbr>m_frameStats.cntSkipCu[depth] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
-        m_frame->m_encData->m_<wbr>frameStats.percentMergeCu[<wbr>depth] = (double)(m_frame->m_encData-><wbr>m_frameStats.cntMergeCu[depth] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
-        for (int n = 0; n < INTRA_MODES; n++)<br>
-            m_frame->m_encData->m_<wbr>frameStats.<wbr>percentIntraDistribution[<wbr>depth][n] = (double)(m_frame->m_encData-><wbr>m_frameStats.<wbr>cuIntraDistribution[depth][n] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
-        uint64_t cuInterRectCnt = 0; // sum of Nx2N, 2NxN counts<br>
-        cuInterRectCnt += m_frame->m_encData->m_<wbr>frameStats.<wbr>cuInterDistribution[depth][1] + m_frame->m_encData->m_<wbr>frameStats.<wbr>cuInterDistribution[depth][2];<br>
-        m_frame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][0] = (double)(m_frame->m_encData-><wbr>m_frameStats.<wbr>cuInterDistribution[depth][0] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
-        m_frame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][1] = (double)(cuInterRectCnt * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
-        m_frame->m_encData->m_<wbr>frameStats.<wbr>percentInterDistribution[<wbr>depth][2] = (double)(m_frame->m_encData-><wbr>m_frameStats.<wbr>cuInterDistribution[depth][3] * 100) / m_frame->m_encData->m_<wbr>frameStats.totalCu;<br>
+        m_frame->m_encData->m_<wbr>frameStats.avgLumaDistortion = (double)(m_frame->m_encData-><wbr>m_frameStats.lumaDistortion) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
+        m_frame->m_encData->m_<wbr>frameStats.avgChromaDistortion = (double)(m_frame->m_encData-><wbr>m_frameStats.chromaDistortion) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
+        m_frame->m_encData->m_<wbr>frameStats.avgPsyEnergy = (double)(m_frame->m_encData-><wbr>m_frameStats.psyEnergy) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
+        m_frame->m_encData->m_<wbr>frameStats.avgSsimEnergy = (double)(m_frame->m_encData-><wbr>m_frameStats.ssimEnergy) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
+        m_frame->m_encData->m_<wbr>frameStats.avgResEnergy = (double)(m_frame->m_encData-><wbr>m_frameStats.resEnergy) / m_frame->m_encData->m_<wbr>frameStats.totalCtu;<br>
     }<br>
<br>
     m_bs.resetBits();<br>
@@ -1744,73 +1753,36 @@<br>
 int FrameEncoder::<wbr>collectCTUStatistics(const CUData& ctu, FrameStats* log)<br>
 {<br>
     int totQP = 0;<br>
-    if (ctu.m_slice->m_sliceType == I_SLICE)<br>
+    uint32_t depth = 0;<br>
+    for (uint32_t absPartIdx = 0; absPartIdx < ctu.m_numPartitions; absPartIdx += ctu.m_numPartitions >> (depth * 2))<br>
     {<br>
-        uint32_t depth = 0;<br>
-        for (uint32_t absPartIdx = 0; absPartIdx < ctu.m_numPartitions; absPartIdx += ctu.m_numPartitions >> (depth * 2))<br>
+        depth = ctu.m_cuDepth[absPartIdx];<br>
+        totQP += ctu.m_qp[absPartIdx] * (ctu.m_numPartitions >> (depth * 2));<br>
+    }<br>
+<br>
+    if (m_param->csvLogLevel >= 1)<br>
+    {<br>
+        if (ctu.m_slice->m_sliceType == I_SLICE)<br>
         {<br>
-            depth = ctu.m_cuDepth[absPartIdx];<br>
+            depth = 0;<br>
+            for (uint32_t absPartIdx = 0; absPartIdx < ctu.m_numPartitions; absPartIdx += ctu.m_numPartitions >> (depth * 2))<br>
+            {<br>
+                depth = ctu.m_cuDepth[absPartIdx];<br>
<br>
-            log->totalCu++;<br>
-            log->cntIntra[depth]++;<br>
-            totQP += ctu.m_qp[absPartIdx] * (ctu.m_numPartitions >> (depth * 2));<br>
-<br>
-            if (ctu.m_predMode[absPartIdx] == MODE_NONE)<br>
-            {<br>
-                log->totalCu--;<br>
-                log->cntIntra[depth]--;<br>
-            }<br>
-            else if (ctu.m_partSize[absPartIdx] != SIZE_2Nx2N)<br>
-            {<br>
-                /* TODO: log intra modes at absPartIdx +0 to +3 */<br>
-                X265_CHECK(ctu.m_log2CUSize[<wbr>absPartIdx] == 3 && ctu.m_slice->m_sps-><wbr>quadtreeTULog2MinSize < 3, "Intra NxN found at improbable depth\n");<br>
-                log->cntIntraNxN++;<br>
-                log->cntIntra[depth]--;<br>
-            }<br>
-            else if (ctu.m_lumaIntraDir[<wbr>absPartIdx] > 1)<br>
-                log->cuIntraDistribution[<wbr>depth][ANGULAR_MODE_ID]++;<br>
-            else<br>
-                log->cuIntraDistribution[<wbr>depth][ctu.m_lumaIntraDir[<wbr>absPartIdx]]++;<br>
-        }<br>
-    }<br>
-    else<br>
-    {<br>
-        uint32_t depth = 0;<br>
-        for (uint32_t absPartIdx = 0; absPartIdx < ctu.m_numPartitions; absPartIdx += ctu.m_numPartitions >> (depth * 2))<br>
-        {<br>
-            depth = ctu.m_cuDepth[absPartIdx];<br>
-<br>
-            log->totalCu++;<br>
-            totQP += ctu.m_qp[absPartIdx] * (ctu.m_numPartitions >> (depth * 2));<br>
-<br>
-            if (ctu.m_predMode[absPartIdx] == MODE_NONE)<br>
-                log->totalCu--;<br>
-            else if (ctu.isSkipped(absPartIdx))<br>
-            {<br>
-                if (ctu.m_mergeFlag[0])<br>
-                    log->cntMergeCu[depth]++;<br>
-                else<br>
-                    log->cntSkipCu[depth]++;<br>
-            }<br>
-            else if (ctu.isInter(absPartIdx))<br>
-            {<br>
-                log->cntInter[depth]++;<br>
-<br>
-                if (ctu.m_partSize[absPartIdx] < AMP_ID)<br>
-                    log->cuInterDistribution[<wbr>depth][ctu.m_partSize[<wbr>absPartIdx]]++;<br>
-                else<br>
-                    log->cuInterDistribution[<wbr>depth][AMP_ID]++;<br>
-            }<br>
-            else if (ctu.isIntra(absPartIdx))<br>
-            {<br>
+                log->totalCu++;<br>
                 log->cntIntra[depth]++;<br>
<br>
-                if (ctu.m_partSize[absPartIdx] != SIZE_2Nx2N)<br>
+                if (ctu.m_predMode[absPartIdx] == MODE_NONE)<br>
                 {<br>
+                    log->totalCu--;<br>
+                    log->cntIntra[depth]--;<br>
+                }<br>
+                else if (ctu.m_partSize[absPartIdx] != SIZE_2Nx2N)<br>
+                {<br>
+                    /* TODO: log intra modes at absPartIdx +0 to +3 */<br>
                     X265_CHECK(ctu.m_log2CUSize[<wbr>absPartIdx] == 3 && ctu.m_slice->m_sps-><wbr>quadtreeTULog2MinSize < 3, "Intra NxN found at improbable depth\n");<br>
                     log->cntIntraNxN++;<br>
                     log->cntIntra[depth]--;<br>
-                    /* TODO: log intra modes at absPartIdx +0 to +3 */<br>
                 }<br>
                 else if (ctu.m_lumaIntraDir[<wbr>absPartIdx] > 1)<br>
                     log->cuIntraDistribution[<wbr>depth][ANGULAR_MODE_ID]++;<br>
@@ -1818,6 +1790,51 @@<br>
                     log->cuIntraDistribution[<wbr>depth][ctu.m_lumaIntraDir[<wbr>absPartIdx]]++;<br>
             }<br>
         }<br>
+        else<br>
+        {<br>
+            depth = 0;<br>
+            for (uint32_t absPartIdx = 0; absPartIdx < ctu.m_numPartitions; absPartIdx += ctu.m_numPartitions >> (depth * 2))<br>
+            {<br>
+                depth = ctu.m_cuDepth[absPartIdx];<br>
+<br>
+                log->totalCu++;<br>
+<br>
+                if (ctu.m_predMode[absPartIdx] == MODE_NONE)<br>
+                    log->totalCu--;<br>
+                else if (ctu.isSkipped(absPartIdx))<br>
+                {<br>
+                    if (ctu.m_mergeFlag[0])<br>
+                        log->cntMergeCu[depth]++;<br>
+                    else<br>
+                        log->cntSkipCu[depth]++;<br>
+                }<br>
+                else if (ctu.isInter(absPartIdx))<br>
+                {<br>
+                    log->cntInter[depth]++;<br>
+<br>
+                    if (ctu.m_partSize[absPartIdx] < AMP_ID)<br>
+                        log->cuInterDistribution[<wbr>depth][ctu.m_partSize[<wbr>absPartIdx]]++;<br>
+                    else<br>
+                        log->cuInterDistribution[<wbr>depth][AMP_ID]++;<br>
+                }<br>
+                else if (ctu.isIntra(absPartIdx))<br>
+                {<br>
+                    log->cntIntra[depth]++;<br>
+<br>
+                    if (ctu.m_partSize[absPartIdx] != SIZE_2Nx2N)<br>
+                    {<br>
+                        X265_CHECK(ctu.m_log2CUSize[<wbr>absPartIdx] == 3 && ctu.m_slice->m_sps-><wbr>quadtreeTULog2MinSize < 3, "Intra NxN found at improbable depth\n");<br>
+                        log->cntIntraNxN++;<br>
+                        log->cntIntra[depth]--;<br>
+                        /* TODO: log intra modes at absPartIdx +0 to +3 */<br>
+                    }<br>
+                    else if (ctu.m_lumaIntraDir[<wbr>absPartIdx] > 1)<br>
+                        log->cuIntraDistribution[<wbr>depth][ANGULAR_MODE_ID]++;<br>
+                    else<br>
+                        log->cuIntraDistribution[<wbr>depth][ctu.m_lumaIntraDir[<wbr>absPartIdx]]++;<br>
+                }<br>
+            }<br>
+        }<br>
     }<br>
<br>
     return totQP;<br>
diff -r 586d06ad195a -r 69f316d001b5 source/encoder/slicetype.cpp<br>
--- a/source/encoder/slicetype.cpp      Wed Jun 21 10:03:53 2017 +0530<br>
+++ b/source/encoder/slicetype.cpp      Thu Jun 22 12:19:35 2017 +0530<br>
@@ -1638,7 +1638,7 @@<br>
             m_isSceneTransition = false; /* Signal end of scene transitioning */<br>
     }<br>
<br>
-    if (m_param->logLevel >= 2)<br>
+    if (m_param->csvLogLevel >= 2)<br>
     {<br>
         int64_t icost = frames[p1]->costEst[0][0];<br>
         int64_t pcost = frames[p1]->costEst[p1 - p0][0];<br>
diff -r 586d06ad195a -r 69f316d001b5 source/x265-extras.cpp<br>
--- a/source/x265-extras.cpp    Wed Jun 21 10:03:53 2017 +0530<br>
+++ b/source/x265-extras.cpp    Thu Jun 22 12:19:35 2017 +0530<br>
@@ -106,14 +106,15 @@<br>
                     fprintf(csvfp, ", Merge %dx%d", size, size);<br>
                     size /= 2;<br>
                 }<br>
-                fprintf(csvfp, ", Avg Luma Distortion, Avg Chroma Distortion, Avg psyEnergy, Avg Residual Energy,"<br>
-                               " Min Luma Level, Max Luma Level, Avg Luma Level");<br>
-<br>
-                if (param.internalCsp != X265_CSP_I400)<br>
-                    fprintf(csvfp, ", Min Cb Level, Max Cb Level, Avg Cb Level, Min Cr Level, Max Cr Level, Avg Cr Level");<br>
<br>
                 if (level >= 2)<br>
                 {<br>
+                    fprintf(csvfp, ", Avg Luma Distortion, Avg Chroma Distortion, Avg psyEnergy, Avg Residual Energy,"<br>
+                        " Min Luma Level, Max Luma Level, Avg Luma Level");<br>
+<br>
+                    if (param.internalCsp != X265_CSP_I400)<br>
+                        fprintf(csvfp, ", Min Cb Level, Max Cb Level, Avg Cb Level, Min Cr Level, Max Cr Level, Avg Cr Level");<br>
+<br>
                     /* PU statistics */<br>
                     size = param.maxCUSize;<br>
                     for (uint32_t i = 0; i< param.maxLog2CUSize - (uint32_t)g_log2Size[param.<wbr>minCUSize] + 1; i++)<br>
@@ -184,46 +185,50 @@<br>
         else<br>
             fputs(" -,", csvfp);<br>
     }<br>
-    for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
-        fprintf(csvfp, "%5.2lf%%, %5.2lf%%, %5.2lf%%,", frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][0],<br>
-                                                        frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][1],<br>
-                                                        frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][2]);<br>
-    fprintf(csvfp, "%5.2lf%%", frameStats->cuStats.<wbr>percentIntraNxN);<br>
-    if (param.bEnableRectInter)<br>
+<br>
+    if (level)<br>
     {<br>
         for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
+            fprintf(csvfp, "%5.2lf%%, %5.2lf%%, %5.2lf%%,", frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][0],<br>
+            frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][1],<br>
+            frameStats->cuStats.<wbr>percentIntraDistribution[<wbr>depth][2]);<br>
+        fprintf(csvfp, "%5.2lf%%", frameStats->cuStats.<wbr>percentIntraNxN);<br>
+        if (param.bEnableRectInter)<br>
         {<br>
-            fprintf(csvfp, ", %5.2lf%%, %5.2lf%%", frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][0],<br>
-                                                   frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][1]);<br>
-            if (param.bEnableAMP)<br>
-                fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][2]);<br>
+            for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
+            {<br>
+                fprintf(csvfp, ", %5.2lf%%, %5.2lf%%", frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][0],<br>
+                    frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][1]);<br>
+                if (param.bEnableAMP)<br>
+                    fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][2]);<br>
+            }<br>
         }<br>
-    }<br>
-    else<br>
-    {<br>
+        else<br>
+        {<br>
+            for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
+                fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][0]);<br>
+        }<br>
         for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
-            fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentInterDistribution[<wbr>depth][0]);<br>
-    }<br>
-    for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
-        fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentSkipCu[depth]);<br>
-    for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
-        fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentMergeCu[depth]);<br>
-<br>
-    fprintf(csvfp, ", %.2lf, %.2lf, %.2lf, %.2lf ", frameStats->avgLumaDistortion,<br>
-                                                    frameStats-><wbr>avgChromaDistortion,<br>
-                                                    frameStats->avgPsyEnergy,<br>
-                                                    frameStats->avgResEnergy);<br>
-<br>
-    fprintf(csvfp, ", %d, %d, %.2lf", frameStats->minLumaLevel, frameStats->maxLumaLevel, frameStats->avgLumaLevel);<br>
-<br>
-    if (param.internalCsp != X265_CSP_I400)<br>
-    {<br>
-        fprintf(csvfp, ", %d, %d, %.2lf", frameStats->minChromaULevel, frameStats->maxChromaULevel, frameStats->avgChromaULevel);<br>
-        fprintf(csvfp, ", %d, %d, %.2lf", frameStats->minChromaVLevel, frameStats->maxChromaVLevel, frameStats->avgChromaVLevel);<br>
+            fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentSkipCu[depth]);<br>
+        for (uint32_t depth = 0; depth <= param.maxCUDepth; depth++)<br>
+            fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.<wbr>percentMergeCu[depth]);<br>
     }<br>
<br>
     if (level >= 2)<br>
     {<br>
+        fprintf(csvfp, ", %.2lf, %.2lf, %.2lf, %.2lf ", frameStats->avgLumaDistortion,<br>
+            frameStats-><wbr>avgChromaDistortion,<br>
+            frameStats->avgPsyEnergy,<br>
+            frameStats->avgResEnergy);<br>
+<br>
+        fprintf(csvfp, ", %d, %d, %.2lf", frameStats->minLumaLevel, frameStats->maxLumaLevel, frameStats->avgLumaLevel);<br>
+<br>
+        if (param.internalCsp != X265_CSP_I400)<br>
+        {<br>
+            fprintf(csvfp, ", %d, %d, %.2lf", frameStats->minChromaULevel, frameStats->maxChromaULevel, frameStats->avgChromaULevel);<br>
+            fprintf(csvfp, ", %d, %d, %.2lf", frameStats->minChromaVLevel, frameStats->maxChromaVLevel, frameStats->avgChromaVLevel);<br>
+        }<br>
+<br>
         for (uint32_t i = 0; i < param.maxLog2CUSize - (uint32_t)g_log2Size[param.<wbr>minCUSize] + 1; i++)<br>
         {<br>
             fprintf(csvfp, ", %.2lf%%", frameStats->puStats.<wbr>percentIntraPu[i]);<br>
______________________________<wbr>_________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/<wbr>listinfo/x265-devel</a><br>
</blockquote></div><br></div></div>