decoder: vp9: Fix ref picture update while doing repeat frame

Don't try to do frame decoding and reference picture update
while receiving a vp9 frame having show_existing_frame flag
set as TRUE.
This commit is contained in:
Sreerenj Balachandran 2015-11-16 18:22:14 +02:00
parent 247896884b
commit 26f895f4a8

View file

@ -422,8 +422,12 @@ decode_picture (GstVaapiDecoderVp9 * decoder, const guchar * buf,
GST_ERROR ("Failed to create clone picture"); GST_ERROR ("Failed to create clone picture");
return GST_VAAPI_DECODER_STATUS_ERROR_ALLOCATION_FAILED; return GST_VAAPI_DECODER_STATUS_ERROR_ALLOCATION_FAILED;
} }
is_clone_pic = TRUE; 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 { } else {
/* Create new picture */ /* Create new picture */
picture = GST_VAAPI_PICTURE_NEW (VP9, decoder); picture = GST_VAAPI_PICTURE_NEW (VP9, decoder);
@ -472,16 +476,21 @@ decode_current_picture (GstVaapiDecoderVp9 * decoder)
if (!picture) if (!picture)
return GST_VAAPI_DECODER_STATUS_SUCCESS; return GST_VAAPI_DECODER_STATUS_SUCCESS;
if (frame_hdr->show_existing_frame)
goto ret;
if (!gst_vaapi_picture_decode (picture)) if (!gst_vaapi_picture_decode (picture))
goto error; goto error;
update_ref_frames (decoder); update_ref_frames (decoder);
ret:
if (frame_hdr->show_frame) if (frame_hdr->show_frame)
if (!gst_vaapi_picture_output (picture)) if (!gst_vaapi_picture_output (picture))
goto error; goto error;
gst_vaapi_picture_replace (&priv->current_picture, NULL); gst_vaapi_picture_replace (&priv->current_picture, NULL);
return GST_VAAPI_DECODER_STATUS_SUCCESS; return GST_VAAPI_DECODER_STATUS_SUCCESS;
error: error: