Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmediastreamfilter.c
Go to the documentation of this file.
00001 /* 00002 * Implementation of MediaStream Filter 00003 * 00004 * Copyright 2008 Christian Costa 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00019 */ 00020 00021 #include "wine/debug.h" 00022 00023 #define COBJMACROS 00024 00025 #include "winbase.h" 00026 #include "wingdi.h" 00027 00028 #include "amstream_private.h" 00029 #include "amstream.h" 00030 00031 #include "ddstream.h" 00032 00033 WINE_DEFAULT_DEBUG_CHANNEL(amstream); 00034 00035 typedef struct { 00036 IMediaStreamFilter IMediaStreamFilter_iface; 00037 LONG ref; 00038 CRITICAL_SECTION csFilter; 00039 FILTER_STATE state; 00040 REFERENCE_TIME rtStreamStart; 00041 IReferenceClock * pClock; 00042 FILTER_INFO filterInfo; 00043 } IMediaStreamFilterImpl; 00044 00045 static inline IMediaStreamFilterImpl *impl_from_IMediaStreamFilter(IMediaStreamFilter *iface) 00046 { 00047 return CONTAINING_RECORD(iface, IMediaStreamFilterImpl, IMediaStreamFilter_iface); 00048 } 00049 00050 /*** IUnknown methods ***/ 00051 00052 static HRESULT WINAPI MediaStreamFilterImpl_QueryInterface(IMediaStreamFilter *iface, REFIID riid, 00053 void **ppv) 00054 { 00055 IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface); 00056 00057 TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppv); 00058 00059 *ppv = NULL; 00060 00061 if (IsEqualIID(riid, &IID_IUnknown)) 00062 *ppv = This; 00063 else if (IsEqualIID(riid, &IID_IPersist)) 00064 *ppv = This; 00065 else if (IsEqualIID(riid, &IID_IMediaFilter)) 00066 *ppv = This; 00067 else if (IsEqualIID(riid, &IID_IBaseFilter)) 00068 *ppv = This; 00069 else if (IsEqualIID(riid, &IID_IMediaStreamFilter)) 00070 *ppv = This; 00071 00072 if (*ppv) 00073 { 00074 IUnknown_AddRef((IUnknown *)(*ppv)); 00075 return S_OK; 00076 } 00077 00078 return E_NOINTERFACE; 00079 } 00080 00081 static ULONG WINAPI MediaStreamFilterImpl_AddRef(IMediaStreamFilter *iface) 00082 { 00083 IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface); 00084 ULONG refCount = InterlockedIncrement(&This->ref); 00085 00086 TRACE("(%p)->() AddRef from %d\n", iface, refCount - 1); 00087 00088 return refCount; 00089 } 00090 00091 static ULONG WINAPI MediaStreamFilterImpl_Release(IMediaStreamFilter *iface) 00092 { 00093 IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface); 00094 ULONG refCount = InterlockedDecrement(&This->ref); 00095 00096 TRACE("(%p)->() Release from %d\n", iface, refCount + 1); 00097 00098 if (!refCount) 00099 HeapFree(GetProcessHeap(), 0, This); 00100 00101 return refCount; 00102 } 00103 00104 /*** IPersist methods ***/ 00105 00106 static HRESULT WINAPI MediaStreamFilterImpl_GetClassID(IMediaStreamFilter * iface, CLSID * pClsid) 00107 { 00108 TRACE("(%p)->(%p)\n", iface, pClsid); 00109 00110 *pClsid = CLSID_MediaStreamFilter; 00111 00112 return S_OK; 00113 } 00114 00115 /*** IMediaFilter methods ***/ 00116 00117 static HRESULT WINAPI MediaStreamFilterImpl_Stop(IMediaStreamFilter * iface) 00118 { 00119 FIXME("(%p)->(): Stub!\n", iface); 00120 00121 return E_NOTIMPL; 00122 } 00123 00124 static HRESULT WINAPI MediaStreamFilterImpl_Pause(IMediaStreamFilter * iface) 00125 { 00126 FIXME("(%p)->(): Stub!\n", iface); 00127 00128 return E_NOTIMPL; 00129 } 00130 00131 static HRESULT WINAPI MediaStreamFilterImpl_Run(IMediaStreamFilter * iface, REFERENCE_TIME tStart) 00132 { 00133 FIXME("(%p)->(%s): Stub!\n", iface, wine_dbgstr_longlong(tStart)); 00134 00135 return E_NOTIMPL; 00136 } 00137 00138 static HRESULT WINAPI MediaStreamFilterImpl_GetState(IMediaStreamFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState) 00139 { 00140 FIXME("(%p)->(%d,%p): Stub!\n", iface, dwMilliSecsTimeout, pState); 00141 00142 return E_NOTIMPL; 00143 } 00144 00145 static HRESULT WINAPI MediaStreamFilterImpl_SetSyncSource(IMediaStreamFilter * iface, IReferenceClock *pClock) 00146 { 00147 TRACE("(%p)->(%p): Stub!\n", iface, pClock); 00148 00149 return E_NOTIMPL; 00150 } 00151 00152 static HRESULT WINAPI MediaStreamFilterImpl_GetSyncSource(IMediaStreamFilter * iface, IReferenceClock **ppClock) 00153 { 00154 FIXME("(%p)->(%p): Stub!\n", iface, ppClock); 00155 00156 return E_NOTIMPL; 00157 } 00158 00159 /*** IBaseFilter methods ***/ 00160 00161 static HRESULT WINAPI MediaStreamFilterImpl_EnumPins(IMediaStreamFilter * iface, IEnumPins **ppEnum) 00162 { 00163 FIXME("(%p)->(%p): Stub!\n", iface, ppEnum); 00164 00165 return E_NOTIMPL; 00166 } 00167 00168 static HRESULT WINAPI MediaStreamFilterImpl_FindPin(IMediaStreamFilter * iface, LPCWSTR Id, IPin **ppPin) 00169 { 00170 FIXME("(%p)->(%s,%p): Stub!\n", iface, debugstr_w(Id), ppPin); 00171 00172 return E_NOTIMPL; 00173 } 00174 00175 static HRESULT WINAPI MediaStreamFilterImpl_QueryFilterInfo(IMediaStreamFilter * iface, FILTER_INFO *pInfo) 00176 { 00177 FIXME("(%p)->(%p): Stub!\n", iface, pInfo); 00178 00179 return E_NOTIMPL; 00180 } 00181 00182 static HRESULT WINAPI MediaStreamFilterImpl_JoinFilterGraph(IMediaStreamFilter * iface, IFilterGraph *pGraph, LPCWSTR pName) 00183 { 00184 FIXME("(%p)->(%p, %s): Stub!\n", iface, pGraph, debugstr_w(pName)); 00185 00186 return E_NOTIMPL; 00187 } 00188 00189 static HRESULT WINAPI MediaStreamFilterImpl_QueryVendorInfo(IMediaStreamFilter * iface, LPWSTR *pVendorInfo) 00190 { 00191 FIXME("(%p)->(%p): Stub!\n", iface, pVendorInfo); 00192 00193 return E_NOTIMPL; 00194 } 00195 00196 /*** IMediaStreamFilter methods ***/ 00197 00198 static HRESULT WINAPI MediaStreamFilterImpl_AddMediaStream(IMediaStreamFilter* iface, IAMMediaStream *pAMMediaStream) 00199 { 00200 FIXME("(%p)->(%p): Stub!\n", iface, pAMMediaStream); 00201 00202 return E_NOTIMPL; 00203 } 00204 00205 static HRESULT WINAPI MediaStreamFilterImpl_GetMediaStream(IMediaStreamFilter* iface, REFMSPID idPurpose, IMediaStream **ppMediaStream) 00206 { 00207 FIXME("(%p)->(%s,%p): Stub!\n", iface, debugstr_guid(idPurpose), ppMediaStream); 00208 00209 return E_NOTIMPL; 00210 } 00211 00212 static HRESULT WINAPI MediaStreamFilterImpl_EnumMediaStreams(IMediaStreamFilter* iface, LONG Index, IMediaStream **ppMediaStream) 00213 { 00214 FIXME("(%p)->(%d,%p): Stub!\n", iface, Index, ppMediaStream); 00215 00216 return E_NOTIMPL; 00217 } 00218 00219 static HRESULT WINAPI MediaStreamFilterImpl_SupportSeeking(IMediaStreamFilter* iface, BOOL bRenderer) 00220 { 00221 FIXME("(%p)->(%d): Stub!\n", iface, bRenderer); 00222 00223 return E_NOTIMPL; 00224 } 00225 00226 static HRESULT WINAPI MediaStreamFilterImpl_ReferenceTimeToStreamTime(IMediaStreamFilter* iface, REFERENCE_TIME *pTime) 00227 { 00228 FIXME("(%p)->(%p): Stub!\n", iface, pTime); 00229 00230 return E_NOTIMPL; 00231 } 00232 00233 static HRESULT WINAPI MediaStreamFilterImpl_GetCurrentStreamTime(IMediaStreamFilter* iface, REFERENCE_TIME *pCurrentStreamTime) 00234 { 00235 FIXME("(%p)->(%p): Stub!\n", iface, pCurrentStreamTime); 00236 00237 return E_NOTIMPL; 00238 } 00239 00240 static HRESULT WINAPI MediaStreamFilterImpl_WaitUntil(IMediaStreamFilter* iface, REFERENCE_TIME WaitStreamTime) 00241 { 00242 FIXME("(%p)->(%s): Stub!\n", iface, wine_dbgstr_longlong(WaitStreamTime)); 00243 00244 return E_NOTIMPL; 00245 } 00246 00247 static HRESULT WINAPI MediaStreamFilterImpl_Flush(IMediaStreamFilter* iface, BOOL bCancelEOS) 00248 { 00249 FIXME("(%p)->(%d): Stub!\n", iface, bCancelEOS); 00250 00251 return E_NOTIMPL; 00252 } 00253 00254 static HRESULT WINAPI MediaStreamFilterImpl_EndOfStream(IMediaStreamFilter* iface) 00255 { 00256 FIXME("(%p)->(): Stub!\n", iface); 00257 00258 return E_NOTIMPL; 00259 } 00260 00261 static const IMediaStreamFilterVtbl MediaStreamFilter_Vtbl = 00262 { 00263 MediaStreamFilterImpl_QueryInterface, 00264 MediaStreamFilterImpl_AddRef, 00265 MediaStreamFilterImpl_Release, 00266 MediaStreamFilterImpl_GetClassID, 00267 MediaStreamFilterImpl_Stop, 00268 MediaStreamFilterImpl_Pause, 00269 MediaStreamFilterImpl_Run, 00270 MediaStreamFilterImpl_GetState, 00271 MediaStreamFilterImpl_SetSyncSource, 00272 MediaStreamFilterImpl_GetSyncSource, 00273 MediaStreamFilterImpl_EnumPins, 00274 MediaStreamFilterImpl_FindPin, 00275 MediaStreamFilterImpl_QueryFilterInfo, 00276 MediaStreamFilterImpl_JoinFilterGraph, 00277 MediaStreamFilterImpl_QueryVendorInfo, 00278 MediaStreamFilterImpl_AddMediaStream, 00279 MediaStreamFilterImpl_GetMediaStream, 00280 MediaStreamFilterImpl_EnumMediaStreams, 00281 MediaStreamFilterImpl_SupportSeeking, 00282 MediaStreamFilterImpl_ReferenceTimeToStreamTime, 00283 MediaStreamFilterImpl_GetCurrentStreamTime, 00284 MediaStreamFilterImpl_WaitUntil, 00285 MediaStreamFilterImpl_Flush, 00286 MediaStreamFilterImpl_EndOfStream 00287 }; 00288 00289 HRESULT MediaStreamFilter_create(IUnknown *pUnkOuter, void **ppObj) 00290 { 00291 IMediaStreamFilterImpl* object; 00292 00293 TRACE("(%p,%p)\n", pUnkOuter, ppObj); 00294 00295 if( pUnkOuter ) 00296 return CLASS_E_NOAGGREGATION; 00297 00298 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMediaStreamFilterImpl)); 00299 if (!object) 00300 { 00301 ERR("Out of memory\n"); 00302 return E_OUTOFMEMORY; 00303 } 00304 00305 object->IMediaStreamFilter_iface.lpVtbl = &MediaStreamFilter_Vtbl; 00306 object->ref = 1; 00307 00308 *ppObj = object; 00309 00310 return S_OK; 00311 } Generated on Sun May 27 2012 04:21:10 for ReactOS by
1.7.6.1
|