[x265] [PATCH] zone: Fix BufferRate mismatch and log unclipped BufferFillFinal into csv
Snehaa Giridharan
snehaa at multicorewareinc.com
Wed Feb 19 10:57:49 CET 2020
# HG changeset patch
# User Snehaa Giridharan <snehaa at 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*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20200219/ce95017c/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Fix BufferRate mismatch and log unclipped BufferFillFinal into csv.diff
Type: application/octet-stream
Size: 5083 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20200219/ce95017c/attachment-0001.obj>
More information about the x265-devel
mailing list