msdk: Allocation issues in msdkvpp
Simple demo:
$ gst-launch-1.0 videotestsrc is-live=true ! msdkvpp ! 'video/x-raw(memory:DMABuf),format=NV12' ! fakesink
libva info: VA-API version 1.8.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_8
libva info: va_openDriver() returns 0
Setting pipeline to PAUSED ...
libva info: VA-API version 1.8.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_8
libva info: va_openDriver() returns 0
Pipeline is live and does not need PREROLL ...
Got context from element 'msdkvpp0': gst.msdk.Context=context, gst.msdk.Context=(GstMsdkContext)"\(GstMsdkContext\)\ msdkcontext1";
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:00.049755289 6627 0x5608bbb2cc60 WARN videopool gstvideopool.c:192:video_buffer_pool_set_config:<msdkbufferpool0> allocation params alignment 31 is smaller than the max specified video stride alignment 127, fixing
0:00:00.049896573 6627 0x5608bbb2cc60 ERROR default gstmsdkallocator_libva.c:180:gst_msdk_frame_alloc: Failed to export surface
0:00:00.049922086 6627 0x5608bbb2cc60 ERROR default gstmsdkvideomemory.c:573:gst_msdk_dmabuf_allocator_new: Failed to get the cached alloc response
0:00:00.049939913 6627 0x5608bbb2cc60 WARN basetransform gstbasetransform.c:995:gst_base_transform_do_bufferpool:<msdkvpp0> Subclass failed to decide allocation
0:00:00.050080290 6627 0x5608bbb2cc60 ERROR default gstmsdkallocator_libva.c:180:gst_msdk_frame_alloc: Failed to export surface
0:00:00.050104647 6627 0x5608bbb2cc60 ERROR default gstmsdkvideomemory.c:573:gst_msdk_dmabuf_allocator_new: Failed to get the cached alloc response
0:00:00.050116938 6627 0x5608bbb2cc60 WARN basetransform gstbasetransform.c:995:gst_base_transform_do_bufferpool:<msdkvpp0> Subclass failed to decide allocation
0:00:00.050124689 6627 0x5608bbb2cc60 WARN GST_PADS gstpad.c:4303:gst_pad_peer_query:<videotestsrc0:src> could not send sticky events
0:00:00.051351704 6627 0x5608bbb2cc60 ERROR default gstmsdkallocator_libva.c:180:gst_msdk_frame_alloc: Failed to export surface
0:00:00.051376131 6627 0x5608bbb2cc60 ERROR default gstmsdkvideomemory.c:573:gst_msdk_dmabuf_allocator_new: Failed to get the cached alloc response
0:00:00.051387617 6627 0x5608bbb2cc60 WARN basetransform gstbasetransform.c:995:gst_base_transform_do_bufferpool:<msdkvpp0> Subclass failed to decide allocation
0:00:00.051492544 6627 0x5608bbb2cc60 ERROR default gstmsdkallocator_libva.c:180:gst_msdk_frame_alloc: Failed to export surface
0:00:00.051512143 6627 0x5608bbb2cc60 ERROR default gstmsdkvideomemory.c:573:gst_msdk_dmabuf_allocator_new: Failed to get the cached alloc response
0:00:00.051522481 6627 0x5608bbb2cc60 WARN basetransform gstbasetransform.c:995:gst_base_transform_do_bufferpool:<msdkvpp0> Subclass failed to decide allocation
0:00:00.051533213 6627 0x5608bbb2cc60 WARN basesrc gstbasesrc.c:3127:gst_base_src_loop:<videotestsrc0> error: Internal data stream error.
0:00:00.051538367 6627 0x5608bbb2cc60 WARN basesrc gstbasesrc.c:3127:gst_base_src_loop:<videotestsrc0> error: streaming stopped, reason not-negotiated (-4)
ERROR: from element /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data stream error.
Additional debug info:
../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.005457362
Setting pipeline to NULL ...
0:00:00.051902643 6627 0x5608bbb2cc60 ERROR default gstmsdkallocator_libva.c:180:gst_msdk_frame_alloc: Failed to export surface
0:00:00.051924788 6627 0x5608bbb2cc60 ERROR default gstmsdkvideomemory.c:573:gst_msdk_dmabuf_allocator_new: Failed to get the cached alloc response
0:00:00.051936708 6627 0x5608bbb2cc60 WARN basetransform gstbasetransform.c:995:gst_base_transform_do_bufferpool:<msdkvpp0> Subclass failed to decide allocation
Freeing pipeline ...
The requirement is to have another pipeline with msdkh264enc
running as an example, doesn't even have to be the same process.
It is running on Ubuntu 20.04 host inside of Ubuntu 20.10-based container.
Software versions:
- [host] linux kernel is 5.4.0-54-generic (or very similar, Ubuntu 20.04 stock version)
- [container] intel-media-va-driver-non-free 20.2.0+ds1-1
- [container] mesa 20.2.6-0ubuntu0.20.10.1 (as in Ubuntu 20.10's updates repo)
- [container] libdrm 2.4.102-1ubuntu1
- [container] libva 2.8.0-1
Edited by Nazar Mokrynskyi