summaryrefslogtreecommitdiff
path: root/gst-libs/gst
diff options
context:
space:
mode:
authorU. Artie Eoff <ullysses.a.eoff@intel.com>2020-03-19 11:19:18 -0700
committerU. Artie Eoff <ullysses.a.eoff@intel.com>2020-03-19 12:09:03 -0700
commit861b4cc4b63aab197c2ec60448e80a4e6bd0c37c (patch)
treea43c86dd507c07d98cf6d53094ed7d0177b0a73c /gst-libs/gst
parent61516dd5e19a13ef6790795e6ab496be935be338 (diff)
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.
Diffstat (limited to 'gst-libs/gst')
-rw-r--r--gst-libs/gst/vaapi/gstvaapiencoder.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapiencoder.c b/gst-libs/gst/vaapi/gstvaapiencoder.c
index 1184fc80..bc2584b9 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);