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 #define NONAMELESSUNION
22 #define NONAMELESSSTRUCT
30 #include "amstream_private.h"
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(amstream
);
37 static HRESULT
ddrawstreamsample_create(IDirectDrawMediaStream
*parent
, IDirectDrawSurface
*surface
,
38 const RECT
*rect
, IDirectDrawStreamSample
**ddraw_stream_sample
);
39 static HRESULT
audiostreamsample_create(IAudioMediaStream
*parent
, IAudioData
*audio_data
, IAudioStreamSample
**audio_stream_sample
);
42 IAMMediaStream IAMMediaStream_iface
;
43 IDirectDrawMediaStream IDirectDrawMediaStream_iface
;
45 IMultiMediaStream
* parent
;
47 STREAM_TYPE stream_type
;
49 } DirectDrawMediaStreamImpl
;
51 static inline DirectDrawMediaStreamImpl
*impl_from_DirectDrawMediaStream_IAMMediaStream(IAMMediaStream
*iface
)
53 return CONTAINING_RECORD(iface
, DirectDrawMediaStreamImpl
, IAMMediaStream_iface
);
56 /*** IUnknown methods ***/
57 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream
*iface
,
58 REFIID riid
, void **ret_iface
)
60 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
62 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
64 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
65 IsEqualGUID(riid
, &IID_IMediaStream
) ||
66 IsEqualGUID(riid
, &IID_IAMMediaStream
))
68 IAMMediaStream_AddRef(iface
);
72 else if (IsEqualGUID(riid
, &IID_IDirectDrawMediaStream
))
74 IAMMediaStream_AddRef(iface
);
75 *ret_iface
= &This
->IDirectDrawMediaStream_iface
;
79 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ret_iface
);
83 static ULONG WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream
*iface
)
85 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
86 ULONG ref
= InterlockedIncrement(&This
->ref
);
88 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
93 static ULONG WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream
*iface
)
95 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
96 ULONG ref
= InterlockedDecrement(&This
->ref
);
98 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
103 IDirectDraw7_Release(This
->ddraw
);
104 HeapFree(GetProcessHeap(), 0, This
);
110 /*** IMediaStream methods ***/
111 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream
*iface
,
112 IMultiMediaStream
** multi_media_stream
)
114 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
116 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
118 if (!multi_media_stream
)
121 IMultiMediaStream_AddRef(This
->parent
);
122 *multi_media_stream
= This
->parent
;
127 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
128 MSPID
*purpose_id
, STREAM_TYPE
*type
)
130 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
132 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
135 *purpose_id
= This
->purpose_id
;
137 *type
= This
->stream_type
;
142 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
143 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
145 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
147 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
152 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
153 DWORD flags
, IStreamSample
**sample
)
155 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
157 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
162 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
163 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
165 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
167 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
172 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
174 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
176 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
181 /*** IAMMediaStream methods ***/
182 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
183 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
185 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
187 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
192 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
194 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
196 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
201 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
203 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
205 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
210 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
212 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
214 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
219 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
221 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
223 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
228 static const struct IAMMediaStreamVtbl DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
=
230 /*** IUnknown methods ***/
231 DirectDrawMediaStreamImpl_IAMMediaStream_QueryInterface
,
232 DirectDrawMediaStreamImpl_IAMMediaStream_AddRef
,
233 DirectDrawMediaStreamImpl_IAMMediaStream_Release
,
234 /*** IMediaStream methods ***/
235 DirectDrawMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
236 DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation
,
237 DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat
,
238 DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample
,
239 DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
240 DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
241 /*** IAMMediaStream methods ***/
242 DirectDrawMediaStreamImpl_IAMMediaStream_Initialize
,
243 DirectDrawMediaStreamImpl_IAMMediaStream_SetState
,
244 DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
245 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter
,
246 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph
249 static inline DirectDrawMediaStreamImpl
*impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream
*iface
)
251 return CONTAINING_RECORD(iface
, DirectDrawMediaStreamImpl
, IDirectDrawMediaStream_iface
);
254 /*** IUnknown methods ***/
255 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface(IDirectDrawMediaStream
*iface
,
256 REFIID riid
, void **ret_iface
)
258 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
259 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
260 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
263 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef(IDirectDrawMediaStream
*iface
)
265 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
266 TRACE("(%p/%p)\n", iface
, This
);
267 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
270 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release(IDirectDrawMediaStream
*iface
)
272 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
273 TRACE("(%p/%p)\n", iface
, This
);
274 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
277 /*** IMediaStream methods ***/
278 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream(IDirectDrawMediaStream
*iface
,
279 IMultiMediaStream
**multi_media_stream
)
281 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
283 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
285 if (!multi_media_stream
)
288 IMultiMediaStream_AddRef(This
->parent
);
289 *multi_media_stream
= This
->parent
;
294 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation(IDirectDrawMediaStream
*iface
,
295 MSPID
*purpose_id
, STREAM_TYPE
*type
)
297 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
299 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
302 *purpose_id
= This
->purpose_id
;
304 *type
= This
->stream_type
;
309 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat(IDirectDrawMediaStream
*iface
,
310 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD dwFlags
)
312 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
314 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, dwFlags
);
319 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample(IDirectDrawMediaStream
*iface
,
320 DWORD dwFlags
, IStreamSample
**ppSample
)
322 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
324 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, dwFlags
, ppSample
);
329 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample(IDirectDrawMediaStream
*iface
,
330 IStreamSample
*pExistingSample
, DWORD dwFlags
, IStreamSample
**ppSample
)
332 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
334 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, pExistingSample
, dwFlags
, ppSample
);
339 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream(IDirectDrawMediaStream
*iface
,
342 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
344 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, dwFlags
);
349 /*** IDirectDrawMediaStream methods ***/
350 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat(IDirectDrawMediaStream
*iface
,
351 DDSURFACEDESC
*current_format
, IDirectDrawPalette
**palette
,
352 DDSURFACEDESC
*desired_format
, DWORD
*flags
)
354 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface
, current_format
, palette
, desired_format
,
357 return MS_E_NOSTREAM
;
361 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat(IDirectDrawMediaStream
*iface
,
362 const DDSURFACEDESC
*pDDSurfaceDesc
, IDirectDrawPalette
*pDirectDrawPalette
)
364 FIXME("(%p)->(%p,%p) stub!\n", iface
, pDDSurfaceDesc
, pDirectDrawPalette
);
369 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw(IDirectDrawMediaStream
*iface
,
372 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
374 TRACE("(%p)->(%p)\n", iface
, ddraw
);
379 HRESULT hr
= DirectDrawCreateEx(NULL
, (void**)&This
->ddraw
, &IID_IDirectDraw7
, NULL
);
382 IDirectDraw7_SetCooperativeLevel(This
->ddraw
, NULL
, DDSCL_NORMAL
);
385 return IDirectDraw7_QueryInterface(This
->ddraw
, &IID_IDirectDraw
, (void**)ddraw
);
388 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw(IDirectDrawMediaStream
*iface
,
389 IDirectDraw
*pDirectDraw
)
391 FIXME("(%p)->(%p) stub!\n", iface
, pDirectDraw
);
396 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample(IDirectDrawMediaStream
*iface
,
397 IDirectDrawSurface
*surface
, const RECT
*rect
, DWORD dwFlags
,
398 IDirectDrawStreamSample
**ppSample
)
400 TRACE("(%p)->(%p,%s,%x,%p)\n", iface
, surface
, wine_dbgstr_rect(rect
), dwFlags
, ppSample
);
402 return ddrawstreamsample_create(iface
, surface
, rect
, ppSample
);
405 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame(IDirectDrawMediaStream
*iface
,
406 STREAM_TIME
*pFrameTime
)
408 FIXME("(%p)->(%p) stub!\n", iface
, pFrameTime
);
413 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
=
415 /*** IUnknown methods ***/
416 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface
,
417 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef
,
418 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release
,
419 /*** IMediaStream methods ***/
420 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream
,
421 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation
,
422 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat
,
423 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample
,
424 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample
,
425 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream
,
426 /*** IDirectDrawMediaStream methods ***/
427 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat
,
428 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat
,
429 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw
,
430 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw
,
431 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample
,
432 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame
435 HRESULT
ddrawmediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
436 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
438 DirectDrawMediaStreamImpl
*object
;
440 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
442 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(DirectDrawMediaStreamImpl
));
444 return E_OUTOFMEMORY
;
446 object
->IAMMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
;
447 object
->IDirectDrawMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
;
450 object
->parent
= parent
;
451 object
->purpose_id
= *purpose_id
;
452 object
->stream_type
= stream_type
;
454 *media_stream
= &object
->IAMMediaStream_iface
;
460 IAMMediaStream IAMMediaStream_iface
;
461 IAudioMediaStream IAudioMediaStream_iface
;
463 IMultiMediaStream
* parent
;
465 STREAM_TYPE stream_type
;
466 } AudioMediaStreamImpl
;
468 static inline AudioMediaStreamImpl
*impl_from_AudioMediaStream_IAMMediaStream(IAMMediaStream
*iface
)
470 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAMMediaStream_iface
);
473 /*** IUnknown methods ***/
474 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream
*iface
,
475 REFIID riid
, void **ret_iface
)
477 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
479 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
481 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
482 IsEqualGUID(riid
, &IID_IMediaStream
) ||
483 IsEqualGUID(riid
, &IID_IAMMediaStream
))
485 IAMMediaStream_AddRef(iface
);
489 else if (IsEqualGUID(riid
, &IID_IAudioMediaStream
))
491 IAMMediaStream_AddRef(iface
);
492 *ret_iface
= &This
->IAudioMediaStream_iface
;
496 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ret_iface
);
497 return E_NOINTERFACE
;
500 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream
*iface
)
502 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
503 ULONG ref
= InterlockedIncrement(&This
->ref
);
505 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
510 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream
*iface
)
512 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
513 ULONG ref
= InterlockedDecrement(&This
->ref
);
515 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
518 HeapFree(GetProcessHeap(), 0, This
);
523 /*** IMediaStream methods ***/
524 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream
*iface
,
525 IMultiMediaStream
** multi_media_stream
)
527 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
529 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
531 if (!multi_media_stream
)
534 IMultiMediaStream_AddRef(This
->parent
);
535 *multi_media_stream
= This
->parent
;
540 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
541 MSPID
*purpose_id
, STREAM_TYPE
*type
)
543 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
545 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
548 *purpose_id
= This
->purpose_id
;
550 *type
= This
->stream_type
;
555 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
556 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
558 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
560 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
565 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
566 DWORD flags
, IStreamSample
**sample
)
568 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
570 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
575 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
576 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
578 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
580 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
585 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
587 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
589 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
594 /*** IAMMediaStream methods ***/
595 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
596 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
598 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
600 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
605 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
607 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
609 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
614 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
616 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
618 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
623 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
625 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
627 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
632 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
634 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
636 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
641 static const struct IAMMediaStreamVtbl AudioMediaStreamImpl_IAMMediaStream_Vtbl
=
643 /*** IUnknown methods ***/
644 AudioMediaStreamImpl_IAMMediaStream_QueryInterface
,
645 AudioMediaStreamImpl_IAMMediaStream_AddRef
,
646 AudioMediaStreamImpl_IAMMediaStream_Release
,
647 /*** IMediaStream methods ***/
648 AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
649 AudioMediaStreamImpl_IAMMediaStream_GetInformation
,
650 AudioMediaStreamImpl_IAMMediaStream_SetSameFormat
,
651 AudioMediaStreamImpl_IAMMediaStream_AllocateSample
,
652 AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
653 AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
654 /*** IAMMediaStream methods ***/
655 AudioMediaStreamImpl_IAMMediaStream_Initialize
,
656 AudioMediaStreamImpl_IAMMediaStream_SetState
,
657 AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
658 AudioMediaStreamImpl_IAMMediaStream_JoinFilter
,
659 AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph
662 static inline AudioMediaStreamImpl
*impl_from_IAudioMediaStream(IAudioMediaStream
*iface
)
664 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAudioMediaStream_iface
);
667 /*** IUnknown methods ***/
668 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_QueryInterface(IAudioMediaStream
*iface
,
669 REFIID riid
, void **ret_iface
)
671 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
672 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
673 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
676 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AddRef(IAudioMediaStream
*iface
)
678 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
679 TRACE("(%p/%p)\n", iface
, This
);
680 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
683 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_Release(IAudioMediaStream
*iface
)
685 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
686 TRACE("(%p/%p)\n", iface
, This
);
687 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
690 /*** IMediaStream methods ***/
691 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream(IAudioMediaStream
*iface
,
692 IMultiMediaStream
**multi_media_stream
)
694 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
696 TRACE("(%p/%p)->(%p)\n", iface
, This
, multi_media_stream
);
698 if (!multi_media_stream
)
701 IMultiMediaStream_AddRef(This
->parent
);
702 *multi_media_stream
= This
->parent
;
707 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetInformation(IAudioMediaStream
*iface
,
708 MSPID
*purpose_id
, STREAM_TYPE
*type
)
710 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
712 TRACE("(%p/%p)->(%p,%p)\n", iface
, This
, purpose_id
, type
);
715 *purpose_id
= This
->purpose_id
;
717 *type
= This
->stream_type
;
722 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat(IAudioMediaStream
*iface
,
723 IMediaStream
*stream_format
, DWORD flags
)
725 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
727 FIXME("(%p/%p)->(%p,%x) stub!\n", iface
, This
, stream_format
, flags
);
732 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AllocateSample(IAudioMediaStream
*iface
,
733 DWORD flags
, IStreamSample
**sample
)
735 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
737 FIXME("(%p/%p)->(%x,%p) stub!\n", iface
, This
, flags
, sample
);
742 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample(IAudioMediaStream
*iface
,
743 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
745 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
747 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", iface
, This
, existing_sample
, flags
, sample
);
752 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream(IAudioMediaStream
*iface
,
755 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
757 FIXME("(%p/%p)->(%x) stub!\n", iface
, This
, flags
);
762 /*** IAudioMediaStream methods ***/
763 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetFormat(IAudioMediaStream
*iface
, WAVEFORMATEX
*wave_format_current
)
765 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
767 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format_current
);
769 if (!wave_format_current
)
772 return MS_E_NOSTREAM
;
776 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetFormat(IAudioMediaStream
*iface
, const WAVEFORMATEX
*wave_format
)
778 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
780 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format
);
785 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSample(IAudioMediaStream
*iface
, IAudioData
*audio_data
,
786 DWORD flags
, IAudioStreamSample
**sample
)
788 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
790 TRACE("(%p/%p)->(%p,%u,%p)\n", iface
, This
, audio_data
, flags
, sample
);
795 return audiostreamsample_create(iface
, audio_data
, sample
);
798 static const struct IAudioMediaStreamVtbl AudioMediaStreamImpl_IAudioMediaStream_Vtbl
=
800 /*** IUnknown methods ***/
801 AudioMediaStreamImpl_IAudioMediaStream_QueryInterface
,
802 AudioMediaStreamImpl_IAudioMediaStream_AddRef
,
803 AudioMediaStreamImpl_IAudioMediaStream_Release
,
804 /*** IMediaStream methods ***/
805 AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream
,
806 AudioMediaStreamImpl_IAudioMediaStream_GetInformation
,
807 AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat
,
808 AudioMediaStreamImpl_IAudioMediaStream_AllocateSample
,
809 AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample
,
810 AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream
,
811 /*** IAudioMediaStream methods ***/
812 AudioMediaStreamImpl_IAudioMediaStream_GetFormat
,
813 AudioMediaStreamImpl_IAudioMediaStream_SetFormat
,
814 AudioMediaStreamImpl_IAudioMediaStream_CreateSample
817 HRESULT
audiomediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
818 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
820 AudioMediaStreamImpl
*object
;
822 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
824 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(AudioMediaStreamImpl
));
826 return E_OUTOFMEMORY
;
828 object
->IAMMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAMMediaStream_Vtbl
;
829 object
->IAudioMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAudioMediaStream_Vtbl
;
832 object
->parent
= parent
;
833 object
->purpose_id
= *purpose_id
;
834 object
->stream_type
= stream_type
;
836 *media_stream
= &object
->IAMMediaStream_iface
;
842 IDirectDrawStreamSample IDirectDrawStreamSample_iface
;
844 IMediaStream
*parent
;
845 IDirectDrawSurface
*surface
;
847 } IDirectDrawStreamSampleImpl
;
849 static inline IDirectDrawStreamSampleImpl
*impl_from_IDirectDrawStreamSample(IDirectDrawStreamSample
*iface
)
851 return CONTAINING_RECORD(iface
, IDirectDrawStreamSampleImpl
, IDirectDrawStreamSample_iface
);
854 /*** IUnknown methods ***/
855 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_QueryInterface(IDirectDrawStreamSample
*iface
,
856 REFIID riid
, void **ret_iface
)
858 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
860 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
861 IsEqualGUID(riid
, &IID_IStreamSample
) ||
862 IsEqualGUID(riid
, &IID_IDirectDrawStreamSample
))
864 IDirectDrawStreamSample_AddRef(iface
);
871 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
872 return E_NOINTERFACE
;
875 static ULONG WINAPI
IDirectDrawStreamSampleImpl_AddRef(IDirectDrawStreamSample
*iface
)
877 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
878 ULONG ref
= InterlockedIncrement(&This
->ref
);
880 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
885 static ULONG WINAPI
IDirectDrawStreamSampleImpl_Release(IDirectDrawStreamSample
*iface
)
887 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
888 ULONG ref
= InterlockedDecrement(&This
->ref
);
890 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
895 IDirectDrawSurface_Release(This
->surface
);
896 IMediaStream_Release(This
->parent
);
897 HeapFree(GetProcessHeap(), 0, This
);
903 /*** IStreamSample methods ***/
904 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetMediaStream(IDirectDrawStreamSample
*iface
, IMediaStream
**media_stream
)
906 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
911 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSampleTimes(IDirectDrawStreamSample
*iface
, STREAM_TIME
*start_time
,
912 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
914 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
919 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetSampleTimes(IDirectDrawStreamSample
*iface
, const STREAM_TIME
*start_time
,
920 const STREAM_TIME
*end_time
)
922 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
927 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_Update(IDirectDrawStreamSample
*iface
, DWORD flags
, HANDLE event
,
928 PAPCFUNC func_APC
, DWORD APC_data
)
930 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
935 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_CompletionStatus(IDirectDrawStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
937 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
942 /*** IDirectDrawStreamSample methods ***/
943 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSurface(IDirectDrawStreamSample
*iface
, IDirectDrawSurface
**ddraw_surface
,
946 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
948 TRACE("(%p)->(%p,%p)\n", iface
, ddraw_surface
, rect
);
952 *ddraw_surface
= This
->surface
;
954 IDirectDrawSurface_AddRef(*ddraw_surface
);
963 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetRect(IDirectDrawStreamSample
*iface
, const RECT
*rect
)
965 FIXME("(%p)->(%p): stub\n", iface
, rect
);
970 static const struct IDirectDrawStreamSampleVtbl DirectDrawStreamSample_Vtbl
=
972 /*** IUnknown methods ***/
973 IDirectDrawStreamSampleImpl_QueryInterface
,
974 IDirectDrawStreamSampleImpl_AddRef
,
975 IDirectDrawStreamSampleImpl_Release
,
976 /*** IStreamSample methods ***/
977 IDirectDrawStreamSampleImpl_GetMediaStream
,
978 IDirectDrawStreamSampleImpl_GetSampleTimes
,
979 IDirectDrawStreamSampleImpl_SetSampleTimes
,
980 IDirectDrawStreamSampleImpl_Update
,
981 IDirectDrawStreamSampleImpl_CompletionStatus
,
982 /*** IDirectDrawStreamSample methods ***/
983 IDirectDrawStreamSampleImpl_GetSurface
,
984 IDirectDrawStreamSampleImpl_SetRect
987 static HRESULT
ddrawstreamsample_create(IDirectDrawMediaStream
*parent
, IDirectDrawSurface
*surface
,
988 const RECT
*rect
, IDirectDrawStreamSample
**ddraw_stream_sample
)
990 IDirectDrawStreamSampleImpl
*object
;
993 TRACE("(%p)\n", ddraw_stream_sample
);
995 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*object
));
997 return E_OUTOFMEMORY
;
999 object
->IDirectDrawStreamSample_iface
.lpVtbl
= &DirectDrawStreamSample_Vtbl
;
1001 object
->parent
= (IMediaStream
*)parent
;
1002 IMediaStream_AddRef(object
->parent
);
1006 object
->surface
= surface
;
1007 IDirectDrawSurface_AddRef(surface
);
1014 hr
= IDirectDrawMediaStream_GetDirectDraw(parent
, &ddraw
);
1017 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
1021 desc
.dwSize
= sizeof(desc
);
1022 desc
.dwFlags
= DDSD_CAPS
|DDSD_HEIGHT
|DDSD_WIDTH
|DDSD_PIXELFORMAT
;
1023 desc
.dwHeight
= 100;
1025 desc
.ddpfPixelFormat
.dwSize
= sizeof(desc
.ddpfPixelFormat
);
1026 desc
.ddpfPixelFormat
.dwFlags
= DDPF_RGB
;
1027 desc
.ddpfPixelFormat
.u1
.dwRGBBitCount
= 32;
1028 desc
.ddpfPixelFormat
.u2
.dwRBitMask
= 0xff0000;
1029 desc
.ddpfPixelFormat
.u3
.dwGBitMask
= 0x00ff00;
1030 desc
.ddpfPixelFormat
.u4
.dwBBitMask
= 0x0000ff;
1031 desc
.ddpfPixelFormat
.u5
.dwRGBAlphaBitMask
= 0;
1032 desc
.ddsCaps
.dwCaps
= DDSCAPS_SYSTEMMEMORY
|DDSCAPS_OFFSCREENPLAIN
;
1033 desc
.lpSurface
= NULL
;
1035 hr
= IDirectDraw_CreateSurface(ddraw
, &desc
, &object
->surface
, NULL
);
1036 IDirectDraw_Release(ddraw
);
1039 ERR("failed to create surface, 0x%08x\n", hr
);
1040 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
1046 object
->rect
= *rect
;
1047 else if (object
->surface
)
1049 DDSURFACEDESC desc
= { sizeof(desc
) };
1050 hr
= IDirectDrawSurface_GetSurfaceDesc(object
->surface
, &desc
);
1052 SetRect(&object
->rect
, 0, 0, desc
.dwWidth
, desc
.dwHeight
);
1055 *ddraw_stream_sample
= &object
->IDirectDrawStreamSample_iface
;
1061 IAudioStreamSample IAudioStreamSample_iface
;
1063 IMediaStream
*parent
;
1064 IAudioData
*audio_data
;
1065 } IAudioStreamSampleImpl
;
1067 static inline IAudioStreamSampleImpl
*impl_from_IAudioStreamSample(IAudioStreamSample
*iface
)
1069 return CONTAINING_RECORD(iface
, IAudioStreamSampleImpl
, IAudioStreamSample_iface
);
1072 /*** IUnknown methods ***/
1073 static HRESULT WINAPI
IAudioStreamSampleImpl_QueryInterface(IAudioStreamSample
*iface
,
1074 REFIID riid
, void **ret_iface
)
1076 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
1078 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
1079 IsEqualGUID(riid
, &IID_IStreamSample
) ||
1080 IsEqualGUID(riid
, &IID_IAudioStreamSample
))
1082 IAudioStreamSample_AddRef(iface
);
1089 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
1090 return E_NOINTERFACE
;
1093 static ULONG WINAPI
IAudioStreamSampleImpl_AddRef(IAudioStreamSample
*iface
)
1095 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1096 ULONG ref
= InterlockedIncrement(&This
->ref
);
1098 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1103 static ULONG WINAPI
IAudioStreamSampleImpl_Release(IAudioStreamSample
*iface
)
1105 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1106 ULONG ref
= InterlockedDecrement(&This
->ref
);
1108 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1111 HeapFree(GetProcessHeap(), 0, This
);
1116 /*** IStreamSample methods ***/
1117 static HRESULT WINAPI
IAudioStreamSampleImpl_GetMediaStream(IAudioStreamSample
*iface
, IMediaStream
**media_stream
)
1119 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
1124 static HRESULT WINAPI
IAudioStreamSampleImpl_GetSampleTimes(IAudioStreamSample
*iface
, STREAM_TIME
*start_time
,
1125 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
1127 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
1132 static HRESULT WINAPI
IAudioStreamSampleImpl_SetSampleTimes(IAudioStreamSample
*iface
, const STREAM_TIME
*start_time
,
1133 const STREAM_TIME
*end_time
)
1135 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
1140 static HRESULT WINAPI
IAudioStreamSampleImpl_Update(IAudioStreamSample
*iface
, DWORD flags
, HANDLE event
,
1141 PAPCFUNC func_APC
, DWORD APC_data
)
1143 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
1148 static HRESULT WINAPI
IAudioStreamSampleImpl_CompletionStatus(IAudioStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
1150 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
1155 /*** IAudioStreamSample methods ***/
1156 static HRESULT WINAPI
IAudioStreamSampleImpl_GetAudioData(IAudioStreamSample
*iface
, IAudioData
**audio_data
)
1158 FIXME("(%p)->(%p): stub\n", iface
, audio_data
);
1163 static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
=
1165 /*** IUnknown methods ***/
1166 IAudioStreamSampleImpl_QueryInterface
,
1167 IAudioStreamSampleImpl_AddRef
,
1168 IAudioStreamSampleImpl_Release
,
1169 /*** IStreamSample methods ***/
1170 IAudioStreamSampleImpl_GetMediaStream
,
1171 IAudioStreamSampleImpl_GetSampleTimes
,
1172 IAudioStreamSampleImpl_SetSampleTimes
,
1173 IAudioStreamSampleImpl_Update
,
1174 IAudioStreamSampleImpl_CompletionStatus
,
1175 /*** IAudioStreamSample methods ***/
1176 IAudioStreamSampleImpl_GetAudioData
1179 static HRESULT
audiostreamsample_create(IAudioMediaStream
*parent
, IAudioData
*audio_data
, IAudioStreamSample
**audio_stream_sample
)
1181 IAudioStreamSampleImpl
*object
;
1183 TRACE("(%p)\n", audio_stream_sample
);
1185 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IAudioStreamSampleImpl
));
1187 return E_OUTOFMEMORY
;
1189 object
->IAudioStreamSample_iface
.lpVtbl
= &AudioStreamSample_Vtbl
;
1191 object
->parent
= (IMediaStream
*)parent
;
1192 object
->audio_data
= audio_data
;
1194 *audio_stream_sample
= (IAudioStreamSample
*)&object
->IAudioStreamSample_iface
;