# HG changeset patch # User Snehaa Giridharan <sne...@multicorewareinc.com> # Date 1575548701 -19800 # Thu Dec 05 17:55:01 2019 +0530 # Node ID 495e78dfd32bcdeee0c48a8732eba135be12cb8e # Parent ce3a4929efca3034bce12b7449d73ed2e03f9b4d zone: Fix BufferRate mismatch and log unclipped BufferFillFinal into csv
This commit fixes - Mismatch in BufferRate - Log UnclippedBufferFillFinal into csv when csvloglevel greater than 1 diff --git a/doc/reST/cli.rst b/doc/reST/cli.rst --- a/doc/reST/cli.rst +++ b/doc/reST/cli.rst @@ -107,6 +107,9 @@ **BufferFillFinal** Buffer bits available after removing the frame out of CPB. + **UnclippedBufferFillFinal** Unclipped buffer bits available after removing the frame + out of CPB only used for csv logging purpose. + **Latency** Latency in terms of number of frames between when the frame was given in and when the frame is given out. diff --git a/source/encoder/api.cpp b/source/encoder/api.cpp --- a/source/encoder/api.cpp +++ b/source/encoder/api.cpp @@ -1294,6 +1294,8 @@ fprintf(csvfp, "RateFactor, "); if (param->rc.vbvBufferSize) fprintf(csvfp, "BufferFill, BufferFillFinal, "); + if (param->csvLogLevel >= 2) + fprintf(csvfp, "UnclippedBufferFillFinal, "); if (param->bEnablePsnr) fprintf(csvfp, "Y PSNR, U PSNR, V PSNR, YUV PSNR, "); if (param->bEnableSsim) @@ -1405,6 +1407,8 @@ fprintf(param->csvfpt, "%.3lf,", frameStats->rateFactor); if (param->rc.vbvBufferSize) fprintf(param->csvfpt, "%.3lf, %.3lf,", frameStats->bufferFill, frameStats->bufferFillFinal); + if (param->csvLogLevel >= 2) + fprintf(param->csvfpt, "%.3lf,", frameStats->unclippedBufferFillFinal); if (param->bEnablePsnr) fprintf(param->csvfpt, "%.3lf, %.3lf, %.3lf, %.3lf,", frameStats->psnrY, frameStats->psnrU, frameStats->psnrV, frameStats->psnr); if (param->bEnableSsim) diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp --- a/source/encoder/encoder.cpp +++ b/source/encoder/encoder.cpp @@ -3012,6 +3012,8 @@ frameStats->ipCostRatio = curFrame->m_lowres.ipCostRatio; frameStats->bufferFill = m_rateControl->m_bufferFillActual; frameStats->bufferFillFinal = m_rateControl->m_bufferFillFinal; + if (m_param->csvLogLevel >= 2) + frameStats->unclippedBufferFillFinal = m_rateControl->m_unclippedBufferFillFinal; frameStats->frameLatency = inPoc - poc; if (m_param->rc.rateControlMode == X265_RC_CRF) frameStats->rateFactor = curEncData.m_rateFactor; diff --git a/source/encoder/ratecontrol.cpp b/source/encoder/ratecontrol.cpp --- a/source/encoder/ratecontrol.cpp +++ b/source/encoder/ratecontrol.cpp @@ -2745,7 +2745,9 @@ x265_log(m_param, X265_LOG_WARNING, "poc:%d, VBV underflow (%.0f bits)\n", rce->poc, m_bufferFillFinal); m_bufferFillFinal = X265_MAX(m_bufferFillFinal, 0); - m_bufferFillFinal += m_bufferRate; + m_bufferFillFinal += rce->bufferRate; + if (m_param->csvLogLevel >= 2) + m_unclippedBufferFillFinal = m_bufferFillFinal; if (m_param->rc.bStrictCbr) { @@ -2755,14 +2757,14 @@ filler += FILLER_OVERHEAD * 8; } m_bufferFillFinal -= filler; - bufferBits = X265_MIN(bits + filler + m_bufferExcess, m_bufferRate); + bufferBits = X265_MIN(bits + filler + m_bufferExcess, rce->bufferRate); m_bufferExcess = X265_MAX(m_bufferExcess - bufferBits + bits + filler, 0); m_bufferFillActual += bufferBits - bits - filler; } else { m_bufferFillFinal = X265_MIN(m_bufferFillFinal, m_bufferSize); - bufferBits = X265_MIN(bits + m_bufferExcess, m_bufferRate); + bufferBits = X265_MIN(bits + m_bufferExcess, rce->bufferRate); m_bufferExcess = X265_MAX(m_bufferExcess - bufferBits + bits, 0); m_bufferFillActual += bufferBits - bits; m_bufferFillActual = X265_MIN(m_bufferFillActual, m_bufferSize); diff --git a/source/encoder/ratecontrol.h b/source/encoder/ratecontrol.h --- a/source/encoder/ratecontrol.h +++ b/source/encoder/ratecontrol.h @@ -157,6 +157,7 @@ double m_rateFactorConstant; double m_bufferSize; double m_bufferFillFinal; /* real buffer as of the last finished frame */ + double m_unclippedBufferFillFinal; /* real unclipped buffer as of the last finished frame used to log in CSV*/ double m_bufferFill; /* planned buffer, if all in-progress frames hit their bit budget */ double m_bufferRate; /* # of bits added to buffer_fill after each frame */ double m_vbvMaxRate; /* in kbps */ diff --git a/source/x265.h b/source/x265.h --- a/source/x265.h +++ b/source/x265.h @@ -304,6 +304,7 @@ double totalFrameTime; double vmafFrameScore; double bufferFillFinal; + double unclippedBufferFillFinal; } x265_frame_stats; typedef struct x265_ctu_info_t -- *Thanks and Regards,* *Snehaa.G*
Fix BufferRate mismatch and log unclipped BufferFillFinal into csv.diff
Description: Binary data
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel