mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
msdkdec: avoid infinite loop
It is possible MFXVideoDECODE_DecodeFrameAsync returns MFX_ERR_INCOMPATIBLE_VIDEO_PARAM and this error can't be recovered by retrying MFXVideoDECODE_DecodeFrameAsync in some cases, so we need to limit the number of retries to avoid infinite loop. This fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/909
This commit is contained in:
parent
35cdefe2e0
commit
28a1b0c418
1 changed files with 5 additions and 2 deletions
|
@ -853,7 +853,7 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
|||
mfxSession session;
|
||||
mfxStatus status;
|
||||
GstMapInfo map_info;
|
||||
guint i;
|
||||
guint i, retry_err_incompatible = 0;
|
||||
gsize data_size;
|
||||
gboolean hard_reset = FALSE;
|
||||
|
||||
|
@ -1000,7 +1000,8 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
|||
|
||||
/* media-sdk requires complete reset since the surface is inadaquate to
|
||||
* do further decoding */
|
||||
if (status == MFX_ERR_INCOMPATIBLE_VIDEO_PARAM) {
|
||||
if (status == MFX_ERR_INCOMPATIBLE_VIDEO_PARAM &&
|
||||
retry_err_incompatible++ < 1) {
|
||||
/* MFX_ERR_INCOMPATIBLE_VIDEO_PARAM means the current mfx surface is not
|
||||
* suitable for the current frame, call MFXVideoDECODE_DecodeHeader to get
|
||||
* the current frame size then do memory re-allocation, otherwise
|
||||
|
@ -1021,6 +1022,8 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
|||
continue;
|
||||
}
|
||||
|
||||
retry_err_incompatible = 0;
|
||||
|
||||
if (G_LIKELY (status == MFX_ERR_NONE)
|
||||
|| (status == MFX_WRN_VIDEO_PARAM_CHANGED)) {
|
||||
thiz->next_task = (thiz->next_task + 1) % thiz->tasks->len;
|
||||
|
|
Loading…
Reference in a new issue