msdkdec: make sure to use video memory on Linux
authorJulien Isorce <jisorce@oblong.com>
Wed, 18 Dec 2019 00:10:53 +0000 (16:10 -0800)
committerHaihao Xiang <haihao.xiang@intel.com>
Fri, 3 Jan 2020 07:08:23 +0000 (07:08 +0000)
commita1584b6f99caaf61812ac6a9654ec0e6da8240da
tree6bb6616d0831ccaeff3cec2a437b84e54e973039
parentb88af2e4fef0b62754696b99e52faa25dd9e4acd
msdkdec: make sure to use video memory on Linux

The block that sets use_video_memory flag is after the
the condition `if gst_msdk_context_prepare` but it
always returns false when there is no other msdk elements.
So the decoder ends up with use_video_memory as FALSE.
Note that msdkvpp always set use_video_memory as TRUE.

When use_video_memory is FALSE then the msdkdec allocates
the output frames with posix_memalign (see gstmsdksystemmemory.c).
The result is then copied back to the GstVideoPool's buffers
(or to the downstream pool's buffers if any).
When use_video_memory is TRUE then the msdkdec uses vaCreateSurfaces
to create vaapi surfaces for the hw decoder to decode into
(see gstmsdkvideomemory.c). The result is then copied to either
the internal GstVideoPool and to the downstream pool if any.
(vaDeriveImage/vaMapBuffer is used in order to read the surfaces)
sys/msdk/gstmsdkdec.c