/* * $Id$ * * (C) 2003-2006 Gabest * (C) 2006-2010 see AUTHORS * * This file is part of mplayerc. * * Mplayerc is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Mplayerc is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #pragma once #include "IGraphBuilder2.h" class CPlayerWindow : public CWnd { public: CPlayerWindow() {} protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); afx_msg BOOL OnEraseBkgnd(CDC* pDC); DECLARE_MESSAGE_MAP() }; typedef enum {DirectShow = 0, RealMedia, QuickTime, ShockWave} engine_t; interface __declspec(uuid("B110CDE5-6331-4118-8AAF-A870D6F7E2E4")) IGraphEngine : public IUnknown { STDMETHOD_(engine_t, GetEngine) () = 0; }; enum { EC_BG_AUDIO_CHANGED = EC_USER+1, EC_BG_ERROR }; class CBaseGraph : public CUnknown , public IGraphBuilder2 , public IMediaControl , public IMediaEventEx , public IMediaSeeking , public IVideoWindow , public IBasicVideo , public IBasicAudio , public IAMOpenProgress , public IGraphEngine { OAHWND m_hNotifyWnd; long m_lNotifyMsg; LONG_PTR m_lNotifyInstData; typedef struct { long m_lEventCode; LONG_PTR m_lParam1, m_lParam2; } GMSG; CList m_msgqueue; protected: void ClearMessageQueue(); public: CBaseGraph(); virtual ~CBaseGraph(); DECLARE_IUNKNOWN; STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv); void NotifyEvent(long lEventCode, LONG_PTR lParam1 = 0, LONG_PTR lParam2 = 0); protected: // IDispatch STDMETHODIMP GetTypeInfoCount(UINT* pctinfo); STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo); STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId); STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr); // IFilterGraph STDMETHODIMP AddFilter(IBaseFilter* pFilter, LPCWSTR pName); STDMETHODIMP RemoveFilter(IBaseFilter* pFilter); STDMETHODIMP EnumFilters(IEnumFilters** ppEnum); STDMETHODIMP FindFilterByName(LPCWSTR pName, IBaseFilter** ppFilter); STDMETHODIMP ConnectDirect(IPin* ppinOut, IPin* ppinIn, const AM_MEDIA_TYPE* pmt); STDMETHODIMP Reconnect(IPin* ppin); STDMETHODIMP Disconnect(IPin* ppin); STDMETHODIMP SetDefaultSyncSource(); // IGraphBuilder STDMETHODIMP Connect(IPin* ppinOut, IPin* ppinIn); STDMETHODIMP Render(IPin* ppinOut); STDMETHODIMP RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList); STDMETHODIMP AddSourceFilter(LPCWSTR lpcwstrFileName, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter); STDMETHODIMP SetLogFile(DWORD_PTR hFile); STDMETHODIMP Abort(); STDMETHODIMP ShouldOperationContinue(); // IFilterGraph2 STDMETHODIMP AddSourceFilterForMoniker(IMoniker* pMoniker, IBindCtx* pCtx, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter); STDMETHODIMP ReconnectEx(IPin* ppin, const AM_MEDIA_TYPE* pmt); STDMETHODIMP RenderEx(IPin* pPinOut, DWORD dwFlags, DWORD* pvContext); // IGraphBuilder2 STDMETHODIMP IsPinDirection(IPin* pPin, PIN_DIRECTION dir); STDMETHODIMP IsPinConnected(IPin* pPin); STDMETHODIMP ConnectFilter(IBaseFilter* pBF, IPin* pPinIn); STDMETHODIMP ConnectFilter(IPin* pPinOut, IBaseFilter* pBF); STDMETHODIMP ConnectFilterDirect(IPin* pPinOut, IBaseFilter* pBF, const AM_MEDIA_TYPE* pmt); STDMETHODIMP NukeDownstream(IUnknown* pUnk); STDMETHODIMP FindInterface(REFIID iid, void** ppv, BOOL bRemove); STDMETHODIMP AddToROT(); STDMETHODIMP RemoveFromROT(); // IMediaControl STDMETHODIMP Run(); STDMETHODIMP Pause(); STDMETHODIMP Stop(); STDMETHODIMP GetState(LONG msTimeout, OAFilterState* pfs); STDMETHODIMP RenderFile(BSTR strFilename); STDMETHODIMP AddSourceFilter(BSTR strFilename, IDispatch** ppUnk); STDMETHODIMP get_FilterCollection(IDispatch** ppUnk); STDMETHODIMP get_RegFilterCollection(IDispatch** ppUnk); STDMETHODIMP StopWhenReady(); // IMediaEvent STDMETHODIMP GetEventHandle(OAEVENT* hEvent); STDMETHODIMP GetEvent(long* lEventCode, LONG_PTR* lParam1, LONG_PTR* lParam2, long msTimeout); STDMETHODIMP WaitForCompletion(long msTimeout, long* pEvCode); STDMETHODIMP CancelDefaultHandling(long lEvCode); STDMETHODIMP RestoreDefaultHandling(long lEvCode); STDMETHODIMP FreeEventParams(long lEvCode, LONG_PTR lParam1, LONG_PTR lParam2); // IMediaEventEx STDMETHODIMP SetNotifyWindow(OAHWND hwnd, long lMsg, LONG_PTR lInstanceData); STDMETHODIMP SetNotifyFlags(long lNoNotifyFlags); STDMETHODIMP GetNotifyFlags(long* lplNoNotifyFlags); // IMediaSeeking STDMETHODIMP GetCapabilities(DWORD* pCapabilities); STDMETHODIMP CheckCapabilities(DWORD* pCapabilities); STDMETHODIMP IsFormatSupported(const GUID* pFormat); STDMETHODIMP QueryPreferredFormat(GUID* pFormat); STDMETHODIMP GetTimeFormat(GUID* pFormat); STDMETHODIMP IsUsingTimeFormat(const GUID* pFormat); STDMETHODIMP SetTimeFormat(const GUID* pFormat); STDMETHODIMP GetDuration(LONGLONG* pDuration); STDMETHODIMP GetStopPosition(LONGLONG* pStop); STDMETHODIMP GetCurrentPosition(LONGLONG* pCurrent); STDMETHODIMP ConvertTimeFormat(LONGLONG* pTarget, const GUID* pTargetFormat, LONGLONG Source, const GUID* pSourceFormat); STDMETHODIMP SetPositions(LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags); STDMETHODIMP GetPositions(LONGLONG* pCurrent, LONGLONG* pStop); STDMETHODIMP GetAvailable(LONGLONG* pEarliest, LONGLONG* pLatest); STDMETHODIMP SetRate(double dRate); STDMETHODIMP GetRate(double* pdRate); STDMETHODIMP GetPreroll(LONGLONG* pllPreroll); // IVideoWindow STDMETHODIMP put_Caption(BSTR strCaption); STDMETHODIMP get_Caption(BSTR* strCaption); STDMETHODIMP put_WindowStyle(long WindowStyle); STDMETHODIMP get_WindowStyle(long* WindowStyle); STDMETHODIMP put_WindowStyleEx(long WindowStyleEx); STDMETHODIMP get_WindowStyleEx(long* WindowStyleEx); STDMETHODIMP put_AutoShow(long AutoShow); STDMETHODIMP get_AutoShow(long* AutoShow); STDMETHODIMP put_WindowState(long WindowState); STDMETHODIMP get_WindowState(long* WindowState); STDMETHODIMP put_BackgroundPalette(long BackgroundPalette); STDMETHODIMP get_BackgroundPalette(long* pBackgroundPalette); STDMETHODIMP put_Visible(long Visible); STDMETHODIMP get_Visible(long* pVisible); STDMETHODIMP put_Left(long Left); STDMETHODIMP get_Left(long* pLeft); STDMETHODIMP put_Width(long Width); STDMETHODIMP get_Width(long* pWidth); STDMETHODIMP put_Top(long Top); STDMETHODIMP get_Top(long* pTop); STDMETHODIMP put_Height(long Height); STDMETHODIMP get_Height(long* pHeight); STDMETHODIMP put_Owner(OAHWND Owner); STDMETHODIMP get_Owner(OAHWND* Owner); STDMETHODIMP put_MessageDrain(OAHWND Drain); STDMETHODIMP get_MessageDrain(OAHWND* Drain); STDMETHODIMP get_BorderColor(long* Color); STDMETHODIMP put_BorderColor(long Color); STDMETHODIMP get_FullScreenMode(long* FullScreenMode); STDMETHODIMP put_FullScreenMode(long FullScreenMode); STDMETHODIMP SetWindowForeground(long Focus); STDMETHODIMP NotifyOwnerMessage(OAHWND hwnd, long uMsg, LONG_PTR wParam, LONG_PTR lParam); STDMETHODIMP SetWindowPosition(long Left, long Top, long Width, long Height); STDMETHODIMP GetWindowPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight); STDMETHODIMP GetMinIdealImageSize(long* pWidth, long* pHeight); STDMETHODIMP GetMaxIdealImageSize(long* pWidth, long* pHeight); STDMETHODIMP GetRestorePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight); STDMETHODIMP HideCursor(long HideCursor); STDMETHODIMP IsCursorHidden(long* CursorHidden); // IBasicVideo STDMETHODIMP get_AvgTimePerFrame(REFTIME* pAvgTimePerFrame); STDMETHODIMP get_BitRate(long* pBitRate); STDMETHODIMP get_BitErrorRate(long* pBitErrorRate); STDMETHODIMP get_VideoWidth(long* pVideoWidth); STDMETHODIMP get_VideoHeight(long* pVideoHeight); STDMETHODIMP put_SourceLeft(long SourceLeft); STDMETHODIMP get_SourceLeft(long* pSourceLeft); STDMETHODIMP put_SourceWidth(long SourceWidth); STDMETHODIMP get_SourceWidth(long* pSourceWidth); STDMETHODIMP put_SourceTop(long SourceTop); STDMETHODIMP get_SourceTop(long* pSourceTop); STDMETHODIMP put_SourceHeight(long SourceHeight); STDMETHODIMP get_SourceHeight(long* pSourceHeight); STDMETHODIMP put_DestinationLeft(long DestinationLeft); STDMETHODIMP get_DestinationLeft(long* pDestinationLeft); STDMETHODIMP put_DestinationWidth(long DestinationWidth); STDMETHODIMP get_DestinationWidth(long* pDestinationWidth); STDMETHODIMP put_DestinationTop(long DestinationTop); STDMETHODIMP get_DestinationTop(long* pDestinationTop); STDMETHODIMP put_DestinationHeight(long DestinationHeight); STDMETHODIMP get_DestinationHeight(long* pDestinationHeight); STDMETHODIMP SetSourcePosition(long Left, long Top, long Width, long Height); STDMETHODIMP GetSourcePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight); STDMETHODIMP SetDefaultSourcePosition(); STDMETHODIMP SetDestinationPosition(long Left, long Top, long Width, long Height); STDMETHODIMP GetDestinationPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight); STDMETHODIMP SetDefaultDestinationPosition(); STDMETHODIMP GetVideoSize(long* pWidth, long* pHeight); STDMETHODIMP GetVideoPaletteEntries(long StartIndex, long Entries, long* pRetrieved, long* pPalette); STDMETHODIMP GetCurrentImage(long* pBufferSize, long* pDIBImage); STDMETHODIMP IsUsingDefaultSource(); STDMETHODIMP IsUsingDefaultDestination(); // IBasicAudio STDMETHODIMP put_Volume(long lVolume); STDMETHODIMP get_Volume(long* plVolume); STDMETHODIMP put_Balance(long lBalance); STDMETHODIMP get_Balance(long* plBalance); // IAMOpenProgress STDMETHODIMP QueryProgress(LONGLONG* pllTotal, LONGLONG* pllCurrent); STDMETHODIMP AbortOperation(); // IGraphEngine STDMETHODIMP_(engine_t) GetEngine(); };