libs: decoder: vp9: avoid reference rewriting
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Mon, 19 Oct 2020 11:42:53 +0000 (13:42 +0200)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Mon, 19 Oct 2020 11:42:53 +0000 (13:42 +0200)
The removed code set all the reference frames to the current frame it is a key
one, but later, all the reference frames were rewritten with the decoded picture
buffers or VA_INVALID_SURFACE if they were not available.

Basically, all this time the first reference frame assignment has been ignored,
and it's not described by the spec, and this patch removes that code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/400>

gst-libs/gst/vaapi/gstvaapidecoder_vp9.c

index 0f6a300..134a031 100644 (file)
@@ -303,11 +303,7 @@ vaapi_fill_ref_frames (GstVaapiDecoderVp9 * decoder, GstVaapiPicture * picture,
   GstVaapiDecoderVp9Private *const priv = &decoder->priv;
   guint i;
 
-  if (frame_hdr->frame_type == GST_VP9_KEY_FRAME) {
-    for (i = 0; i < G_N_ELEMENTS (priv->ref_frames); i++)
-      pic_param->reference_frames[i] = picture->surface_id;
-
-  } else {
+  if (frame_hdr->frame_type != GST_VP9_KEY_FRAME) {
     pic_param->pic_fields.bits.last_ref_frame =
         frame_hdr->ref_frame_indices[GST_VP9_REF_FRAME_LAST - 1];
     pic_param->pic_fields.bits.last_ref_frame_sign_bias =
@@ -321,6 +317,7 @@ vaapi_fill_ref_frames (GstVaapiDecoderVp9 * decoder, GstVaapiPicture * picture,
     pic_param->pic_fields.bits.alt_ref_frame_sign_bias =
         frame_hdr->ref_frame_sign_bias[GST_VP9_REF_FRAME_ALTREF - 1];
   }
+
   for (i = 0; i < G_N_ELEMENTS (priv->ref_frames); i++) {
     pic_param->reference_frames[i] = priv->ref_frames[i] ?
         priv->ref_frames[i]->surface_id : VA_INVALID_SURFACE;