# HG changeset patch # User Divya Manivannan <di...@multicorewareinc.com> # Date 1474719617 -19800 # Sat Sep 24 17:50:17 2016 +0530 # Node ID 9650164ef1a9b985a7882db2c3180b5383dfdde2 # Parent d20b78d6d138de25040a756e7df10b8c45eabba8 csv: add buffer fill per frame in csv
diff -r d20b78d6d138 -r 9650164ef1a9 source/encoder/encoder.cpp --- a/source/encoder/encoder.cpp Thu Sep 22 15:54:24 2016 +0530 +++ b/source/encoder/encoder.cpp Sat Sep 24 17:50:17 2016 +0530 @@ -1353,6 +1353,7 @@ frameStats->qp = curEncData.m_avgQpAq; frameStats->bits = bits; frameStats->bScenecut = curFrame->m_lowres.bScenecut; + frameStats->bufferFill = m_rateControl->m_bufferFillActual; frameStats->frameLatency = inPoc - poc; if (m_param->rc.rateControlMode == X265_RC_CRF) frameStats->rateFactor = curEncData.m_rateFactor; diff -r d20b78d6d138 -r 9650164ef1a9 source/encoder/ratecontrol.cpp --- a/source/encoder/ratecontrol.cpp Thu Sep 22 15:54:24 2016 +0530 +++ b/source/encoder/ratecontrol.cpp Sat Sep 24 17:50:17 2016 +0530 @@ -341,6 +341,8 @@ m_param->rc.vbvBufferInit = x265_clip3(0.0, 1.0, m_param->rc.vbvBufferInit / m_param->rc.vbvBufferSize); m_param->rc.vbvBufferInit = x265_clip3(0.0, 1.0, X265_MAX(m_param->rc.vbvBufferInit, m_bufferRate / m_bufferSize)); m_bufferFillFinal = m_bufferSize * m_param->rc.vbvBufferInit; + m_bufferFillActual = m_bufferFillFinal; + m_bufferExcess = 0; } m_totalBits = 0; @@ -2446,6 +2448,10 @@ m_bufferFillFinal = X265_MAX(m_bufferFillFinal, 0); m_bufferFillFinal += m_bufferRate; m_bufferFillFinal = X265_MIN(m_bufferFillFinal, m_bufferSize); + double bufferBits = X265_MIN(bits + m_bufferExcess, m_bufferRate); + m_bufferExcess = X265_MAX(m_bufferExcess - bufferBits + bits, 0); + m_bufferFillActual += bufferBits - bits; + m_bufferFillActual = X265_MIN(m_bufferFillActual, m_bufferSize); } /* After encoding one frame, update rate control state */ diff -r d20b78d6d138 -r 9650164ef1a9 source/encoder/ratecontrol.h --- a/source/encoder/ratecontrol.h Thu Sep 22 15:54:24 2016 +0530 +++ b/source/encoder/ratecontrol.h Sat Sep 24 17:50:17 2016 +0530 @@ -144,6 +144,8 @@ double m_rateFactorMaxIncrement; /* Don't allow RF above (CRF + this value). */ double m_rateFactorMaxDecrement; /* don't allow RF below (this value). */ double m_avgPFrameQp; + double m_bufferFillActual; + double m_bufferExcess; bool m_isFirstMiniGop; Predictor m_pred[4]; /* Slice predictors to preidct bits for each Slice type - I,P,Bref and B */ int64_t m_leadingNoBSatd; diff -r d20b78d6d138 -r 9650164ef1a9 source/x265-extras.cpp --- a/source/x265-extras.cpp Thu Sep 22 15:54:24 2016 +0530 +++ b/source/x265-extras.cpp Sat Sep 24 17:50:17 2016 +0530 @@ -64,6 +64,8 @@ fprintf(csvfp, "Encode Order, Type, POC, QP, Bits, Scenecut, "); if (param.rc.rateControlMode == X265_RC_CRF) fprintf(csvfp, "RateFactor, "); + if (param.rc.vbvBufferSize) + fprintf(csvfp, "BufferFill, "); if (param.bEnablePsnr) fprintf(csvfp, "Y PSNR, U PSNR, V PSNR, YUV PSNR, "); if (param.bEnableSsim) @@ -132,6 +134,8 @@ fprintf(csvfp, "%d, %c-SLICE, %4d, %2.2lf, %10d, %d,", frameStats->encoderOrder, frameStats->sliceType, frameStats->poc, frameStats->qp, (int)frameStats->bits, frameStats->bScenecut); if (param.rc.rateControlMode == X265_RC_CRF) fprintf(csvfp, "%.3lf,", frameStats->rateFactor); + if (param.rc.vbvBufferSize) + fprintf(csvfp, "%.3lf,", frameStats->bufferFill); if (param.bEnablePsnr) fprintf(csvfp, "%.3lf, %.3lf, %.3lf, %.3lf,", frameStats->psnrY, frameStats->psnrU, frameStats->psnrV, frameStats->psnr); if (param.bEnableSsim) diff -r d20b78d6d138 -r 9650164ef1a9 source/x265.h --- a/source/x265.h Thu Sep 22 15:54:24 2016 +0530 +++ b/source/x265.h Sat Sep 24 17:50:17 2016 +0530 @@ -137,6 +137,7 @@ double avgPsyEnergy; double avgResEnergy; double avgLumaLevel; + double bufferFill; uint64_t bits; int encoderOrder; int poc; _______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel