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"
28 #include "amstream_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(amstream
);
36 IDirectDrawMediaStream IDirectDrawMediaStream_iface
;
38 IMultiMediaStream
* Parent
;
40 STREAM_TYPE StreamType
;
41 } IDirectDrawMediaStreamImpl
;
43 static inline IDirectDrawMediaStreamImpl
*impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream
*iface
)
45 return CONTAINING_RECORD(iface
, IDirectDrawMediaStreamImpl
, IDirectDrawMediaStream_iface
);
48 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_QueryInterface(IDirectDrawMediaStream
*iface
,
49 REFIID riid
, void **ppv
)
51 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
53 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppv
);
55 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
56 IsEqualGUID(riid
, &IID_IMediaStream
) ||
57 IsEqualGUID(riid
, &IID_IDirectDrawMediaStream
))
59 IUnknown_AddRef(iface
);
64 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ppv
);
68 static ULONG WINAPI
IDirectDrawMediaStreamImpl_AddRef(IDirectDrawMediaStream
*iface
)
70 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
72 TRACE("(%p/%p)\n", iface
, This
);
74 return InterlockedIncrement(&This
->ref
);
77 static ULONG WINAPI
IDirectDrawMediaStreamImpl_Release(IDirectDrawMediaStream
*iface
)
79 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
80 ULONG ref
= InterlockedDecrement(&This
->ref
);
82 TRACE("(%p/%p)\n", iface
, This
);
85 HeapFree(GetProcessHeap(), 0, This
);
90 /*** IMediaStream methods ***/
91 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_GetMultiMediaStream(IDirectDrawMediaStream
*iface
,
92 IMultiMediaStream
** ppMultiMediaStream
)
94 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
96 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, ppMultiMediaStream
);
101 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_GetInformation(IDirectDrawMediaStream
*iface
,
102 MSPID
*pPurposeId
, STREAM_TYPE
*pType
)
104 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
106 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, pPurposeId
, pType
);
109 *pPurposeId
= This
->PurposeId
;
111 *pType
= This
->StreamType
;
116 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_SetSameFormat(IDirectDrawMediaStream
*iface
,
117 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD dwFlags
)
119 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
121 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, dwFlags
);
126 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_AllocateSample(IDirectDrawMediaStream
*iface
,
127 DWORD dwFlags
, IStreamSample
**ppSample
)
129 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
131 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, dwFlags
, ppSample
);
136 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_CreateSharedSample(IDirectDrawMediaStream
*iface
,
137 IStreamSample
*pExistingSample
, DWORD dwFlags
, IStreamSample
**ppSample
)
139 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
141 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, pExistingSample
, dwFlags
, ppSample
);
146 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_SendEndOfStream(IDirectDrawMediaStream
*iface
,
149 IDirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
151 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, dwFlags
);
156 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_GetFormat(IDirectDrawMediaStream
*iface
,
157 DDSURFACEDESC
*pDDSDCurrent
, IDirectDrawPalette
**ppDirectDrawPalette
,
158 DDSURFACEDESC
*pDDSDDesired
, DWORD
*pdwFlags
)
160 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface
, pDDSDCurrent
, ppDirectDrawPalette
, pDDSDDesired
,
167 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_SetFormat(IDirectDrawMediaStream
*iface
,
168 const DDSURFACEDESC
*pDDSurfaceDesc
, IDirectDrawPalette
*pDirectDrawPalette
)
170 FIXME("(%p)->(%p,%p) stub!\n", iface
, pDDSurfaceDesc
, pDirectDrawPalette
);
175 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_GetDirectDraw(IDirectDrawMediaStream
*iface
,
176 IDirectDraw
**ppDirectDraw
)
178 FIXME("(%p)->(%p) stub!\n", iface
, ppDirectDraw
);
183 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_SetDirectDraw(IDirectDrawMediaStream
*iface
,
184 IDirectDraw
*pDirectDraw
)
186 FIXME("(%p)->(%p) stub!\n", iface
, pDirectDraw
);
191 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_CreateSample(IDirectDrawMediaStream
*iface
,
192 IDirectDrawSurface
*pSurface
, const RECT
*pRect
, DWORD dwFlags
,
193 IDirectDrawStreamSample
**ppSample
)
195 FIXME("(%p)->(%p,%p,%x,%p) stub!\n", iface
, pSurface
, pRect
, dwFlags
, ppSample
);
200 static HRESULT WINAPI
IDirectDrawMediaStreamImpl_GetTimePerFrame(IDirectDrawMediaStream
*iface
,
201 STREAM_TIME
*pFrameTime
)
203 FIXME("(%p)->(%p) stub!\n", iface
, pFrameTime
);
208 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStream_Vtbl
=
210 IDirectDrawMediaStreamImpl_QueryInterface
,
211 IDirectDrawMediaStreamImpl_AddRef
,
212 IDirectDrawMediaStreamImpl_Release
,
213 IDirectDrawMediaStreamImpl_GetMultiMediaStream
,
214 IDirectDrawMediaStreamImpl_GetInformation
,
215 IDirectDrawMediaStreamImpl_SetSameFormat
,
216 IDirectDrawMediaStreamImpl_AllocateSample
,
217 IDirectDrawMediaStreamImpl_CreateSharedSample
,
218 IDirectDrawMediaStreamImpl_SendEndOfStream
,
219 IDirectDrawMediaStreamImpl_GetFormat
,
220 IDirectDrawMediaStreamImpl_SetFormat
,
221 IDirectDrawMediaStreamImpl_GetDirectDraw
,
222 IDirectDrawMediaStreamImpl_SetDirectDraw
,
223 IDirectDrawMediaStreamImpl_CreateSample
,
224 IDirectDrawMediaStreamImpl_GetTimePerFrame
227 HRESULT
mediastream_create(IMultiMediaStream
*Parent
, const MSPID
*pPurposeId
,
228 STREAM_TYPE StreamType
, IMediaStream
**ppMediaStream
)
230 IDirectDrawMediaStreamImpl
*object
;
232 TRACE("(%p,%s,%p)\n", Parent
, debugstr_guid(pPurposeId
), ppMediaStream
);
234 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectDrawMediaStreamImpl
));
237 ERR("Out of memory\n");
238 return E_OUTOFMEMORY
;
241 object
->IDirectDrawMediaStream_iface
.lpVtbl
= &DirectDrawMediaStream_Vtbl
;
244 object
->Parent
= Parent
;
245 object
->PurposeId
= *pPurposeId
;
246 object
->StreamType
= StreamType
;
248 *ppMediaStream
= (IMediaStream
*)&object
->IDirectDrawMediaStream_iface
;