When I run "Intel Media H264 Encode" in Graphedit, I got error MFX_ERR_UNSUPPORTED.
I create a pushsource filter to connect to " H264 Encode Filter". It could link to " H264 Encode Filter" in graphedit. But, when I push the play button, it throws a error MFX_ERR_UNSUPPORTED.
In the function of "CEncVideoFilter::StartStreaming(void)".
when it goes to this line.
sts = m_pEncoder->Init(&m_mfxParamsVideo, &m_mfxParamsVPP, this);
it could return error "-3". And I find it could return error -3 in the below function.
sts = InternalReset(pVideoParams, pVPPParams, false);
I try to use the below block in graphedit and it could run well.
File Source -> MP4 spliter -> H264 Decoder -> H264 Encoder ->File Writer.
If it run well, why do I get error MFX_ERR_UNSUPPORTED ??
I also post the pin information for reference.
There could be many reasons for this failure, but the issue is likely related to not being able to find Media SDK HW and/or SW DLL.
Make sure you have recent Intel HD Graphics driver installed and that the Intel HD Graphics device is active.
Can you share a bit more information about you machine configuration. An easy way to do this is to dump the output from Media SDK sys_analyzer tool (you'll find it in the SDK tools folder).
Thanks for your replay.
I have checked the system infofmation by analysis tool. I upload it for ref. The column of Supported all is Yes,but the Dec & Enc is 'x'. I didn't get the 'x' could mean 'Support' or ' not Support'. If it means support, why I still get the error MFX_ERR_UNSUPPORTED.
I also upload the log file. It has some error "MFX_ERR_NOT_INITIALIZED". Please check it and give me some advices. Thanks a lot.
I modified the source filter, and it could pass the error of MFX_ERR_UNSUPPORTED now.
I faced new issue that occur in "CEncVideoFilter::Receive(IMediaSample* pSample)" function. As the below code ,when it query interface, it could return 'No Interface'.
hr = pSample->QueryInterface(IID_IMFXSample, reinterpret_cast<void**>(&pMFXSample));
The pointer pMFXSample will be set to NULL.
Could someone give me advice ?
From the log you shared I can see that SW path is successful but as you indicated HW acceleration path fails (MFX_ERR_UNSUPPORTED). This is quite strange since the sys_analyzer log indicates that the driver you have installed exposes HW acceleration correctly.
I do not suggest ignoring the "MFX_ERR_UNSUPPORTED" error code.
It seems you have made modifications to the sample filters? Does the unmodified filters work?
It also looks like you are using an old version of Media SDK. Could you try the same workload using Media SDK 2013 and corresponding samples?
I have updated my Intel Graphy Driver, and tried again. It seems libary loaded successfully as the following message.
INFO :library loaded succesfully
SDK DLL File Version=220.127.116.11
SDK DLL Product Version=4.0.1531377.55492
SDK DLL File Size=11214232
But it still doesn't work. It could return 'No Interface' as I mentioned before. I'm using the 2013 SDK to test and I don't modify any samples. I just build it and put it in graphyedit for test.
I upload the log file for ref.
Thanks a lot.
Judging from from the log you sent, I do not see any Media SDK API issues. HW accelerated session is initialized successfully and the encoder is also initialized successfully.
The issue your facing is likely due to filter incompatibility with the source filter you are using. The Media SDK DShow sample filters are also validated with a small set of filters (such as file input filter). You may have to modify input filter or Media SDK encode filter to adapt to the scenario you are pursuing.
I suggest trying alternate input filters or to isolate and address the filter incompatibility issue.
I think the hw libary work well. I pass the NO_INTERFACE error, and set 'm_pEncoder->m_bmfxSample = false;'. It could start encoding. My question is what does it mean if I get NO_INTERFACE form query interface,
The reason you're getting NO_INTERFACE status from "hr = pSample->QueryInterface(IID_IMFXSample, reinterpret_cast<void**>(&pMFXSample));" is due to the fact that the upstream filter you have connected is not a Media SDK type filter (such as the Media SDK decode filters). In that case the sample encode filter assumes that the input frame is store in a system memory buffer. You can see in the preceding code path how that is handled.
If your upstream filter somehow delivers frames in a different way you will have to modify the sample to adapt to that scenario.