msdkdec: hold a reference for the surfaces locked by msdk
authorXu Guangxin <guangxin.xu@intel.com>
Thu, 14 May 2020 03:03:49 +0000 (11:03 +0800)
committerHaihao Xiang <haihao.xiang@intel.com>
Mon, 15 Jun 2020 02:46:53 +0000 (02:46 +0000)
commit610e477565b13ca300d03d95d21857187d00b84a
tree80abc3a88b2b35a9a19ef4690a39baa02ad3f2a5
parent3cf0abddbb2d56860bffc3d5e48930f048bfa672
msdkdec: hold a reference for the surfaces locked by msdk

previous code releases GstBuffer too earlier. so we will see

ERROR                default gstmsdkvideomemory.c:77:gst_msdk_video_allocator_get_surface: failed to get surface available
ERROR         msdkbufferpool gstmsdkbufferpool.c:270:gst_msdk_buffer_pool_alloc_buffer:<msdkbufferpool0> failed to create new MSDK memory

We need to hold GstBuffer reference for msdk if the surfaced locked by msdk.

step to reproduce.
1. ffmpeg -f lavfi -i testsrc=duration=10:size=320x240:rate=30 -pix_fmt yuv420p -c:v libx265 test.265
2. GST_GL_PLATFORM=egl  gst-launch-1.0 -v filesrc location=test.265  ! h265parse ! msdkh265dec  ! queue ! glimagesink

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1277>
sys/msdk/gstmsdkdec.c
sys/msdk/gstmsdkdec.h
sys/msdk/gstmsdkvc1dec.c