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 "amstream_private.h"
24 DEFINE_GUID(IID_IDirectDraw7
, 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b);
26 static HRESULT
ddrawstreamsample_create(IDirectDrawMediaStream
*parent
, IDirectDrawSurface
*surface
,
27 const RECT
*rect
, IDirectDrawStreamSample
**ddraw_stream_sample
);
28 static HRESULT
audiostreamsample_create(IAudioMediaStream
*parent
, IAudioData
*audio_data
, IAudioStreamSample
**audio_stream_sample
);
31 IAMMediaStream IAMMediaStream_iface
;
32 IDirectDrawMediaStream IDirectDrawMediaStream_iface
;
34 IMultiMediaStream
* parent
;
36 STREAM_TYPE stream_type
;
38 } DirectDrawMediaStreamImpl
;
40 static inline DirectDrawMediaStreamImpl
*impl_from_DirectDrawMediaStream_IAMMediaStream(IAMMediaStream
*iface
)
42 return CONTAINING_RECORD(iface
, DirectDrawMediaStreamImpl
, IAMMediaStream_iface
);
45 /*** IUnknown methods ***/
46 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream
*iface
,
47 REFIID riid
, void **ret_iface
)
49 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
51 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
53 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
54 IsEqualGUID(riid
, &IID_IMediaStream
) ||
55 IsEqualGUID(riid
, &IID_IAMMediaStream
))
57 IAMMediaStream_AddRef(iface
);
61 else if (IsEqualGUID(riid
, &IID_IDirectDrawMediaStream
))
63 IAMMediaStream_AddRef(iface
);
64 *ret_iface
= &This
->IDirectDrawMediaStream_iface
;
68 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ret_iface
);
72 static ULONG WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream
*iface
)
74 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
75 ULONG ref
= InterlockedIncrement(&This
->ref
);
77 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
82 static ULONG WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream
*iface
)
84 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
85 ULONG ref
= InterlockedDecrement(&This
->ref
);
87 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
92 IDirectDraw7_Release(This
->ddraw
);
93 HeapFree(GetProcessHeap(), 0, This
);
99 /*** IMediaStream methods ***/
100 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream
*iface
,
101 IMultiMediaStream
** multi_media_stream
)
103 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
105 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
107 if (!multi_media_stream
)
110 IMultiMediaStream_AddRef(This
->parent
);
111 *multi_media_stream
= This
->parent
;
116 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
117 MSPID
*purpose_id
, STREAM_TYPE
*type
)
119 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
121 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
124 *purpose_id
= This
->purpose_id
;
126 *type
= This
->stream_type
;
131 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
132 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
134 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
136 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
141 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
142 DWORD flags
, IStreamSample
**sample
)
144 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
146 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
151 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
152 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
154 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
156 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
161 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
163 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
165 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
170 /*** IAMMediaStream methods ***/
171 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
172 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
174 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
176 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
181 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
183 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
185 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
190 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
192 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
194 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
199 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
201 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
203 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
208 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
210 DirectDrawMediaStreamImpl
*This
= impl_from_DirectDrawMediaStream_IAMMediaStream(iface
);
212 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
217 static const struct IAMMediaStreamVtbl DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
=
219 /*** IUnknown methods ***/
220 DirectDrawMediaStreamImpl_IAMMediaStream_QueryInterface
,
221 DirectDrawMediaStreamImpl_IAMMediaStream_AddRef
,
222 DirectDrawMediaStreamImpl_IAMMediaStream_Release
,
223 /*** IMediaStream methods ***/
224 DirectDrawMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
225 DirectDrawMediaStreamImpl_IAMMediaStream_GetInformation
,
226 DirectDrawMediaStreamImpl_IAMMediaStream_SetSameFormat
,
227 DirectDrawMediaStreamImpl_IAMMediaStream_AllocateSample
,
228 DirectDrawMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
229 DirectDrawMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
230 /*** IAMMediaStream methods ***/
231 DirectDrawMediaStreamImpl_IAMMediaStream_Initialize
,
232 DirectDrawMediaStreamImpl_IAMMediaStream_SetState
,
233 DirectDrawMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
234 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilter
,
235 DirectDrawMediaStreamImpl_IAMMediaStream_JoinFilterGraph
238 static inline DirectDrawMediaStreamImpl
*impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream
*iface
)
240 return CONTAINING_RECORD(iface
, DirectDrawMediaStreamImpl
, IDirectDrawMediaStream_iface
);
243 /*** IUnknown methods ***/
244 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface(IDirectDrawMediaStream
*iface
,
245 REFIID riid
, void **ret_iface
)
247 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
248 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
249 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
252 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef(IDirectDrawMediaStream
*iface
)
254 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
255 TRACE("(%p/%p)\n", iface
, This
);
256 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
259 static ULONG WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release(IDirectDrawMediaStream
*iface
)
261 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
262 TRACE("(%p/%p)\n", iface
, This
);
263 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
266 /*** IMediaStream methods ***/
267 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream(IDirectDrawMediaStream
*iface
,
268 IMultiMediaStream
**multi_media_stream
)
270 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
272 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
274 if (!multi_media_stream
)
277 IMultiMediaStream_AddRef(This
->parent
);
278 *multi_media_stream
= This
->parent
;
283 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation(IDirectDrawMediaStream
*iface
,
284 MSPID
*purpose_id
, STREAM_TYPE
*type
)
286 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
288 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
291 *purpose_id
= This
->purpose_id
;
293 *type
= This
->stream_type
;
298 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat(IDirectDrawMediaStream
*iface
,
299 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD dwFlags
)
301 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
303 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, dwFlags
);
308 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample(IDirectDrawMediaStream
*iface
,
309 DWORD dwFlags
, IStreamSample
**ppSample
)
311 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
313 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, dwFlags
, ppSample
);
318 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample(IDirectDrawMediaStream
*iface
,
319 IStreamSample
*pExistingSample
, DWORD dwFlags
, IStreamSample
**ppSample
)
321 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
323 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, pExistingSample
, dwFlags
, ppSample
);
328 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream(IDirectDrawMediaStream
*iface
,
331 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
333 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, dwFlags
);
338 /*** IDirectDrawMediaStream methods ***/
339 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat(IDirectDrawMediaStream
*iface
,
340 DDSURFACEDESC
*current_format
, IDirectDrawPalette
**palette
,
341 DDSURFACEDESC
*desired_format
, DWORD
*flags
)
343 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface
, current_format
, palette
, desired_format
,
346 return MS_E_NOSTREAM
;
350 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat(IDirectDrawMediaStream
*iface
,
351 const DDSURFACEDESC
*pDDSurfaceDesc
, IDirectDrawPalette
*pDirectDrawPalette
)
353 FIXME("(%p)->(%p,%p) stub!\n", iface
, pDDSurfaceDesc
, pDirectDrawPalette
);
358 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw(IDirectDrawMediaStream
*iface
,
361 DirectDrawMediaStreamImpl
*This
= impl_from_IDirectDrawMediaStream(iface
);
363 TRACE("(%p)->(%p)\n", iface
, ddraw
);
368 HRESULT hr
= DirectDrawCreateEx(NULL
, (void**)&This
->ddraw
, &IID_IDirectDraw7
, NULL
);
371 IDirectDraw7_SetCooperativeLevel(This
->ddraw
, NULL
, DDSCL_NORMAL
);
374 return IDirectDraw7_QueryInterface(This
->ddraw
, &IID_IDirectDraw
, (void**)ddraw
);
377 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw(IDirectDrawMediaStream
*iface
,
378 IDirectDraw
*pDirectDraw
)
380 FIXME("(%p)->(%p) stub!\n", iface
, pDirectDraw
);
385 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample(IDirectDrawMediaStream
*iface
,
386 IDirectDrawSurface
*surface
, const RECT
*rect
, DWORD dwFlags
,
387 IDirectDrawStreamSample
**ppSample
)
389 TRACE("(%p)->(%p,%s,%x,%p)\n", iface
, surface
, wine_dbgstr_rect(rect
), dwFlags
, ppSample
);
391 return ddrawstreamsample_create(iface
, surface
, rect
, ppSample
);
394 static HRESULT WINAPI
DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame(IDirectDrawMediaStream
*iface
,
395 STREAM_TIME
*pFrameTime
)
397 FIXME("(%p)->(%p) stub!\n", iface
, pFrameTime
);
402 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
=
404 /*** IUnknown methods ***/
405 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_QueryInterface
,
406 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AddRef
,
407 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Release
,
408 /*** IMediaStream methods ***/
409 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetMultiMediaStream
,
410 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetInformation
,
411 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetSameFormat
,
412 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_AllocateSample
,
413 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSharedSample
,
414 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SendEndOfStream
,
415 /*** IDirectDrawMediaStream methods ***/
416 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat
,
417 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetFormat
,
418 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetDirectDraw
,
419 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_SetDirectDraw
,
420 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_CreateSample
,
421 DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetTimePerFrame
424 HRESULT
ddrawmediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
425 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
427 DirectDrawMediaStreamImpl
*object
;
429 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
431 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(DirectDrawMediaStreamImpl
));
433 return E_OUTOFMEMORY
;
435 object
->IAMMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IAMMediaStream_Vtbl
;
436 object
->IDirectDrawMediaStream_iface
.lpVtbl
= &DirectDrawMediaStreamImpl_IDirectDrawMediaStream_Vtbl
;
439 object
->parent
= parent
;
440 object
->purpose_id
= *purpose_id
;
441 object
->stream_type
= stream_type
;
443 *media_stream
= &object
->IAMMediaStream_iface
;
449 IAMMediaStream IAMMediaStream_iface
;
450 IAudioMediaStream IAudioMediaStream_iface
;
452 IMultiMediaStream
* parent
;
454 STREAM_TYPE stream_type
;
455 } AudioMediaStreamImpl
;
457 static inline AudioMediaStreamImpl
*impl_from_AudioMediaStream_IAMMediaStream(IAMMediaStream
*iface
)
459 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAMMediaStream_iface
);
462 /*** IUnknown methods ***/
463 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream
*iface
,
464 REFIID riid
, void **ret_iface
)
466 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
468 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
470 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
471 IsEqualGUID(riid
, &IID_IMediaStream
) ||
472 IsEqualGUID(riid
, &IID_IAMMediaStream
))
474 IAMMediaStream_AddRef(iface
);
478 else if (IsEqualGUID(riid
, &IID_IAudioMediaStream
))
480 IAMMediaStream_AddRef(iface
);
481 *ret_iface
= &This
->IAudioMediaStream_iface
;
485 ERR("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ret_iface
);
486 return E_NOINTERFACE
;
489 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream
*iface
)
491 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
492 ULONG ref
= InterlockedIncrement(&This
->ref
);
494 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
499 static ULONG WINAPI
AudioMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream
*iface
)
501 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
502 ULONG ref
= InterlockedDecrement(&This
->ref
);
504 TRACE("(%p/%p)->(): new ref = %u\n", iface
, This
, ref
);
507 HeapFree(GetProcessHeap(), 0, This
);
512 /*** IMediaStream methods ***/
513 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream
*iface
,
514 IMultiMediaStream
** multi_media_stream
)
516 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
518 TRACE("(%p/%p)->(%p)\n", This
, iface
, multi_media_stream
);
520 if (!multi_media_stream
)
523 IMultiMediaStream_AddRef(This
->parent
);
524 *multi_media_stream
= This
->parent
;
529 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream
*iface
,
530 MSPID
*purpose_id
, STREAM_TYPE
*type
)
532 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
534 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, purpose_id
, type
);
537 *purpose_id
= This
->purpose_id
;
539 *type
= This
->stream_type
;
544 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream
*iface
,
545 IMediaStream
*pStreamThatHasDesiredFormat
, DWORD flags
)
547 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
549 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, flags
);
554 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream
*iface
,
555 DWORD flags
, IStreamSample
**sample
)
557 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
559 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, flags
, sample
);
564 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream
*iface
,
565 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
567 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
569 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, existing_sample
, flags
, sample
);
574 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream
*iface
, DWORD flags
)
576 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
578 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, flags
);
583 /*** IAMMediaStream methods ***/
584 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream
*iface
, IUnknown
*source_object
, DWORD flags
,
585 REFMSPID purpose_id
, const STREAM_TYPE stream_type
)
587 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
589 FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This
, iface
, source_object
, flags
, purpose_id
, stream_type
);
594 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream
*iface
, FILTER_STATE state
)
596 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
598 FIXME("(%p/%p)->(%u) stub!\n", This
, iface
, state
);
603 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream
*iface
, IAMMultiMediaStream
*am_multi_media_stream
)
605 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
607 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, am_multi_media_stream
);
612 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream
*iface
, IMediaStreamFilter
*media_stream_filter
)
614 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
616 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, media_stream_filter
);
621 static HRESULT WINAPI
AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream
*iface
, IFilterGraph
*filtergraph
)
623 AudioMediaStreamImpl
*This
= impl_from_AudioMediaStream_IAMMediaStream(iface
);
625 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, filtergraph
);
630 static const struct IAMMediaStreamVtbl AudioMediaStreamImpl_IAMMediaStream_Vtbl
=
632 /*** IUnknown methods ***/
633 AudioMediaStreamImpl_IAMMediaStream_QueryInterface
,
634 AudioMediaStreamImpl_IAMMediaStream_AddRef
,
635 AudioMediaStreamImpl_IAMMediaStream_Release
,
636 /*** IMediaStream methods ***/
637 AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream
,
638 AudioMediaStreamImpl_IAMMediaStream_GetInformation
,
639 AudioMediaStreamImpl_IAMMediaStream_SetSameFormat
,
640 AudioMediaStreamImpl_IAMMediaStream_AllocateSample
,
641 AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample
,
642 AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream
,
643 /*** IAMMediaStream methods ***/
644 AudioMediaStreamImpl_IAMMediaStream_Initialize
,
645 AudioMediaStreamImpl_IAMMediaStream_SetState
,
646 AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream
,
647 AudioMediaStreamImpl_IAMMediaStream_JoinFilter
,
648 AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph
651 static inline AudioMediaStreamImpl
*impl_from_IAudioMediaStream(IAudioMediaStream
*iface
)
653 return CONTAINING_RECORD(iface
, AudioMediaStreamImpl
, IAudioMediaStream_iface
);
656 /*** IUnknown methods ***/
657 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_QueryInterface(IAudioMediaStream
*iface
,
658 REFIID riid
, void **ret_iface
)
660 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
661 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ret_iface
);
662 return IAMMediaStream_QueryInterface(&This
->IAMMediaStream_iface
, riid
, ret_iface
);
665 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AddRef(IAudioMediaStream
*iface
)
667 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
668 TRACE("(%p/%p)\n", iface
, This
);
669 return IAMMediaStream_AddRef(&This
->IAMMediaStream_iface
);
672 static ULONG WINAPI
AudioMediaStreamImpl_IAudioMediaStream_Release(IAudioMediaStream
*iface
)
674 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
675 TRACE("(%p/%p)\n", iface
, This
);
676 return IAMMediaStream_Release(&This
->IAMMediaStream_iface
);
679 /*** IMediaStream methods ***/
680 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream(IAudioMediaStream
*iface
,
681 IMultiMediaStream
**multi_media_stream
)
683 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
685 TRACE("(%p/%p)->(%p)\n", iface
, This
, multi_media_stream
);
687 if (!multi_media_stream
)
690 IMultiMediaStream_AddRef(This
->parent
);
691 *multi_media_stream
= This
->parent
;
696 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetInformation(IAudioMediaStream
*iface
,
697 MSPID
*purpose_id
, STREAM_TYPE
*type
)
699 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
701 TRACE("(%p/%p)->(%p,%p)\n", iface
, This
, purpose_id
, type
);
704 *purpose_id
= This
->purpose_id
;
706 *type
= This
->stream_type
;
711 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat(IAudioMediaStream
*iface
,
712 IMediaStream
*stream_format
, DWORD flags
)
714 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
716 FIXME("(%p/%p)->(%p,%x) stub!\n", iface
, This
, stream_format
, flags
);
721 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_AllocateSample(IAudioMediaStream
*iface
,
722 DWORD flags
, IStreamSample
**sample
)
724 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
726 FIXME("(%p/%p)->(%x,%p) stub!\n", iface
, This
, flags
, sample
);
731 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample(IAudioMediaStream
*iface
,
732 IStreamSample
*existing_sample
, DWORD flags
, IStreamSample
**sample
)
734 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
736 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", iface
, This
, existing_sample
, flags
, sample
);
741 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream(IAudioMediaStream
*iface
,
744 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
746 FIXME("(%p/%p)->(%x) stub!\n", iface
, This
, flags
);
751 /*** IAudioMediaStream methods ***/
752 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_GetFormat(IAudioMediaStream
*iface
, WAVEFORMATEX
*wave_format_current
)
754 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
756 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format_current
);
758 if (!wave_format_current
)
761 return MS_E_NOSTREAM
;
765 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_SetFormat(IAudioMediaStream
*iface
, const WAVEFORMATEX
*wave_format
)
767 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
769 FIXME("(%p/%p)->(%p) stub!\n", iface
, This
, wave_format
);
774 static HRESULT WINAPI
AudioMediaStreamImpl_IAudioMediaStream_CreateSample(IAudioMediaStream
*iface
, IAudioData
*audio_data
,
775 DWORD flags
, IAudioStreamSample
**sample
)
777 AudioMediaStreamImpl
*This
= impl_from_IAudioMediaStream(iface
);
779 TRACE("(%p/%p)->(%p,%u,%p)\n", iface
, This
, audio_data
, flags
, sample
);
784 return audiostreamsample_create(iface
, audio_data
, sample
);
787 static const struct IAudioMediaStreamVtbl AudioMediaStreamImpl_IAudioMediaStream_Vtbl
=
789 /*** IUnknown methods ***/
790 AudioMediaStreamImpl_IAudioMediaStream_QueryInterface
,
791 AudioMediaStreamImpl_IAudioMediaStream_AddRef
,
792 AudioMediaStreamImpl_IAudioMediaStream_Release
,
793 /*** IMediaStream methods ***/
794 AudioMediaStreamImpl_IAudioMediaStream_GetMultiMediaStream
,
795 AudioMediaStreamImpl_IAudioMediaStream_GetInformation
,
796 AudioMediaStreamImpl_IAudioMediaStream_SetSameFormat
,
797 AudioMediaStreamImpl_IAudioMediaStream_AllocateSample
,
798 AudioMediaStreamImpl_IAudioMediaStream_CreateSharedSample
,
799 AudioMediaStreamImpl_IAudioMediaStream_SendEndOfStream
,
800 /*** IAudioMediaStream methods ***/
801 AudioMediaStreamImpl_IAudioMediaStream_GetFormat
,
802 AudioMediaStreamImpl_IAudioMediaStream_SetFormat
,
803 AudioMediaStreamImpl_IAudioMediaStream_CreateSample
806 HRESULT
audiomediastream_create(IMultiMediaStream
*parent
, const MSPID
*purpose_id
,
807 STREAM_TYPE stream_type
, IAMMediaStream
**media_stream
)
809 AudioMediaStreamImpl
*object
;
811 TRACE("(%p,%s,%p)\n", parent
, debugstr_guid(purpose_id
), media_stream
);
813 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(AudioMediaStreamImpl
));
815 return E_OUTOFMEMORY
;
817 object
->IAMMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAMMediaStream_Vtbl
;
818 object
->IAudioMediaStream_iface
.lpVtbl
= &AudioMediaStreamImpl_IAudioMediaStream_Vtbl
;
821 object
->parent
= parent
;
822 object
->purpose_id
= *purpose_id
;
823 object
->stream_type
= stream_type
;
825 *media_stream
= &object
->IAMMediaStream_iface
;
831 IDirectDrawStreamSample IDirectDrawStreamSample_iface
;
833 IMediaStream
*parent
;
834 IDirectDrawSurface
*surface
;
836 } IDirectDrawStreamSampleImpl
;
838 static inline IDirectDrawStreamSampleImpl
*impl_from_IDirectDrawStreamSample(IDirectDrawStreamSample
*iface
)
840 return CONTAINING_RECORD(iface
, IDirectDrawStreamSampleImpl
, IDirectDrawStreamSample_iface
);
843 /*** IUnknown methods ***/
844 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_QueryInterface(IDirectDrawStreamSample
*iface
,
845 REFIID riid
, void **ret_iface
)
847 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
849 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
850 IsEqualGUID(riid
, &IID_IStreamSample
) ||
851 IsEqualGUID(riid
, &IID_IDirectDrawStreamSample
))
853 IDirectDrawStreamSample_AddRef(iface
);
860 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
861 return E_NOINTERFACE
;
864 static ULONG WINAPI
IDirectDrawStreamSampleImpl_AddRef(IDirectDrawStreamSample
*iface
)
866 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
867 ULONG ref
= InterlockedIncrement(&This
->ref
);
869 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
874 static ULONG WINAPI
IDirectDrawStreamSampleImpl_Release(IDirectDrawStreamSample
*iface
)
876 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
877 ULONG ref
= InterlockedDecrement(&This
->ref
);
879 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
884 IDirectDrawSurface_Release(This
->surface
);
885 IMediaStream_Release(This
->parent
);
886 HeapFree(GetProcessHeap(), 0, This
);
892 /*** IStreamSample methods ***/
893 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetMediaStream(IDirectDrawStreamSample
*iface
, IMediaStream
**media_stream
)
895 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
900 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSampleTimes(IDirectDrawStreamSample
*iface
, STREAM_TIME
*start_time
,
901 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
903 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
908 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetSampleTimes(IDirectDrawStreamSample
*iface
, const STREAM_TIME
*start_time
,
909 const STREAM_TIME
*end_time
)
911 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
916 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_Update(IDirectDrawStreamSample
*iface
, DWORD flags
, HANDLE event
,
917 PAPCFUNC func_APC
, DWORD APC_data
)
919 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
924 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_CompletionStatus(IDirectDrawStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
926 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
931 /*** IDirectDrawStreamSample methods ***/
932 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_GetSurface(IDirectDrawStreamSample
*iface
, IDirectDrawSurface
**ddraw_surface
,
935 IDirectDrawStreamSampleImpl
*This
= impl_from_IDirectDrawStreamSample(iface
);
937 TRACE("(%p)->(%p,%p)\n", iface
, ddraw_surface
, rect
);
941 *ddraw_surface
= This
->surface
;
943 IDirectDrawSurface_AddRef(*ddraw_surface
);
952 static HRESULT WINAPI
IDirectDrawStreamSampleImpl_SetRect(IDirectDrawStreamSample
*iface
, const RECT
*rect
)
954 FIXME("(%p)->(%p): stub\n", iface
, rect
);
959 static const struct IDirectDrawStreamSampleVtbl DirectDrawStreamSample_Vtbl
=
961 /*** IUnknown methods ***/
962 IDirectDrawStreamSampleImpl_QueryInterface
,
963 IDirectDrawStreamSampleImpl_AddRef
,
964 IDirectDrawStreamSampleImpl_Release
,
965 /*** IStreamSample methods ***/
966 IDirectDrawStreamSampleImpl_GetMediaStream
,
967 IDirectDrawStreamSampleImpl_GetSampleTimes
,
968 IDirectDrawStreamSampleImpl_SetSampleTimes
,
969 IDirectDrawStreamSampleImpl_Update
,
970 IDirectDrawStreamSampleImpl_CompletionStatus
,
971 /*** IDirectDrawStreamSample methods ***/
972 IDirectDrawStreamSampleImpl_GetSurface
,
973 IDirectDrawStreamSampleImpl_SetRect
976 static HRESULT
ddrawstreamsample_create(IDirectDrawMediaStream
*parent
, IDirectDrawSurface
*surface
,
977 const RECT
*rect
, IDirectDrawStreamSample
**ddraw_stream_sample
)
979 IDirectDrawStreamSampleImpl
*object
;
982 TRACE("(%p)\n", ddraw_stream_sample
);
984 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*object
));
986 return E_OUTOFMEMORY
;
988 object
->IDirectDrawStreamSample_iface
.lpVtbl
= &DirectDrawStreamSample_Vtbl
;
990 object
->parent
= (IMediaStream
*)parent
;
991 IMediaStream_AddRef(object
->parent
);
995 object
->surface
= surface
;
996 IDirectDrawSurface_AddRef(surface
);
1003 hr
= IDirectDrawMediaStream_GetDirectDraw(parent
, &ddraw
);
1006 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
1010 desc
.dwSize
= sizeof(desc
);
1011 desc
.dwFlags
= DDSD_CAPS
|DDSD_HEIGHT
|DDSD_WIDTH
|DDSD_PIXELFORMAT
;
1012 desc
.dwHeight
= 100;
1014 desc
.ddpfPixelFormat
.dwSize
= sizeof(desc
.ddpfPixelFormat
);
1015 desc
.ddpfPixelFormat
.dwFlags
= DDPF_RGB
;
1016 desc
.ddpfPixelFormat
.dwRGBBitCount
= 32;
1017 desc
.ddpfPixelFormat
.dwRBitMask
= 0xff0000;
1018 desc
.ddpfPixelFormat
.dwGBitMask
= 0x00ff00;
1019 desc
.ddpfPixelFormat
.dwBBitMask
= 0x0000ff;
1020 desc
.ddpfPixelFormat
.dwRGBAlphaBitMask
= 0;
1021 desc
.ddsCaps
.dwCaps
= DDSCAPS_SYSTEMMEMORY
|DDSCAPS_OFFSCREENPLAIN
;
1022 desc
.lpSurface
= NULL
;
1024 hr
= IDirectDraw_CreateSurface(ddraw
, &desc
, &object
->surface
, NULL
);
1025 IDirectDraw_Release(ddraw
);
1028 ERR("failed to create surface, 0x%08x\n", hr
);
1029 IDirectDrawStreamSample_Release(&object
->IDirectDrawStreamSample_iface
);
1035 object
->rect
= *rect
;
1036 else if (object
->surface
)
1038 DDSURFACEDESC desc
= { sizeof(desc
) };
1039 hr
= IDirectDrawSurface_GetSurfaceDesc(object
->surface
, &desc
);
1041 SetRect(&object
->rect
, 0, 0, desc
.dwWidth
, desc
.dwHeight
);
1044 *ddraw_stream_sample
= &object
->IDirectDrawStreamSample_iface
;
1050 IAudioStreamSample IAudioStreamSample_iface
;
1052 IMediaStream
*parent
;
1053 IAudioData
*audio_data
;
1054 } IAudioStreamSampleImpl
;
1056 static inline IAudioStreamSampleImpl
*impl_from_IAudioStreamSample(IAudioStreamSample
*iface
)
1058 return CONTAINING_RECORD(iface
, IAudioStreamSampleImpl
, IAudioStreamSample_iface
);
1061 /*** IUnknown methods ***/
1062 static HRESULT WINAPI
IAudioStreamSampleImpl_QueryInterface(IAudioStreamSample
*iface
,
1063 REFIID riid
, void **ret_iface
)
1065 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid(riid
), ret_iface
);
1067 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
1068 IsEqualGUID(riid
, &IID_IStreamSample
) ||
1069 IsEqualGUID(riid
, &IID_IAudioStreamSample
))
1071 IAudioStreamSample_AddRef(iface
);
1078 ERR("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ret_iface
);
1079 return E_NOINTERFACE
;
1082 static ULONG WINAPI
IAudioStreamSampleImpl_AddRef(IAudioStreamSample
*iface
)
1084 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1085 ULONG ref
= InterlockedIncrement(&This
->ref
);
1087 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1092 static ULONG WINAPI
IAudioStreamSampleImpl_Release(IAudioStreamSample
*iface
)
1094 IAudioStreamSampleImpl
*This
= impl_from_IAudioStreamSample(iface
);
1095 ULONG ref
= InterlockedDecrement(&This
->ref
);
1097 TRACE("(%p)->(): new ref = %u\n", iface
, ref
);
1100 HeapFree(GetProcessHeap(), 0, This
);
1105 /*** IStreamSample methods ***/
1106 static HRESULT WINAPI
IAudioStreamSampleImpl_GetMediaStream(IAudioStreamSample
*iface
, IMediaStream
**media_stream
)
1108 FIXME("(%p)->(%p): stub\n", iface
, media_stream
);
1113 static HRESULT WINAPI
IAudioStreamSampleImpl_GetSampleTimes(IAudioStreamSample
*iface
, STREAM_TIME
*start_time
,
1114 STREAM_TIME
*end_time
, STREAM_TIME
*current_time
)
1116 FIXME("(%p)->(%p,%p,%p): stub\n", iface
, start_time
, end_time
, current_time
);
1121 static HRESULT WINAPI
IAudioStreamSampleImpl_SetSampleTimes(IAudioStreamSample
*iface
, const STREAM_TIME
*start_time
,
1122 const STREAM_TIME
*end_time
)
1124 FIXME("(%p)->(%p,%p): stub\n", iface
, start_time
, end_time
);
1129 static HRESULT WINAPI
IAudioStreamSampleImpl_Update(IAudioStreamSample
*iface
, DWORD flags
, HANDLE event
,
1130 PAPCFUNC func_APC
, DWORD APC_data
)
1132 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface
, flags
, event
, func_APC
, APC_data
);
1137 static HRESULT WINAPI
IAudioStreamSampleImpl_CompletionStatus(IAudioStreamSample
*iface
, DWORD flags
, DWORD milliseconds
)
1139 FIXME("(%p)->(%x,%u): stub\n", iface
, flags
, milliseconds
);
1144 /*** IAudioStreamSample methods ***/
1145 static HRESULT WINAPI
IAudioStreamSampleImpl_GetAudioData(IAudioStreamSample
*iface
, IAudioData
**audio_data
)
1147 FIXME("(%p)->(%p): stub\n", iface
, audio_data
);
1152 static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
=
1154 /*** IUnknown methods ***/
1155 IAudioStreamSampleImpl_QueryInterface
,
1156 IAudioStreamSampleImpl_AddRef
,
1157 IAudioStreamSampleImpl_Release
,
1158 /*** IStreamSample methods ***/
1159 IAudioStreamSampleImpl_GetMediaStream
,
1160 IAudioStreamSampleImpl_GetSampleTimes
,
1161 IAudioStreamSampleImpl_SetSampleTimes
,
1162 IAudioStreamSampleImpl_Update
,
1163 IAudioStreamSampleImpl_CompletionStatus
,
1164 /*** IAudioStreamSample methods ***/
1165 IAudioStreamSampleImpl_GetAudioData
1168 static HRESULT
audiostreamsample_create(IAudioMediaStream
*parent
, IAudioData
*audio_data
, IAudioStreamSample
**audio_stream_sample
)
1170 IAudioStreamSampleImpl
*object
;
1172 TRACE("(%p)\n", audio_stream_sample
);
1174 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IAudioStreamSampleImpl
));
1176 return E_OUTOFMEMORY
;
1178 object
->IAudioStreamSample_iface
.lpVtbl
= &AudioStreamSample_Vtbl
;
1180 object
->parent
= (IMediaStream
*)parent
;
1181 object
->audio_data
= audio_data
;
1183 *audio_stream_sample
= (IAudioStreamSample
*)&object
->IAudioStreamSample_iface
;