Media (Intel® Video Processing Library, Intel Media SDK)
Access community support with transcoding, decoding, and encoding in applications using media tools like Intel® oneAPI Video Processing Library and Intel® Media SDK
Announcements
The Intel Media SDK project is no longer active. For continued support and access to new features, Intel Media SDK users are encouraged to read the transition guide on upgrading from Intel® Media SDK to Intel® Video Processing Library (VPL), and to move to VPL as soon as possible.
For more information, see the VPL website.

The question about unsupport of MFXFrameAllocator

吴_一_
Beginner
537 Views
Hi,
To begin with encapsulating media sdk for our composite server, I set the mfxVideoParam.IOPattern of decoder to MFX_IOPATTERN_OUT_SYSTEM_MEMORY, while vpp to MFX_IOPATTERN_IN_SYSTEM_MEMORY | MFX_IOPATTERN_OUT_SYSTEM_MEMORY and encoder to MFX_IOPATTERN_IN_SYSTEM_MEMORY.
After that, the operation of allocating memory at the initialization in decoder/vpp/encoder's thread can run normally.But we're not satisfied with the composite performance of media sdk, and I have noticed the point "- For simplistic memory management, system memory surfaces are used to store the raw frames 
(Note that when using HW acceleration video surfaces are prefered, for better performance)",which was written as a comment in the simple_vpp.cpp of mediasdk-tutorials-0.0.3.
 
As what mentioned before, the field of mfxVideoParam.IOPattern is prefered to set to MFX_IOPATTERN_IN/OUT_VIDEO_MEMORY so that we can take full advantage of the hardware acceleration.After what I have done indeed, I use the `MFXFrameAllocator` class to allocate memory for decoder and vpp by instantiation its object, which was defined in the base_allocator.h of vcsa0.5 and inherited from `mfxFrameAllocator`.But unfortunately the operation of `MFXFrameAllocator->AllocFrames(mfxFrameAllocRequest, mfxFrameAllocResponse)` display an error "AllocFrame failed -3" when initialize the decoder though these changes can be compiled successfully. The value of -3 was defined in the mfxdefs.h as MFX_ERR_UNSUPPORTED = -3 /*undeveloped feature*/
 
So is this meant that I can not use the hardware acceleration capability of GPU?Check that an Intel VGA adapter can be found with lshw or lspci -nn shows the information of graphics card: 
00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller :0412] (rev 06)
which is different with the example in mediasdk_gettting_started_guide.pdf: 
00:02.0 VGA compatible controller [0300]: Intel Corporation Haswell Integrated Graphics Controller [8086:0416] (rev 02)
Wish to get some prompt about that error message.
 
Another question, can we use the libmfxhw64.so in CentOS without any other third-party libraries used in vcsa to implement the composite functionality?By the way, the version of libmfxhw64.so we are using in our service is libmfxhw64-p.so.1.10
 
Best regards
Ricci, from HuaPing information technology co., LTD in ShangHai.
0 Kudos
3 Replies
Jeffrey_M_Intel1
Employee
537 Views

Video memory is recommended for best performance.  The -3 error you're seeing can be caused by lots of things, but in general indicates that there is some problem communicating with the HW or driver.

For Linux, it can be easier to start with a 4th-generation Core (Haswell) based system instead of Xeon.  This will allow you to become familiar with Media Server Studio before moving to the more complex Xeon install scenarios.  For Core, you just need to check if Quicksync is available on the processor on ark.intel.com.  For Xeon, only e3-1284/1285/1286v3 are supported, and only with the c226 chipset.  In addition, there may be other BIOS or HW limitations.  To help you get started, there is a list of platforms known to work at the Media Server Studio details page

What type of system are you using?  What is the processor and chipset #?

Several components are required beyond just libmfxhw64.so.  Basically, you need the kernel patches and everything but the 'devel' packages to run Media Server Studio applications.

For more info on usage, the tutorials may be of interest.

 

 

0 Kudos
吴_一_
Beginner
537 Views

Hi,Jeffrey Mcallister

I'm sorry for not responding promptly. 

For core, the infomation of cpu checked by command `cat /proc/cpuinfo` shows that model name is "Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz". So how to check if Quicksync is available on the processor on ark.intel.com?And what is the Quicksync?

For Xeon, only e3-1284/1285/1286v3 are supported, and only with the c226 chipset.  And how to get these specific infomation in my machine? 

The sytem I am using is Ubuntu 12.04 with the kernel version 3.8.0-44-generic.And I have patched the kernel and remove the origin drm library according to the indication in the mediasdk_get_started.pdf.

By the way, the statement `mfxAllocator.Alloc(mfxAllocator.pthis, &Request, &mfxResponse);` in the simple_decode_vmem.cpp of mediasdk-tutorials-0.0.3 run the function `mfxStatus simple_alloc(mfxHDL pthis, mfxFrameAllocRequest* request, mfxFrameAllocResponse* response)` in the common_vaapi.cpp.The latter will run the function `vaCreateSurfaces` which maybe defined in libva-drm.so. Here in my machine, I get the return value of vaCreateSurfaces as VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT, and this value is converted into the `MFX_ERR_UNSUPPORTED`.what does that error means?

Best regards

0 Kudos
吴_一_
Beginner
537 Views

Hi,

I have reappeared the problem scenario, the question happened in relation to the library libva.so

First time, I encapsulated the libcomp.so with the shell command "g++ -w -rdynamic -msse4 -shared $(objs) -o libcomp.so -L/opt/intel/mediasdk/bin/x64/ -lpthread -lrt -lmfxhw64 -lva-drm", then when my app load dynamically the shared library libcomp.so and intend to allocate video memory, the function vaCreateSurfaces returns the status `VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT` which was converted into the `MFX_ERR_UNSUPPORTED`

After the question occured, I start to review the source of libcomp.so.I have done it for a long time and I am indeed sure it's none of the source business.Then I try to rewrite the Makefile and finally I find the shell command "g++ -w -rdynamic -msse4 -shared $(objs) -o libcomp.so -L/opt/intel/mediasdk/bin/x64/ -lpthread -lrt -lmfxhw64 -lva-drm -lva" makes the app run normally in one lucky attempt.But I don't know why?

Can anybody give me a little explanation about the occurance?In fact, I considered that the question is not related to the library at the very start fundamentally, because the linker didn't prompt that there exists a shared library relied error while the loader didn't tell me that it can not find any shared library.That means the OS will load the libva.so into the memory and run the function vaCreateSurfaces normally.Why when I tell the linker that it must link the library libva.so, the function will perform two kinds of different behavior?

0 Kudos
Reply