Changeset 6710 for trunk/src/quartz/fgraph.c
- Timestamp:
- Sep 15, 2001, 11:28:23 AM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/quartz/fgraph.c
r6649 r6710 1 /* $Id: fgraph.c,v 1.3 2001-09-05 13:36:34 bird Exp $ */2 1 /* 3 2 * Implementation of CLSID_FilterGraph. 4 *5 * FIXME - stub.6 3 * 7 4 * hidenori@a2.ctktv.ne.jp … … 29 26 static QUARTZ_IFEntry IFEntries[] = 30 27 { 28 { &IID_IPersist, offsetof(CFilterGraph,persist)-offsetof(CFilterGraph,unk) }, 29 { &IID_IDispatch, offsetof(CFilterGraph,disp)-offsetof(CFilterGraph,unk) }, 31 30 { &IID_IFilterGraph, offsetof(CFilterGraph,fgraph)-offsetof(CFilterGraph,unk) }, 32 31 { &IID_IGraphBuilder, offsetof(CFilterGraph,fgraph)-offsetof(CFilterGraph,unk) }, 33 32 { &IID_IFilterGraph2, offsetof(CFilterGraph,fgraph)-offsetof(CFilterGraph,unk) }, 33 { &IID_IGraphVersion, offsetof(CFilterGraph,graphversion)-offsetof(CFilterGraph,unk) }, 34 34 { &IID_IMediaControl, offsetof(CFilterGraph,mediacontrol)-offsetof(CFilterGraph,unk) }, 35 { &IID_IMediaFilter, offsetof(CFilterGraph,mediafilter)-offsetof(CFilterGraph,unk) }, 35 36 { &IID_IMediaEvent, offsetof(CFilterGraph,mediaevent)-offsetof(CFilterGraph,unk) }, 36 37 { &IID_IMediaEventEx, offsetof(CFilterGraph,mediaevent)-offsetof(CFilterGraph,unk) }, 38 { &IID_IMediaEventSink, offsetof(CFilterGraph,mediaeventsink)-offsetof(CFilterGraph,unk) }, 37 39 { &IID_IMediaPosition, offsetof(CFilterGraph,mediaposition)-offsetof(CFilterGraph,unk) }, 38 40 { &IID_IMediaSeeking, offsetof(CFilterGraph,mediaseeking)-offsetof(CFilterGraph,unk) }, 39 41 { &IID_IBasicVideo, offsetof(CFilterGraph,basvid)-offsetof(CFilterGraph,unk) }, 42 { &IID_IBasicVideo2, offsetof(CFilterGraph,basvid)-offsetof(CFilterGraph,unk) }, 40 43 { &IID_IBasicAudio, offsetof(CFilterGraph,basaud)-offsetof(CFilterGraph,unk) }, 41 44 { &IID_IVideoWindow, offsetof(CFilterGraph,vidwin)-offsetof(CFilterGraph,unk) }, 42 45 }; 43 46 47 48 struct FGInitEntry 49 { 50 HRESULT (*pInit)(CFilterGraph*); 51 void (*pUninit)(CFilterGraph*); 52 }; 53 54 static const struct FGInitEntry FGRAPH_Init[] = 55 { 56 #define FGENT(a) {&CFilterGraph_Init##a,&CFilterGraph_Uninit##a}, 57 58 FGENT(IPersist) 59 FGENT(IDispatch) 60 FGENT(IFilterGraph2) 61 FGENT(IGraphVersion) 62 FGENT(IMediaControl) 63 FGENT(IMediaFilter) 64 FGENT(IMediaEventEx) 65 FGENT(IMediaEventSink) 66 FGENT(IMediaPosition) 67 FGENT(IMediaSeeking) 68 FGENT(IBasicVideo2) 69 FGENT(IBasicAudio) 70 FGENT(IVideoWindow) 71 72 #undef FGENT 73 { NULL, NULL }, 74 }; 75 76 77 static void QUARTZ_DestroyFilterGraph(IUnknown* punk) 78 { 79 CFilterGraph_THIS(punk,unk); 80 int i; 81 82 /* At first, call Stop. */ 83 IMediaControl_Stop( CFilterGraph_IMediaControl(This) ); 84 IMediaFilter_Stop( CFilterGraph_IMediaFilter(This) ); 85 86 i = 0; 87 while ( FGRAPH_Init[i].pInit != NULL ) 88 { 89 FGRAPH_Init[i].pUninit( This ); 90 i++; 91 } 92 93 TRACE( "succeeded.\n" ); 94 } 95 44 96 HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj) 45 97 { 46 CFilterGraph* pfg; 98 CFilterGraph* pfg; 99 HRESULT hr; 100 int i; 47 101 48 102 TRACE("(%p,%p)\n",punkOuter,ppobj); 49 103 50 51 52 104 pfg = (CFilterGraph*)QUARTZ_AllocObj( sizeof(CFilterGraph) ); 105 if ( pfg == NULL ) 106 return E_OUTOFMEMORY; 53 107 54 QUARTZ_IUnkInit( &pfg->unk, punkOuter ); 55 CFilterGraph_InitIFilterGraph2( pfg ); 56 CFilterGraph_InitIMediaControl( pfg ); 57 CFilterGraph_InitIMediaEventEx( pfg ); 58 CFilterGraph_InitIMediaPosition( pfg ); 59 CFilterGraph_InitIMediaSeeking( pfg ); 60 CFilterGraph_InitIBasicVideo2( pfg ); 61 CFilterGraph_InitIBasicAudio( pfg ); 62 CFilterGraph_InitIVideoWindow( pfg ); 108 QUARTZ_IUnkInit( &pfg->unk, punkOuter ); 63 109 64 pfg->unk.pEntries = IFEntries; 65 pfg->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]); 110 i = 0; 111 hr = NOERROR; 112 while ( FGRAPH_Init[i].pInit != NULL ) 113 { 114 hr = FGRAPH_Init[i].pInit( pfg ); 115 if ( FAILED(hr) ) 116 break; 117 i++; 118 } 66 119 67 *ppobj = (void*)(&pfg->unk); 120 if ( FAILED(hr) ) 121 { 122 while ( --i >= 0 ) 123 FGRAPH_Init[i].pUninit( pfg ); 124 QUARTZ_FreeObj( pfg ); 125 return hr; 126 } 68 127 69 return S_OK; 128 pfg->unk.pEntries = IFEntries; 129 pfg->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]); 130 pfg->unk.pOnFinalRelease = QUARTZ_DestroyFilterGraph; 131 132 *ppobj = (void*)(&pfg->unk); 133 134 return S_OK; 70 135 } 136 137
Note:
See TracChangeset
for help on using the changeset viewer.