Media (Intel® oneAPI Video Processing Library, Intel Media SDK)
Access community support with transcoding, decoding, and encoding in applications using media tools from Intel. This includes Intel® oneAPI Video Processing Library and Intel® Media SDK.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
2905 Discussions

Using the output of a decoder (video_memory) in many encoders or vpp processors.

cedronius__anders
New Contributor I
517 Views

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 : 
Ubuntu 20.04
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
MSDK 1.34 

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,

/Anders


0 Kudos
1 Solution
Mark_L_Intel1
Moderator
413 Views

Hi Anders,


Did my answer solved your question?


Mark


View solution in original post

4 Replies
cedronius__anders
New Contributor I
510 Views

I meant to write ->  "adding another encoder to consume the  mfxFrameSurface1* is not possible as I understand it."

AthiraM_Intel
Moderator
483 Views

Hi,

 

We are forwarding your case to Subject matter Experts.


Thanks.


Mark_L_Intel1
Moderator
444 Views

Hi Anders,


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?

https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#multiple-sessions


Mark


Mark_L_Intel1
Moderator
414 Views

Hi Anders,


Did my answer solved your question?


Mark


View solution in original post

Reply