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

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

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