diff --git a/src/gallium/frontends/va/context.c b/src/gallium/frontends/va/context.c index 96f209d1ee3..b95aa7ddbd1 100644 --- a/src/gallium/frontends/va/context.c +++ b/src/gallium/frontends/va/context.c @@ -378,17 +378,45 @@ vlVaCreateContext(VADriverContextP ctx, VAConfigID config_id, int picture_width, if (config->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) { switch (u_reduce_video_profile(context->templat.profile)) { case PIPE_VIDEO_FORMAT_MPEG4_AVC: - context->desc.h264enc.rate_ctrl[0].rate_ctrl_method = config->rc; + for (unsigned i = 0; i < ARRAY_SIZE(context->desc.h264enc.rate_ctrl); i++) { + context->desc.h264enc.rate_ctrl[i].rate_ctrl_method = config->rc; + context->desc.h264enc.rate_ctrl[i].vbv_buffer_size = 20000000; + context->desc.h264enc.rate_ctrl[i].vbv_buf_lv = 64; + context->desc.h264enc.rate_ctrl[i].fill_data_enable = 1; + context->desc.h264enc.rate_ctrl[i].enforce_hrd = 1; + context->desc.h264enc.rate_ctrl[i].max_qp = 51; + context->desc.h264enc.rate_ctrl[i].frame_rate_num = 30; + context->desc.h264enc.rate_ctrl[i].frame_rate_den = 1; + } context->desc.h264enc.frame_idx = util_hash_table_create_ptr_keys(); util_dynarray_init(&context->desc.h264enc.raw_headers, NULL); break; case PIPE_VIDEO_FORMAT_HEVC: - context->desc.h265enc.rc[0].rate_ctrl_method = config->rc; + for (unsigned i = 0; i < ARRAY_SIZE(context->desc.h265enc.rc); i++) { + context->desc.h265enc.rc[i].rate_ctrl_method = config->rc; + context->desc.h265enc.rc[i].vbv_buffer_size = 20000000; + context->desc.h265enc.rc[i].vbv_buf_lv = 64; + context->desc.h265enc.rc[i].fill_data_enable = 1; + context->desc.h265enc.rc[i].enforce_hrd = 1; + context->desc.h265enc.rc[i].max_qp = 51; + context->desc.h265enc.rc[i].frame_rate_num = 30; + context->desc.h265enc.rc[i].frame_rate_den = 1; + } context->desc.h265enc.frame_idx = util_hash_table_create_ptr_keys(); util_dynarray_init(&context->desc.h265enc.raw_headers, NULL); break; case PIPE_VIDEO_FORMAT_AV1: - context->desc.av1enc.rc[0].rate_ctrl_method = config->rc; + for (unsigned i = 0; i < ARRAY_SIZE(context->desc.av1enc.rc); i++) { + context->desc.av1enc.rc[i].rate_ctrl_method = config->rc; + context->desc.av1enc.rc[i].vbv_buffer_size = 20000000; + context->desc.av1enc.rc[i].vbv_buf_lv = 64; + context->desc.av1enc.rc[i].fill_data_enable = 1; + context->desc.av1enc.rc[i].enforce_hrd = 1; + context->desc.av1enc.rc[i].max_qp = 255; + context->desc.av1enc.rc[i].min_qp = 1; + context->desc.av1enc.rc[i].frame_rate_num = 30; + context->desc.av1enc.rc[i].frame_rate_den = 1; + } break; default: break; diff --git a/src/gallium/frontends/va/picture.c b/src/gallium/frontends/va/picture.c index ebf35fc9a65..f00d33edfe8 100644 --- a/src/gallium/frontends/va/picture.c +++ b/src/gallium/frontends/va/picture.c @@ -1280,17 +1280,6 @@ vlVaEndPicture(VADriverContextP ctx, VAContextID context_id) if (u_reduce_video_profile(context->templat.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) context->desc.h264enc.frame_num_cnt++; - /* keep other path the same way */ - if (!screen->get_video_param(screen, context->templat.profile, - context->decoder->entrypoint, - PIPE_VIDEO_CAP_ENC_QUALITY_LEVEL)) { - - if (u_reduce_video_profile(context->templat.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) - getEncParamPresetH264(context); - else if (u_reduce_video_profile(context->templat.profile) == PIPE_VIDEO_FORMAT_HEVC) - getEncParamPresetH265(context); - } - if (surf->efc_surface) { assert(surf == drv->last_efc_surface); context->target = surf->efc_surface->buffer; diff --git a/src/gallium/frontends/va/picture_av1_enc.c b/src/gallium/frontends/va/picture_av1_enc.c index 1d5d21a79be..5c3b746df01 100644 --- a/src/gallium/frontends/va/picture_av1_enc.c +++ b/src/gallium/frontends/va/picture_av1_enc.c @@ -114,12 +114,6 @@ VAStatus vlVaHandleVAEncSequenceParameterBufferTypeAV1(vlVaDriver *drv, vlVaCont if (!context->decoder) return VA_STATUS_ERROR_ALLOCATION_FAILED; - - getEncParamPresetAV1(context); - context->desc.av1enc.intra_refresh.mode = INTRA_REFRESH_MODE_NONE; - context->desc.av1enc.intra_refresh.offset = 0; - context->desc.av1enc.intra_refresh.region_size = 0; - context->desc.av1enc.intra_refresh.need_sequence_header = 0; } context->desc.av1enc.seq.tier = av1->seq_tier; @@ -865,40 +859,6 @@ vlVaHandleVAEncMiscParameterTypeFrameRateAV1(vlVaContext *context, VAEncMiscPara return VA_STATUS_SUCCESS; } -void getEncParamPresetAV1(vlVaContext *context) -{ - for (int i = 0; i < ARRAY_SIZE(context->desc.av1enc.rc); i++) { - struct pipe_av1_enc_rate_control *rc = &context->desc.av1enc.rc[i]; - - rc->vbv_buffer_size = 20000000; - rc->vbv_buf_lv = 48; - rc->fill_data_enable = 1; - rc->enforce_hrd = 1; - rc->max_qp = 255; - rc->min_qp = 1; - - if (rc->frame_rate_num == 0 || - rc->frame_rate_den == 0) { - rc->frame_rate_num = 30; - rc->frame_rate_den = 1; - } - - if (rc->target_bitrate == 0) - rc->target_bitrate = 20 * 1000000; - - if (rc->peak_bitrate == 0) - rc->peak_bitrate = rc->target_bitrate * 3 / 2; - - rc->target_bits_picture = rc->target_bitrate * rc->frame_rate_den / - rc->frame_rate_num; - - rc->peak_bits_picture_integer = rc->peak_bitrate * rc->frame_rate_den / - rc->frame_rate_num; - - rc->peak_bits_picture_fraction = 0; - } -} - VAStatus vlVaHandleVAEncSliceParameterBufferTypeAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) { VAEncTileGroupBufferAV1 *tile_buf = (VAEncTileGroupBufferAV1*) buf->data; diff --git a/src/gallium/frontends/va/picture_h264_enc.c b/src/gallium/frontends/va/picture_h264_enc.c index 215f8137a3f..65c89ffcfd2 100644 --- a/src/gallium/frontends/va/picture_h264_enc.c +++ b/src/gallium/frontends/va/picture_h264_enc.c @@ -252,19 +252,6 @@ vlVaHandleVAEncSequenceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *con surf->buffer = context->decoder->create_dpb_buffer(context->decoder, &context->desc.base, &surf->templat); dpb->buffer = surf->buffer; } - - 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_refresh.mode = INTRA_REFRESH_MODE_NONE; - context->desc.h264enc.intra_refresh.offset = 0; - context->desc.h264enc.intra_refresh.region_size = 0; - context->desc.h264enc.intra_refresh.need_sequence_header = 0; } context->desc.h264enc.ip_period = h264->ip_period; @@ -881,23 +868,3 @@ vlVaHandleVAEncMiscParameterTypeHRDH264(vlVaContext *context, VAEncMiscParameter return VA_STATUS_SUCCESS; } - -void getEncParamPresetH264(vlVaContext *context) -{ - //rate control - 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; - context->desc.h264enc.rate_ctrl[0].frame_rate_den = 1; - } - context->desc.h264enc.rate_ctrl[0].target_bits_picture = - context->desc.h264enc.rate_ctrl[0].target_bitrate * - ((float)context->desc.h264enc.rate_ctrl[0].frame_rate_den / - context->desc.h264enc.rate_ctrl[0].frame_rate_num); - context->desc.h264enc.rate_ctrl[0].peak_bits_picture_integer = - context->desc.h264enc.rate_ctrl[0].peak_bitrate * - ((float)context->desc.h264enc.rate_ctrl[0].frame_rate_den / - context->desc.h264enc.rate_ctrl[0].frame_rate_num); - - context->desc.h264enc.rate_ctrl[0].peak_bits_picture_fraction = 0; -} diff --git a/src/gallium/frontends/va/picture_hevc_enc.c b/src/gallium/frontends/va/picture_hevc_enc.c index 593de873aa4..29b1697f6d0 100644 --- a/src/gallium/frontends/va/picture_hevc_enc.c +++ b/src/gallium/frontends/va/picture_hevc_enc.c @@ -252,18 +252,6 @@ vlVaHandleVAEncSequenceParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *con surf->buffer = context->decoder->create_dpb_buffer(context->decoder, &context->desc.base, &surf->templat); dpb->buffer = surf->buffer; } - - getEncParamPresetH265(context); - context->desc.h265enc.rc[0].vbv_buffer_size = 20000000; - context->desc.h265enc.rc[0].vbv_buf_lv = 48; - context->desc.h265enc.rc[0].fill_data_enable = 1; - context->desc.h265enc.rc[0].enforce_hrd = 1; - context->desc.h265enc.rc[0].max_qp = 51; - context->desc.h265enc.rc[0].min_qp = 0; - context->desc.h265enc.intra_refresh.mode = INTRA_REFRESH_MODE_NONE; - context->desc.h265enc.intra_refresh.offset = 0; - context->desc.h265enc.intra_refresh.region_size = 0; - context->desc.h265enc.intra_refresh.need_sequence_header = 0; } context->desc.h265enc.seq.general_profile_idc = h265->general_profile_idc; @@ -1172,23 +1160,3 @@ vlVaHandleVAEncMiscParameterTypeTemporalLayerHEVC(vlVaContext *context, VAEncMis return VA_STATUS_SUCCESS; } - -void getEncParamPresetH265(vlVaContext *context) -{ - //rate control - if (context->desc.h265enc.rc[0].frame_rate_num == 0 || - context->desc.h265enc.rc[0].frame_rate_den == 0) { - context->desc.h265enc.rc[0].frame_rate_num = 30; - context->desc.h265enc.rc[0].frame_rate_den = 1; - } - context->desc.h265enc.rc[0].target_bits_picture = - context->desc.h265enc.rc[0].target_bitrate * - ((float)context->desc.h265enc.rc[0].frame_rate_den / - context->desc.h265enc.rc[0].frame_rate_num); - context->desc.h265enc.rc[0].peak_bits_picture_integer = - context->desc.h265enc.rc[0].peak_bitrate * - ((float)context->desc.h265enc.rc[0].frame_rate_den / - context->desc.h265enc.rc[0].frame_rate_num); - - context->desc.h265enc.rc[0].peak_bits_picture_fraction = 0; -} diff --git a/src/gallium/frontends/va/va_private.h b/src/gallium/frontends/va/va_private.h index ef6f52652aa..a2304bd559d 100644 --- a/src/gallium/frontends/va/va_private.h +++ b/src/gallium/frontends/va/va_private.h @@ -595,9 +595,6 @@ void vlVaHandleSliceParameterBufferVP9(vlVaContext *context, vlVaBuffer *buf); void vlVaDecoderVP9BitstreamHeader(vlVaContext *context, vlVaBuffer *buf); void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); void vlVaHandleSliceParameterBufferAV1(vlVaContext *context, vlVaBuffer *buf); -void getEncParamPresetH264(vlVaContext *context); -void getEncParamPresetH265(vlVaContext *context); -void getEncParamPresetAV1(vlVaContext *context); void vlVaHandleVAEncMiscParameterTypeQualityLevel(struct pipe_enc_quality_modes *p, vlVaQualityBits *in); VAStatus vlVaHandleVAEncPictureParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); VAStatus vlVaHandleVAEncSliceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf);