ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mediastreamfilter.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.