mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 12:32:29 +00:00
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:
parent
951bd01fbe
commit
a7dc407041
1 changed files with 8 additions and 1 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue