[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