msdkdec: release the occupied surface for MFX_WRN_DEVICE_BUSY

When MFXVideoDECODE_DecodeFrameAsync () returns MFX_WRN_DEVICE_BUSY with
an output surface, a new input surface is required when retrying
MFXVideoDECODE_DecodeFrameAsync ().

This fixes the out-of-surface issue mentioned in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/890
This commit is contained in:
Haihao Xiang 2019-02-11 16:49:32 +08:00 committed by Víctor Manuel Jáquez Leal
parent fffb3f628d
commit 6287016a74

View file

@ -1041,6 +1041,12 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
/* If device is busy, wait 1ms and retry, as per MSDK's recomendation */
g_usleep (1000);
if (task->surface &&
task->surface == surface->surface && !task->sync_point) {
free_surface (thiz, surface);
surface = NULL;
}
/* If the current surface is still busy, we should do sync oepration
* then tries to decode again
*/