decoder: vp9: Fix ref picture update while doing repeat frame
authorSreerenj Balachandran <sreerenj.balachandran@intel.com>
Mon, 16 Nov 2015 16:22:14 +0000 (18:22 +0200)
committerSreerenj Balachandran <sreerenj.balachandran@intel.com>
Mon, 16 Nov 2015 16:22:14 +0000 (18:22 +0200)
Don't try to do frame decoding and reference picture update
while receiving a vp9 frame having show_existing_frame flag
set as TRUE.

gst-libs/gst/vaapi/gstvaapidecoder_vp9.c

index 5309c490481c88d4cba58302c2c11b1c8845f54b..b97487a57c46bb76db5797c14b036ca888d07a93 100644 (file)
@@ -422,8 +422,12 @@ decode_picture (GstVaapiDecoderVp9 * decoder, const guchar * buf,
       GST_ERROR ("Failed to create clone picture");
       return GST_VAAPI_DECODER_STATUS_ERROR_ALLOCATION_FAILED;
     }
-
     is_clone_pic = TRUE;
+
+    /* for cloned picture we should always unset the skip flag since
+     * the previously decoded frame might be decode-only but repeat-frame
+     * should make it ready for display */
+    GST_VAAPI_PICTURE_FLAG_UNSET (picture, GST_VAAPI_PICTURE_FLAG_SKIPPED);
   } else {
     /* Create new picture */
     picture = GST_VAAPI_PICTURE_NEW (VP9, decoder);
@@ -472,16 +476,21 @@ decode_current_picture (GstVaapiDecoderVp9 * decoder)
   if (!picture)
     return GST_VAAPI_DECODER_STATUS_SUCCESS;
 
+  if (frame_hdr->show_existing_frame)
+    goto ret;
+
   if (!gst_vaapi_picture_decode (picture))
     goto error;
 
   update_ref_frames (decoder);
 
+ret:
   if (frame_hdr->show_frame)
     if (!gst_vaapi_picture_output (picture))
       goto error;
 
   gst_vaapi_picture_replace (&priv->current_picture, NULL);
+
   return GST_VAAPI_DECODER_STATUS_SUCCESS;
 
 error: