/*++ Description: Debug message printer to print the message passed through WPP --*/ void printMessageEvent(MFT_MESSAGE_TYPE msg) { switch (msg) { case MFT_MESSAGE_COMMAND_FLUSH: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_COMMAND_FLUSH"); break; case MFT_MESSAGE_COMMAND_DRAIN: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_COMMAND_DRAIN"); break; case MFT_MESSAGE_COMMAND_MARKER: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_COMMAND_MARKER"); break; case MFT_MESSAGE_COMMAND_TICK: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_COMMAND_TICK"); break; case MFT_MESSAGE_NOTIFY_END_OF_STREAM: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_NOTIFY_END_OF_STREAM"); break; case MFT_MESSAGE_NOTIFY_BEGIN_STREAMING: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_NOTIFY_BEGIN_STREAMING"); break; case MFT_MESSAGE_NOTIFY_START_OF_STREAM: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_NOTIFY_START_OF_STREAM"); break; case MFT_MESSAGE_DROP_SAMPLES: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_DROP_SAMPLES"); break; case MFT_MESSAGE_SET_D3D_MANAGER: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! :PROCESSMESSAGE: MFT_MESSAGE_SET_D3D_MANAGER"); break; } }
// // Process input calls the pin here.. In this code sample we // don't send it anywhere. It is simply shortcircuited back to the pipeline // STDMETHODIMP CCustomPin::SendSample( _In_ IMFSample *pSample ) { // // Log sample and exit.. The pipeline will just keep on churning more samples till // We go into the stop state // DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! Custom Pin %d recieved Sample %p", streamId(), pSample); return S_OK; }
STDMETHODIMP_(DeviceStreamState) CCustomPin::SetState( _In_ DeviceStreamState State ) { HRESULT hr = S_OK; DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! Id:%d Transition into state: %d ", streamId(), State); DeviceStreamState oldState = setPreferredStreamState( State ); if ( oldState != State ) { ComPtr<IMFMediaType> preferredMediaType = nullptr; if (State == DeviceStreamState_Run) { GetMediaTypeAt(0, preferredMediaType.ReleaseAndGetAddressOf()); } setPreferredMediaType(preferredMediaType.Get()); setPreferredStreamState( State ); { // // Notify the device transform manager that we have changed state // ComPtr<IMFMediaEvent> pEvent = nullptr; DMFTCHECKHR_GOTO( MFCreateMediaEvent(METransformInputStreamStateChanged, GUID_NULL, S_OK, NULL, pEvent.ReleaseAndGetAddressOf()), done ); DMFTCHECKHR_GOTO( pEvent->SetUINT32(MF_EVENT_MFT_INPUT_STREAM_ID, streamId()), done ); DMFTCHECKHR_GOTO( Parent()->QueueEvent(pEvent.Get()), done ); } // // Wait to be notified back from the pipeline. // DMFTCHECKHR_GOTO( WaitForSetInputPinMediaChange(),done ); } done: DMFTRACE(DMFT_GENERAL, TRACE_LEVEL_INFORMATION, "%!FUNC! exiting %x = %!HRESULT!", hr, hr); return oldState; }