[x265] [PATCH] Statistics logging refinement: represent 4x4 statistics for I frame, combine I frame log in single line, preserve space in log
kavitha at multicorewareinc.com
kavitha at multicorewareinc.com
Mon Nov 25 08:37:47 CET 2013
# HG changeset patch
# User Kavitha Sampath <kavitha at multicorewareinc.com>
# Date 1385364596 -19800
# Mon Nov 25 12:59:56 2013 +0530
# Node ID c3c658b6b596194208a2b56c92544cb4fbece4e1
# Parent 10f605bd053009c8c981c7529322fecd1e54af7b
Statistics logging refinement: represent 4x4 statistics for I frame, combine I frame log in single line, preserve space in log
diff -r 10f605bd0530 -r c3c658b6b596 source/Lib/TLibEncoder/TEncCu.cpp
--- a/source/Lib/TLibEncoder/TEncCu.cpp Fri Nov 22 14:59:34 2013 -0600
+++ b/source/Lib/TLibEncoder/TEncCu.cpp Mon Nov 25 12:59:56 2013 +0530
@@ -636,14 +636,26 @@
if (outBestCU->m_totalCost < outTempCU->m_totalCost)
{
m_log->cntIntra[depth]++;
- m_log->cntIntra[depth + 1] = m_log->cntIntra[depth + 1] - 4 + boundaryCu;
+ for (int i = 0; i < 4; i++)
+ {
+ if (outTempCU->getPartitionSize(i) != SIZE_NxN)
+ m_log->cntIntra[depth + 1]--;
+ else
+ m_log->cntIntraNxN--;
+ }
+ m_log->cntIntra[depth + 1] += boundaryCu;
}
xCheckBestMode(outBestCU, outTempCU, depth); // RD compare current prediction with split prediction.
}
if (depth == g_maxCUDepth - 1 && bSubBranch)
{
- m_log->cntIntra[depth]++;
+ if (outBestCU->getPartitionSize(0) == SIZE_NxN)
+ {
+ m_log->cntIntraNxN++;
+ }
+ else
+ m_log->cntIntra[depth]++;
}
outBestCU->copyToPic(depth); // Copy Best data to Picture for next partition prediction.
diff -r 10f605bd0530 -r c3c658b6b596 source/encoder/compress.cpp
--- a/source/encoder/compress.cpp Fri Nov 22 14:59:34 2013 -0600
+++ b/source/encoder/compress.cpp Mon Nov 25 12:59:56 2013 +0530
@@ -350,7 +350,6 @@
void TEncCu::xCompressInterCU(TComDataCU*& outBestCU, TComDataCU*& outTempCU, TComDataCU*& cu, uint32_t depth, uint32_t PartitionIndex, UChar minDepth)
{
- m_log->cntTotalCu[depth]++;
m_abortFlag = false;
TComPic* pic = outTempCU->getPic();
@@ -424,6 +423,7 @@
if (!(depth < minDepth)) //topskip
#endif
{
+ m_log->cntTotalCu[depth]++;
if (!bSliceEnd && bInsidePicture)
{
// variables for fast encoder decision
diff -r 10f605bd0530 -r c3c658b6b596 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp Fri Nov 22 14:59:34 2013 -0600
+++ b/source/encoder/encoder.cpp Mon Nov 25 12:59:56 2013 +0530
@@ -356,31 +356,14 @@
void Encoder::printSummary()
{
- if (param.logLevel >= X265_LOG_INFO)
- {
- char buffer[200];
- if (m_analyzeI.m_numPics)
- x265_log(¶m, X265_LOG_INFO, "frame I: %s\n", statsString(m_analyzeI, buffer));
- if (m_analyzeP.m_numPics)
- x265_log(¶m, X265_LOG_INFO, "frame P: %s\n", statsString(m_analyzeP, buffer));
- if (m_analyzeB.m_numPics)
- x265_log(¶m, X265_LOG_INFO, "frame B: %s\n", statsString(m_analyzeB, buffer));
- if (m_analyzeAll.m_numPics)
- x265_log(¶m, X265_LOG_INFO, "global : %s\n", statsString(m_analyzeAll, buffer));
- if (param.bEnableWeightedPred)
- {
- x265_log(¶m, X265_LOG_INFO, "%d of %d (%.2f%%) P frames weighted\n",
- m_numWPFrames, m_analyzeP.m_numPics, (float)100.0 * m_numWPFrames / m_analyzeP.m_numPics);
- }
- }
for (int sliceType = 2; sliceType >= 0; sliceType--)
{
StatisticLog finalLog;
+ uint64_t cntIntraNxN = 0, cntIntra[4];
for (int depth = 0; depth < (int)g_maxCUDepth; depth++)
{
- double cntInter, cntIntra, cntSplit, cntSkipCu;
- double cuInterDistribution[INTER_MODES], cuIntraDistribution[INTRA_MODES];
- double cntIntraNxN = 0.0;
+ uint64_t cntInter, cntSplit, cntSkipCu;
+ uint64_t cuInterDistribution[INTER_MODES], cuIntraDistribution[INTRA_MODES];
for (int j = 0; j < param.frameNumThreads; j++)
{
for (int row = 0; row < m_frameEncoder[0].m_numRows; row++)
@@ -401,9 +384,9 @@
}
finalLog.cuInterDistribution[depth][m] += enclog.cuInterDistribution[depth][m];
}
- if (depth == (int)g_maxCUDepth - 1)
- finalLog.cntIntraNxN += enclog.cntIntraNxN;
}
+ if (depth == (int)g_maxCUDepth - 1)
+ finalLog.cntIntraNxN += enclog.cntIntraNxN;
}
}
// check for 0/0, if true assign 0 else calculate percentage
@@ -412,7 +395,7 @@
if (finalLog.cntInter[depth] == 0)
cuInterDistribution[n] = 0;
else
- cuInterDistribution[n] = (double)(finalLog.cuInterDistribution[depth][n] * 100) / (double)finalLog.cntInter[depth];
+ cuInterDistribution[n] = (finalLog.cuInterDistribution[depth][n] * 100) / finalLog.cntInter[depth];
if (n < INTRA_MODES)
{
if (finalLog.cntIntra[depth] == 0)
@@ -422,58 +405,89 @@
}
else
{
- cntIntraNxN = (double)(finalLog.cntIntraNxN * 100) / (double)finalLog.cntIntra[depth];
- cuIntraDistribution[n] = (double)(finalLog.cuIntraDistribution[depth][n] * 100) / (double)finalLog.cntIntra[depth];
+ cntIntraNxN = (finalLog.cntIntraNxN * 100) / finalLog.cntIntra[depth];
+ cuIntraDistribution[n] = (finalLog.cuIntraDistribution[depth][n] * 100) / finalLog.cntIntra[depth];
}
}
}
if (finalLog.cntTotalCu[depth] == 0)
{
cntInter = 0;
- cntIntra = 0;
+ cntIntra[depth] = 0;
cntSplit = 0;
cntSkipCu = 0;
}
else
{
- cntInter = (double)(finalLog.cntInter[depth] * 100) / (double)finalLog.cntTotalCu[depth];
- cntIntra = (double)(finalLog.cntIntra[depth] * 100) / (double)finalLog.cntTotalCu[depth];
- cntSplit = (double)(finalLog.cntSplit[depth] * 100) / (double)finalLog.cntTotalCu[depth];
- cntSkipCu = (double)(finalLog.cntSkipCu[depth] * 100) / (double)finalLog.cntTotalCu[depth];
+ cntInter = (finalLog.cntInter[depth] * 100) / finalLog.cntTotalCu[depth];
+ cntIntra[depth] = (finalLog.cntIntra[depth] * 100) / finalLog.cntTotalCu[depth];
+ cntSplit = (finalLog.cntSplit[depth] * 100) / finalLog.cntTotalCu[depth];
+ cntSkipCu = (finalLog.cntSkipCu[depth] * 100) / finalLog.cntTotalCu[depth];
+ if (sliceType == I_SLICE)
+ cntIntraNxN = (finalLog.cntIntraNxN * 100) / finalLog.cntTotalCu[depth];
}
// print statistics
- if (sliceType == I_SLICE)
- x265_log(¶m, X265_LOG_INFO, "Intra I%d %.2f%%\n", g_maxCUWidth >> depth, cntIntra);
- else
+ if (sliceType != I_SLICE)
{
+ int cuSize = g_maxCUWidth >> depth;
if (depth < (int)g_maxCUDepth - 1)
{
if (sliceType == P_SLICE)
- x265_log(¶m, X265_LOG_INFO, "Inter P%d Inter %.2f%% (2Nx2N %.2f%% Nx2N %.2f%% 2NxN %.2f%% AMP %.2f%%) "
- "Intra %.2f%% (DC %.2f%% Planar %.2f%% Ang %.2f%% ) Split %.2f%% Skipped %.2f%% \n", g_maxCUWidth >> depth,
- cntInter, cuInterDistribution[0], cuInterDistribution[2], cuInterDistribution[1], cuInterDistribution[3],
- cntIntra, cuIntraDistribution[0], cuIntraDistribution[1], cuIntraDistribution[2], cntSplit, cntSkipCu);
+ x265_log(¶m, X265_LOG_INFO, "Inter P%d:Split %I64d%% Skip %I64d%% Inter %I64d%%(%dx%d %I64d%% %dx%d %I64d%%"
+ " %dx%d %I64d%% AMP %I64d%%) Intra %I64d%%(DC %I64d%% Planar %I64d%% Ang %I64d%%)\n", cuSize, cntSplit, cntSkipCu,
+ cntInter, cuSize, cuSize, cuInterDistribution[0], cuSize/2, cuSize, cuInterDistribution[2], cuSize, cuSize/2, cuInterDistribution[1],
+ cuInterDistribution[3], cntIntra[depth], cuIntraDistribution[0], cuIntraDistribution[1], cuIntraDistribution[2]);
else
- x265_log(¶m, X265_LOG_INFO, "Inter B%d Inter %.2f%% (2Nx2N %.2f%% Nx2N %.2f%% 2NxN %.2f%% AMP %.2f%%) "
- "Intra %.2f%% (DC %.2f%% Planar %.2f%% Ang %.2f%% ) Split %.2f%% Skipped %.2f%% \n", g_maxCUWidth >> depth,
- cntInter, cuInterDistribution[0], cuInterDistribution[2], cuInterDistribution[1], cuInterDistribution[3],
- cntIntra, cuIntraDistribution[0], cuIntraDistribution[1], cuIntraDistribution[2], cntSplit, cntSkipCu);
+ x265_log(¶m, X265_LOG_INFO, "Inter B%d:Split %I64d%% Skip %I64d%% Inter %I64d%%(%dx%d %I64d%% %dx%d %I64d%%"
+ " %dx%d %I64d%% AMP %I64d%%) Intra %I64d%%(DC %I64d%% Planar %I64d%% Ang %I64d%%)\n", cuSize, cntSplit, cntSkipCu,
+ cntInter, cuSize, cuSize, cuInterDistribution[0], cuSize/2, cuSize, cuInterDistribution[2], cuSize, cuSize/2, cuInterDistribution[1],
+ cuInterDistribution[3], cntIntra[depth], cuIntraDistribution[0], cuIntraDistribution[1], cuIntraDistribution[2]);
}
else
{
if (sliceType == P_SLICE)
- x265_log(¶m, X265_LOG_INFO, "Inter P%d Inter %.2f%% (2Nx2N %.2f%% Nx2N %.2f%% 2NxN %.2f%% AMP %.2f%%) "
- "Intra %.2f%% (DC %.2f%% Planar %.2f%% Ang %.2f%% NXN %.2f%%) Skipped %.2f%% \n", g_maxCUWidth >> depth,
- cntInter, cuInterDistribution[0], cuInterDistribution[2], cuInterDistribution[1], cuInterDistribution[3],
- cntIntra, cuIntraDistribution[0], cuIntraDistribution[1], cuIntraDistribution[2], cntIntraNxN, cntSkipCu);
+ x265_log(¶m, X265_LOG_INFO, "Inter P%-2d:Skip %I64d%% Inter %I64d%%(%dx%d %I64d%% %dx%d %I64d%%"
+ " %dx%d %I64d%% AMP %I64d%%) Intra %I64d%%(DC %I64d%% Planar %I64d%% Ang %I64d%% %dx%d %I64d%%)\n", cuSize,
+ cntSkipCu, cntInter, cuSize, cuSize, cuInterDistribution[0], cuSize/2, cuSize, cuInterDistribution[2], cuSize,
+ cuSize/2, cuInterDistribution[1], cuInterDistribution[3], cntIntra[depth], cuIntraDistribution[0],
+ cuIntraDistribution[1], cuIntraDistribution[2], cuSize/2, cuSize/2, cntIntraNxN);
else
- x265_log(¶m, X265_LOG_INFO, "Inter B%d Inter %.2f%% (2Nx2N %.2f%% Nx2N %.2f%% 2NxN %.2f%% AMP %.2f%%) "
- "Intra %.2f%% (DC %.2f%% Planar %.2f%% Ang %.2f%% NXN %.2f%%) Skipped %.2f%% \n", g_maxCUWidth >> depth,
- cntInter, cuInterDistribution[0], cuInterDistribution[2], cuInterDistribution[1], cuInterDistribution[3],
- cntIntra, cuIntraDistribution[0], cuIntraDistribution[1], cuIntraDistribution[2], cntIntraNxN, cntSkipCu);
+ x265_log(¶m, X265_LOG_INFO, "Inter B%-2d:Skip %I64d%% Inter %I64d%%(%dx%d %I64d%% %dx%d %I64d%%"
+ " %dx%d %I64d%% AMP %I64d%%) Intra %I64d%%(DC %I64d%% Planar %I64d%% Ang %I64d%% %dx%d %I64d%%)\n", cuSize,
+ cntSkipCu, cntInter, cuSize, cuSize, cuInterDistribution[0], cuSize/2, cuSize, cuInterDistribution[2], cuSize,
+ cuSize/2, cuInterDistribution[1], cuInterDistribution[3], cntIntra[depth], cuIntraDistribution[0],
+ cuIntraDistribution[1], cuIntraDistribution[2], cuSize/2, cuSize/2, cntIntraNxN);
}
}
}
+ if (sliceType == I_SLICE)
+ {
+ char stats[50];
+ if (g_maxCUDepth == 4)
+ sprintf(stats, "%I64d%% %I64d%% %I64d%% %I64d%% %I64d%%", cntIntra[0], cntIntra[1], cntIntra[2], cntIntra[3], cntIntraNxN);
+ else if (g_maxCUDepth == 3)
+ sprintf(stats, "%I64d%% %I64d%% %I64d%% %I64d%%", cntIntra[0], cntIntra[1], cntIntra[2], cntIntraNxN);
+ else
+ sprintf(stats, "%I64d%% %I64d%% %I64d%%", cntIntra[0], cntIntra[1], cntIntraNxN);
+ x265_log(¶m, X265_LOG_INFO, "I-frame %d..4: %s\n", g_maxCUWidth, stats);
+ }
+ }
+ if (param.logLevel >= X265_LOG_INFO)
+ {
+ char buffer[200];
+ if (m_analyzeI.m_numPics)
+ x265_log(¶m, X265_LOG_INFO, "frame I: %s\n", statsString(m_analyzeI, buffer));
+ if (m_analyzeP.m_numPics)
+ x265_log(¶m, X265_LOG_INFO, "frame P: %s\n", statsString(m_analyzeP, buffer));
+ if (m_analyzeB.m_numPics)
+ x265_log(¶m, X265_LOG_INFO, "frame B: %s\n", statsString(m_analyzeB, buffer));
+ if (m_analyzeAll.m_numPics)
+ x265_log(¶m, X265_LOG_INFO, "global : %s\n", statsString(m_analyzeAll, buffer));
+ if (param.bEnableWeightedPred)
+ {
+ x265_log(¶m, X265_LOG_INFO, "%d of %d (%.2f%%) P frames weighted\n",
+ m_numWPFrames, m_analyzeP.m_numPics, (float)100.0 * m_numWPFrames / m_analyzeP.m_numPics);
+ }
}
}
More information about the x265-devel
mailing list