I have been using the (prebuilt) H.264 encoder and H.264 multiplexor from the 2012 SDK in a DirectShow graph which has worked fine on Win7 and Win8. I'm now attempting to upgrade to the 2013 SDK and find that the graph fails to encode video after a few frames on Win7 but seems to work fine on Win8. I am certain that nothing else has changed other than installing Media SDK 2013. Before diving deeply into the possible causes, I have a few questions:
- Should the 2013 SDK install cleanly over the 2012 SDK? Is an uninstall of the 2012 SDK required? Are any registry values potentally left behind which might adversely affect the 2013 components?
- My app is written in C# and uses the C# implementation of IConfigureVideoEncoder from this post: http://software.intel.com/en-us/forums/topic/311827 . Is an updated definition of Params required for the 2013 SDK (i.e. did the binary interface change in 2013 for IConfigureVideoEncoder.SetParams() and hence my program will require a recompile?)
- I'm using the PRESET_BALANCED preset, and changing nothing else from the defaults except p.frame_control.width and p.frame_control.height. Any known problems here?
1. You do not have to un-install Media SDK 2012 before installing 2013 release, but keep in mind that the DirectShow samples (pre-built binaries) that are packaged with Media SDK 2013 will replace the ones installed by 2012 release. Also, the Media SDK system PATH will be updated to point to Media SDK 2013 folder.
2. The Media SDK sample code is updated slightly for every release so it's possible the example C# interface you used may not be compatible anymore. Please explore the implementation to verify.
3. No known problems.
And as always, keep in mind that the DirectShow filters are samples, not intending to cover all cases. You may have to modify the source code to fit your needs.
To understand the different behavior I'm experiencing with the 2013 SDK, I've captured the output of tracer.exe with Per-Frame logging enabled. This is using 2013 SDK, but with no code changes from the version which works great with 2012 SDK. The DirectShow graph is somewhat complicated with GMFBridge, but basically it's capturing live video (no audio stream), compressing to H.264, muxing with the H.264 mux and then directly to filewriter.
The symptoms are that no video gets written to file, although the capture filter delivers 14 frames downstream successfully. Log is attached.
Unfortunately the Media SDK trace log does not tell me much, except that SW encode is selected during setup and that encoder is setup correctly, but then immediately closed by application.
I suggest rebuilding the DShow encoder sample and the use Visual Studio debugger to isolate where the issue occurs. That info and details about your pipeline will help us assist you in finding the root cause.