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.
3082 Discussions

MFXEnumImplementations succeeds but reports no codecs on Coffeelake (1.35).

RobinsonUK
New Contributor I
2,376 Views

I have a very simple VSS solution (version 17.7.6), using hello_encode's util.h and linking to vpl.lib (..\Intel\onevpl.devel.win-x64.2023.1.0.43419\lib\native\win-x64). The purpose of the code is to enumerate implementations.  When I run this code on my Coffeelake test box the output is as follows:

 

Implementation 0: mfxhw64 (1.35) supporting 0 codecs

 

That is to say, it has found an impl and is able to report its version but nothing else in the mfxImplDescription has been filled out.   NumCodecs is zero.

 

I know this CPU supports Media SDK as it runs our software (which does H264 enc/dec).  I am going through the process of switching out to VPL, which I assume simply dispatches to oneAPI or Media SDK.  The above code works on my other box with the Intel Arc plugged in.

 

So my question is whether this is expected behaviour (undocumented if it is) and if not, what should I look at to try to find the cause.  Do I need to make additional libraries available to it?  I am deploying libvpl.dll to the program folder. 

 

Here is my code:

 

#include "vpl/mfx.h"

#include <stdio.h>

#pragma comment(lib, "vpl.lib")

int main()
{
    mfxLoader loader = MFXLoad();

    if (!loader)
    {
        fprintf(stderr, "Failed to create a loader\n");

        return -1;
    }

    mfxU32 i = 0;
    mfxImplDescription * desc = nullptr;

    while (MFX_ERR_NONE == MFXEnumImplementations(loader, i, MFX_IMPLCAPS_IMPLDESCSTRUCTURE, reinterpret_cast<mfxHDL*>(&desc)))
    {        
        printf("Implementation %d: %s (%d.%d) supporting %d codecs\n", i, desc->ImplName, desc->ApiVersion.Major, desc->ApiVersion.Minor, desc->Enc.NumCodecs);

        MFXDispReleaseImplDescription(loader, desc);

        i++;
    }

    MFXUnload(loader);

    return 0;
}

 

0 Kudos
1 Solution
RajashekarK_Intel
2,230 Views

Hi,

 

This is expected behavior on Legacy platforms such as Coffee Lake, link, where only MediaSDK runtime is available.

 

MediaSDK runtime (API=1.35) does not support advanced media capabilities query operations which were added with API 2.0  so structures such will not be filled in on these platforms

query_01.png

More information here.

 

Either the application should use legacy query function such as MFXVideoDECODE_Query() to confirm which codecs are supported or, as you mentioned you're transitioning towards VPL, try to use a suitable platform where oneVPL is supported ( https://github.com/oneapi-src/oneVPL/#readme:~:text=targeting%20Intel%C2%AE%20GPUs-,Runtime%20loaded,-by%20oneVPL%20Dispatcher ).

 

If this is the information you are looking for, make sure to accept this as a solution. This would help others with similar issue and let us know if you still need any information on this.

 

Regards,

Rajashekar

 

 

View solution in original post

0 Kudos
7 Replies
RobinsonUK
New Contributor I
2,366 Views

Some additional info.  I compiled legacy-encode.cpp, switching out the codec from HEVC to AVC, i.e.

 

encodeParams.mfx.CodecId = MFX_CODEC_AVC;

 

The output was:

 

 > enumerate -hw -i 0099.raw -w 1280 -h 720


Implementation details:
ApiVersion: 1.35
Implementation type: HW
AccelerationMode via: D3D11
Path: C:\Windows\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_b804c9204ad70be1\libmfxhw64.dll

Encode query failed
Encoded 0 frames

 

The acceleration mode appears to be MFX_ACCEL_MODE_VIA_D3D11.  However the sample has MFX_IOPATTERN_IN_SYSTEM_MEMORY, so it doesn't work out of the box.  I don't even know if that is the issue anyway.  It's just something I noticed.  I remember using a system  memory allocator on Coffeelake with Media SDK so it must surely be supported. 

0 Kudos
RajashekarK_Intel
2,297 Views

Hi,

Thanks for posting in Intel Community.


Inorder to assist you better on the issue, could you provide below details.

1. Hardware/OS Versions.


2. It is observed that, you are trying to link with the oldest version? 

