[x265] [PATCH x265] csv: Bypass luma calculatations when --max-cll is OFF or when csv-log-level < 2

bhavna at multicorewareinc.com bhavna at multicorewareinc.com
Thu Feb 1 13:29:04 CET 2018


# HG changeset patch
# User Bhavna Hariharan <bhavna at multicorewareinc.com>
# Date 1517408059 -19800
#      Wed Jan 31 19:44:19 2018 +0530
# Node ID 4345744c5e23e925ed658837359d5502b5ff94a7
# Parent  79c5e3bfeb59041be822f7a4a21b95548ddccd07
csv: Bypass luma calculatations when --max-cll is OFF or when csv-log-level < 2

The maxFall and maxCll values are calculated from the min, max and average luma
values. The luma values were being calculated even when --max-cll is disabled.
This patch bypasses the luma calculations when --max-cll is OFF or
when csv-log-level < 2

diff -r 79c5e3bfeb59 -r 4345744c5e23 source/common/picyuv.cpp
--- a/source/common/picyuv.cpp	Tue Jan 30 15:57:08 2018 +0530
+++ b/source/common/picyuv.cpp	Wed Jan 31 19:44:19 2018 +0530
@@ -358,17 +358,21 @@
     pixel *uPic = m_picOrg[1];
     pixel *vPic = m_picOrg[2];
 
-    for (int r = 0; r < height; r++)
+
+    if (param.csvLogLevel >= 2 || param.maxCLL || param.maxFALL)
     {
-        for (int c = 0; c < width; c++)
+        for (int r = 0; r < height; r++)
         {
-            m_maxLumaLevel = X265_MAX(yPic[c], m_maxLumaLevel);
-            m_minLumaLevel = X265_MIN(yPic[c], m_minLumaLevel);
-            lumaSum += yPic[c];
+            for (int c = 0; c < width; c++)
+            {
+                m_maxLumaLevel = X265_MAX(yPic[c], m_maxLumaLevel);
+                m_minLumaLevel = X265_MIN(yPic[c], m_minLumaLevel);
+                lumaSum += yPic[c];
+            }
+            yPic += m_stride;
         }
-        yPic += m_stride;
+        m_avgLumaLevel = (double)lumaSum / (m_picHeight * m_picWidth);
     }
-    m_avgLumaLevel = (double)lumaSum / (m_picHeight * m_picWidth);
 
     if (param.csvLogLevel >= 2)
     {
diff -r 79c5e3bfeb59 -r 4345744c5e23 source/encoder/api.cpp
--- a/source/encoder/api.cpp	Tue Jan 30 15:57:08 2018 +0530
+++ b/source/encoder/api.cpp	Wed Jan 31 19:44:19 2018 +0530
@@ -67,8 +67,7 @@
     "Y PSNR, U PSNR, V PSNR, Global PSNR, SSIM, SSIM (dB), "
     "I count, I ave-QP, I kbps, I-PSNR Y, I-PSNR U, I-PSNR V, I-SSIM (dB), "
     "P count, P ave-QP, P kbps, P-PSNR Y, P-PSNR U, P-PSNR V, P-SSIM (dB), "
-    "B count, B ave-QP, B kbps, B-PSNR Y, B-PSNR U, B-PSNR V, B-SSIM (dB), "
-    "MaxCLL, MaxFALL, Version\n";
+    "B count, B ave-QP, B kbps, B-PSNR Y, B-PSNR U, B-PSNR V, B-SSIM (dB), ";
 
 x265_encoder *x265_encoder_open(x265_param *p)
 {
@@ -757,7 +756,12 @@
                 fprintf(csvfp, "\n");
             }
             else
+            {
                 fputs(summaryCSVHeader, csvfp);
+                if (param->csvLogLevel >= 2 || param->maxCLL || param->maxFALL)
+                    fputs("MaxCLL, MaxFALL,", csvfp);
+                fputs(" Version\n", csvfp);
+            }
         }
         return csvfp;
     }
@@ -881,6 +885,9 @@
             // adding summary to a per-frame csv log file, so it needs a summary header
             fprintf(p->csvfpt, "\nSummary\n");
             fputs(summaryCSVHeader, p->csvfpt);
+            if (p->csvLogLevel >= 2 || p->maxCLL || p->maxFALL)
+                fputs("MaxCLL, MaxFALL,", p->csvfpt);
+            fputs(" Version\n",p->csvfpt);
         }
 
         // CLI arguments or other
