Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmediastream.c
Go to the documentation of this file.
00001 /* 00002 * Implementation of IMediaStream Interface 00003 * 00004 * Copyright 2005, 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 IDirectDrawMediaStream IDirectDrawMediaStream_iface; 00037 LONG ref; 00038 IMultiMediaStream* Parent; 00039 MSPID PurposeId; 00040 STREAM_TYPE StreamType; 00041 } IDirectDrawMediaStreamImpl; 00042 00043 static inline IDirectDrawMediaStreamImpl *impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream *iface) 00044 { 00045 return CONTAINING_RECORD(iface, IDirectDrawMediaStreamImpl, IDirectDrawMediaStream_iface); 00046 } 00047 00048 static HRESULT WINAPI IDirectDrawMediaStreamImpl_QueryInterface(IDirectDrawMediaStream *iface, 00049 REFIID riid, void **ppv) 00050 { 00051 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00052 00053 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppv); 00054 00055 if (IsEqualGUID(riid, &IID_IUnknown) || 00056 IsEqualGUID(riid, &IID_IMediaStream) || 00057 IsEqualGUID(riid, &IID_IDirectDrawMediaStream)) 00058 { 00059 IUnknown_AddRef(iface); 00060 *ppv = This; 00061 return S_OK; 00062 } 00063 00064 ERR("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv); 00065 return E_NOINTERFACE; 00066 } 00067 00068 static ULONG WINAPI IDirectDrawMediaStreamImpl_AddRef(IDirectDrawMediaStream *iface) 00069 { 00070 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00071 00072 TRACE("(%p/%p)\n", iface, This); 00073 00074 return InterlockedIncrement(&This->ref); 00075 } 00076 00077 static ULONG WINAPI IDirectDrawMediaStreamImpl_Release(IDirectDrawMediaStream *iface) 00078 { 00079 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00080 ULONG ref = InterlockedDecrement(&This->ref); 00081 00082 TRACE("(%p/%p)\n", iface, This); 00083 00084 if (!ref) 00085 HeapFree(GetProcessHeap(), 0, This); 00086 00087 return ref; 00088 } 00089 00090 /*** IMediaStream methods ***/ 00091 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetMultiMediaStream(IDirectDrawMediaStream *iface, 00092 IMultiMediaStream** ppMultiMediaStream) 00093 { 00094 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00095 00096 FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppMultiMediaStream); 00097 00098 return S_FALSE; 00099 } 00100 00101 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetInformation(IDirectDrawMediaStream *iface, 00102 MSPID *pPurposeId, STREAM_TYPE *pType) 00103 { 00104 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00105 00106 TRACE("(%p/%p)->(%p,%p)\n", This, iface, pPurposeId, pType); 00107 00108 if (pPurposeId) 00109 *pPurposeId = This->PurposeId; 00110 if (pType) 00111 *pType = This->StreamType; 00112 00113 return S_OK; 00114 } 00115 00116 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetSameFormat(IDirectDrawMediaStream *iface, 00117 IMediaStream *pStreamThatHasDesiredFormat, DWORD dwFlags) 00118 { 00119 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00120 00121 FIXME("(%p/%p)->(%p,%x) stub!\n", This, iface, pStreamThatHasDesiredFormat, dwFlags); 00122 00123 return S_FALSE; 00124 } 00125 00126 static HRESULT WINAPI IDirectDrawMediaStreamImpl_AllocateSample(IDirectDrawMediaStream *iface, 00127 DWORD dwFlags, IStreamSample **ppSample) 00128 { 00129 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00130 00131 FIXME("(%p/%p)->(%x,%p) stub!\n", This, iface, dwFlags, ppSample); 00132 00133 return S_FALSE; 00134 } 00135 00136 static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSharedSample(IDirectDrawMediaStream *iface, 00137 IStreamSample *pExistingSample, DWORD dwFlags, IStreamSample **ppSample) 00138 { 00139 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00140 00141 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This, iface, pExistingSample, dwFlags, ppSample); 00142 00143 return S_FALSE; 00144 } 00145 00146 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SendEndOfStream(IDirectDrawMediaStream *iface, 00147 DWORD dwFlags) 00148 { 00149 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface); 00150 00151 FIXME("(%p/%p)->(%x) stub!\n", This, iface, dwFlags); 00152 00153 return S_FALSE; 00154 } 00155 00156 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetFormat(IDirectDrawMediaStream *iface, 00157 DDSURFACEDESC *pDDSDCurrent, IDirectDrawPalette **ppDirectDrawPalette, 00158 DDSURFACEDESC *pDDSDDesired, DWORD *pdwFlags) 00159 { 00160 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface, pDDSDCurrent, ppDirectDrawPalette, pDDSDDesired, 00161 pdwFlags); 00162 00163 return E_NOTIMPL; 00164 00165 } 00166 00167 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetFormat(IDirectDrawMediaStream *iface, 00168 const DDSURFACEDESC *pDDSurfaceDesc, IDirectDrawPalette *pDirectDrawPalette) 00169 { 00170 FIXME("(%p)->(%p,%p) stub!\n", iface, pDDSurfaceDesc, pDirectDrawPalette); 00171 00172 return E_NOTIMPL; 00173 } 00174 00175 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetDirectDraw(IDirectDrawMediaStream *iface, 00176 IDirectDraw **ppDirectDraw) 00177 { 00178 FIXME("(%p)->(%p) stub!\n", iface, ppDirectDraw); 00179 00180 return E_NOTIMPL; 00181 } 00182 00183 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetDirectDraw(IDirectDrawMediaStream *iface, 00184 IDirectDraw *pDirectDraw) 00185 { 00186 FIXME("(%p)->(%p) stub!\n", iface, pDirectDraw); 00187 00188 return E_NOTIMPL; 00189 } 00190 00191 static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSample(IDirectDrawMediaStream *iface, 00192 IDirectDrawSurface *pSurface, const RECT *pRect, DWORD dwFlags, 00193 IDirectDrawStreamSample **ppSample) 00194 { 00195 FIXME("(%p)->(%p,%p,%x,%p) stub!\n", iface, pSurface, pRect, dwFlags, ppSample); 00196 00197 return E_NOTIMPL; 00198 } 00199 00200 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetTimePerFrame(IDirectDrawMediaStream *iface, 00201 STREAM_TIME *pFrameTime) 00202 { 00203 FIXME("(%p)->(%p) stub!\n", iface, pFrameTime); 00204 00205 return E_NOTIMPL; 00206 } 00207 00208 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStream_Vtbl = 00209 { 00210 IDirectDrawMediaStreamImpl_QueryInterface, 00211 IDirectDrawMediaStreamImpl_AddRef, 00212 IDirectDrawMediaStreamImpl_Release, 00213 IDirectDrawMediaStreamImpl_GetMultiMediaStream, 00214 IDirectDrawMediaStreamImpl_GetInformation, 00215 IDirectDrawMediaStreamImpl_SetSameFormat, 00216 IDirectDrawMediaStreamImpl_AllocateSample, 00217 IDirectDrawMediaStreamImpl_CreateSharedSample, 00218 IDirectDrawMediaStreamImpl_SendEndOfStream, 00219 IDirectDrawMediaStreamImpl_GetFormat, 00220 IDirectDrawMediaStreamImpl_SetFormat, 00221 IDirectDrawMediaStreamImpl_GetDirectDraw, 00222 IDirectDrawMediaStreamImpl_SetDirectDraw, 00223 IDirectDrawMediaStreamImpl_CreateSample, 00224 IDirectDrawMediaStreamImpl_GetTimePerFrame 00225 }; 00226 00227 HRESULT mediastream_create(IMultiMediaStream *Parent, const MSPID *pPurposeId, 00228 STREAM_TYPE StreamType, IMediaStream **ppMediaStream) 00229 { 00230 IDirectDrawMediaStreamImpl *object; 00231 00232 TRACE("(%p,%s,%p)\n", Parent, debugstr_guid(pPurposeId), ppMediaStream); 00233 00234 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawMediaStreamImpl)); 00235 if (!object) 00236 { 00237 ERR("Out of memory\n"); 00238 return E_OUTOFMEMORY; 00239 } 00240 00241 object->IDirectDrawMediaStream_iface.lpVtbl = &DirectDrawMediaStream_Vtbl; 00242 object->ref = 1; 00243 00244 object->Parent = Parent; 00245 object->PurposeId = *pPurposeId; 00246 object->StreamType = StreamType; 00247 00248 *ppMediaStream = (IMediaStream*)&object->IDirectDrawMediaStream_iface; 00249 00250 return S_OK; 00251 } Generated on Sun May 27 2012 04:21:10 for ReactOS by
1.7.6.1
|