218 lines
6.5 KiB
C
218 lines
6.5 KiB
C
/*
|
|
* 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 */
|