[x265] [PATCH] stats: average and maximum luma level per frame
Divya Manivannan
divya at multicorewareinc.com
Mon Jul 27 11:48:06 CEST 2015
# HG changeset patch
# User Divya Manivannan <divya at multicorewareinc.com>
# Date 1437990335 -19800
# Mon Jul 27 15:15:35 2015 +0530
# Node ID 8c160e96251d2bd88afb6adff5d117a0b75d1412
# Parent b015514a93868e2dcf431d2e94b147861076a376
stats: average and maximum luma level per frame
diff -r b015514a9386 -r 8c160e96251d source/CMakeLists.txt
--- a/source/CMakeLists.txt Sun Jul 26 16:12:32 2015 +0530
+++ b/source/CMakeLists.txt Mon Jul 27 15:15:35 2015 +0530
@@ -30,7 +30,7 @@
mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
# X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 67)
+set(X265_BUILD 68)
configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
"${PROJECT_BINARY_DIR}/x265.def")
configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff -r b015514a9386 -r 8c160e96251d source/common/framedata.h
--- a/source/common/framedata.h Sun Jul 26 16:12:32 2015 +0530
+++ b/source/common/framedata.h Mon Jul 27 15:15:35 2015 +0530
@@ -55,6 +55,7 @@
double avgLumaDistortion;
double avgChromaDistortion;
double avgPsyEnergy;
+ double avgLumaLevel;
double percentIntraNxN;
double percentSkipCu[NUM_CU_DEPTH];
double percentMergeCu[NUM_CU_DEPTH];
@@ -67,12 +68,15 @@
uint64_t lumaDistortion;
uint64_t chromaDistortion;
uint64_t psyEnergy;
+ uint64_t lumaLevel;
+ uint64_t noOfPixels;
uint64_t cntSkipCu[NUM_CU_DEPTH];
uint64_t cntMergeCu[NUM_CU_DEPTH];
uint64_t cntInter[NUM_CU_DEPTH];
uint64_t cntIntra[NUM_CU_DEPTH];
uint64_t cuInterDistribution[NUM_CU_DEPTH][INTER_MODES];
uint64_t cuIntraDistribution[NUM_CU_DEPTH][INTRA_MODES];
+ uint16_t maxLumaLevel;
FrameStats()
{
diff -r b015514a9386 -r 8c160e96251d source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp Sun Jul 26 16:12:32 2015 +0530
+++ b/source/encoder/encoder.cpp Mon Jul 27 15:15:35 2015 +0530
@@ -1168,6 +1168,8 @@
frameStats->avgChromaDistortion = curFrame->m_encData->m_frameStats.avgChromaDistortion;
frameStats->avgLumaDistortion = curFrame->m_encData->m_frameStats.avgLumaDistortion;
frameStats->avgPsyEnergy = curFrame->m_encData->m_frameStats.avgPsyEnergy;
+ frameStats->avgLumaLevel = curFrame->m_encData->m_frameStats.avgLumaLevel;
+ frameStats->maxLumaLevel = curFrame->m_encData->m_frameStats.maxLumaLevel;
for (uint32_t depth = 0; depth <= g_maxCUDepth; depth++)
{
frameStats->cuStats.percentSkipCu[depth] = curFrame->m_encData->m_frameStats.percentSkipCu[depth];
diff -r b015514a9386 -r 8c160e96251d source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp Sun Jul 26 16:12:32 2015 +0530
+++ b/source/encoder/frameencoder.cpp Mon Jul 27 15:15:35 2015 +0530
@@ -591,6 +591,11 @@
m_frame->m_encData->m_frameStats.lumaDistortion += m_rows[i].rowStats.lumaDistortion;
m_frame->m_encData->m_frameStats.chromaDistortion += m_rows[i].rowStats.chromaDistortion;
m_frame->m_encData->m_frameStats.psyEnergy += m_rows[i].rowStats.psyEnergy;
+ m_frame->m_encData->m_frameStats.lumaLevel += m_rows[i].rowStats.lumaLevel;
+ m_frame->m_encData->m_frameStats.noOfPixels += m_rows[i].rowStats.noOfPixels;
+
+ if (m_rows[i].rowStats.maxLumaLevel > m_frame->m_encData->m_frameStats.maxLumaLevel)
+ m_frame->m_encData->m_frameStats.maxLumaLevel = m_rows[i].rowStats.maxLumaLevel;
for (uint32_t depth = 0; depth <= g_maxCUDepth; depth++)
{
m_frame->m_encData->m_frameStats.cntSkipCu[depth] += m_rows[i].rowStats.cntSkipCu[depth];
@@ -604,6 +609,7 @@
m_frame->m_encData->m_frameStats.avgLumaDistortion = (double)(m_frame->m_encData->m_frameStats.lumaDistortion / m_frame->m_encData->m_frameStats.totalCtu);
m_frame->m_encData->m_frameStats.avgChromaDistortion = (double)(m_frame->m_encData->m_frameStats.chromaDistortion / m_frame->m_encData->m_frameStats.totalCtu);
m_frame->m_encData->m_frameStats.avgPsyEnergy = (double)(m_frame->m_encData->m_frameStats.psyEnergy / m_frame->m_encData->m_frameStats.totalCtu);
+ m_frame->m_encData->m_frameStats.avgLumaLevel = (double)(m_frame->m_encData->m_frameStats.lumaLevel / m_frame->m_encData->m_frameStats.noOfPixels);
m_frame->m_encData->m_frameStats.percentIntraNxN = (double)(m_frame->m_encData->m_frameStats.cntIntraNxN * 100) / m_frame->m_encData->m_frameStats.totalCu;
for (uint32_t depth = 0; depth <= g_maxCUDepth; depth++)
{
@@ -983,6 +989,13 @@
for (int n = 0; n < INTRA_MODES; n++)
curRow.rowStats.cuIntraDistribution[depth][n] += frameLog.cuIntraDistribution[depth][n];
}
+ for (uint32_t i = 0; i < (best.reconYuv.m_size * best.reconYuv.m_size); i++)
+ {
+ curRow.rowStats.lumaLevel += *(best.reconYuv.m_buf[0] + i);
+ curRow.rowStats.noOfPixels++;
+ if ((*(best.reconYuv.m_buf[0] + i)) > curRow.rowStats.maxLumaLevel)
+ curRow.rowStats.maxLumaLevel = *(best.reconYuv.m_buf[0] + i);
+ }
curEncData.m_cuStat[cuAddr].totalBits = best.totalBits;
x265_emms();
diff -r b015514a9386 -r 8c160e96251d source/x265-extras.cpp
--- a/source/x265-extras.cpp Sun Jul 26 16:12:32 2015 +0530
+++ b/source/x265-extras.cpp Mon Jul 27 15:15:35 2015 +0530
@@ -107,7 +107,7 @@
fprintf(csvfp, ", Merge %dx%d", size, size);
size /= 2;
}
- fprintf(csvfp, ", Avg Luma Distortion, Avg Chroma Distortion, Avg psyEnergy");
+ fprintf(csvfp, ", Avg Luma Distortion, Avg Chroma Distortion, Avg psyEnergy, Avg Luma Level, Max Luma Level");
}
fprintf(csvfp, "\n");
}
@@ -179,7 +179,7 @@
fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.percentSkipCu[depth]);
for (uint32_t depth = 0; depth <= g_maxCUDepth; depth++)
fprintf(csvfp, ", %5.2lf%%", frameStats->cuStats.percentMergeCu[depth]);
- fprintf(csvfp, ", %.2lf, %.2lf, %.2lf", frameStats->avgLumaDistortion, frameStats->avgChromaDistortion, frameStats->avgPsyEnergy);
+ fprintf(csvfp, ", %.2lf, %.2lf, %.2lf, %.2lf, %d", frameStats->avgLumaDistortion, frameStats->avgChromaDistortion, frameStats->avgPsyEnergy, frameStats->avgLumaLevel, frameStats->maxLumaLevel);
}
fprintf(csvfp, "\n");
fflush(stderr);
diff -r b015514a9386 -r 8c160e96251d source/x265.h
--- a/source/x265.h Sun Jul 26 16:12:32 2015 +0530
+++ b/source/x265.h Mon Jul 27 15:15:35 2015 +0530
@@ -132,12 +132,14 @@
double avgLumaDistortion;
double avgChromaDistortion;
double avgPsyEnergy;
+ double avgLumaLevel;
uint64_t bits;
int encoderOrder;
int poc;
int countRowBlocks;
int list0POC[16];
int list1POC[16];
+ uint16_t maxLumaLevel;
char sliceType;
x265_cu_stats cuStats;
} x265_frame_stats;
More information about the x265-devel
mailing list