Add $X_LIBS path while searching for libfreetype.
[wine/gsoc_dplay.git] / dlls / quartz / imcntl.c
blob467210cdacc3afdd722b89981c4cd56374497e03
1 /*
2 * Implementation of IMediaControl for FilterGraph.
4 * FIXME - stub.
6 * hidenori@a2.ctktv.ne.jp
7 */
9 #include "config.h"
11 #include "windef.h"
12 #include "winbase.h"
13 #include "wingdi.h"
14 #include "winuser.h"
15 #include "winerror.h"
16 #include "oleauto.h"
17 #include "strmif.h"
18 #include "control.h"
19 #include "uuids.h"
21 #include "debugtools.h"
22 DEFAULT_DEBUG_CHANNEL(quartz);
24 #include "quartz_private.h"
25 #include "fgraph.h"
29 static HRESULT WINAPI
30 IMediaControl_fnQueryInterface(IMediaControl* iface,REFIID riid,void** ppobj)
32 CFilterGraph_THIS(iface,mediacontrol);
34 TRACE("(%p)->()\n",This);
36 return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
39 static ULONG WINAPI
40 IMediaControl_fnAddRef(IMediaControl* iface)
42 CFilterGraph_THIS(iface,mediacontrol);
44 TRACE("(%p)->()\n",This);
46 return IUnknown_AddRef(This->unk.punkControl);
49 static ULONG WINAPI
50 IMediaControl_fnRelease(IMediaControl* iface)
52 CFilterGraph_THIS(iface,mediacontrol);
54 TRACE("(%p)->()\n",This);
56 return IUnknown_Release(This->unk.punkControl);
59 static HRESULT WINAPI
60 IMediaControl_fnGetTypeInfoCount(IMediaControl* iface,UINT* pcTypeInfo)
62 CFilterGraph_THIS(iface,mediacontrol);
64 FIXME("(%p)->()\n",This);
66 return E_NOTIMPL;
69 static HRESULT WINAPI
70 IMediaControl_fnGetTypeInfo(IMediaControl* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
72 CFilterGraph_THIS(iface,mediacontrol);
74 FIXME("(%p)->()\n",This);
76 return E_NOTIMPL;
79 static HRESULT WINAPI
80 IMediaControl_fnGetIDsOfNames(IMediaControl* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
82 CFilterGraph_THIS(iface,mediacontrol);
84 FIXME("(%p)->()\n",This);
86 return E_NOTIMPL;
89 static HRESULT WINAPI
90 IMediaControl_fnInvoke(IMediaControl* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
92 CFilterGraph_THIS(iface,mediacontrol);
94 FIXME("(%p)->()\n",This);
96 return E_NOTIMPL;
100 static HRESULT WINAPI
101 IMediaControl_fnRun(IMediaControl* iface)
103 CFilterGraph_THIS(iface,mediacontrol);
105 TRACE("(%p)->()\n",This);
107 return IMediaFilter_Run( CFilterGraph_IMediaFilter(This),
108 (REFERENCE_TIME)0 );
111 static HRESULT WINAPI
112 IMediaControl_fnPause(IMediaControl* iface)
114 CFilterGraph_THIS(iface,mediacontrol);
116 TRACE("(%p)->()\n",This);
118 return IMediaFilter_Pause( CFilterGraph_IMediaFilter(This) );
121 static HRESULT WINAPI
122 IMediaControl_fnStop(IMediaControl* iface)
124 CFilterGraph_THIS(iface,mediacontrol);
125 HRESULT hr;
126 FILTER_STATE fs;
128 TRACE("(%p)->()\n",This);
130 hr = IMediaControl_GetState(iface,INFINITE,(OAFilterState*)&fs);
131 if ( SUCCEEDED(hr) && fs == State_Running )
133 hr = IMediaControl_Pause(iface);
134 if ( SUCCEEDED(hr) )
135 hr = IMediaControl_GetState(iface,INFINITE,(OAFilterState*)&fs);
138 if ( SUCCEEDED(hr) && fs == State_Paused )
140 hr = IMediaFilter_Stop(CFilterGraph_IMediaFilter(This));
141 if ( SUCCEEDED(hr) )
142 hr = IMediaControl_GetState(iface,INFINITE,(OAFilterState*)&fs);
145 return hr;
148 static HRESULT WINAPI
149 IMediaControl_fnGetState(IMediaControl* iface,LONG lTimeOut,OAFilterState* pFilterState)
151 CFilterGraph_THIS(iface,mediacontrol);
153 TRACE("(%p)->()\n",This);
155 return IMediaFilter_GetState( CFilterGraph_IMediaFilter(This), (DWORD)lTimeOut, (FILTER_STATE*)pFilterState );
158 static HRESULT WINAPI
159 IMediaControl_fnRenderFile(IMediaControl* iface,BSTR bstrFileName)
161 CFilterGraph_THIS(iface,mediacontrol);
162 UINT uLen;
163 WCHAR* pwszName;
164 HRESULT hr;
166 TRACE("(%p)->()\n",This);
168 uLen = SysStringLen(bstrFileName);
169 pwszName = (WCHAR*)QUARTZ_AllocMem( sizeof(WCHAR) * (uLen+1) );
170 if ( pwszName == NULL )
171 return E_OUTOFMEMORY;
172 memcpy( pwszName, bstrFileName, sizeof(WCHAR)*uLen );
173 pwszName[uLen] = (WCHAR)0;
175 hr = IFilterGraph2_RenderFile(
176 CFilterGraph_IFilterGraph2(This), pwszName, NULL );
178 QUARTZ_FreeMem( pwszName );
180 return hr;
183 static HRESULT WINAPI
184 IMediaControl_fnAddSourceFilter(IMediaControl* iface,BSTR bstrFileName,IDispatch** ppobj)
186 CFilterGraph_THIS(iface,mediacontrol);
188 FIXME("(%p)->()\n",This);
190 return E_NOTIMPL;
193 static HRESULT WINAPI
194 IMediaControl_fnget_FilterCollection(IMediaControl* iface,IDispatch** ppobj)
196 CFilterGraph_THIS(iface,mediacontrol);
198 FIXME("(%p)->()\n",This);
200 return E_NOTIMPL;
203 static HRESULT WINAPI
204 IMediaControl_fnget_RegFilterCollection(IMediaControl* iface,IDispatch** ppobj)
206 CFilterGraph_THIS(iface,mediacontrol);
208 FIXME("(%p)->()\n",This);
210 return E_NOTIMPL;
213 static HRESULT WINAPI
214 IMediaControl_fnStopWhenReady(IMediaControl* iface)
216 CFilterGraph_THIS(iface,mediacontrol);
218 TRACE("(%p)->()\n",This);
220 return IMediaFilter_Stop( CFilterGraph_IMediaFilter(This) );
224 static ICOM_VTABLE(IMediaControl) imediacontrol =
226 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
227 /* IUnknown fields */
228 IMediaControl_fnQueryInterface,
229 IMediaControl_fnAddRef,
230 IMediaControl_fnRelease,
231 /* IDispatch fields */
232 IMediaControl_fnGetTypeInfoCount,
233 IMediaControl_fnGetTypeInfo,
234 IMediaControl_fnGetIDsOfNames,
235 IMediaControl_fnInvoke,
236 /* IMediaControl fields */
237 IMediaControl_fnRun,
238 IMediaControl_fnPause,
239 IMediaControl_fnStop,
240 IMediaControl_fnGetState,
241 IMediaControl_fnRenderFile,
242 IMediaControl_fnAddSourceFilter,
243 IMediaControl_fnget_FilterCollection,
244 IMediaControl_fnget_RegFilterCollection,
245 IMediaControl_fnStopWhenReady,
249 HRESULT CFilterGraph_InitIMediaControl( CFilterGraph* pfg )
251 TRACE("(%p)\n",pfg);
252 ICOM_VTBL(&pfg->mediacontrol) = &imediacontrol;
254 return NOERROR;
257 void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg )
259 TRACE("(%p)\n",pfg);