My decoder outputs a mfxFrameSurface1* (MFX_IOPATTERN_OUT_VIDEO_MEMORY) . Feeding one Encoder is simple and you basically just feed the mfxFrameSurface1* and off you go.
However since a session only supports one decoder/encoder/vpp adding another decoder to consume the mfxFrameSurface1* is not possible as I understand it.
I tried feeding the mfxFrameSurface1* to multiple encoders but then I get ->
intel_transcoder: /opt/src/msdk/_studio/mfx_lib/shared/src/mfx_h264_encode_vaapi.cpp:3026: virtual mfxStatus MfxHwH264Encode::VAAPIEncoder::Execute(mfxHDLPair, const MfxHwH264Encode::DdiTask&, mfxU32, const MfxHwH264Encode::PreAllocatedVector&): Assertion `0x00000000 == vaSts' failed.
I guess it's due to the other encoders are using the same buffer in other sessions.
So I realise the 'problem' is that i need som kind of buffer management between the Producer (decoder) and Consumers (Encoder / VPP).
Is there a copy mfxFrameSurface1*?
I've looked at the multi-transcode sample but it's several 100kb of code and just too complex to understand for me what it's doing and there is no 'simple' multi_transcode example available that i've found.
My system is :
bva info: VA-API version 1.10.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_9
libva info: va_openDriver() returns 0
Is there a simple up to date information about how to feed multiple consumers a mfxFrameSurface1* that resides in the video memory?
Thanks for helping,
Sorry for the late response. There seem to be 2 questions: multiple session and memory locking. Media SDK don't have specific memory locking APIs, so the general memory management should work.
For multi-session, would following document be helpful?