- Main Page
- Namespaces
- Classes
- Files
- Directories

- File List
- File Members

# BaseGraph.h

    00001 /*
    00002  *      Copyright (C) 2003-2005 Gabest
    00003  *      http://www.gabest.org
    00004  *
    00005  *  This Program is free software; you can redistribute it and/or modify
    00006  *  it under the terms of the GNU General Public License as published by
    00007  *  the Free Software Foundation; either version 2, or (at your option)
    00008  *  any later version.
    00009  *
    00010  *  This Program is distributed in the hope that it will be useful,
    00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    00013  *  GNU General Public License for more details.
    00014  *
    00015  *  You should have received a copy of the GNU General Public License
    00016  *  along with GNU Make; see the file COPYING.  If not, write to
    00017  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
    00018  *  http://www.gnu.org/copyleft/gpl.html
    00019  *
    00020  */
    00021
    00022 #pragma once
    00023
    00024 class CPlayerWindow : public CWnd
    00025 {
    00026 public:
    00027         CPlayerWindow() {}
    00028
    00029 protected:
    00030         virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    00031         afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    00032         DECLARE_MESSAGE_MAP()
    00033 };
    00034
    00035 typedef enum {DirectShow = 0, RealMedia, QuickTime, ShockWave} engine_t;
    00036
    00037 [uuid("B110CDE5-6331-4118-8AAF-A870D6F7E2E4")]
    00038 interface IGraphEngine : public IUnknown
    00039 {
    00040         STDMETHOD_(engine_t, GetEngine) () = 0;
    00041 };
    00042
    00043 namespace DSObjects
    00044 {
    00045
    00046 enum
    00047 {
    00048         EC_BG_AUDIO_CHANGED = EC_USER+1,
    00049         EC_BG_ERROR
    00050 };
    00051
    00052 class CBaseGraph
    00053         : public CUnknown
    00054         , public IGraphBuilder
    00055         , public IMediaControl
    00056         , public IMediaEventEx
    00057         , public IMediaSeeking
    00058         , public IVideoWindow
    00059         , public IBasicVideo
    00060         , public IBasicAudio
    00061         , public IAMOpenProgress
    00062         , public IGraphEngine
    00063 {
    00064         OAHWND m_hNotifyWnd;
    00065         long m_lNotifyMsg;
    00066         LONG_PTR m_lNotifyInstData;
    00067
    00068         typedef struct {long m_lEventCode; LONG_PTR m_lParam1, m_lParam2;} GMSG;
    00069         CList<GMSG> m_msgqueue;
    00070
    00071 protected:
    00072         void ClearMessageQueue();
    00073
    00074 public:
    00075         CBaseGraph();
    00076         virtual ~CBaseGraph();
    00077
    00078     DECLARE_IUNKNOWN;
    00079     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
    00080
    00081         void NotifyEvent(long lEventCode, LONG_PTR lParam1 = 0, LONG_PTR lParam2 = 0);
    00082
    00083 protected:
    00084     // IDispatch
    00085         STDMETHODIMP GetTypeInfoCount(UINT* pctinfo);
    00086         STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo);
    00087         STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId);
    00088         STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr);
    00089
    00090         // IFilterGraph
    00091     STDMETHODIMP AddFilter(IBaseFilter* pFilter, LPCWSTR pName);
    00092         STDMETHODIMP RemoveFilter(IBaseFilter* pFilter);
    00093         STDMETHODIMP EnumFilters(IEnumFilters** ppEnum);
    00094         STDMETHODIMP FindFilterByName(LPCWSTR pName, IBaseFilter** ppFilter);
    00095         STDMETHODIMP ConnectDirect(IPin* ppinOut, IPin* ppinIn, const AM_MEDIA_TYPE* pmt);
    00096     STDMETHODIMP Reconnect(IPin* ppin);
    00097         STDMETHODIMP Disconnect(IPin* ppin);
    00098     STDMETHODIMP SetDefaultSyncSource();
    00099
    00100         // IGraphBuilder
    00101         STDMETHODIMP Connect(IPin* ppinOut, IPin* ppinIn);
    00102     STDMETHODIMP Render(IPin* ppinOut);
    00103     STDMETHODIMP RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList);
    00104         STDMETHODIMP AddSourceFilter(LPCWSTR lpcwstrFileName, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter);
    00105     STDMETHODIMP SetLogFile(DWORD_PTR hFile);
    00106     STDMETHODIMP Abort();
    00107     STDMETHODIMP ShouldOperationContinue();
    00108
    00109         // IMediaControl
    00110     STDMETHODIMP Run();
    00111     STDMETHODIMP Pause();
    00112     STDMETHODIMP Stop();
    00113         STDMETHODIMP GetState(LONG msTimeout, OAFilterState* pfs);
    00114     STDMETHODIMP RenderFile(BSTR strFilename);
    00115     STDMETHODIMP AddSourceFilter(BSTR strFilename, IDispatch** ppUnk);
    00116     STDMETHODIMP get_FilterCollection(IDispatch** ppUnk);
    00117     STDMETHODIMP get_RegFilterCollection(IDispatch** ppUnk);
    00118     STDMETHODIMP StopWhenReady();
    00119
    00120         // IMediaEvent
    00121     STDMETHODIMP GetEventHandle(OAEVENT* hEvent);
    00122         STDMETHODIMP GetEvent(long* lEventCode, LONG_PTR* lParam1, LONG_PTR* lParam2, long msTimeout);
    00123     STDMETHODIMP WaitForCompletion(long msTimeout, long* pEvCode);
    00124         STDMETHODIMP CancelDefaultHandling(long lEvCode);
    00125         STDMETHODIMP RestoreDefaultHandling(long lEvCode);
    00126         STDMETHODIMP FreeEventParams(long lEvCode, LONG_PTR lParam1, LONG_PTR lParam2);
    00127
    00128         // IMediaEventEx
    00129     STDMETHODIMP SetNotifyWindow(OAHWND hwnd, long lMsg, LONG_PTR lInstanceData);
    00130     STDMETHODIMP SetNotifyFlags(long lNoNotifyFlags);
    00131         STDMETHODIMP GetNotifyFlags(long* lplNoNotifyFlags);
    00132
    00133         // IMediaSeeking
    00134         STDMETHODIMP GetCapabilities(DWORD* pCapabilities);
    00135         STDMETHODIMP CheckCapabilities(DWORD* pCapabilities);
    00136         STDMETHODIMP IsFormatSupported(const GUID* pFormat);
    00137         STDMETHODIMP QueryPreferredFormat(GUID* pFormat);
    00138         STDMETHODIMP GetTimeFormat(GUID* pFormat);
    00139         STDMETHODIMP IsUsingTimeFormat(const GUID* pFormat);
    00140         STDMETHODIMP SetTimeFormat(const GUID* pFormat);
    00141         STDMETHODIMP GetDuration(LONGLONG* pDuration);
    00142         STDMETHODIMP GetStopPosition(LONGLONG* pStop);
    00143         STDMETHODIMP GetCurrentPosition(LONGLONG* pCurrent);
    00144         STDMETHODIMP ConvertTimeFormat(LONGLONG* pTarget, const GUID* pTargetFormat, LONGLONG Source, const GUID* pSourceFormat);
    00145         STDMETHODIMP SetPositions(LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags);
    00146         STDMETHODIMP GetPositions(LONGLONG* pCurrent, LONGLONG* pStop);
    00147         STDMETHODIMP GetAvailable(LONGLONG* pEarliest, LONGLONG* pLatest);
    00148         STDMETHODIMP SetRate(double dRate);
    00149         STDMETHODIMP GetRate(double* pdRate);
    00150         STDMETHODIMP GetPreroll(LONGLONG* pllPreroll);
    00151
    00152         // IVideoWindow
    00153     STDMETHODIMP put_Caption(BSTR strCaption);
    00154     STDMETHODIMP get_Caption(BSTR* strCaption);
    00155         STDMETHODIMP put_WindowStyle(long WindowStyle);
    00156         STDMETHODIMP get_WindowStyle(long* WindowStyle);
    00157         STDMETHODIMP put_WindowStyleEx(long WindowStyleEx);
    00158         STDMETHODIMP get_WindowStyleEx(long* WindowStyleEx);
    00159         STDMETHODIMP put_AutoShow(long AutoShow);
    00160         STDMETHODIMP get_AutoShow(long* AutoShow);
    00161         STDMETHODIMP put_WindowState(long WindowState);
    00162         STDMETHODIMP get_WindowState(long* WindowState);
    00163         STDMETHODIMP put_BackgroundPalette(long BackgroundPalette);
    00164         STDMETHODIMP get_BackgroundPalette(long* pBackgroundPalette);
    00165         STDMETHODIMP put_Visible(long Visible);
    00166         STDMETHODIMP get_Visible(long* pVisible);
    00167         STDMETHODIMP put_Left(long Left);
    00168         STDMETHODIMP get_Left(long* pLeft);
    00169         STDMETHODIMP put_Width(long Width);
    00170         STDMETHODIMP get_Width(long* pWidth);
    00171         STDMETHODIMP put_Top(long Top);
    00172         STDMETHODIMP get_Top(long* pTop);
    00173         STDMETHODIMP put_Height(long Height);
    00174         STDMETHODIMP get_Height(long* pHeight);
    00175         STDMETHODIMP put_Owner(OAHWND Owner);
    00176         STDMETHODIMP get_Owner(OAHWND* Owner);
    00177         STDMETHODIMP put_MessageDrain(OAHWND Drain);
    00178         STDMETHODIMP get_MessageDrain(OAHWND* Drain);
    00179         STDMETHODIMP get_BorderColor(long* Color);
    00180         STDMETHODIMP put_BorderColor(long Color);
    00181         STDMETHODIMP get_FullScreenMode(long* FullScreenMode);
    00182         STDMETHODIMP put_FullScreenMode(long FullScreenMode);
    00183     STDMETHODIMP SetWindowForeground(long Focus);
    00184     STDMETHODIMP NotifyOwnerMessage(OAHWND hwnd, long uMsg, LONG_PTR wParam, LONG_PTR lParam);
    00185     STDMETHODIMP SetWindowPosition(long Left, long Top, long Width, long Height);
    00186         STDMETHODIMP GetWindowPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight);
    00187         STDMETHODIMP GetMinIdealImageSize(long* pWidth, long* pHeight);
    00188         STDMETHODIMP GetMaxIdealImageSize(long* pWidth, long* pHeight);
    00189         STDMETHODIMP GetRestorePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight);
    00190         STDMETHODIMP HideCursor(long HideCursor);
    00191         STDMETHODIMP IsCursorHidden(long* CursorHidden);
    00192
    00193         // IBasicVideo
    00194     STDMETHODIMP get_AvgTimePerFrame(REFTIME* pAvgTimePerFrame);
    00195     STDMETHODIMP get_BitRate(long* pBitRate);
    00196     STDMETHODIMP get_BitErrorRate(long* pBitErrorRate);
    00197     STDMETHODIMP get_VideoWidth(long* pVideoWidth);
    00198     STDMETHODIMP get_VideoHeight(long* pVideoHeight);
    00199     STDMETHODIMP put_SourceLeft(long SourceLeft);
    00200     STDMETHODIMP get_SourceLeft(long* pSourceLeft);
    00201     STDMETHODIMP put_SourceWidth(long SourceWidth);
    00202     STDMETHODIMP get_SourceWidth(long* pSourceWidth);
    00203     STDMETHODIMP put_SourceTop(long SourceTop);
    00204     STDMETHODIMP get_SourceTop(long* pSourceTop);
    00205     STDMETHODIMP put_SourceHeight(long SourceHeight);
    00206     STDMETHODIMP get_SourceHeight(long* pSourceHeight);
    00207     STDMETHODIMP put_DestinationLeft(long DestinationLeft);
    00208     STDMETHODIMP get_DestinationLeft(long* pDestinationLeft);
    00209     STDMETHODIMP put_DestinationWidth(long DestinationWidth);
    00210     STDMETHODIMP get_DestinationWidth(long* pDestinationWidth);
    00211     STDMETHODIMP put_DestinationTop(long DestinationTop);
    00212     STDMETHODIMP get_DestinationTop(long* pDestinationTop);
    00213     STDMETHODIMP put_DestinationHeight(long DestinationHeight);
    00214     STDMETHODIMP get_DestinationHeight(long* pDestinationHeight);
    00215     STDMETHODIMP SetSourcePosition(long Left, long Top, long Width, long Height);
    00216     STDMETHODIMP GetSourcePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight);
    00217     STDMETHODIMP SetDefaultSourcePosition();
    00218     STDMETHODIMP SetDestinationPosition(long Left, long Top, long Width, long Height);
    00219     STDMETHODIMP GetDestinationPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight);
    00220     STDMETHODIMP SetDefaultDestinationPosition();
    00221     STDMETHODIMP GetVideoSize(long* pWidth, long* pHeight);
    00222     STDMETHODIMP GetVideoPaletteEntries(long StartIndex, long Entries, long* pRetrieved, long* pPalette);
    00223     STDMETHODIMP GetCurrentImage(long* pBufferSize, long* pDIBImage);
    00224     STDMETHODIMP IsUsingDefaultSource();
    00225     STDMETHODIMP IsUsingDefaultDestination();
    00226
    00227         // IBasicAudio
    00228     STDMETHODIMP put_Volume(long lVolume);
    00229     STDMETHODIMP get_Volume(long* plVolume);
    00230     STDMETHODIMP put_Balance(long lBalance);
    00231     STDMETHODIMP get_Balance(long* plBalance);
    00232
    00233         // IAMOpenProgress
    00234         STDMETHODIMP QueryProgress(LONGLONG* pllTotal, LONGLONG* pllCurrent);
    00235         STDMETHODIMP AbortOperation();
    00236
    00237         // IGraphEngine
    00238         STDMETHODIMP_(engine_t) GetEngine();
    00239 };
    00240
    00241 }
    00242 using namespace DSObjects;