/* * Copyright (C) Hidenori TAKESHIMA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WINE_DSHOW_FGRAPH_H #define WINE_DSHOW_FGRAPH_H /* implements CLSID_FilterGraph. - At least, the following interfaces should be implemented: IUnknown + IPersist + IDispatch + IFilterGraph - IGraphBuilder - IFilterGraph2 + IGraphVersion + IGraphConfig + IDispatch - IMediaControl + IPersist - IMediaFilter + IDispatch - IMediaEvent - IMediaEventEx + IMediaEventSink + IDispatch - IMediaPosition + IMediaSeeking + IDispatch - IBasicVideo (pass to a renderer) + IDispatch - IBasicAudio (pass to a renderer) + IDispatch - IVideoWindow (pass to a renderer) (following interfaces are not implemented) + IMarshal + IFilterMapper2 FIXME - Are there any missing interfaces??? */ #include "iunk.h" #include "complist.h" typedef struct FG_IPersistImpl { ICOM_VFIELD(IPersist); } FG_IPersistImpl; typedef struct FG_IDispatchImpl { ICOM_VFIELD(IDispatch); } FG_IDispatchImpl; typedef struct FG_IFilterGraph2Impl { ICOM_VFIELD(IFilterGraph2); } FG_IFilterGraph2Impl; typedef struct FG_IGraphVersionImpl { ICOM_VFIELD(IGraphVersion); } FG_IGraphVersionImpl; typedef struct FG_IMediaControlImpl { ICOM_VFIELD(IMediaControl); } FG_IMediaControlImpl; typedef struct FG_IMediaFilterImpl { ICOM_VFIELD(IMediaFilter); } FG_IMediaFilterImpl; typedef struct FG_IMediaEventImpl { ICOM_VFIELD(IMediaEventEx); } FG_IMediaEventImpl; typedef struct FG_IMediaEventSinkImpl { ICOM_VFIELD(IMediaEventSink); } FG_IMediaEventSinkImpl; typedef struct FG_IMediaPositionImpl { ICOM_VFIELD(IMediaPosition); } FG_IMediaPositionImpl; typedef struct FG_IMediaSeekingImpl { ICOM_VFIELD(IMediaSeeking); } FG_IMediaSeekingImpl; typedef struct FG_IBasicVideoImpl { ICOM_VFIELD(IBasicVideo); } FG_IBasicVideoImpl; typedef struct FG_IBasicAudioImpl { ICOM_VFIELD(IBasicAudio); } FG_IBasicAudioImpl; typedef struct FG_IVideoWindowImpl { ICOM_VFIELD(IVideoWindow); } FG_IVideoWindowImpl; typedef struct FG_FilterData { IBaseFilter* pFilter; IMediaPosition* pPosition; IMediaSeeking* pSeeking; WCHAR* pwszName; DWORD cbName; } FG_FilterData; typedef struct FilterGraph_MEDIAEVENT FilterGraph_MEDIAEVENT; typedef struct CFilterGraph { QUARTZ_IUnkImpl unk; FG_IPersistImpl persist; FG_IDispatchImpl disp; FG_IFilterGraph2Impl fgraph; FG_IGraphVersionImpl graphversion; FG_IMediaControlImpl mediacontrol; FG_IMediaFilterImpl mediafilter; FG_IMediaEventImpl mediaevent; FG_IMediaEventSinkImpl mediaeventsink; FG_IMediaPositionImpl mediaposition; FG_IMediaSeekingImpl mediaseeking; FG_IBasicVideoImpl basvid; FG_IBasicAudioImpl basaud; FG_IVideoWindowImpl vidwin; /* IDispatch fields. */ /* IFilterGraph2 fields. */ CRITICAL_SECTION m_csFilters; DWORD m_cActiveFilters; FG_FilterData* m_pActiveFilters; /* IGraphVersion fields. */ LONG m_lGraphVersion; /* IMediaControl fields. */ /* IMediaFilter fields. */ CRITICAL_SECTION m_csGraphState; FILTER_STATE m_stateGraph; /* must NOT accessed directly! */ CRITICAL_SECTION m_csClock; IReferenceClock* m_pClock; /* IMediaEvent fields. */ HANDLE m_hMediaEvent; CRITICAL_SECTION m_csMediaEvents; FilterGraph_MEDIAEVENT* m_pMediaEvents; ULONG m_cbMediaEventsPut; ULONG m_cbMediaEventsGet; ULONG m_cbMediaEventsMax; HWND m_hwndEventNotify; long m_lEventNotifyMsg; LONG_PTR m_lEventNotifyParam; long m_lEventNotifyFlags; /* IMediaEventSink fields. */ /* IMediaPosition fields. */ /* IMediaSeeking fields. */ /* IBasicVideo fields. */ /* IBasicAudio fields. */ /* IVideoWindow fields. */ } CFilterGraph; #define CFilterGraph_THIS(iface,member) CFilterGraph* This = ((CFilterGraph*)(((char*)iface)-offsetof(CFilterGraph,member))) #define CFilterGraph_IPersist(th) ((IPersist*)&((th)->persist)) #define CFilterGraph_IDispatch(th) ((IDispatch*)&((th)->disp)) #define CFilterGraph_IFilterGraph2(th) ((IFilterGraph2*)&((th)->fgraph)) #define CFilterGraph_IMediaControl(th) ((IMediaControl*)&((th)->mediacontrol)) #define CFilterGraph_IMediaFilter(th) ((IMediaFilter*)&((th)->mediafilter)) #define CFilterGraph_IMediaEventEx(th) ((IMediaEventEx*)&((th)->mediaevent)) #define CFilterGraph_IMediaEventSink(th) ((IMediaEventSink*)&((th)->mediaeventsink)) HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj); HRESULT CFilterGraph_InitIPersist( CFilterGraph* pfg ); void CFilterGraph_UninitIPersist( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIDispatch( CFilterGraph* pfg ); void CFilterGraph_UninitIDispatch( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIFilterGraph2( CFilterGraph* pfg ); void CFilterGraph_UninitIFilterGraph2( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIGraphVersion( CFilterGraph* pfg ); void CFilterGraph_UninitIGraphVersion( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIMediaControl( CFilterGraph* pfg ); void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIMediaFilter( CFilterGraph* pfg ); void CFilterGraph_UninitIMediaFilter( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg ); void CFilterGraph_UninitIMediaEventEx( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIMediaEventSink( CFilterGraph* pfg ); void CFilterGraph_UninitIMediaEventSink( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIMediaPosition( CFilterGraph* pfg ); void CFilterGraph_UninitIMediaPosition( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg ); void CFilterGraph_UninitIMediaSeeking( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIBasicVideo( CFilterGraph* pfg ); void CFilterGraph_UninitIBasicVideo( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIBasicAudio( CFilterGraph* pfg ); void CFilterGraph_UninitIBasicAudio( CFilterGraph* pfg ); HRESULT CFilterGraph_InitIVideoWindow( CFilterGraph* pfg ); void CFilterGraph_UninitIVideoWindow( CFilterGraph* pfg ); #endif /* WINE_DSHOW_FGRAPH_H */