//------------------------------------------------------------------------------ // File: VidPlay.h // // Desc: DirectShow sample code - video (DVD and file) playback // class header file. // // Copyright (c) 1993-2001 Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Suppress C4127: conditional expression is constant #pragma warning(disable:4127) // // Some enumerated type definitions... // // Player state typedef enum { Uninitialized = 0, Stopped, Paused, Playing, Scanning } PLAYER_STATE ; // Define a special WM message for playback related events from DShow filtergraph #define WM_PLAY_EVENT WM_USER + 100 #define WM_SIZE_CHANGE WM_USER + 101 #define DEFAULT_WIDTH 400 #define DEFAULT_HEIGHT 240 // // Video Playback base class // class CBaseVideoPlayer { public: // public methods for Windows structure to call CBaseVideoPlayer(void) ; ~CBaseVideoPlayer(void) ; virtual BOOL Initialize(void) = 0 ; virtual HRESULT BuildGraph(HWND hWndApp, LPDIRECTDRAW pDDObj, LPDIRECTDRAWSURFACE pDDPrimary) = 0 ; virtual HRESULT ClearGraph(void) = 0 ; virtual HRESULT GetNativeVideoData(DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwARX, DWORD *pdwARY) = 0 ; virtual HRESULT SetVideoPosition(DWORD dwLeft, DWORD dwTop, DWORD dwWidth, DWORD dwHeight) = 0 ; virtual HRESULT GetInterfaces(HWND hWndApp) ; virtual HRESULT SetOverlayCallback(IDDrawExclModeVideoCallback *pCallback) = 0 ; HRESULT GetColorKey(DWORD *pdwColorKey) ; BOOL Play(void) ; BOOL Pause(void) ; BOOL Stop(void) ; inline void SetFileName(LPCTSTR lpszFileName) { lstrcpy(m_achFileName, lpszFileName) ; } ; inline BOOL IsGraphReady(void) { return (Uninitialized != m_eState) ; } ; inline PLAYER_STATE GetState(void) { return m_eState ; } ; inline void SetColorKey(DWORD dwColorKey) { m_dwColorKey = dwColorKey ; } ; inline LPCTSTR GetFileName(void) { return m_achFileName ; } ; protected: virtual void ReleaseInterfaces(void) ; virtual HRESULT GetColorKeyInternal(IBaseFilter *pOvM = NULL) = 0 ; private: void WaitForState(FILTER_STATE State) ; protected: // semi-internal state info (to be shared with derived classes) IGraphBuilder *m_pGraph ; // IGraphBuilder interface private: // internal state info PLAYER_STATE m_eState ; // player state (run/pause/stop/...) TCHAR m_achFileName[MAX_PATH] ; // current file name IMediaControl *m_pMC ; // IMediaControl interface IMediaEventEx *m_pME ; // IMediaEventEx interface DWORD m_dwColorKey ; // color key to be used for video } ; // // DVD Playback class // class CDVDPlayer : public CBaseVideoPlayer { public: // public methods for Windows structure to call CDVDPlayer(void) ; ~CDVDPlayer(void) ; BOOL Initialize(void) ; HRESULT BuildGraph(HWND hWndApp, LPDIRECTDRAW pDDObj, LPDIRECTDRAWSURFACE pDDPrimary) ; HRESULT ClearGraph(void) ; HRESULT GetNativeVideoData(DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwARX, DWORD *pdwARY) ; HRESULT SetVideoPosition(DWORD dwLeft, DWORD dwTop, DWORD dwWidth, DWORD dwHeight) ; HRESULT GetInterfaces(HWND hWndApp) ; HRESULT SetOverlayCallback(IDDrawExclModeVideoCallback *pCallback) ; private: // private helper methods for the class' own use void ReleaseInterfaces(void) ; HRESULT GetColorKeyInternal(IBaseFilter *pOvM = NULL) ; DWORD GetStatusText(AM_DVD_RENDERSTATUS *pStatus, LPTSTR lpszStatusText, DWORD dwMaxText) ; private: // internal state info IDvdGraphBuilder *m_pDvdGB ; // IDvdGraphBuilder interface IDvdInfo2 *m_pDvdI ; // IDvdInfo interface IDvdControl2 *m_pDvdC ; // IDvdControl interface } ; // // File Playback class // class CFilePlayer : public CBaseVideoPlayer { public: // public methods for Windows structure to call CFilePlayer(void) ; ~CFilePlayer(void) ; BOOL Initialize(void) ; HRESULT BuildGraph(HWND hWndApp, LPDIRECTDRAW pDDObj, LPDIRECTDRAWSURFACE pDDPrimary) ; HRESULT ClearGraph(void) ; HRESULT GetNativeVideoData(DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwARX, DWORD *pdwARY) ; HRESULT SetVideoPosition(DWORD dwLeft, DWORD dwTop, DWORD dwWidth, DWORD dwHeight) ; HRESULT GetInterfaces(HWND hWndApp) ; HRESULT SetOverlayCallback(IDDrawExclModeVideoCallback *pCallback) ; private: // private helper methods for the class' own use void ReleaseInterfaces() ; HRESULT GetColorKeyInternal(IBaseFilter *pOvM = NULL) ; BOOL IsOvMConnected(IBaseFilter *pOvM) ; HRESULT GetVideoRendererInterface(IBaseFilter **ppVR) ; HRESULT AddOvMToGraph(IBaseFilter **ppOvM, LPDIRECTDRAW pDDObj, LPDIRECTDRAWSURFACE pDDPrimary) ; HRESULT SetDDrawParams(IBaseFilter *pOvM, LPDIRECTDRAW pDDObj, LPDIRECTDRAWSURFACE pDDPrimary) ; HRESULT PutVideoThroughOvM(IBaseFilter *pOvM, IBaseFilter *pVR) ; private: // internal state info IDDrawExclModeVideo *m_pDDXM ; // IDDrawExclModeVideo interface } ;