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.

How To Determine Feature Support On A System?

babgvant
Beginner
1,524 Views

I would like to configure default encoding settings based on the supported features of the current system, but I am having a hard time determining how to accomplish this.

For e.g.; IVB doesn't support look ahead so if the rate control setting is configured to use this feature (a good default on HSW+) the encoder will fail to initialize. Querying the SDK version on this system gives me 1.11 so I can't use that.

Thanks

0 Kudos
1 Solution
Harshdeep_B_Intel
1,524 Views

Hi Babgvant, 

Sorry for the confusion, in regard to query in opaque memory scenario, when zeroing out mfxVideoParam structure; it leads to 0 extended buffer value and as a result encoder returned unsupported error message, because input has at least 1 extended buffer for opaque memory allocation, but output has none. So, to fix the issue copy extended buffer content from input to output.

Thanks,  

View solution in original post

0 Kudos
18 Replies
Harshdeep_B_Intel
1,524 Views

Hi there, 

We have a mediasdk analyzer tool available at path (installed folder/mediasdk/tools/mediasdk_analyzer.exe). You can run this tool to get the first level understanding into the features supported on your platform. Second and the one you already know are the query functions in MediaSDK API, here is article which provides more explanation on the Query functions: https://software.intel.com/en-us/articles/query-functionality-in-media-sdk using them you can get information, if the requested features are supported by the platform. Now, for the runtime, feature support varies by the installed operating system on the system, system hardware, SKU version and the driver version. Hope this information helps. 

Thanks, 

0 Kudos
Petter_L_Intel
Employee
1,524 Views

Hi,

To explore the capabilities of your platform (Windows and Android) you may also want to try out the new Intel Visual Coding Framework (VCF)product,  https://software.intel.com/en-us/visual-coding-framework. VCF is also advertised in the sticky post section of this blog. VCF provides an easy way to explore and benchmark both simple and advanced Media SDK workloads, and also create workloads which can be integrated with applications.

Regards,
Petter

0 Kudos
babgvant
Beginner
1,524 Views

Harsh Jain (Intel) wrote:

Hi there, 

We have a mediasdk analyzer tool available at path (installed folder/mediasdk/tools/mediasdk_analyzer.exe). You can run this tool to get the first level understanding into the features supported on your platform. Second and the one you already know are the query functions in MediaSDK API, here is article which provides more explanation on the Query functions: https://software.intel.com/en-us/articles/query-functionality-in-media-sdk using them you can get information, if the requested features are supported by the platform. Now, for the runtime, feature support varies by the installed operating system on the system, system hardware, SKU version and the driver version. Hope this information helps. 

Thanks, 

MFXVideoENCODE_Query is exactly what I was looking for, but unfortunately I'm having some trouble with the implementation (borrowed from one of the sample apps).

When I call MFXVideoENCODE_Query it always returns MFX_ERR_UNSUPPORTED even when the parameters(m_mfxEncParams) are valid and I can successfully Init (sts = m_pmfxENC->Init(&m_mfxEncParams)) the encoder and encode video.

    mfxVideoParam outParam;
    MSDK_ZERO_MEMORY(outParam);
    outParam.mfx.CodecId = m_mfxEncParams.mfx.CodecId;

    sts = m_pmfxENC->Query(&m_mfxEncParams, &outParam);

Thanks

0 Kudos
Harshdeep_B_Intel
1,524 Views

Hi,

