| // Copyright (c) 2010 The WebM project authors. All Rights Reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style license | |
| // that can be found in the LICENSE file in the root of the source | |
| // tree. An additional intellectual property rights grant can be found | |
| // in the file PATENTS. All contributing project authors may | |
| // be found in the AUTHORS file in the root of the source tree. | |
| #ifndef __WEBMDSHOW_COMMON_MFSRCWRAP_HPP__ | |
| #define __WEBMDSHOW_COMMON_MFSRCWRAP_HPP__ | |
| namespace WebmMfUtil | |
| { | |
| enum MfState | |
| { | |
| MFSTATE_STOPPED = 0, | |
| MFSTATE_STARTED = 1, | |
| MFSTATE_PAUSED = 2, | |
| MFSTATE_ERROR = 3 | |
| }; | |
| class ComDllWrapper; | |
| class MfMediaStream; | |
| class MfByteStreamHandlerWrapper : public IMFAsyncCallback | |
| { | |
| public: | |
| static HRESULT Create(std::wstring dll_path, GUID mfobj_clsid, | |
| MfByteStreamHandlerWrapper** ptr_bsh_wrapper); | |
| virtual ~MfByteStreamHandlerWrapper(); | |
| HRESULT GetAudioMediaType(IMFMediaType** ptr_type) const; | |
| HRESULT GetAudioSample(IMFSample** ptr_sample); | |
| HRESULT GetVideoMediaType(IMFMediaType** ptr_type) const; | |
| HRESULT GetVideoSample(IMFSample** ptr_sample); | |
| HRESULT LoadMediaStreams(); | |
| HRESULT OpenURL(std::wstring url); | |
| HRESULT Pause(); | |
| HRESULT Start(bool seeking, LONGLONG start_time); | |
| HRESULT Stop(); | |
| UINT GetAudioStreamCount() const; | |
| UINT GetVideoStreamCount() const; | |
| // IUnknown methods | |
| STDMETHODIMP QueryInterface(REFIID iid, void** ppv); | |
| STDMETHODIMP_(ULONG) AddRef(); | |
| STDMETHODIMP_(ULONG) Release(); | |
| // IMFAsyncCallback methods | |
| STDMETHODIMP GetParameters(DWORD*, DWORD*); | |
| STDMETHODIMP Invoke(IMFAsyncResult* pAsyncResult); | |
| private: | |
| _COM_SMARTPTR_TYPEDEF(IMFByteStreamHandler, IID_IMFByteStreamHandler); | |
| _COM_SMARTPTR_TYPEDEF(IMFByteStream, IID_IMFByteStream); | |
| _COM_SMARTPTR_TYPEDEF(IMFMediaEvent, IID_IMFMediaEvent); | |
| _COM_SMARTPTR_TYPEDEF(IMFMediaEventGenerator, IID_IMFMediaEventGenerator); | |
| _COM_SMARTPTR_TYPEDEF(IMFMediaSource, IID_IMFMediaSource); | |
| _COM_SMARTPTR_TYPEDEF(IMFMediaStream, IID_IMFMediaStream); | |
| _COM_SMARTPTR_TYPEDEF(IMFPresentationDescriptor, | |
| IID_IMFPresentationDescriptor); | |
| _COM_SMARTPTR_TYPEDEF(IMFMediaTypeHandler, IID_IMFMediaTypeHandler); | |
| MfByteStreamHandlerWrapper(); | |
| HRESULT Create_(std::wstring dll_path, GUID mfobj_clsid); | |
| HRESULT HandleMediaSourceEvent_(IMFMediaEventPtr& ptr_event); | |
| HRESULT OnSourcePaused_(IMFMediaEventPtr& ptr_event); | |
| HRESULT OnSourceSeeked_(IMFMediaEventPtr& ptr_event); | |
| HRESULT OnSourceStarted_(IMFMediaEventPtr& ptr_event); | |
| HRESULT OnSourceStopped_(IMFMediaEventPtr& ptr_event); | |
| HRESULT OnNewStream_(IMFMediaEventPtr& ptr_event); | |
| HRESULT OnUpdatedStream_(IMFMediaEventPtr& ptr_event); | |
| HRESULT WaitForEvent_(MediaEventType expected_event_type); | |
| HRESULT WaitForNewStreamEvents_(); | |
| HRESULT WaitForPausedEvents_(); | |
| HRESULT WaitForSeekedEvents_(); | |
| HRESULT WaitForStartedEvents_(); | |
| HRESULT WaitForStoppedEvents_(); | |
| HRESULT WaitForUpdatedStreamEvents_(); | |
| ComDllWrapper* ptr_com_dll_; | |
| DWORD stream_count_; | |
| EventWaiter open_event_; | |
| EventWaiter media_source_event_; | |
| HRESULT media_event_error_; | |
| IMFByteStreamPtr ptr_byte_stream_; | |
| IMFByteStreamHandlerPtr ptr_handler_; | |
| IMFMediaEventGeneratorPtr ptr_event_queue_; | |
| IMFMediaSourcePtr ptr_media_src_; | |
| IMFPresentationDescriptorPtr ptr_pres_desc_; | |
| MediaEventType expected_event_type_; | |
| MediaEventType event_type_recvd_; | |
| MfMediaStream* ptr_audio_stream_; | |
| MfMediaStream* ptr_video_stream_; | |
| MfState state_; | |
| UINT audio_stream_count_; | |
| UINT selected_stream_count_; | |
| UINT video_stream_count_; | |
| ULONG ref_count_; | |
| DISALLOW_COPY_AND_ASSIGN(MfByteStreamHandlerWrapper); | |
| }; | |
| } // WebmMfUtil namespace | |
| #endif // __WEBMDSHOW_COMMON_MFSRCWRAP_HPP__ |