From 6287016a747d0ee9b94420e11d4aa31e4e355f2e Mon Sep 17 00:00:00 2001 From: Haihao Xiang Date: Mon, 11 Feb 2019 16:49:32 +0800 Subject: [PATCH] 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 --- sys/msdk/gstmsdkdec.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sys/msdk/gstmsdkdec.c b/sys/msdk/gstmsdkdec.c index 134459fab2..024aae44a9 100644 --- a/sys/msdk/gstmsdkdec.c +++ b/sys/msdk/gstmsdkdec.c @@ -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 */