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.

DirectShow Sample H264 Decoder crashes

superrudi
Beginner
528 Views
Hi,

to get the hardware acceleration running, I have to use the Sample H264 Decoder Filter and replace SetAcceleration(MFX_IMPL_AUTO) with MFX_IMPL_HARDWARE_ANY in the constructor of CBaseDecoder (same as encoder). With 1920x1080 pixels everything is ok, but if i use 1080x1920 or 1920x1200 the application (or graphedit) crashes in m_pmfxDEC->DecodeFrameAsync(...) in CBaseDecoder::RunDecode(...).

The original Filter in the bin directory don't crash, but it defines wrong dimensions for the output. With 1920x1080 pixels the VIDEOINFOHEADER.bmiHeader.biHeight is 1088 and the heigt in VIDEOINFOHEADER.rcSource is set to 1080. For 1080x1920 pixels the width is set to 1080, but it has to be 1088. I can check the width and set it manually to 1088 in my downstream filter, but this is ugly...

Any idea, who I can fix the sample H264 Decoder?

0 Kudos
6 Replies
Nina_K_Intel
Employee
528 Views

Hi,

Is MFX_IMPL_HARDWARE_ANY the only change you do to the original sample code? Please specify the SandyBridge driver version you are testing the hardware acceleration with and check which status is returned from MFXVideo_Decode.Init with those resolutions.

The original filter doesn't crash because it is using the software dll of MSDK, I guess. For 1080x1920 resolution 1080 is the correct width. Decoder alignes the width at 16 and height at 32. That's why for 1920x1080 it becomes 1088.

Thanks,

Nina

0 Kudos
superrudi
Beginner
528 Views
Yes, I only changed that, nothing else. With 1080x1920 MFXVideoDecode.Init returns MFX_WRN_PARTIAL_ACCELERATION and with 1920x1080 it returns MFX_ERR_NONE.

I'm using HD2000 (Core i7-2600) with Media SDK 3.0 Beta 4 and driver version 8.15.10.2509.

Visual Studio 2010, Windows SDK 7.1


0 Kudos
Nina_K_Intel
Employee
528 Views
Ok, get it. Thanks for the info, we will investigate the issue and get back to you with results.

Regards,
Nina
0 Kudos
superrudi
Beginner
528 Views
I forgot: With resolution 1080x1920 the output picture of the original filter is scrambled. If I set the width manually to 1088 as i wrote above, it is just fine. So I think, the width also alignes at 32...
0 Kudos
Nina_K_Intel
Employee
528 Views
That's interesting. We will investigate this one too.
0 Kudos
Nina_K_Intel
Employee
528 Views
Hi SuperRudi,

I was obviously wrong when stating that w=1080 doesn't need alignment at 16. If alignment is applied the width becomes 1088 as you mention. We have corrected this point in sample code, please check out the Media SDK 2012 Gold release when it is posted. You can also apply a quick fix in your code right now:

Add a line
pDstVIH->bmiHeader.biWidth = (pDstVIH->bmiHeader.biWidth + 15) &~ 15;

in CVideoDecFilter::GetMediaType method

I must say that we were not able to reproduce neither crashes nor scrambled output with our sample filters. But it could be due to difference in third party filters used in your and our testing. Hopefully the fix we suggest will resolve your problem.

Best regards,
Nina
0 Kudos
Reply