2 * Implementation of MediaStream Filter
4 * Copyright 2008 Christian Costa
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "wine/debug.h"
28 #include "amstream_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(amstream
);
36 IMediaStreamFilter IMediaStreamFilter_iface
;
38 CRITICAL_SECTION csFilter
;
40 REFERENCE_TIME rtStreamStart
;
41 IReferenceClock
* pClock
;
42 FILTER_INFO filterInfo
;
43 } IMediaStreamFilterImpl
;
45 static inline IMediaStreamFilterImpl
*impl_from_IMediaStreamFilter(IMediaStreamFilter
*iface
)
47 return CONTAINING_RECORD(iface
, IMediaStreamFilterImpl
, IMediaStreamFilter_iface
);
50 /*** IUnknown methods ***/
52 static HRESULT WINAPI
MediaStreamFilterImpl_QueryInterface(IMediaStreamFilter
*iface
, REFIID riid
,
55 IMediaStreamFilterImpl
*This
= impl_from_IMediaStreamFilter(iface
);
57 TRACE("(%p)->(%s, %p)\n", iface
, debugstr_guid(riid
), ppv
);
61 if (IsEqualIID(riid
, &IID_IUnknown
))
63 else if (IsEqualIID(riid
, &IID_IPersist
))
65 else if (IsEqualIID(riid
, &IID_IMediaFilter
))
67 else if (IsEqualIID(riid
, &IID_IBaseFilter
))
69 else if (IsEqualIID(riid
, &IID_IMediaStreamFilter
))
74 IUnknown_AddRef((IUnknown
*)(*ppv
));
81 static ULONG WINAPI
MediaStreamFilterImpl_AddRef(IMediaStreamFilter
*iface
)
83 IMediaStreamFilterImpl
*This
= impl_from_IMediaStreamFilter(iface
);
84 ULONG refCount
= InterlockedIncrement(&This
->ref
);
86 TRACE("(%p)->() AddRef from %d\n", iface
, refCount
- 1);
91 static ULONG WINAPI
MediaStreamFilterImpl_Release(IMediaStreamFilter
*iface
)
93 IMediaStreamFilterImpl
*This
= impl_from_IMediaStreamFilter(iface
);
94 ULONG refCount
= InterlockedDecrement(&This
->ref
);
96 TRACE("(%p)->() Release from %d\n", iface
, refCount
+ 1);
99 HeapFree(GetProcessHeap(), 0, This
);
104 /*** IPersist methods ***/
106 static HRESULT WINAPI
MediaStreamFilterImpl_GetClassID(IMediaStreamFilter
* iface
, CLSID
* pClsid
)
108 TRACE("(%p)->(%p)\n", iface
, pClsid
);
110 *pClsid
= CLSID_MediaStreamFilter
;
115 /*** IMediaFilter methods ***/
117 static HRESULT WINAPI
MediaStreamFilterImpl_Stop(IMediaStreamFilter
* iface
)
119 FIXME("(%p)->(): Stub!\n", iface
);
124 static HRESULT WINAPI
MediaStreamFilterImpl_Pause(IMediaStreamFilter
* iface
)
126 FIXME("(%p)->(): Stub!\n", iface
);
131 static HRESULT WINAPI
MediaStreamFilterImpl_Run(IMediaStreamFilter
* iface
, REFERENCE_TIME tStart
)
133 FIXME("(%p)->(%s): Stub!\n", iface
, wine_dbgstr_longlong(tStart
));
138 static HRESULT WINAPI
MediaStreamFilterImpl_GetState(IMediaStreamFilter
* iface
, DWORD dwMilliSecsTimeout
, FILTER_STATE
*pState
)
140 FIXME("(%p)->(%d,%p): Stub!\n", iface
, dwMilliSecsTimeout
, pState
);
145 static HRESULT WINAPI
MediaStreamFilterImpl_SetSyncSource(IMediaStreamFilter
* iface
, IReferenceClock
*pClock
)
147 TRACE("(%p)->(%p): Stub!\n", iface
, pClock
);
152 static HRESULT WINAPI
MediaStreamFilterImpl_GetSyncSource(IMediaStreamFilter
* iface
, IReferenceClock
**ppClock
)
154 FIXME("(%p)->(%p): Stub!\n", iface
, ppClock
);
159 /*** IBaseFilter methods ***/
161 static HRESULT WINAPI
MediaStreamFilterImpl_EnumPins(IMediaStreamFilter
* iface
, IEnumPins
**ppEnum
)
163 FIXME("(%p)->(%p): Stub!\n", iface
, ppEnum
);
168 static HRESULT WINAPI
MediaStreamFilterImpl_FindPin(IMediaStreamFilter
* iface
, LPCWSTR Id
, IPin
**ppPin
)
170 FIXME("(%p)->(%s,%p): Stub!\n", iface
, debugstr_w(Id
), ppPin
);
175 static HRESULT WINAPI
MediaStreamFilterImpl_QueryFilterInfo(IMediaStreamFilter
* iface
, FILTER_INFO
*pInfo
)
177 FIXME("(%p)->(%p): Stub!\n", iface
, pInfo
);
182 static HRESULT WINAPI
MediaStreamFilterImpl_JoinFilterGraph(IMediaStreamFilter
* iface
, IFilterGraph
*pGraph
, LPCWSTR pName
)
184 FIXME("(%p)->(%p, %s): Stub!\n", iface
, pGraph
, debugstr_w(pName
));
189 static HRESULT WINAPI
MediaStreamFilterImpl_QueryVendorInfo(IMediaStreamFilter
* iface
, LPWSTR
*pVendorInfo
)
191 FIXME("(%p)->(%p): Stub!\n", iface
, pVendorInfo
);
196 /*** IMediaStreamFilter methods ***/
198 static HRESULT WINAPI
MediaStreamFilterImpl_AddMediaStream(IMediaStreamFilter
* iface
, IAMMediaStream
*pAMMediaStream
)
200 FIXME("(%p)->(%p): Stub!\n", iface
, pAMMediaStream
);
205 static HRESULT WINAPI
MediaStreamFilterImpl_GetMediaStream(IMediaStreamFilter
* iface
, REFMSPID idPurpose
, IMediaStream
**ppMediaStream
)
207 FIXME("(%p)->(%s,%p): Stub!\n", iface
, debugstr_guid(idPurpose
), ppMediaStream
);
212 static HRESULT WINAPI
MediaStreamFilterImpl_EnumMediaStreams(IMediaStreamFilter
* iface
, LONG Index
, IMediaStream
**ppMediaStream
)
214 FIXME("(%p)->(%d,%p): Stub!\n", iface
, Index
, ppMediaStream
);
219 static HRESULT WINAPI
MediaStreamFilterImpl_SupportSeeking(IMediaStreamFilter
* iface
, BOOL bRenderer
)
221 FIXME("(%p)->(%d): Stub!\n", iface
, bRenderer
);
226 static HRESULT WINAPI
MediaStreamFilterImpl_ReferenceTimeToStreamTime(IMediaStreamFilter
* iface
, REFERENCE_TIME
*pTime
)
228 FIXME("(%p)->(%p): Stub!\n", iface
, pTime
);
233 static HRESULT WINAPI
MediaStreamFilterImpl_GetCurrentStreamTime(IMediaStreamFilter
* iface
, REFERENCE_TIME
*pCurrentStreamTime
)
235 FIXME("(%p)->(%p): Stub!\n", iface
, pCurrentStreamTime
);
240 static HRESULT WINAPI
MediaStreamFilterImpl_WaitUntil(IMediaStreamFilter
* iface
, REFERENCE_TIME WaitStreamTime
)
242 FIXME("(%p)->(%s): Stub!\n", iface
, wine_dbgstr_longlong(WaitStreamTime
));
247 static HRESULT WINAPI
MediaStreamFilterImpl_Flush(IMediaStreamFilter
* iface
, BOOL bCancelEOS
)
249 FIXME("(%p)->(%d): Stub!\n", iface
, bCancelEOS
);
254 static HRESULT WINAPI
MediaStreamFilterImpl_EndOfStream(IMediaStreamFilter
* iface
)
256 FIXME("(%p)->(): Stub!\n", iface
);
261 static const IMediaStreamFilterVtbl MediaStreamFilter_Vtbl
=
263 MediaStreamFilterImpl_QueryInterface
,
264 MediaStreamFilterImpl_AddRef
,
265 MediaStreamFilterImpl_Release
,
266 MediaStreamFilterImpl_GetClassID
,
267 MediaStreamFilterImpl_Stop
,
268 MediaStreamFilterImpl_Pause
,
269 MediaStreamFilterImpl_Run
,
270 MediaStreamFilterImpl_GetState
,
271 MediaStreamFilterImpl_SetSyncSource
,
272 MediaStreamFilterImpl_GetSyncSource
,
273 MediaStreamFilterImpl_EnumPins
,
274 MediaStreamFilterImpl_FindPin
,
275 MediaStreamFilterImpl_QueryFilterInfo
,
276 MediaStreamFilterImpl_JoinFilterGraph
,
277 MediaStreamFilterImpl_QueryVendorInfo
,
278 MediaStreamFilterImpl_AddMediaStream
,
279 MediaStreamFilterImpl_GetMediaStream
,
280 MediaStreamFilterImpl_EnumMediaStreams
,
281 MediaStreamFilterImpl_SupportSeeking
,
282 MediaStreamFilterImpl_ReferenceTimeToStreamTime
,
283 MediaStreamFilterImpl_GetCurrentStreamTime
,
284 MediaStreamFilterImpl_WaitUntil
,
285 MediaStreamFilterImpl_Flush
,
286 MediaStreamFilterImpl_EndOfStream
289 HRESULT
MediaStreamFilter_create(IUnknown
*pUnkOuter
, void **ppObj
)
291 IMediaStreamFilterImpl
* object
;
293 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
296 return CLASS_E_NOAGGREGATION
;
298 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IMediaStreamFilterImpl
));
301 ERR("Out of memory\n");
302 return E_OUTOFMEMORY
;
305 object
->IMediaStreamFilter_iface
.lpVtbl
= &MediaStreamFilter_Vtbl
;