@@ -974,7 +981,9 @@
         else
             fprintf(p->csvfpt, " -, -, -, -, -, -, -,");
 
-        fprintf(p->csvfpt, " %-6u, %-6u, %s\n", stats->maxCLL, stats->maxFALL, api->version_str);
+        if (p->csvLogLevel >= 2 || p->maxCLL || p->maxFALL)
+            fprintf(p->csvfpt, " %-6u, %-6u,", stats->maxCLL, stats->maxFALL);
+        fprintf(p->csvfpt, " %s\n", api->version_str);
     }
 
 }
diff -r 79c5e3bfeb59 -r 4345744c5e23 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp	Tue Jan 30 15:57:08 2018 +0530
+++ b/source/encoder/encoder.cpp	Wed Jan 31 19:44:19 2018 +0530
@@ -1984,8 +1984,11 @@
         stats->statsB.psnrV   = m_analyzeB.m_psnrSumV / (double)m_analyzeB.m_numPics;
         stats->statsB.ssim    = x265_ssim2dB(m_analyzeB.m_globalSsim / (double)m_analyzeB.m_numPics);
 
-        stats->maxCLL         = m_analyzeAll.m_maxCLL;
-        stats->maxFALL        = (uint16_t)(m_analyzeAll.m_maxFALL / m_analyzeAll.m_numPics);
+        if (m_param->csvLogLevel >= 2 || m_param->maxCLL || m_param->maxFALL)
+        {
+            stats->maxCLL = m_analyzeAll.m_maxCLL;
+            stats->maxFALL = (uint16_t)(m_analyzeAll.m_maxFALL / m_analyzeAll.m_numPics);
+        }
     }
 
     /* If new statistics are added to x265_stats, we must check here whether the
@@ -2060,8 +2063,11 @@
             m_analyzeB.addSsim(ssim);
     }
 
-    m_analyzeAll.m_maxFALL += curFrame->m_fencPic->m_avgLumaLevel;
-    m_analyzeAll.m_maxCLL = X265_MAX(m_analyzeAll.m_maxCLL, curFrame->m_fencPic->m_maxLumaLevel);
+    if (m_param->csvLogLevel >= 2 || m_param->maxCLL || m_param->maxFALL)
+    {
+        m_analyzeAll.m_maxFALL += curFrame->m_fencPic->m_avgLumaLevel;
+        m_analyzeAll.m_maxCLL = X265_MAX(m_analyzeAll.m_maxCLL, curFrame->m_fencPic->m_maxLumaLevel);
+    }
 
     char c = (slice->isIntra() ? (curFrame->m_lowres.sliceType == X265_TYPE_IDR ? 'I' : 'i') : slice->isInterP() ? 'P' : 'B');
     int poc = slice->m_poc;
@@ -2104,10 +2110,6 @@
 
 #define ELAPSED_MSEC(start, end) (((double)(end) - (start)) / 1000)
 
-        frameStats->maxLumaLevel = curFrame->m_fencPic->m_maxLumaLevel;
-        frameStats->minLumaLevel = curFrame->m_fencPic->m_minLumaLevel;
-        frameStats->avgLumaLevel = curFrame->m_fencPic->m_avgLumaLevel;
-
         if (m_param->csvLogLevel >= 2)
         {
             frameStats->decideWaitTime = ELAPSED_MSEC(0, curEncoder->m_slicetypeWaitTime);
@@ -2128,6 +2130,10 @@
             frameStats->avgPsyEnergy = curFrame->m_encData->m_frameStats.avgPsyEnergy;
             frameStats->avgResEnergy = curFrame->m_encData->m_frameStats.avgResEnergy;
 
+            frameStats->maxLumaLevel = curFrame->m_fencPic->m_maxLumaLevel;
+            frameStats->minLumaLevel = curFrame->m_fencPic->m_minLumaLevel;
+            frameStats->avgLumaLevel = curFrame->m_fencPic->m_avgLumaLevel;
+
             frameStats->maxChromaULevel = curFrame->m_fencPic->m_maxChromaULevel;
             frameStats->minChromaULevel = curFrame->m_fencPic->m_minChromaULevel;
             frameStats->avgChromaULevel = curFrame->m_fencPic->m_avgChromaULevel;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265.patch
Type: text/x-patch
Size: 6294 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20180201/838f5680/attachment.bin>


More information about the x265-devel mailing list