From ce97fa934927122b4bc942b41394b6df42b44e32 Mon Sep 17 00:00:00 2001 From: Sajeesh Sidharthan Date: Fri, 11 Nov 2022 07:17:56 -0800 Subject: [PATCH] frontends/va: set vbv buffer size same as target bitrate in cbr mode video buffering verifier (vbv) buffer size must be set same as target bitrate to achieve constant bitrate. Signed-off-by: Sajeesh Sidharthan Reviewed-by: Boyuan Zhang Reviewed-by: Ruijing Dong Reviewed-by: Veerabadhran Gopalakrishnan Reviewed-by: Sil Vilerino Part-of: --- src/gallium/frontends/va/picture_h264_enc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/frontends/va/picture_h264_enc.c b/src/gallium/frontends/va/picture_h264_enc.c index 8c8256eff50..1f0e80887d9 100644 --- a/src/gallium/frontends/va/picture_h264_enc.c +++ b/src/gallium/frontends/va/picture_h264_enc.c @@ -252,12 +252,17 @@ vlVaHandleVAEncMiscParameterTypeRateControlH264(vlVaContext *context, VAEncMiscP context->desc.h264enc.rate_ctrl[temporal_id].fill_data_enable = !(rc->rc_flags.bits.disable_bit_stuffing); context->desc.h264enc.rate_ctrl[temporal_id].skip_frame_enable = !(rc->rc_flags.bits.disable_frame_skip); context->desc.h264enc.rate_ctrl[temporal_id].peak_bitrate = rc->bits_per_second; - if (context->desc.h264enc.rate_ctrl[temporal_id].target_bitrate < 2000000) - context->desc.h264enc.rate_ctrl[temporal_id].vbv_buffer_size = + + if ((context->desc.h264enc.rate_ctrl[0].rate_ctrl_method == PIPE_H2645_ENC_RATE_CONTROL_METHOD_CONSTANT) || + (context->desc.h264enc.rate_ctrl[0].rate_ctrl_method == PIPE_H2645_ENC_RATE_CONTROL_METHOD_CONSTANT_SKIP)) + context->desc.h264enc.rate_ctrl[temporal_id].vbv_buffer_size = + context->desc.h264enc.rate_ctrl[temporal_id].target_bitrate; + else if (context->desc.h264enc.rate_ctrl[temporal_id].target_bitrate < 2000000) + context->desc.h264enc.rate_ctrl[temporal_id].vbv_buffer_size = MIN2((context->desc.h264enc.rate_ctrl[0].target_bitrate * 2.75), 2000000); else context->desc.h264enc.rate_ctrl[temporal_id].vbv_buffer_size = - context->desc.h264enc.rate_ctrl[0].target_bitrate; + context->desc.h264enc.rate_ctrl[temporal_id].target_bitrate; context->desc.h264enc.rate_ctrl[temporal_id].max_qp = rc->max_qp; context->desc.h264enc.rate_ctrl[temporal_id].min_qp = rc->min_qp;