frontends/va: Set default rate control values once when creating encoder

Move setting the default values from getEncParamPresetH264/5 as this
function is called on each frame which would result in overwriting
values set by application.

This fixes setting HRD parameters and max_qp/min_qp when
PIPE_VIDEO_CAP_ENC_QUALITY_LEVEL is not supported.

Cc: mesa-stable
Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25355>
This commit is contained in:
David Rosca
2023-09-23 15:49:55 +02:00
committed by Marge Bot
parent c970a9b663
commit dd2ef9a0e4
2 changed files with 13 additions and 14 deletions

View File

@@ -194,6 +194,13 @@ vlVaHandleVAEncSequenceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *con
return VA_STATUS_ERROR_ALLOCATION_FAILED;
getEncParamPresetH264(context);
context->desc.h264enc.rate_ctrl[0].vbv_buffer_size = 20000000;
context->desc.h264enc.rate_ctrl[0].vbv_buf_lv = 48;
context->desc.h264enc.rate_ctrl[0].fill_data_enable = 1;
context->desc.h264enc.rate_ctrl[0].enforce_hrd = 1;
context->desc.h264enc.rate_ctrl[0].max_qp = 51;
context->desc.h264enc.rate_ctrl[0].min_qp = 0;
context->desc.h264enc.enable_vui = false;
}
context->desc.h264enc.intra_idr_period =
@@ -494,13 +501,6 @@ vlVaHandleVAEncMiscParameterTypeHRDH264(vlVaContext *context, VAEncMiscParameter
void getEncParamPresetH264(vlVaContext *context)
{
//rate control
context->desc.h264enc.rate_ctrl[0].vbv_buffer_size = 20000000;
context->desc.h264enc.rate_ctrl[0].vbv_buf_lv = 48;
context->desc.h264enc.rate_ctrl[0].fill_data_enable = 1;
context->desc.h264enc.rate_ctrl[0].enforce_hrd = 1;
context->desc.h264enc.rate_ctrl[0].max_qp = 51;
context->desc.h264enc.rate_ctrl[0].min_qp = 0;
context->desc.h264enc.enable_vui = false;
if (context->desc.h264enc.rate_ctrl[0].frame_rate_num == 0 ||
context->desc.h264enc.rate_ctrl[0].frame_rate_den == 0) {
context->desc.h264enc.rate_ctrl[0].frame_rate_num = 30;

View File

@@ -167,6 +167,12 @@ vlVaHandleVAEncSequenceParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *con
return VA_STATUS_ERROR_ALLOCATION_FAILED;
getEncParamPresetH265(context);
context->desc.h265enc.rc.vbv_buffer_size = 20000000;
context->desc.h265enc.rc.vbv_buf_lv = 48;
context->desc.h265enc.rc.fill_data_enable = 1;
context->desc.h265enc.rc.enforce_hrd = 1;
context->desc.h265enc.rc.max_qp = 51;
context->desc.h265enc.rc.min_qp = 0;
}
context->desc.h265enc.seq.general_profile_idc = h265->general_profile_idc;
@@ -503,13 +509,6 @@ vlVaHandleVAEncMiscParameterTypeHRDHEVC(vlVaContext *context, VAEncMiscParameter
void getEncParamPresetH265(vlVaContext *context)
{
//rate control
context->desc.h265enc.rc.vbv_buffer_size = 20000000;
context->desc.h265enc.rc.vbv_buf_lv = 48;
context->desc.h265enc.rc.fill_data_enable = 1;
context->desc.h265enc.rc.enforce_hrd = 1;
context->desc.h265enc.rc.max_qp = 51;
context->desc.h265enc.rc.min_qp = 0;
if (context->desc.h265enc.rc.frame_rate_num == 0 ||
context->desc.h265enc.rc.frame_rate_den == 0) {
context->desc.h265enc.rc.frame_rate_num = 30;