Hi, I'm trying to write a custom mixer that works with the EVR Presenter sample. I used the MFTrace tool and can see that the topology resolves and the media types set for each node seems correct. However, once I start playback (IMFMediaSession::Start)
it just freezes with no error message.
I do receive and event MESessionTopologyStatus and it succeeded. When I check the call stack for the presenter, I see the last function that was called was EVRCustomPresenter::ProcessMessage (MFVP_MESSAGE_BEGINSTREAMING). This in turn calls EVRCustomPresenter::BeginStreaming()
which tells the Scheduler class to start scheduling. Scheduler is then left waiting for an object in member function Scheduler::SchedulerThreadProcPrivate().
I changed one line of code to use the default mixer and everything plays fine. So the error is somewhere in my Mixer but I'm not sure where the problem is since I don't see any obvious errors being reported. I wrote the code for the decoder too
so I can see when using the default mixer, the decoder's ProcessInput function gets called. With my custom mixer, this does not happen. So it seems like EVRCustomPresenter::ProcessMessage (MFVP_MESSAGE_BEGINSTREAMING) is the last thing called and
then playback just waits for something.
I implemented the following interfaces in my mixer (IMFTransform, IMFVideoDeviceID, IMFAttributes, IMFTopologyServiceLookupClient, IMFGetService, IMFVideoProcessor) following the guidelines from MSDN.
I see the EVR querying my mixer for IEVRTrustedVideoPlugin and IMFQualityAdvise but these are optional interfaces. I am not playing back protected media too.
Is there some step my Mixer is missing that the EVR is waiting for? Maybe when my Mixer::ProcessMessage(MFT_MESSAGE_NOTIFY_BEGIN_STREAMING) is called, am I supposed to send some notification to the EVR?
Better, yet. Is there somewhere where I can find an example of a custom mixer?
Thanks,
Stan