Could you try with latest version of oneVPL build? (Instructions to build from the latest are here https://github.com/oneapi-src/oneVPL/blob/master/INSTALL.md) and confirm If you are facing the same.


3. Also, if the second query you've posted is also experimented on the same platform. If not, kindly provide VPL version and platform details for that as well.


Regards,

Rajashekar


0 Kudos
RobinsonUK
New Contributor I
2,286 Views

I have an i5 8400 running Windows 11.  It has an NVIDIA 1650 graphics card driving the monitors.  Our software services (using Media SDK to encode H264) run fine.   I am attempting to implement the upgrade from Media SDK to VPL.  My code works fine with the Intel Arc installed on the AMD machine.  It does not work on the older Coffee Lake box (not the Arc, which is not installed, I'm talking about the CPU-side QuickSync here - the 1.35 version Media SDK impl).

 

I ran vpl-inspect on the Coffee Lake box and it returned:

 


..\native>vpl-inspect.exe

Implementation #0: mfxhw64
Library path: C:\Windows\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_b804c9204ad70be1\libmfxhw64.dll
AccelerationMode: MFX_ACCEL_MODE_VIA_D3D11
ApiVersion: 1.35
Impl: MFX_IMPL_TYPE_HARDWARE
VendorImplID: 0x0001
ImplName: mfxhw64
License:
Version: 1.2
Keywords: MSDK,x64
VendorID: 0x8086
mfxAccelerationModeDescription:
Version: 1.0
Mode: MFX_ACCEL_MODE_VIA_D3D11
mfxPoolPolicyDescription:
Version: 1.0
mfxDeviceDescription:
MediaAdapterType: MFX_MEDIA_INTEGRATED
DeviceID: 3e92/1
Version: 1.1
mfxDecoderDescription:
Version: 0.0
mfxEncoderDescription:
Version: 0.0
mfxVPPDescription:
Version: 0.0
NumExtParam: 0

Total number of implementations found = 1


I installed oneVPL into my project via. Visual Studio package manager.   That is 2023.1.0.43419.   Last week I fetched oneVPL-master from Github.  I built it according to the instructions.  That version of vpl.lib makes no difference to the output on the Coffee Lake box.  It still does not work. 

 

The github page for the dispatcher suggests, "The base package is limited to the dispatcher and samples. To use oneVPL for video processing you need to install at least one implementation".  What does this mean?  I have mfxhw64 in my drivers folder on Windows already.  Presumably I don't need it and these are instructions for Linux devs.

 

I am so confused about what I need to do even after reading the upgrade guide.  Please advise.  Imagine you're talking to a Golden Retriever.  Let's go through the basics:

 

I have a simple Visual Studio solution, with the code at the top of the page in it (just EnumImplementations).  I link with vpl.lib.  I have up to date drivers installed on the Coffee Lake box.  Do I need to deploy some additional .dll?  Do I need to install some additional libraries?  Do I need to set some environment variables?  What do I need to do to get it to work.

 

 

 

 

0 Kudos
RajashekarK_Intel
2,248 Views

Hi @RobinsonUK ,

 

Thanks for providing the information.

We're working on this internally and will get back to you once we've an update.

 

Regards,

Rajashekar

 

0 Kudos
RajashekarK_Intel
2,231 Views

Hi,

 

This is expected behavior on Legacy platforms such as Coffee Lake, link, where only MediaSDK runtime is available.

 

MediaSDK runtime (API=1.35) does not support advanced media capabilities query operations which were added with API 2.0  so structures such will not be filled in on these platforms

query_01.png

More information here.

 

Either the application should use legacy query function such as MFXVideoDECODE_Query() to confirm which codecs are supported or, as you mentioned you're transitioning towards VPL, try to use a suitable platform where oneVPL is supported ( https://github.com/oneapi-src/oneVPL/#readme:~:text=targeting%20Intel%C2%AE%20GPUs-,Runtime%20loaded,-by%20oneVPL%20Dispatcher ).

 

If this is the information you are looking for, make sure to accept this as a solution. This would help others with similar issue and let us know if you still need any information on this.

 

Regards,

Rajashekar

 

 

0 Kudos
RobinsonUK
New Contributor I
2,203 Views

I'll tell you what it's a good job I'm using a dependency injection pattern in this library.  I'm going to have to do an additional impl I think - crib my existing Media SDK encoder and decoder for the purpose.  It's not entirely clear to me that'll work but I will of course return with more questions if it does not.

 

Thanks very much. 

0 Kudos
RajashekarK_Intel
2,189 Views

Hi,


Thanks for accepting it as solution. If you need any additional information, please post a new question as this thread will no longer be monitored by Intel.


Regards,

Rajashekar


0 Kudos
Reply