- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have started with the main video decode sample (the one with HEVC, MVC, and VP8 support etc.) I stripped it down to only MVC decode with MFX_D3D11 support turned off. I get an EXE decoder that works perfectly and does not crash. Building with VS 2013 Express on a Win8 machine.
Now, I take the files from the EXE decoder and add them to an existing Avisynth DLL project and change _tmain() name to sample_main(). Everything builds fine. I call sample_main() from a constructor in the Avisynth code and it runs, decodes fine, writes the two YUV files and then tries to exit. However, on exit, when the decdoing pipeline closes I get a crash when m_pmfxDEC is freed in CDecodingPipeline::Close(), as follows:
void CDecodingPipeline::Close()
{
...
WipeMfxBitstream(&m_mfxBS); // does not crash
MSDK_SAFE_DELETE(&m_pmfxDEC); // crashes here
The crash is: exception at 0x5D56F488 (libmfxsw32.dll)
Please help me to understand why this crash is occurring when I package the decoder in a DLL and how I might fix it. Thank you.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
There may be difference in how the integrated code is calling the sample code.
The destructor of the MFXVIdeoDECODE object m_pmfxDEC should be calling its "Close()" function (which just calls MFXVideoDECODE_Close). Is it possible the MediaSDK 'session' has been closed prior to the decoder being closed/deleted ?
By stepping into the MSDK_SAFE_DELETE(&m_pmfxDEC) call with debugger, can you tell if crash is on the call to "Close" or is it afterward when object is being deleted?
You can also try using the mediasdk_tracer tool to capture log of both cases and compare. (The tool is at <install dir>\tools\mediasdk_tracer. Default location is C:\Program Files\Intel\Media SDK 2014 for Clients\tools\mediasdk_tracer.)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for your help.
It happens in the MSDK_SAFE_DELETE macro when the delete [] occurs.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Correction: delete (not delete [])
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Some of my replies are getting moderated. It is very irritating.
It crashes in the delete for m_pmfxDEC
The tracer crashes for me and so is unusable.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The session is not getting closed before this delete.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hmm, the tracer should not be having any issue. Any information on how it is crashing (and/or system configuration and CPU would be appreciated).
Can you try directly calling m_pmfxDEC->Close(); just prior to the MSDK_SAFE_DELETE(&m_pmfxDEC) call?
(While this should make no difference at all, it may help.)
Also, please make sure the "Avisynth DLL" is linking with the same/new "Media SDK 2014" libmfx.lib that the sample code is using (or is being built with code that compiles this).
AND.....
When the application runs, the MediaSDK dispatching code (libmfx.lib) tries to find libmfxsw32.dll in local directory and then on "PATH". Its possible that your "Avisynth DLL" may be finding another (old) version of libmfxsw32.dll than the one you intend.
There is system analyzer tool (in same path as tracer) that can help show what MediaSDK libraries are installed on your system. The information it outputs may help us understand what is occurring.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page