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 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
115 if (!multi_media_stream
)
118 IMultiMediaStream_AddRef(This
->parent
);
119 *multi_media_stream
= This
->parent
;
124 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
125 MSPID
*purpose_id
, STREAM_TYPE
*type
)
127 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
129 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
132 *purpose_id
= This
->purpose_id
;
134 *type
= This
->stream_type
;
139 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
140 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
142 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
144 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
149 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
150 DWORD flags
, IStreamSample
**sample
)
152 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
154 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
159 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
160 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
162 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
164 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
169 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
171 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
173 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
178 /*** IAMMediaStream methods ***/
179 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
180 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
182 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
184 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
189 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
191 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
193 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
198 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
200 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
202 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
207 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
209 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
211 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
216 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
218 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
220 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
225 static const struct IAMMediaStreamVtbl DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
=
227 /*** IUnknown methods ***/
228 DirectDrawMediaStreamImpl_IAMMediaStream_QueryInterface
,
229 DirectDrawMediaStreamImpl_IAMMediaStream_AddRef
,
230 DirectDrawMediaStreamImpl_IAMMediaStream_Release
,
231 /*** IMediaStream methods ***/
232 DirectDrawMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
233 DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation
,
234 DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat
,
235 DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample
,
236 DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
237 DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
238 /*** IAMMediaStream methods ***/
239 DirectDrawMediaStreamImpl_IAMMediaStream_Initialize
,
240 DirectDrawMediaStreamImpl_IAMMediaStream_SetState
,
241 DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
242 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter
,
243 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph
246 static inline DirectDrawMediaStreamImpl
*impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream
*iface
)
248 return CONTAINING_RECORD(iface
, DirectDrawMediaStreamImpl
, IDirectDrawMediaStream_iface
);
251 /*** IUnknown methods ***/
252 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface(IDirectDrawMediaStream
*iface
,
253 REFIID riid
, void **ret_iface
)
255 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
256 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
257 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
260 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef(IDirectDrawMediaStream
*iface
)
262 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
263 TRACE("(%p/%p)\n", iface
, This
);
264 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
267 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release(IDirectDrawMediaStream
*iface
)
269 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
270 TRACE("(%p/%p)\n", iface
, This
);
271 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
274 /*** IMediaStream methods ***/
275 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream(IDirectDrawMediaStream
*iface
,
276 IMultiMediaStream
**multi_media_stream
)
278 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
280 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
282 if (!multi_media_stream
)
285 IMultiMediaStream_AddRef(This
->parent
);
286 *multi_media_stream
= This
->parent
;
291 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation(IDirectDrawMediaStream
*iface
,
292 MSPID
*purpose_id
, STREAM_TYPE
*type
)
294 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
296 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
299 *purpose_id
= This
->purpose_id
;
301 *type
= This
->stream_type
;
306 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat(IDirectDrawMediaStream
*iface
,
307 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD dwFlags
)
309 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
311 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, dwFlags
);
316 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample(IDirectDrawMediaStream
*iface
,
317 DWORD dwFlags
, IStreamSample
**ppSample
)
319 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
321 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, dwFlags
, ppSample
);
326 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample(IDirectDrawMediaStream
*iface
,
327 IStreamSample
*pExistingSample
, DWORD dwFlags
, IStreamSample
**ppSample
)
329 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
331 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, pExistingSample
, dwFlags
, ppSample
);
336 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream(IDirectDrawMediaStream
*iface
,
339 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
341 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, dwFlags
);
346 /*** IDirectDrawMediaStream methods ***/
347 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat(IDirectDrawMediaStream
*iface
,
348 DDSURFACEDESC
*current_format
, IDirectDrawPalette
**palette
,
349 DDSURFACEDESC
*desired_format
, DWORD
*flags
)
351 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface
, current_format
, palette
, desired_format
,
354 return MS_E_NOSTREAM
;
358 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat(IDirectDrawMediaStream
*iface
,
359 const DDSURFACEDESC
*pDDSurfaceDesc
, IDirectDrawPalette
*pDirectDrawPalette
)
361 FIXME("(%p)->(%p,%p) stub!\n", iface
, pDDSurfaceDesc
, pDirectDrawPalette
);
366 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw(IDirectDrawMediaStream
*iface
,
369 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
371 TRACE("(%p)->(%p)\n", iface
, ddraw
);
376 HRESULT hr
= DirectDrawCreateEx(NULL
, (void**)&This
->ddraw
, &IID_IDirectDraw7
, NULL
);
379 IDirectDraw7_SetCooperativeLevel(This
->ddraw
, NULL
, DDSCL_NORMAL
);
382 return IDirectDraw7_QueryInterface(This
->ddraw
, &IID_IDirectDraw
, (void**)ddraw
);
385 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw(IDirectDrawMediaStream
*iface
,
386 IDirectDraw
*pDirectDraw
)
388 FIXME("(%p)->(%p) stub!\n", iface
, pDirectDraw
);
393 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample(IDirectDrawMediaStream
*iface
,
394 IDirectDrawSurface
*surface
, const RECT
*rect
, DWORD dwFlags
,
395 IDirectDrawStreamSample
**ppSample
)
397 TRACE("(%p)->(%p,%s,%x,%p)\n", iface
, surface
, wine_dbgstr_rect(rect
), dwFlags
, ppSample
);
399 return ddrawstreamsample_create(iface
, surface
, rect
, ppSample
);
402 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame(IDirectDrawMediaStream
*iface
,
403 STREAM_TIME
*pFrameTime
)
405 FIXME("(%p)->(%p) stub!\n", iface
, pFrameTime
);
410 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
=
412 /*** IUnknown methods ***/
413 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface
,
414 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef
,
415 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release
,
416 /*** IMediaStream methods ***/
417 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream
,
418 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation
,
419 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat
,
420 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample
,
421 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample
,
422 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream
,
423 /*** IDirectDrawMediaStream methods ***/
424 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat
,
425 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat
,
426 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw
,
427 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw
,
428 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample
,
429 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame
432 HRESULT
ddrawmediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
433 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
435 DirectDrawMediaStreamImpl
*object
;
437 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
439 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(DirectDrawMediaStreamImpl
));
441 return E_OUTOFMEMORY
;
443 object
->IAMMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
;
444 object
->IDirectDrawMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
;
447 object
->parent
= parent
;
448 object
->purpose_id
= *purpose_id
;
449 object
->stream_type
= stream_type
;
451 *media_stream
= &object
->IAMMediaStream_iface
;
457 IAMMediaStream IAMMediaStream_iface
;
458 IAudioMediaStream IAudioMediaStream_iface
;
460 IMultiMediaStream
* parent
;
462 STREAM_TYPE stream_type
;
463 } AudioMediaStreamImpl
;
465 static inline AudioMediaStreamImpl
*impl_from_AudioMediaStream_IAMMediaStream(IAMMediaStream
*iface
)
467 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAMMediaStream_iface
);
470 /*** IUnknown methods ***/
471 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream
*iface
,
472 REFIID riid
, void **ret_iface
)
474 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
476 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
478 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
479 IsEqualGUID(riid
, &IID_IMediaStream
) ||
480 IsEqualGUID(riid
, &IID_IAMMediaStream
))
482 IAMMediaStream_AddRef(iface
);
486 else if (IsEqualGUID(riid
, &IID_IAudioMediaStream
))
488 IAMMediaStream_AddRef(iface
);
489 *ret_iface
= &This
->IAudioMediaStream_iface
;
493 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ret_iface
);
494 return E_NOINTERFACE
;
497 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream
*iface
)
499 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
500 ULONG ref
= InterlockedIncrement(&This
->ref
);
502 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
507 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream
*iface
)
509 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
510 ULONG ref
= InterlockedDecrement(&This
->ref
);
512 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
515 HeapFree(GetProcessHeap(), 0, This
);
520 /*** IMediaStream methods ***/
521 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream
*iface
,
522 IMultiMediaStream
** multi_media_stream
)
524 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
526 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
528 if (!multi_media_stream
)
531 IMultiMediaStream_AddRef(This
->parent
);
532 *multi_media_stream
= This
->parent
;
537 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
538 MSPID
*purpose_id
, STREAM_TYPE
*type
)
540 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
542 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
545 *purpose_id
= This
->purpose_id
;
547 *type
= This
->stream_type
;
552 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
553 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
555 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
557 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
562 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
563 DWORD flags
, IStreamSample
**sample
)
565 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
567 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
572 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
573 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
575 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
577 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
582 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
584 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
586 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
591 /*** IAMMediaStream methods ***/
592 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
593 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
595 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
597 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
602 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
604 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
606 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
611 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
613 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
615 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
620 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
622 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
624 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
629 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
631 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
633 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
638 static const struct IAMMediaStreamVtbl AudioMediaStreamImpl_IAMMediaStream_Vtbl
=
640 /*** IUnknown methods ***/
641 AudioMediaStreamImpl_IAMMediaStream_QueryInterface
,
642 AudioMediaStreamImpl_IAMMediaStream_AddRef
,
643 AudioMediaStreamImpl_IAMMediaStream_Release
,
644 /*** IMediaStream methods ***/
645 AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
646 AudioMediaStreamImpl_IAMMediaStream_GetInformation
,
647 AudioMediaStreamImpl_IAMMediaStream_SetSameFormat
,
648 AudioMediaStreamImpl_IAMMediaStream_AllocateSample
,
649 AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
650 AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
651 /*** IAMMediaStream methods ***/
652 AudioMediaStreamImpl_IAMMediaStream_Initialize
,
653 AudioMediaStreamImpl_IAMMediaStream_SetState
,
654 AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
655 AudioMediaStreamImpl_IAMMediaStream_JoinFilter
,
656 AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph
659 static inline AudioMediaStreamImpl
*impl_from_IAudioMediaStream(IAudioMediaStream
*iface
)
661 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAudioMediaStream_iface
);
664 /*** IUnknown methods ***/
665 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_QueryInterface(IAudioMediaStream
*iface
,
666 REFIID riid
, void **ret_iface
)
668 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
669 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
670 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
673 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AddRef(IAudioMediaStream
*iface
)
675 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
676 TRACE("(%p/%p)\n", iface
, This
);
677 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
680 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_Release(IAudioMediaStream
*iface
)
682 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
683 TRACE("(%p/%p)\n", iface
, This
);
684 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
687 /*** IMediaStream methods ***/
688 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream(IAudioMediaStream
*iface
,
689 IMultiMediaStream
**multi_media_stream
)
691 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
693 TRACE("(%p/%p)->(%p)\n", iface
, This
, multi_media_stream
);
695 if (!multi_media_stream
)
698 IMultiMediaStream_AddRef(This
->parent
);
699 *multi_media_stream
= This
->parent
;
704 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetInformation(IAudioMediaStream
*iface
,
705 MSPID
*purpose_id
, STREAM_TYPE
*type
)
707 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
709 TRACE("(%p/%p)->(%p,%p)\n", iface
, This
, purpose_id
, type
);
712 *purpose_id
= This
->purpose_id
;
714 *type
= This
->stream_type
;
719 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat(IAudioMediaStream
*iface
,
720 IMediaStream
*stream_format
, DWORD flags
)
722 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
724 FIXME("(%p/%p)->(%p,%x) stub!\n", iface
, This
, stream_format
, flags
);
729 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AllocateSample(IAudioMediaStream
*iface
,
730 DWORD flags
, IStreamSample
**sample
)
732 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
734 FIXME("(%p/%p)->(%x,%p) stub!\n", iface
, This
, flags
, sample
);
739 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample(IAudioMediaStream
*iface
,
740 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
742 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
744 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", iface
, This
, existing_sample
, flags
, sample
);
749 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream(IAudioMediaStream
*iface
,
752 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
754 FIXME("(%p/%p)->(%x) stub!\n", iface
, This
, flags
);
759 /*** IAudioMediaStream methods ***/
760 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetFormat(IAudioMediaStream
*iface
, WAVEFORMATEX
*wave_format_current
)
762 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
764 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format_current
);
766 if (!wave_format_current
)
769 return MS_E_NOSTREAM
;
773 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetFormat(IAudioMediaStream
*iface
, const WAVEFORMATEX
*wave_format
)
775 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
777 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format
);
782 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSample(IAudioMediaStream
*iface
, IAudioData
*audio_data
,
783 DWORD flags
, IAudioStreamSample
**sample
)
785 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
787 TRACE("(%p/%p)->(%p,%u,%p)\n", iface
, This
, audio_data
, flags
, sample
);
792 return audiostreamsample_create(iface
, audio_data
, sample
);
795 static const struct IAudioMediaStreamVtbl AudioMediaStreamImpl_IAudioMediaStream_Vtbl
=
797 /*** IUnknown methods ***/
798 AudioMediaStreamImpl_IAudioMediaStream_QueryInterface
,
799 AudioMediaStreamImpl_IAudioMediaStream_AddRef
,
800 AudioMediaStreamImpl_IAudioMediaStream_Release
,
801 /*** IMediaStream methods ***/
802 AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream
,
803 AudioMediaStreamImpl_IAudioMediaStream_GetInformation
,
804 AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat
,
805 AudioMediaStreamImpl_IAudioMediaStream_AllocateSample
,
806 AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample
,
807 AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream
,
808 /*** IAudioMediaStream methods ***/
809 AudioMediaStreamImpl_IAudioMediaStream_GetFormat
,
810 AudioMediaStreamImpl_IAudioMediaStream_SetFormat
,
811 AudioMediaStreamImpl_IAudioMediaStream_CreateSample
814 HRESULT
audiomediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
815 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
817 AudioMediaStreamImpl
*object
;
819 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
821 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(AudioMediaStreamImpl
));
823 return E_OUTOFMEMORY
;
825 object
->IAMMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAMMediaStream_Vtbl
;
826 object
->IAudioMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAudioMediaStream_Vtbl
;
829 object
->parent
= parent
;
830 object
->purpose_id
= *purpose_id
;
831 object
->stream_type
= stream_type
;
833 *media_stream
= &object
->IAMMediaStream_iface
;
839 IDirectDrawStreamSample IDirectDrawStreamSample_iface
;
841 IMediaStream
*parent
;
842 IDirectDrawSurface
*surface
;
844 } IDirectDrawStreamSampleImpl
;
846 static inline IDirectDrawStreamSampleImpl
*impl_from_IDirectDrawStreamSample(IDirectDrawStreamSample
*iface
)
848 return CONTAINING_RECORD(iface
, IDirectDrawStreamSampleImpl
, IDirectDrawStreamSample_iface
);
851 /*** IUnknown methods ***/
852 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_QueryInterface(IDirectDrawStreamSample
*iface
,
853 REFIID riid
, void **ret_iface
)
855 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
857 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
858 IsEqualGUID(riid
, &IID_IStreamSample
) ||
859 IsEqualGUID(riid
, &IID_IDirectDrawStreamSample
))
861 IDirectDrawStreamSample_AddRef(iface
);
868 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
869 return E_NOINTERFACE
;
872 static ULONG WINAPI
IDirectDrawStreamSampleImpl_AddRef(IDirectDrawStreamSample
*iface
)
874 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
875 ULONG ref
= InterlockedIncrement(&This
->ref
);
877 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
882 static ULONG WINAPI
IDirectDrawStreamSampleImpl_Release(IDirectDrawStreamSample
*iface
)
884 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
885 ULONG ref
= InterlockedDecrement(&This
->ref
);
887 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
892 IDirectDrawSurface_Release(This
->surface
);
893 IMediaStream_Release(This
->parent
);
894 HeapFree(GetProcessHeap(), 0, This
);
900 /*** IStreamSample methods ***/
901 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetMediaStream(IDirectDrawStreamSample
*iface
, IMediaStream
**media_stream
)
903 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
908 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSampleTimes(IDirectDrawStreamSample
*iface
, STREAM_TIME
*start_time
,
909 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
911 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
916 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetSampleTimes(IDirectDrawStreamSample
*iface
, const STREAM_TIME
*start_time
,
917 const STREAM_TIME
*end_time
)
919 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
924 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_Update(IDirectDrawStreamSample
*iface
, DWORD flags
, HANDLE event
,
925 PAPCFUNC func_APC
, DWORD APC_data
)
927 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
932 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_CompletionStatus(IDirectDrawStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
934 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
939 /*** IDirectDrawStreamSample methods ***/
940 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSurface(IDirectDrawStreamSample
*iface
, IDirectDrawSurface
**ddraw_surface
,
943 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
945 TRACE("(%p)->(%p,%p)\n", iface
, ddraw_surface
, rect
);
949 *ddraw_surface
= This
->surface
;
951 IDirectDrawSurface_AddRef(*ddraw_surface
);
960 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetRect(IDirectDrawStreamSample
*iface
, const RECT
*rect
)
962 FIXME("(%p)->(%p): stub\n", iface
, rect
);
967 static const struct IDirectDrawStreamSampleVtbl DirectDrawStreamSample_Vtbl
=
969 /*** IUnknown methods ***/
970 IDirectDrawStreamSampleImpl_QueryInterface
,
971 IDirectDrawStreamSampleImpl_AddRef
,
972 IDirectDrawStreamSampleImpl_Release
,
973 /*** IStreamSample methods ***/
974 IDirectDrawStreamSampleImpl_GetMediaStream
,
975 IDirectDrawStreamSampleImpl_GetSampleTimes
,
976 IDirectDrawStreamSampleImpl_SetSampleTimes
,
977 IDirectDrawStreamSampleImpl_Update
,
978 IDirectDrawStreamSampleImpl_CompletionStatus
,
979 /*** IDirectDrawStreamSample methods ***/
980 IDirectDrawStreamSampleImpl_GetSurface
,
981 IDirectDrawStreamSampleImpl_SetRect
984 static HRESULT
ddrawstreamsample_create(IDirectDrawMediaStream
*parent
, IDirectDrawSurface
*surface
,
985 const RECT
*rect
, IDirectDrawStreamSample
**ddraw_stream_sample
)
987 IDirectDrawStreamSampleImpl
*object
;
990 TRACE("(%p)\n", ddraw_stream_sample
);
992 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*object
));
994 return E_OUTOFMEMORY
;
996 object
->IDirectDrawStreamSample_iface
.lpVtbl
= &DirectDrawStreamSample_Vtbl
;
998 object
->parent
= (IMediaStream
*)parent
;
999 IMediaStream_AddRef(object
->parent
);
1003 object
->surface
= surface
;
1004 IDirectDrawSurface_AddRef(surface
);
1011 hr
= IDirectDrawMediaStream_GetDirectDraw(parent
, &ddraw
);
1014 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
1018 desc
.dwSize
= sizeof(desc
);
1019 desc
.dwFlags
= DDSD_CAPS
|DDSD_HEIGHT
|DDSD_WIDTH
|DDSD_PIXELFORMAT
;
1020 desc
.dwHeight
= 100;
1022 desc
.ddpfPixelFormat
.dwSize
= sizeof(desc
.ddpfPixelFormat
);
1023 desc
.ddpfPixelFormat
.dwFlags
= DDPF_RGB
;
1024 desc
.ddpfPixelFormat
.dwRGBBitCount
= 32;
1025 desc
.ddpfPixelFormat
.dwRBitMask
= 0xff0000;
1026 desc
.ddpfPixelFormat
.dwGBitMask
= 0x00ff00;
1027 desc
.ddpfPixelFormat
.dwBBitMask
= 0x0000ff;
1028 desc
.ddpfPixelFormat
.dwRGBAlphaBitMask
= 0;
1029 desc
.ddsCaps
.dwCaps
= DDSCAPS_SYSTEMMEMORY
|DDSCAPS_OFFSCREENPLAIN
;
1030 desc
.lpSurface
= NULL
;
1032 hr
= IDirectDraw_CreateSurface(ddraw
, &desc
, &object
->surface
, NULL
);
1033 IDirectDraw_Release(ddraw
);
1036 ERR("failed to create surface, 0x%08x\n", hr
);
1037 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
1043 object
->rect
= *rect
;
1044 else if (object
->surface
)
1046 DDSURFACEDESC desc
= { sizeof(desc
) };
1047 hr
= IDirectDrawSurface_GetSurfaceDesc(object
->surface
, &desc
);
1049 SetRect(&object
->rect
, 0, 0, desc
.dwWidth
, desc
.dwHeight
);
1052 *ddraw_stream_sample
= &object
->IDirectDrawStreamSample_iface
;
1058 IAudioStreamSample IAudioStreamSample_iface
;
1060 IMediaStream
*parent
;
1061 IAudioData
*audio_data
;
1062 } IAudioStreamSampleImpl
;
1064 static inline IAudioStreamSampleImpl
*impl_from_IAudioStreamSample(IAudioStreamSample
*iface
)
1066 return CONTAINING_RECORD(iface
, IAudioStreamSampleImpl
, IAudioStreamSample_iface
);
1069 /*** IUnknown methods ***/
1070 static HRESULT WINAPI
IAudioStreamSampleImpl_QueryInterface(IAudioStreamSample
*iface
,
1071 REFIID riid
, void **ret_iface
)
1073 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
1075 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
1076 IsEqualGUID(riid
, &IID_IStreamSample
) ||
1077 IsEqualGUID(riid
, &IID_IAudioStreamSample
))
1079 IAudioStreamSample_AddRef(iface
);
1086 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
1087 return E_NOINTERFACE
;
1090 static ULONG WINAPI
IAudioStreamSampleImpl_AddRef(IAudioStreamSample
*iface
)
1092 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1093 ULONG ref
= InterlockedIncrement(&This
->ref
);
1095 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1100 static ULONG WINAPI
IAudioStreamSampleImpl_Release(IAudioStreamSample
*iface
)
1102 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1103 ULONG ref
= InterlockedDecrement(&This
->ref
);
1105 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1108 HeapFree(GetProcessHeap(), 0, This
);
1113 /*** IStreamSample methods ***/
1114 static HRESULT WINAPI
IAudioStreamSampleImpl_GetMediaStream(IAudioStreamSample
*iface
, IMediaStream
**media_stream
)
1116 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
1121 static HRESULT WINAPI
IAudioStreamSampleImpl_GetSampleTimes(IAudioStreamSample
*iface
, STREAM_TIME
*start_time
,
1122 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
1124 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
1129 static HRESULT WINAPI
IAudioStreamSampleImpl_SetSampleTimes(IAudioStreamSample
*iface
, const STREAM_TIME
*start_time
,
1130 const STREAM_TIME
*end_time
)
1132 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
1137 static HRESULT WINAPI
IAudioStreamSampleImpl_Update(IAudioStreamSample
*iface
, DWORD flags
, HANDLE event
,
1138 PAPCFUNC func_APC
, DWORD APC_data
)
1140 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
1145 static HRESULT WINAPI
IAudioStreamSampleImpl_CompletionStatus(IAudioStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
1147 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
1152 /*** IAudioStreamSample methods ***/
1153 static HRESULT WINAPI
IAudioStreamSampleImpl_GetAudioData(IAudioStreamSample
*iface
, IAudioData
**audio_data
)
1155 FIXME("(%p)->(%p): stub\n", iface
, audio_data
);
1160 static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
=
1162 /*** IUnknown methods ***/
1163 IAudioStreamSampleImpl_QueryInterface
,
1164 IAudioStreamSampleImpl_AddRef
,
1165 IAudioStreamSampleImpl_Release
,
1166 /*** IStreamSample methods ***/
1167 IAudioStreamSampleImpl_GetMediaStream
,
1168 IAudioStreamSampleImpl_GetSampleTimes
,
1169 IAudioStreamSampleImpl_SetSampleTimes
,
1170 IAudioStreamSampleImpl_Update
,
1171 IAudioStreamSampleImpl_CompletionStatus
,
1172 /*** IAudioStreamSample methods ***/
1173 IAudioStreamSampleImpl_GetAudioData
1176 static HRESULT
audiostreamsample_create(IAudioMediaStream
*parent
, IAudioData
*audio_data
, IAudioStreamSample
**audio_stream_sample
)
1178 IAudioStreamSampleImpl
*object
;
1180 TRACE("(%p)\n", audio_stream_sample
);
1182 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IAudioStreamSampleImpl
));
1184 return E_OUTOFMEMORY
;
1186 object
->IAudioStreamSample_iface
.lpVtbl
= &AudioStreamSample_Vtbl
;
1188 object
->parent
= (IMediaStream
*)parent
;
1189 object
->audio_data
= audio_data
;
1191 *audio_stream_sample
= (IAudioStreamSample
*)&object
->IAudioStreamSample_iface
;