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

Last change on this file since 7029 was 6952, checked in by sandervl, 24 years ago

Wine 20011004 resync

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