amstream: Use proper constructor name for ddraw mediastream.
[wine/multimedia.git] / dlls / amstream / mediastream.c
blob366bfac9dbeac075afa9f78807d48a90147f62b9
1 /*
2 * Implementation of IMediaStream Interface
4 * Copyright 2005, 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"
23 #define COBJMACROS
25 #include "winbase.h"
26 #include "wingdi.h"
28 #include "amstream_private.h"
29 #include "amstream.h"
31 #include "ddstream.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(amstream);
35 typedef struct {
36 IDirectDrawMediaStream IDirectDrawMediaStream_iface;
37 LONG ref;
38 IMultiMediaStream* Parent;
39 MSPID PurposeId;
40 STREAM_TYPE StreamType;
41 } IDirectDrawMediaStreamImpl;
43 static inline IDirectDrawMediaStreamImpl *impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream *iface)
45 return CONTAINING_RECORD(iface, IDirectDrawMediaStreamImpl, IDirectDrawMediaStream_iface);
48 /*** IUnknown methods ***/
49 static HRESULT WINAPI IDirectDrawMediaStreamImpl_QueryInterface(IDirectDrawMediaStream *iface,
50 REFIID riid, void **ppv)
52 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
54 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppv);
56 if (IsEqualGUID(riid, &IID_IUnknown) ||
57 IsEqualGUID(riid, &IID_IMediaStream) ||
58 IsEqualGUID(riid, &IID_IDirectDrawMediaStream))
60 IUnknown_AddRef(iface);
61 *ppv = This;
62 return S_OK;
65 ERR("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv);
66 return E_NOINTERFACE;
69 static ULONG WINAPI IDirectDrawMediaStreamImpl_AddRef(IDirectDrawMediaStream *iface)
71 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
73 TRACE("(%p/%p)\n", iface, This);
75 return InterlockedIncrement(&This->ref);
78 static ULONG WINAPI IDirectDrawMediaStreamImpl_Release(IDirectDrawMediaStream *iface)
80 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
81 ULONG ref = InterlockedDecrement(&This->ref);
83 TRACE("(%p/%p)\n", iface, This);
85 if (!ref)
86 HeapFree(GetProcessHeap(), 0, This);
88 return ref;
91 /*** IMediaStream methods ***/
92 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetMultiMediaStream(IDirectDrawMediaStream *iface,
93 IMultiMediaStream** ppMultiMediaStream)
95 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
97 FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppMultiMediaStream);
99 return S_FALSE;
102 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetInformation(IDirectDrawMediaStream *iface,
103 MSPID *pPurposeId, STREAM_TYPE *pType)
105 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
107 TRACE("(%p/%p)->(%p,%p)\n", This, iface, pPurposeId, pType);
109 if (pPurposeId)
110 *pPurposeId = This->PurposeId;
111 if (pType)
112 *pType = This->StreamType;
114 return S_OK;
117 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetSameFormat(IDirectDrawMediaStream *iface,
118 IMediaStream *pStreamThatHasDesiredFormat, DWORD dwFlags)
120 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
122 FIXME("(%p/%p)->(%p,%x) stub!\n", This, iface, pStreamThatHasDesiredFormat, dwFlags);
124 return S_FALSE;
127 static HRESULT WINAPI IDirectDrawMediaStreamImpl_AllocateSample(IDirectDrawMediaStream *iface,
128 DWORD dwFlags, IStreamSample **ppSample)
130 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
132 FIXME("(%p/%p)->(%x,%p) stub!\n", This, iface, dwFlags, ppSample);
134 return S_FALSE;
137 static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSharedSample(IDirectDrawMediaStream *iface,
138 IStreamSample *pExistingSample, DWORD dwFlags, IStreamSample **ppSample)
140 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
142 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This, iface, pExistingSample, dwFlags, ppSample);
144 return S_FALSE;
147 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SendEndOfStream(IDirectDrawMediaStream *iface,
148 DWORD dwFlags)
150 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
152 FIXME("(%p/%p)->(%x) stub!\n", This, iface, dwFlags);
154 return S_FALSE;
157 /*** IDirectDrawMediaStream methods ***/
158 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetFormat(IDirectDrawMediaStream *iface,
159 DDSURFACEDESC *pDDSDCurrent, IDirectDrawPalette **ppDirectDrawPalette,
160 DDSURFACEDESC *pDDSDDesired, DWORD *pdwFlags)
162 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface, pDDSDCurrent, ppDirectDrawPalette, pDDSDDesired,
163 pdwFlags);
165 return E_NOTIMPL;
169 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetFormat(IDirectDrawMediaStream *iface,
170 const DDSURFACEDESC *pDDSurfaceDesc, IDirectDrawPalette *pDirectDrawPalette)
172 FIXME("(%p)->(%p,%p) stub!\n", iface, pDDSurfaceDesc, pDirectDrawPalette);
174 return E_NOTIMPL;
177 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetDirectDraw(IDirectDrawMediaStream *iface,
178 IDirectDraw **ppDirectDraw)
180 FIXME("(%p)->(%p) stub!\n", iface, ppDirectDraw);
182 return E_NOTIMPL;
185 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetDirectDraw(IDirectDrawMediaStream *iface,
186 IDirectDraw *pDirectDraw)
188 FIXME("(%p)->(%p) stub!\n", iface, pDirectDraw);
190 return E_NOTIMPL;
193 static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSample(IDirectDrawMediaStream *iface,
194 IDirectDrawSurface *pSurface, const RECT *pRect, DWORD dwFlags,
195 IDirectDrawStreamSample **ppSample)
197 FIXME("(%p)->(%p,%p,%x,%p) stub!\n", iface, pSurface, pRect, dwFlags, ppSample);
199 return E_NOTIMPL;
202 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetTimePerFrame(IDirectDrawMediaStream *iface,
203 STREAM_TIME *pFrameTime)
205 FIXME("(%p)->(%p) stub!\n", iface, pFrameTime);
207 return E_NOTIMPL;
210 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStream_Vtbl =
212 /*** IUnknown methods ***/
213 IDirectDrawMediaStreamImpl_QueryInterface,
214 IDirectDrawMediaStreamImpl_AddRef,
215 IDirectDrawMediaStreamImpl_Release,
216 /*** IMediaStream methods ***/
217 IDirectDrawMediaStreamImpl_GetMultiMediaStream,
218 IDirectDrawMediaStreamImpl_GetInformation,
219 IDirectDrawMediaStreamImpl_SetSameFormat,
220 IDirectDrawMediaStreamImpl_AllocateSample,
221 IDirectDrawMediaStreamImpl_CreateSharedSample,
222 IDirectDrawMediaStreamImpl_SendEndOfStream,
223 /*** IDirectDrawMediaStream methods ***/
224 IDirectDrawMediaStreamImpl_GetFormat,
225 IDirectDrawMediaStreamImpl_SetFormat,
226 IDirectDrawMediaStreamImpl_GetDirectDraw,
227 IDirectDrawMediaStreamImpl_SetDirectDraw,
228 IDirectDrawMediaStreamImpl_CreateSample,
229 IDirectDrawMediaStreamImpl_GetTimePerFrame
232 HRESULT ddrawmediastream_create(IMultiMediaStream *Parent, const MSPID *pPurposeId,
233 STREAM_TYPE StreamType, IMediaStream **ppMediaStream)
235 IDirectDrawMediaStreamImpl *object;
237 TRACE("(%p,%s,%p)\n", Parent, debugstr_guid(pPurposeId), ppMediaStream);
239 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawMediaStreamImpl));
240 if (!object)
242 ERR("Out of memory\n");
243 return E_OUTOFMEMORY;
246 object->IDirectDrawMediaStream_iface.lpVtbl = &DirectDrawMediaStream_Vtbl;
247 object->ref = 1;
249 object->Parent = Parent;
250 object->PurposeId = *pPurposeId;
251 object->StreamType = StreamType;
253 *ppMediaStream = (IMediaStream*)&object->IDirectDrawMediaStream_iface;
255 return S_OK;