From 861b4cc4b63aab197c2ec60448e80a4e6bd0c37c Mon Sep 17 00:00:00 2001 From: "U. Artie Eoff" Date: Thu, 19 Mar 2020 11:19:18 -0700 Subject: [PATCH] libs: encoder: set VA HRD param before RC param This is a workaround for intel-media-driver bug https://github.com/intel/media-driver/issues/865 The driver will force the RC method to CBR for HEVCe when it parses the HRD param. Thus, any RC method param submitted "prior" to the HRD param will be lost. Therefore, VBR, ICQ and QVBR for HEVCe can't be effectively enabled if the RC method param "precedes" the HRD param. To work around this issue, set the HRD param before the RC method param so the driver will parse the RC method param "after" the HRD param. Afaict, other codecs in the driver (and other drivers) do not appear to be dependent on the order of HRD and RC param submission. --- gst-libs/gst/vaapi/gstvaapiencoder.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapiencoder.c b/gst-libs/gst/vaapi/gstvaapiencoder.c index 1184fc8..bc2584b 100644 --- a/gst-libs/gst/vaapi/gstvaapiencoder.c +++ b/gst-libs/gst/vaapi/gstvaapiencoder.c @@ -63,21 +63,21 @@ gst_vaapi_encoder_ensure_param_control_rate (GstVaapiEncoder * encoder, if (GST_VAAPI_ENCODER_RATE_CONTROL (encoder) == GST_VAAPI_RATECONTROL_CQP) return TRUE; - /* RateControl params */ - misc = GST_VAAPI_ENC_MISC_PARAM_NEW (RateControl, encoder); + /* HRD params */ + misc = GST_VAAPI_ENC_MISC_PARAM_NEW (HRD, encoder); if (!misc) return FALSE; - memcpy (misc->data, &GST_VAAPI_ENCODER_VA_RATE_CONTROL (encoder), - sizeof (VAEncMiscParameterRateControl)); + memcpy (misc->data, &GST_VAAPI_ENCODER_VA_HRD (encoder), + sizeof (VAEncMiscParameterHRD)); gst_vaapi_enc_picture_add_misc_param (picture, misc); gst_vaapi_codec_object_replace (&misc, NULL); - /* HRD params */ - misc = GST_VAAPI_ENC_MISC_PARAM_NEW (HRD, encoder); + /* RateControl params */ + misc = GST_VAAPI_ENC_MISC_PARAM_NEW (RateControl, encoder); if (!misc) return FALSE; - memcpy (misc->data, &GST_VAAPI_ENCODER_VA_HRD (encoder), - sizeof (VAEncMiscParameterHRD)); + memcpy (misc->data, &GST_VAAPI_ENCODER_VA_RATE_CONTROL (encoder), + sizeof (VAEncMiscParameterRateControl)); gst_vaapi_enc_picture_add_misc_param (picture, misc); gst_vaapi_codec_object_replace (&misc, NULL); -- 2.7.4