msdkdec: fix surface leak in msdkdec_handle_frame

Can be reproduced with:
  videotestsrc ! x264enc key-int-max=$N ! \
  h264parse ! msdkh264dec ! fakesink sync=1

It happens with any gop size but the smaller is the distance N
between key frames, the quicker it is leaking.

Fixes #1023
This commit is contained in:
Julien Isorce 2019-11-18 14:26:31 -08:00
parent 951bd01fbe
commit a7dc407041

View file

@ -1085,8 +1085,15 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|| (status == MFX_WRN_VIDEO_PARAM_CHANGED)) {
thiz->next_task = (thiz->next_task + 1) % thiz->tasks->len;
if (surface->surface->Data.Locked > 0 || !thiz->use_video_memory)
if (surface->surface->Data.Locked > 0)
surface = NULL;
else if (!thiz->use_video_memory) {
/* The for loop will continue because DataLength is greater than 0 so
* free the surface right away if not in use. */
if (bitstream.DataLength > 0 && task->surface != surface->surface)
free_surface (thiz, surface);
surface = NULL;
}
if (bitstream.DataLength == 0) {
flow = GST_FLOW_OK;