Can you please share the log from mediasdk analyzer tool located at (Installed folder/mediasdk/tools/mediasdk_analyzer). The log can provide required details on your system environment. Also, can you please use sample_encode (https://software.intel.com/sites/default/files/MediaSamples_Windows_6.0.0.68.msi) and with the same case scenario (encoder parameters set call MFXVideoENCODE_Query). Do you happen to see same issue? Let me know your results. 

Also, as Petter mentioned in previous post you can also try new Visual Coding Framework(VCF) product (https://software.intel.com/en-us/visual-coding-framework), to explore capabilities of your platform (Windows or Android).  

Thanks, 

    

0 Kudos
babgvant
Beginner
1,524 Views

Output from sys analyzer:

Intel Media SDK System Analyzer (32 bit)


The following versions of Media SDK API are supported by platform/driver:

    Version    Target    Supported    Dec    Enc
    1.0    HW    Yes        X    X
    1.0    SW    Yes        X    X
    1.1    HW    Yes        X    X
    1.1    SW    Yes        X    X
    1.3    HW    Yes        X    X
    1.3    SW    Yes        X    X
    1.4    HW    Yes        X    X
    1.4    SW    Yes        X    X
    1.5    HW    Yes        X    X
    1.5    SW    Yes        X    X
    1.6    HW    Yes        X    X
    1.6    SW    Yes        X    X
    1.7    HW    Yes        X    X
    1.7    SW    Yes        X    X
    1.8    HW    Yes        X    X
    1.8    SW    Yes        X    X

Graphics Devices:
    Name                                         Version             State
    Intel(R) HD Graphics 4600                    10.18.15.4256       Active

System info:
    CPU:    Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz
    OS:    Microsoft Windows 10 Pro
    Arch:    64-bit

Installed Media SDK packages (be patient...processing takes some time):

MFXVideoENCODE_Query works in sample_encode project, but it does not in sample_transcode (the sample my app is based on) also included in the download. sample_transcode also returns MFX_ERR_UNSUPPORTED.

0 Kudos
Harshdeep_B_Intel
1,524 Views

Hi babgvant, 

Thank you for sharing the log. Looks like analyzer tool was stopped before it could capture all the required information. Please re run the analyzer tool and wait till all the system information is logged by the tool. Please share the complete log after following quick below steps.

  • Please update to latest driver version (15.40.7.64.4279) from here: https://downloadcenter.intel.com/product/81496/Intel-HD-Graphics-4600-for-4th-Generation-Intel-Core-Processors
  • Also, verify and confirm if you are using latest mediasdk version (6.0.0.388).
  • and you are using latest samples version (6.0.0.38): https://software.intel.com/sites/default/files/MediaSamples_Windows_6.0.0.68.msi.

Also, package "included in the download" was not attached to your previous post. Please re-attach package after above updates and let me know your findings.

Thanks, 

0 Kudos
babgvant
Beginner
1,524 Views

Harsh Jain (Intel) wrote:

Thank you for sharing the log. Looks like analyzer tool was stopped before it could capture all the required information. Please re run the analyzer tool and wait till all the system information is logged by the tool. Please share the complete log after following quick below steps.

That's all I get because the app crashes.

Intel Media SDK System Analyzer (32 bit)


The following versions of Media SDK API are supported by platform/driver:

    Version    Target    Supported    Dec    Enc
    1.0    HW    Yes        X    X
    1.0    SW    Yes        X    X
    1.1    HW    Yes        X    X
    1.1    SW    Yes        X    X
    1.3    HW    Yes        X    X
    1.3    SW    Yes        X    X
    1.4    HW    Yes        X    X
    1.4    SW    Yes        X    X
    1.5    HW    Yes        X    X
    1.5    SW    Yes        X    X
    1.6    HW    Yes        X    X
    1.6    SW    Yes        X    X
    1.7    HW    Yes        X    X
    1.7    SW    Yes        X    X
    1.8    HW    Yes        X    X
    1.8    SW    Yes        X    X

Graphics Devices:
    Name                                         Version             State
    Intel(R) HD Graphics 4600                    10.18.15.4279       Active

System info:
    CPU:    Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz
    OS:    Microsoft Windows 10 Pro
    Arch:    64-bit

Installed Media SDK packages (be patient...processing takes some time):

Harsh Jain (Intel) wrote:

Confirmed.

Harsh Jain (Intel) wrote:

Also, package "included in the download" was not attached to your previous post. Please re-attach package after above updates and let me know your findings.

I don't understand. Sample_multi_transcode is another sample project included in the sample projects you linked to earlier (and what I based my app off of many years ago). The fresh sample exhibits the same behavior as my application (Query fails even though Init does not).

Thanks

0 Kudos
Harshdeep_B_Intel
1,524 Views

Hi Babgvant,

Can you please share the reproducer code, so I can verify the encode parameters you are initializing before the query function is called. As,its weird that query function works for encode parameters with sample_encode (vs) query function return error when same parameters are set in sample_multi_transcode. This definitely needs investigation, please share the code.  

Thanks,

 

0 Kudos
babgvant
Beginner
1,524 Views

The only change I made to sample_multi_transcode was to add

      mfxVideoParam outParam;
      MSDK_ZERO_MEMORY(outParam);
      outParam.mfx.CodecId = m_mfxEncParams.mfx.CodecId;

      sts = m_pmfxENC->Query(&m_mfxEncParams, &outParam);

on line 2173 of pipeline_transcode.cpp (right after // Init encode    if (m_pmfxENC.get())    {).

cmd line (taken pretty much straight out of the sample's pdf):

-i::h264 "D:\Intel\INDE\INDE Media SDK for Windows 6.0.0.388\samples\ocl_media_sdk_interop\MediaSDKInterop\MediaSDKInterop_video.h264" -async 10 -o::h264 output.h264 -n 100 -w 320 -h 240 -f 30 -b 2000

0 Kudos
Harshdeep_B_Intel
1,524 Views

Hi Babgvant,

I tried the query function at same location "on line 2173 of pipeline_transcode.cpp (right after // Init encode    if (m_pmfxENC.get())    {)." and do not see query function return any errors and was able to successfully run the sample_multi_transcode with cmd line. "-i::h264 "C:\Intel\INDE\INDE Media SDK for Windows 6.0.0.388\samples\ocl_media_sdk_interop\MediaSDKInterop\MediaSDKInterop_video.h264" -async 10 -o::h264 output.h264 -n 100 -w 320 -h 240 -f 30 -b 2000" 

MFX HARDWARE Session 0 API ver 1.16 parameters: 
Input  video: AVC 
Output video: AVC 
MFX dll: C:\Program Files\Intel\Media SDK\libmfxhw32.dll

Transcoding started

.
Transcoding finished

Common transcoding time is  0.59 sec 
MFX session 0 transcoding PASSED:
Processing time: 0.59 sec 
Number of processed frames: 100

The test PASSED

I suspect issue could be due version of Visual studio (VS) and not sure version of VS you are using. But, I tried with VS2013 and it worked, suggest updating and trying with VS 2013.  

Thanks, 

0 Kudos
babgvant
Beginner
1,524 Views

I am using VS2015, but the result is the same when changing from the VS2015 runtime to VS2013.

samplequery.JPG

TBC, the sample application works. It's just that Query is returning a result which is not consistent with that. According to the documentation MFX_ERR_UNSUPPORTED indicates that encoding with the current config will not work, but since it does the results from Query are misleading and counterproductive. For the function to be useful it either has to correct the params or indicate correctly that encoding will not work (where it obviously does carry on just fine).

0 Kudos
babgvant
Beginner
1,524 Views

Taking a deeper look at the differences b/w sample_encode and sample_multi_transcode I discovered that the use of opaque memory seems to be related to Query not working correctly. If I force sample_multi_transcode to not use opaque memory, Query returns MFX_ERR_NONE (what I expect in this case).

Why does opaque memory cause Query to not work correctly?

0 Kudos
babgvant
Beginner
1,524 Views

babgvant wrote:

Taking a deeper look at the differences b/w sample_encode and sample_multi_transcode I discovered that the use of opaque memory seems to be related to Query not working correctly. If I force sample_multi_transcode to not use opaque memory, Query returns MFX_ERR_NONE (what I expect in this case).

Why does opaque memory cause Query to not work correctly?

Hmm... maybe opaque memory is a red herring. Disabling support in my real application did not have the same effect (Query still unreliable).

0 Kudos
Harshdeep_B_Intel
1,524 Views

Hi there,

Opaque memory was enabled for transcode pipeline to simplify surface memory management, where session manages the memory types and handoffs automatically. To resolve query issue follow quick pointers below: 

  • The "Query" function is not correct usage for opaque memory scenario, change and use "QueryIOSurf" function instead in sample_multi_transcode to resolve the issue. Please refer to mediasdk-manual page no 47 for more details.
  • we have tutorial "simple_5_transcode_opaque" showing how to use "QueryIOSurf" function during transcode opaque memory scenario. In your real application make similar changes as showcased in the tutorial to resolve query issue. Let me know your results. 

Thanks, 

 

0 Kudos
babgvant
Beginner
1,524 Views

Harsh Jain (Intel) wrote:

Hi there,

Opaque memory was enabled for transcode pipeline to simplify surface memory management, where session manages the memory types and handoffs automatically. To resolve query issue follow quick pointers below: 

  • The "Query" function is not correct usage for opaque memory scenario, change and use "QueryIOSurf" function instead in sample_multi_transcode to resolve the issue. Please refer to mediasdk-manual page no 47 for more details.
  • we have tutorial "simple_5_transcode_opaque" showing how to use "QueryIOSurf" function during transcode opaque memory scenario. In your real application make similar changes as showcased in the tutorial to resolve query issue. Let me know your results. 

Thanks, 

 

According to the documentation MFXVideoENCODE_QueryIOSurf does not perform the same purpose as MFXVideoENCODE_Query. QueryIOSurf is used to assist with surface allocation and not validate parameters (what Query is supposed to do).

My application (and the sample application it was based on) both use QueryIOSurf where it is intended, but that doesn't address how to make Query work properly to validate encode parameters against the actual hardware.

0 Kudos
Harshdeep_B_Intel
1,525 Views

Hi Babgvant, 

Sorry for the confusion, in regard to query in opaque memory scenario, when zeroing out mfxVideoParam structure; it leads to 0 extended buffer value and as a result encoder returned unsupported error message, because input has at least 1 extended buffer for opaque memory allocation, but output has none. So, to fix the issue copy extended buffer content from input to output.

Thanks,  

0 Kudos
babgvant
Beginner
1,524 Views

Harsh Jain (Intel) wrote:

Hi Babgvant, 

Sorry for the confusion, in regard to query in opaque memory scenario, when zeroing out mfxVideoParam structure; it leads to 0 extended buffer value and as a result encoder returned unsupported error message, because input has at least 1 extended buffer for opaque memory allocation, but output has none. So, to fix the issue copy extended buffer content from input to output.

Thanks,  

That was it. Thank you! Would it be possible to get this added to the SDK API Reference Manual (would have saved us both a lot of time :)).

Cheers

0 Kudos
Harshdeep_B_Intel
1,524 Views

You are welcome. Glad, issue was resolved. Yes, will include this in reference manual. So we can close this thread here.

Thanks, 

0 Kudos
Reply