2 * Implementation of IMediaStream Interfaces
4 * Copyright 2005, 2008, 2012 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"
32 WINE_DEFAULT_DEBUG_CHANNEL(amstream
);
34 static HRESULT
ddrawstreamsample_create(IDirectDrawMediaStream
*parent
, IDirectDrawSurface
*surface
,
35 const RECT
*rect
, IDirectDrawStreamSample
**ddraw_stream_sample
);
36 static HRESULT
audiostreamsample_create(IAudioMediaStream
*parent
, IAudioData
*audio_data
, IAudioStreamSample
**audio_stream_sample
);
39 IAMMediaStream IAMMediaStream_iface
;
40 IDirectDrawMediaStream IDirectDrawMediaStream_iface
;
42 IMultiMediaStream
* parent
;
44 STREAM_TYPE stream_type
;
46 } DirectDrawMediaStreamImpl
;
48 static inline DirectDrawMediaStreamImpl
*impl_from_DirectDrawMediaStream_IAMMediaStream(IAMMediaStream
*iface
)
50 return CONTAINING_RECORD(iface
, DirectDrawMediaStreamImpl
, IAMMediaStream_iface
);
53 /*** IUnknown methods ***/
54 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream
*iface
,
55 REFIID riid
, void **ret_iface
)
57 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
59 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
61 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
62 IsEqualGUID(riid
, &IID_IMediaStream
) ||
63 IsEqualGUID(riid
, &IID_IAMMediaStream
))
65 IAMMediaStream_AddRef(iface
);
69 else if (IsEqualGUID(riid
, &IID_IDirectDrawMediaStream
))
71 IAMMediaStream_AddRef(iface
);
72 *ret_iface
= &This
->IDirectDrawMediaStream_iface
;
76 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ret_iface
);
80 static ULONG WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream
*iface
)
82 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
83 ULONG ref
= InterlockedIncrement(&This
->ref
);
85 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
90 static ULONG WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream
*iface
)
92 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
93 ULONG ref
= InterlockedDecrement(&This
->ref
);
95 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
100 IDirectDraw7_Release(This
->ddraw
);
101 HeapFree(GetProcessHeap(), 0, This
);
107 /*** IMediaStream methods ***/
108 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream
*iface
,
109 IMultiMediaStream
** multi_media_stream
)
111 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
113 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, multi_media_stream
);
118 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
119 MSPID
*purpose_id
, STREAM_TYPE
*type
)
121 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
123 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
126 *purpose_id
= This
->purpose_id
;
128 *type
= This
->stream_type
;
133 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
134 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
136 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
138 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
143 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
144 DWORD flags
, IStreamSample
**sample
)
146 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
148 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
153 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
154 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
156 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
158 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
163 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
165 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
167 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
172 /*** IAMMediaStream methods ***/
173 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
174 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
176 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
178 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
183 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
185 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
187 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
192 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
194 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
196 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
201 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
203 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
205 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
210 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
212 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
214 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
219 static const struct IAMMediaStreamVtbl DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
=
221 /*** IUnknown methods ***/
222 DirectDrawMediaStreamImpl_IAMMediaStream_QueryInterface
,
223 DirectDrawMediaStreamImpl_IAMMediaStream_AddRef
,
224 DirectDrawMediaStreamImpl_IAMMediaStream_Release
,
225 /*** IMediaStream methods ***/
226 DirectDrawMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
227 DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation
,
228 DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat
,
229 DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample
,
230 DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
231 DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
232 /*** IAMMediaStream methods ***/
233 DirectDrawMediaStreamImpl_IAMMediaStream_Initialize
,
234 DirectDrawMediaStreamImpl_IAMMediaStream_SetState
,
235 DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
236 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter
,
237 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph
240 static inline DirectDrawMediaStreamImpl
*impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream
*iface
)
242 return CONTAINING_RECORD(iface
, DirectDrawMediaStreamImpl
, IDirectDrawMediaStream_iface
);
245 /*** IUnknown methods ***/
246 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface(IDirectDrawMediaStream
*iface
,
247 REFIID riid
, void **ret_iface
)
249 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
250 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
251 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
254 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef(IDirectDrawMediaStream
*iface
)
256 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
257 TRACE("(%p/%p)\n", iface
, This
);
258 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
261 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release(IDirectDrawMediaStream
*iface
)
263 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
264 TRACE("(%p/%p)\n", iface
, This
);
265 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
268 /*** IMediaStream methods ***/
269 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream(IDirectDrawMediaStream
*iface
,
270 IMultiMediaStream
** ppMultiMediaStream
)
272 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
274 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, ppMultiMediaStream
);
279 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation(IDirectDrawMediaStream
*iface
,
280 MSPID
*purpose_id
, STREAM_TYPE
*type
)
282 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
284 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
287 *purpose_id
= This
->purpose_id
;
289 *type
= This
->stream_type
;
294 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat(IDirectDrawMediaStream
*iface
,
295 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD dwFlags
)
297 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
299 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, dwFlags
);
304 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample(IDirectDrawMediaStream
*iface
,
305 DWORD dwFlags
, IStreamSample
**ppSample
)
307 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
309 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, dwFlags
, ppSample
);
314 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample(IDirectDrawMediaStream
*iface
,
315 IStreamSample
*pExistingSample
, DWORD dwFlags
, IStreamSample
**ppSample
)
317 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
319 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, pExistingSample
, dwFlags
, ppSample
);
324 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream(IDirectDrawMediaStream
*iface
,
327 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
329 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, dwFlags
);
334 /*** IDirectDrawMediaStream methods ***/
335 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat(IDirectDrawMediaStream
*iface
,
336 DDSURFACEDESC
*current_format
, IDirectDrawPalette
**palette
,
337 DDSURFACEDESC
*desired_format
, DWORD
*flags
)
339 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface
, current_format
, palette
, desired_format
,
342 return MS_E_NOSTREAM
;
346 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat(IDirectDrawMediaStream
*iface
,
347 const DDSURFACEDESC
*pDDSurfaceDesc
, IDirectDrawPalette
*pDirectDrawPalette
)
349 FIXME("(%p)->(%p,%p) stub!\n", iface
, pDDSurfaceDesc
, pDirectDrawPalette
);
354 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw(IDirectDrawMediaStream
*iface
,
357 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
359 TRACE("(%p)->(%p)\n", iface
, ddraw
);
364 HRESULT hr
= DirectDrawCreateEx(NULL
, (void**)&This
->ddraw
, &IID_IDirectDraw7
, NULL
);
367 IDirectDraw7_SetCooperativeLevel(This
->ddraw
, NULL
, DDSCL_NORMAL
);
370 return IDirectDraw7_QueryInterface(This
->ddraw
, &IID_IDirectDraw
, (void**)ddraw
);
373 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw(IDirectDrawMediaStream
*iface
,
374 IDirectDraw
*pDirectDraw
)
376 FIXME("(%p)->(%p) stub!\n", iface
, pDirectDraw
);
381 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample(IDirectDrawMediaStream
*iface
,
382 IDirectDrawSurface
*surface
, const RECT
*rect
, DWORD dwFlags
,
383 IDirectDrawStreamSample
**ppSample
)
385 TRACE("(%p)->(%p,%s,%x,%p)\n", iface
, surface
, wine_dbgstr_rect(rect
), dwFlags
, ppSample
);
387 return ddrawstreamsample_create(iface
, surface
, rect
, ppSample
);
390 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame(IDirectDrawMediaStream
*iface
,
391 STREAM_TIME
*pFrameTime
)
393 FIXME("(%p)->(%p) stub!\n", iface
, pFrameTime
);
398 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
=
400 /*** IUnknown methods ***/
401 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface
,
402 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef
,
403 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release
,
404 /*** IMediaStream methods ***/
405 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream
,
406 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation
,
407 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat
,
408 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample
,
409 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample
,
410 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream
,
411 /*** IDirectDrawMediaStream methods ***/
412 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat
,
413 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat
,
414 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw
,
415 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw
,
416 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample
,
417 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame
420 HRESULT
ddrawmediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
421 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
423 DirectDrawMediaStreamImpl
*object
;
425 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
427 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(DirectDrawMediaStreamImpl
));
429 return E_OUTOFMEMORY
;
431 object
->IAMMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
;
432 object
->IDirectDrawMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
;
435 object
->parent
= parent
;
436 object
->purpose_id
= *purpose_id
;
437 object
->stream_type
= stream_type
;
439 *media_stream
= &object
->IAMMediaStream_iface
;
445 IAMMediaStream IAMMediaStream_iface
;
446 IAudioMediaStream IAudioMediaStream_iface
;
448 IMultiMediaStream
* parent
;
450 STREAM_TYPE stream_type
;
451 } AudioMediaStreamImpl
;
453 static inline AudioMediaStreamImpl
*impl_from_AudioMediaStream_IAMMediaStream(IAMMediaStream
*iface
)
455 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAMMediaStream_iface
);
458 /*** IUnknown methods ***/
459 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream
*iface
,
460 REFIID riid
, void **ret_iface
)
462 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
464 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
466 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
467 IsEqualGUID(riid
, &IID_IMediaStream
) ||
468 IsEqualGUID(riid
, &IID_IAMMediaStream
))
470 IAMMediaStream_AddRef(iface
);
474 else if (IsEqualGUID(riid
, &IID_IAudioMediaStream
))
476 IAMMediaStream_AddRef(iface
);
477 *ret_iface
= &This
->IAudioMediaStream_iface
;
481 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ret_iface
);
482 return E_NOINTERFACE
;
485 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream
*iface
)
487 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
488 ULONG ref
= InterlockedIncrement(&This
->ref
);
490 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
495 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream
*iface
)
497 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
498 ULONG ref
= InterlockedDecrement(&This
->ref
);
500 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
503 HeapFree(GetProcessHeap(), 0, This
);
508 /*** IMediaStream methods ***/
509 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream
*iface
,
510 IMultiMediaStream
** multi_media_stream
)
512 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
514 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, multi_media_stream
);
519 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
520 MSPID
*purpose_id
, STREAM_TYPE
*type
)
522 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
524 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
527 *purpose_id
= This
->purpose_id
;
529 *type
= This
->stream_type
;
534 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
535 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
537 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
539 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
544 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
545 DWORD flags
, IStreamSample
**sample
)
547 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
549 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
554 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
555 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
557 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
559 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
564 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
566 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
568 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
573 /*** IAMMediaStream methods ***/
574 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
575 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
577 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
579 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
584 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
586 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
588 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
593 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
595 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
597 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
602 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
604 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
606 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
611 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
613 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
615 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
620 static const struct IAMMediaStreamVtbl AudioMediaStreamImpl_IAMMediaStream_Vtbl
=
622 /*** IUnknown methods ***/
623 AudioMediaStreamImpl_IAMMediaStream_QueryInterface
,
624 AudioMediaStreamImpl_IAMMediaStream_AddRef
,
625 AudioMediaStreamImpl_IAMMediaStream_Release
,
626 /*** IMediaStream methods ***/
627 AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
628 AudioMediaStreamImpl_IAMMediaStream_GetInformation
,
629 AudioMediaStreamImpl_IAMMediaStream_SetSameFormat
,
630 AudioMediaStreamImpl_IAMMediaStream_AllocateSample
,
631 AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
632 AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
633 /*** IAMMediaStream methods ***/
634 AudioMediaStreamImpl_IAMMediaStream_Initialize
,
635 AudioMediaStreamImpl_IAMMediaStream_SetState
,
636 AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
637 AudioMediaStreamImpl_IAMMediaStream_JoinFilter
,
638 AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph
641 static inline AudioMediaStreamImpl
*impl_from_IAudioMediaStream(IAudioMediaStream
*iface
)
643 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAudioMediaStream_iface
);
646 /*** IUnknown methods ***/
647 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_QueryInterface(IAudioMediaStream
*iface
,
648 REFIID riid
, void **ret_iface
)
650 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
651 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
652 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
655 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AddRef(IAudioMediaStream
*iface
)
657 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
658 TRACE("(%p/%p)\n", iface
, This
);
659 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
662 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_Release(IAudioMediaStream
*iface
)
664 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
665 TRACE("(%p/%p)\n", iface
, This
);
666 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
669 /*** IMediaStream methods ***/
670 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream(IAudioMediaStream
*iface
,
671 IMultiMediaStream
** multimedia_stream
)
673 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
675 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, multimedia_stream
);
680 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetInformation(IAudioMediaStream
*iface
,
681 MSPID
*purpose_id
, STREAM_TYPE
*type
)
683 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
685 TRACE("(%p/%p)->(%p,%p)\n", iface
, This
, purpose_id
, type
);
688 *purpose_id
= This
->purpose_id
;
690 *type
= This
->stream_type
;
695 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat(IAudioMediaStream
*iface
,
696 IMediaStream
*stream_format
, DWORD flags
)
698 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
700 FIXME("(%p/%p)->(%p,%x) stub!\n", iface
, This
, stream_format
, flags
);
705 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AllocateSample(IAudioMediaStream
*iface
,
706 DWORD flags
, IStreamSample
**sample
)
708 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
710 FIXME("(%p/%p)->(%x,%p) stub!\n", iface
, This
, flags
, sample
);
715 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample(IAudioMediaStream
*iface
,
716 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
718 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
720 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", iface
, This
, existing_sample
, flags
, sample
);
725 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream(IAudioMediaStream
*iface
,
728 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
730 FIXME("(%p/%p)->(%x) stub!\n", iface
, This
, flags
);
735 /*** IAudioMediaStream methods ***/
736 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetFormat(IAudioMediaStream
*iface
, WAVEFORMATEX
*wave_format_current
)
738 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
740 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format_current
);
742 if (!wave_format_current
)
745 return MS_E_NOSTREAM
;
749 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetFormat(IAudioMediaStream
*iface
, const WAVEFORMATEX
*wave_format
)
751 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
753 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format
);
758 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSample(IAudioMediaStream
*iface
, IAudioData
*audio_data
,
759 DWORD flags
, IAudioStreamSample
**sample
)
761 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
763 TRACE("(%p/%p)->(%p,%u,%p)\n", iface
, This
, audio_data
, flags
, sample
);
768 return audiostreamsample_create(iface
, audio_data
, sample
);
771 static const struct IAudioMediaStreamVtbl AudioMediaStreamImpl_IAudioMediaStream_Vtbl
=
773 /*** IUnknown methods ***/
774 AudioMediaStreamImpl_IAudioMediaStream_QueryInterface
,
775 AudioMediaStreamImpl_IAudioMediaStream_AddRef
,
776 AudioMediaStreamImpl_IAudioMediaStream_Release
,
777 /*** IMediaStream methods ***/
778 AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream
,
779 AudioMediaStreamImpl_IAudioMediaStream_GetInformation
,
780 AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat
,
781 AudioMediaStreamImpl_IAudioMediaStream_AllocateSample
,
782 AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample
,
783 AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream
,
784 /*** IAudioMediaStream methods ***/
785 AudioMediaStreamImpl_IAudioMediaStream_GetFormat
,
786 AudioMediaStreamImpl_IAudioMediaStream_SetFormat
,
787 AudioMediaStreamImpl_IAudioMediaStream_CreateSample
790 HRESULT
audiomediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
791 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
793 AudioMediaStreamImpl
*object
;
795 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
797 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(AudioMediaStreamImpl
));
799 return E_OUTOFMEMORY
;
801 object
->IAMMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAMMediaStream_Vtbl
;
802 object
->IAudioMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAudioMediaStream_Vtbl
;
805 object
->parent
= parent
;
806 object
->purpose_id
= *purpose_id
;
807 object
->stream_type
= stream_type
;
809 *media_stream
= &object
->IAMMediaStream_iface
;
815 IDirectDrawStreamSample IDirectDrawStreamSample_iface
;
817 IMediaStream
*parent
;
818 IDirectDrawSurface
*surface
;
820 } IDirectDrawStreamSampleImpl
;
822 static inline IDirectDrawStreamSampleImpl
*impl_from_IDirectDrawStreamSample(IDirectDrawStreamSample
*iface
)
824 return CONTAINING_RECORD(iface
, IDirectDrawStreamSampleImpl
, IDirectDrawStreamSample_iface
);
827 /*** IUnknown methods ***/
828 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_QueryInterface(IDirectDrawStreamSample
*iface
,
829 REFIID riid
, void **ret_iface
)
831 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
833 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
834 IsEqualGUID(riid
, &IID_IStreamSample
) ||
835 IsEqualGUID(riid
, &IID_IDirectDrawStreamSample
))
837 IDirectDrawStreamSample_AddRef(iface
);
844 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
845 return E_NOINTERFACE
;
848 static ULONG WINAPI
IDirectDrawStreamSampleImpl_AddRef(IDirectDrawStreamSample
*iface
)
850 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
851 ULONG ref
= InterlockedIncrement(&This
->ref
);
853 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
858 static ULONG WINAPI
IDirectDrawStreamSampleImpl_Release(IDirectDrawStreamSample
*iface
)
860 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
861 ULONG ref
= InterlockedDecrement(&This
->ref
);
863 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
868 IDirectDrawSurface_Release(This
->surface
);
869 IMediaStream_Release(This
->parent
);
870 HeapFree(GetProcessHeap(), 0, This
);
876 /*** IStreamSample methods ***/
877 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetMediaStream(IDirectDrawStreamSample
*iface
, IMediaStream
**media_stream
)
879 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
884 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSampleTimes(IDirectDrawStreamSample
*iface
, STREAM_TIME
*start_time
,
885 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
887 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
892 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetSampleTimes(IDirectDrawStreamSample
*iface
, const STREAM_TIME
*start_time
,
893 const STREAM_TIME
*end_time
)
895 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
900 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_Update(IDirectDrawStreamSample
*iface
, DWORD flags
, HANDLE event
,
901 PAPCFUNC func_APC
, DWORD APC_data
)
903 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
908 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_CompletionStatus(IDirectDrawStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
910 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
915 /*** IDirectDrawStreamSample methods ***/
916 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSurface(IDirectDrawStreamSample
*iface
, IDirectDrawSurface
**ddraw_surface
,
919 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
921 TRACE("(%p)->(%p,%p)\n", iface
, ddraw_surface
, rect
);
925 *ddraw_surface
= This
->surface
;
927 IDirectDrawSurface_AddRef(*ddraw_surface
);
936 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetRect(IDirectDrawStreamSample
*iface
, const RECT
*rect
)
938 FIXME("(%p)->(%p): stub\n", iface
, rect
);
943 static const struct IDirectDrawStreamSampleVtbl DirectDrawStreamSample_Vtbl
=
945 /*** IUnknown methods ***/
946 IDirectDrawStreamSampleImpl_QueryInterface
,
947 IDirectDrawStreamSampleImpl_AddRef
,
948 IDirectDrawStreamSampleImpl_Release
,
949 /*** IStreamSample methods ***/
950 IDirectDrawStreamSampleImpl_GetMediaStream
,
951 IDirectDrawStreamSampleImpl_GetSampleTimes
,
952 IDirectDrawStreamSampleImpl_SetSampleTimes
,
953 IDirectDrawStreamSampleImpl_Update
,
954 IDirectDrawStreamSampleImpl_CompletionStatus
,
955 /*** IDirectDrawStreamSample methods ***/
956 IDirectDrawStreamSampleImpl_GetSurface
,
957 IDirectDrawStreamSampleImpl_SetRect
960 static HRESULT
ddrawstreamsample_create(IDirectDrawMediaStream
*parent
, IDirectDrawSurface
*surface
,
961 const RECT
*rect
, IDirectDrawStreamSample
**ddraw_stream_sample
)
963 IDirectDrawStreamSampleImpl
*object
;
966 TRACE("(%p)\n", ddraw_stream_sample
);
968 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*object
));
970 return E_OUTOFMEMORY
;
972 object
->IDirectDrawStreamSample_iface
.lpVtbl
= &DirectDrawStreamSample_Vtbl
;
974 object
->parent
= (IMediaStream
*)parent
;
975 IMediaStream_AddRef(object
->parent
);
979 object
->surface
= surface
;
980 IDirectDrawSurface_AddRef(surface
);
987 hr
= IDirectDrawMediaStream_GetDirectDraw(parent
, &ddraw
);
990 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
994 desc
.dwSize
= sizeof(desc
);
995 desc
.dwFlags
= DDSD_CAPS
|DDSD_HEIGHT
|DDSD_WIDTH
|DDSD_PIXELFORMAT
;
998 desc
.ddpfPixelFormat
.dwSize
= sizeof(desc
.ddpfPixelFormat
);
999 desc
.ddpfPixelFormat
.dwFlags
= DDPF_RGB
;
1000 desc
.ddpfPixelFormat
.dwRGBBitCount
= 32;
1001 desc
.ddpfPixelFormat
.dwRBitMask
= 0xff0000;
1002 desc
.ddpfPixelFormat
.dwGBitMask
= 0x00ff00;
1003 desc
.ddpfPixelFormat
.dwBBitMask
= 0x0000ff;
1004 desc
.ddpfPixelFormat
.dwRGBAlphaBitMask
= 0;
1005 desc
.ddsCaps
.dwCaps
= DDSCAPS_SYSTEMMEMORY
|DDSCAPS_OFFSCREENPLAIN
;
1007 hr
= IDirectDraw_CreateSurface(ddraw
, &desc
, &object
->surface
, NULL
);
1008 IDirectDraw_Release(ddraw
);
1011 ERR("failed to create surface, 0x%08x\n", hr
);
1012 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
1018 object
->rect
= *rect
;
1019 else if (object
->surface
)
1021 DDSURFACEDESC desc
= { sizeof(desc
) };
1022 hr
= IDirectDrawSurface_GetSurfaceDesc(object
->surface
, &desc
);
1025 object
->rect
.left
= object
->rect
.top
= 0;
1026 object
->rect
.right
= desc
.dwWidth
;
1027 object
->rect
.bottom
= desc
.dwHeight
;
1031 *ddraw_stream_sample
= &object
->IDirectDrawStreamSample_iface
;
1037 IAudioStreamSample IAudioStreamSample_iface
;
1039 IMediaStream
*parent
;
1040 IAudioData
*audio_data
;
1041 } IAudioStreamSampleImpl
;
1043 static inline IAudioStreamSampleImpl
*impl_from_IAudioStreamSample(IAudioStreamSample
*iface
)
1045 return CONTAINING_RECORD(iface
, IAudioStreamSampleImpl
, IAudioStreamSample_iface
);
1048 /*** IUnknown methods ***/
1049 static HRESULT WINAPI
IAudioStreamSampleImpl_QueryInterface(IAudioStreamSample
*iface
,
1050 REFIID riid
, void **ret_iface
)
1052 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
1054 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
1055 IsEqualGUID(riid
, &IID_IStreamSample
) ||
1056 IsEqualGUID(riid
, &IID_IAudioStreamSample
))
1058 IAudioStreamSample_AddRef(iface
);
1065 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
1066 return E_NOINTERFACE
;
1069 static ULONG WINAPI
IAudioStreamSampleImpl_AddRef(IAudioStreamSample
*iface
)
1071 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1072 ULONG ref
= InterlockedIncrement(&This
->ref
);
1074 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1079 static ULONG WINAPI
IAudioStreamSampleImpl_Release(IAudioStreamSample
*iface
)
1081 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1082 ULONG ref
= InterlockedDecrement(&This
->ref
);
1084 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1087 HeapFree(GetProcessHeap(), 0, This
);
1092 /*** IStreamSample methods ***/
1093 static HRESULT WINAPI
IAudioStreamSampleImpl_GetMediaStream(IAudioStreamSample
*iface
, IMediaStream
**media_stream
)
1095 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
1100 static HRESULT WINAPI
IAudioStreamSampleImpl_GetSampleTimes(IAudioStreamSample
*iface
, STREAM_TIME
*start_time
,
1101 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
1103 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
1108 static HRESULT WINAPI
IAudioStreamSampleImpl_SetSampleTimes(IAudioStreamSample
*iface
, const STREAM_TIME
*start_time
,
1109 const STREAM_TIME
*end_time
)
1111 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
1116 static HRESULT WINAPI
IAudioStreamSampleImpl_Update(IAudioStreamSample
*iface
, DWORD flags
, HANDLE event
,
1117 PAPCFUNC func_APC
, DWORD APC_data
)
1119 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
1124 static HRESULT WINAPI
IAudioStreamSampleImpl_CompletionStatus(IAudioStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
1126 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
1131 /*** IAudioStreamSample methods ***/
1132 static HRESULT WINAPI
IAudioStreamSampleImpl_GetAudioData(IAudioStreamSample
*iface
, IAudioData
**audio_data
)
1134 FIXME("(%p)->(%p): stub\n", iface
, audio_data
);
1139 static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
=
1141 /*** IUnknown methods ***/
1142 IAudioStreamSampleImpl_QueryInterface
,
1143 IAudioStreamSampleImpl_AddRef
,
1144 IAudioStreamSampleImpl_Release
,
1145 /*** IStreamSample methods ***/
1146 IAudioStreamSampleImpl_GetMediaStream
,
1147 IAudioStreamSampleImpl_GetSampleTimes
,
1148 IAudioStreamSampleImpl_SetSampleTimes
,
1149 IAudioStreamSampleImpl_Update
,
1150 IAudioStreamSampleImpl_CompletionStatus
,
1151 /*** IAudioStreamSample methods ***/
1152 IAudioStreamSampleImpl_GetAudioData
1155 static HRESULT
audiostreamsample_create(IAudioMediaStream
*parent
, IAudioData
*audio_data
, IAudioStreamSample
**audio_stream_sample
)
1157 IAudioStreamSampleImpl
*object
;
1159 TRACE("(%p)\n", audio_stream_sample
);
1161 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IAudioStreamSampleImpl
));
1163 return E_OUTOFMEMORY
;
1165 object
->IAudioStreamSample_iface
.lpVtbl
= &AudioStreamSample_Vtbl
;
1167 object
->parent
= (IMediaStream
*)parent
;
1168 object
->audio_data
= audio_data
;
1170 *audio_stream_sample
= (IAudioStreamSample
*)&object
->IAudioStreamSample_iface
;