source: trunk/src/quartz/imcntl.c@ 6871

Last change on this file since 6871 was 6710, checked in by sandervl, 24 years ago

wine update

File size: 5.5 KB
Line 
1/*
2 * Implementation of IMediaControl for FilterGraph.
3 *
4 * FIXME - stub.
5 *
6 * hidenori@a2.ctktv.ne.jp
7 */
8
9#include "config.h"
10
11#include "windef.h"
12#include "winbase.h"
13#include "wingdi.h"
14#include "winerror.h"
15#include "wine/obj_base.h"
16#include "wine/obj_oleaut.h"
17#include "oleauto.h"
18#include "strmif.h"
19#include "control.h"
20#include "uuids.h"
21
22#include "debugtools.h"
23DEFAULT_DEBUG_CHANNEL(quartz);
24
25#include "quartz_private.h"
26#include "fgraph.h"
27
28
29
30static HRESULT WINAPI
31IMediaControl_fnQueryInterface(IMediaControl* iface,REFIID riid,void** ppobj)
32{
33 CFilterGraph_THIS(iface,mediacontrol);
34
35 TRACE("(%p)->()\n",This);
36
37 return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
38}
39
40static ULONG WINAPI
41IMediaControl_fnAddRef(IMediaControl* iface)
42{
43 CFilterGraph_THIS(iface,mediacontrol);
44
45 TRACE("(%p)->()\n",This);
46
47 return IUnknown_AddRef(This->unk.punkControl);
48}
49
50static ULONG WINAPI
51IMediaControl_fnRelease(IMediaControl* iface)
52{
53 CFilterGraph_THIS(iface,mediacontrol);
54
55 TRACE("(%p)->()\n",This);
56
57 return IUnknown_Release(This->unk.punkControl);
58}
59
60static HRESULT WINAPI
61IMediaControl_fnGetTypeInfoCount(IMediaControl* iface,UINT* pcTypeInfo)
62{
63 CFilterGraph_THIS(iface,mediacontrol);
64
65 FIXME("(%p)->()\n",This);
66
67 return E_NOTIMPL;
68}
69
70static HRESULT WINAPI
71IMediaControl_fnGetTypeInfo(IMediaControl* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
72{
73 CFilterGraph_THIS(iface,mediacontrol);
74
75 FIXME("(%p)->()\n",This);
76
77 return E_NOTIMPL;
78}
79
80static HRESULT WINAPI
81IMediaControl_fnGetIDsOfNames(IMediaControl* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
82{
83 CFilterGraph_THIS(iface,mediacontrol);
84
85 FIXME("(%p)->()\n",This);
86
87 return E_NOTIMPL;
88}
89
90static HRESULT WINAPI
91IMediaControl_fnInvoke(IMediaControl* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
92{
93 CFilterGraph_THIS(iface,mediacontrol);
94
95 FIXME("(%p)->()\n",This);
96
97 return E_NOTIMPL;
98}
99
100
101static HRESULT WINAPI
102IMediaControl_fnRun(IMediaControl* iface)
103{
104 CFilterGraph_THIS(iface,mediacontrol);
105
106 TRACE("(%p)->()\n",This);
107
108 return IMediaFilter_Run( CFilterGraph_IMediaFilter(This),
109 (REFERENCE_TIME)0 );
110}
111
112static HRESULT WINAPI
113IMediaControl_fnPause(IMediaControl* iface)
114{
115 CFilterGraph_THIS(iface,mediacontrol);
116
117 TRACE("(%p)->()\n",This);
118
119 return IMediaFilter_Pause( CFilterGraph_IMediaFilter(This) );
120}
121
122static HRESULT WINAPI
123IMediaControl_fnStop(IMediaControl* iface)
124{
125 CFilterGraph_THIS(iface,mediacontrol);
126 HRESULT hr;
127 FILTER_STATE fs;
128
129 TRACE("(%p)->()\n",This);
130
131 hr = IMediaControl_GetState(iface,INFINITE,(OAFilterState*)&fs);
132 if ( SUCCEEDED(hr) && fs == State_Running )
133 {
134 hr = IMediaControl_Pause(iface);
135 if ( SUCCEEDED(hr) )
136 hr = IMediaControl_GetState(iface,INFINITE,(OAFilterState*)&fs);
137 }
138
139 if ( SUCCEEDED(hr) && fs == State_Paused )
140 {
141 hr = IMediaFilter_Stop(CFilterGraph_IMediaFilter(This));
142 if ( SUCCEEDED(hr) )
143 hr = IMediaControl_GetState(iface,INFINITE,(OAFilterState*)&fs);
144 }
145
146 return hr;
147}
148
149static HRESULT WINAPI
150IMediaControl_fnGetState(IMediaControl* iface,LONG lTimeOut,OAFilterState* pFilterState)
151{
152 CFilterGraph_THIS(iface,mediacontrol);
153
154 TRACE("(%p)->()\n",This);
155
156 return IMediaFilter_GetState( CFilterGraph_IMediaFilter(This), (DWORD)lTimeOut, (FILTER_STATE*)pFilterState );
157}
158
159static HRESULT WINAPI
160IMediaControl_fnRenderFile(IMediaControl* iface,BSTR bstrFileName)
161{
162 CFilterGraph_THIS(iface,mediacontrol);
163 UINT uLen;
164 WCHAR* pwszName;
165 HRESULT hr;
166
167 TRACE("(%p)->()\n",This);
168
169 uLen = SysStringLen(bstrFileName);
170 pwszName = (WCHAR*)QUARTZ_AllocMem( sizeof(WCHAR) * (uLen+1) );
171 if ( pwszName == NULL )
172 return E_OUTOFMEMORY;
173 memcpy( pwszName, bstrFileName, sizeof(WCHAR)*uLen );
174 pwszName[uLen] = (WCHAR)0;
175
176 hr = IFilterGraph2_RenderFile(
177 CFilterGraph_IFilterGraph2(This), pwszName, NULL );
178
179 QUARTZ_FreeMem( pwszName );
180
181 return hr;
182}
183
184static HRESULT WINAPI
185IMediaControl_fnAddSourceFilter(IMediaControl* iface,BSTR bstrFileName,IDispatch** ppobj)
186{
187 CFilterGraph_THIS(iface,mediacontrol);
188
189 FIXME("(%p)->()\n",This);
190
191 return E_NOTIMPL;
192}
193
194static HRESULT WINAPI
195IMediaControl_fnget_FilterCollection(IMediaControl* iface,IDispatch** ppobj)
196{
197 CFilterGraph_THIS(iface,mediacontrol);
198
199 FIXME("(%p)->()\n",This);
200
201 return E_NOTIMPL;
202}
203
204static HRESULT WINAPI
205IMediaControl_fnget_RegFilterCollection(IMediaControl* iface,IDispatch** ppobj)
206{
207 CFilterGraph_THIS(iface,mediacontrol);
208
209 FIXME("(%p)->()\n",This);
210
211 return E_NOTIMPL;
212}
213
214static HRESULT WINAPI
215IMediaControl_fnStopWhenReady(IMediaControl* iface)
216{
217 CFilterGraph_THIS(iface,mediacontrol);
218
219 TRACE("(%p)->()\n",This);
220
221 return IMediaFilter_Stop( CFilterGraph_IMediaFilter(This) );
222}
223
224
225static ICOM_VTABLE(IMediaControl) imediacontrol =
226{
227 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
228 /* IUnknown fields */
229 IMediaControl_fnQueryInterface,
230 IMediaControl_fnAddRef,
231 IMediaControl_fnRelease,
232 /* IDispatch fields */
233 IMediaControl_fnGetTypeInfoCount,
234 IMediaControl_fnGetTypeInfo,
235 IMediaControl_fnGetIDsOfNames,
236 IMediaControl_fnInvoke,
237 /* IMediaControl fields */
238 IMediaControl_fnRun,
239 IMediaControl_fnPause,
240 IMediaControl_fnStop,
241 IMediaControl_fnGetState,
242 IMediaControl_fnRenderFile,
243 IMediaControl_fnAddSourceFilter,
244 IMediaControl_fnget_FilterCollection,
245 IMediaControl_fnget_RegFilterCollection,
246 IMediaControl_fnStopWhenReady,
247};
248
249
250HRESULT CFilterGraph_InitIMediaControl( CFilterGraph* pfg )
251{
252 TRACE("(%p)\n",pfg);
253 ICOM_VTBL(&pfg->mediacontrol) = &imediacontrol;
254
255 return NOERROR;
256}
257
258void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg )
259{
260 TRACE("(%p)\n",pfg);
261}
Note: See TracBrowser for help on using the repository browser.