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"
33 WINE_DEFAULT_DEBUG_CHANNEL(amstream);
35 static HRESULT ddrawstreamsample_create(IDirectDrawMediaStream *parent, IDirectDrawStreamSample **ddraw_stream_sample);
36 static HRESULT audiostreamsample_create(IAudioMediaStream *parent, IAudioData *audio_data, IAudioStreamSample **audio_stream_sample);
39 IDirectDrawMediaStream IDirectDrawMediaStream_iface;
41 IMultiMediaStream* Parent;
43 STREAM_TYPE StreamType;
44 } IDirectDrawMediaStreamImpl;
46 static inline IDirectDrawMediaStreamImpl *impl_from_IDirectDrawMediaStream(IDirectDrawMediaStream *iface)
48 return CONTAINING_RECORD(iface, IDirectDrawMediaStreamImpl, IDirectDrawMediaStream_iface);
51 /*** IUnknown methods ***/
52 static HRESULT WINAPI IDirectDrawMediaStreamImpl_QueryInterface(IDirectDrawMediaStream *iface,
53 REFIID riid, void **ppv)
55 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
57 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppv);
59 if (IsEqualGUID(riid, &IID_IUnknown) ||
60 IsEqualGUID(riid, &IID_IMediaStream) ||
61 IsEqualGUID(riid, &IID_IDirectDrawMediaStream))
63 IUnknown_AddRef(iface);
68 ERR("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv);
72 static ULONG WINAPI IDirectDrawMediaStreamImpl_AddRef(IDirectDrawMediaStream *iface)
74 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
76 TRACE("(%p/%p)\n", iface, This);
78 return InterlockedIncrement(&This->ref);
81 static ULONG WINAPI IDirectDrawMediaStreamImpl_Release(IDirectDrawMediaStream *iface)
83 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
84 ULONG ref = InterlockedDecrement(&This->ref);
86 TRACE("(%p/%p)\n", iface, This);
89 HeapFree(GetProcessHeap(), 0, This);
94 /*** IMediaStream methods ***/
95 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetMultiMediaStream(IDirectDrawMediaStream *iface,
96 IMultiMediaStream** ppMultiMediaStream)
98 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
100 FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppMultiMediaStream);
105 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetInformation(IDirectDrawMediaStream *iface,
106 MSPID *pPurposeId, STREAM_TYPE *pType)
108 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
110 TRACE("(%p/%p)->(%p,%p)\n", This, iface, pPurposeId, pType);
113 *pPurposeId = This->PurposeId;
115 *pType = This->StreamType;
120 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetSameFormat(IDirectDrawMediaStream *iface,
121 IMediaStream *pStreamThatHasDesiredFormat, DWORD dwFlags)
123 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
125 FIXME("(%p/%p)->(%p,%x) stub!\n", This, iface, pStreamThatHasDesiredFormat, dwFlags);
130 static HRESULT WINAPI IDirectDrawMediaStreamImpl_AllocateSample(IDirectDrawMediaStream *iface,
131 DWORD dwFlags, IStreamSample **ppSample)
133 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
135 FIXME("(%p/%p)->(%x,%p) stub!\n", This, iface, dwFlags, ppSample);
140 static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSharedSample(IDirectDrawMediaStream *iface,
141 IStreamSample *pExistingSample, DWORD dwFlags, IStreamSample **ppSample)
143 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
145 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This, iface, pExistingSample, dwFlags, ppSample);
150 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SendEndOfStream(IDirectDrawMediaStream *iface,
153 IDirectDrawMediaStreamImpl *This = impl_from_IDirectDrawMediaStream(iface);
155 FIXME("(%p/%p)->(%x) stub!\n", This, iface, dwFlags);
160 /*** IDirectDrawMediaStream methods ***/
161 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetFormat(IDirectDrawMediaStream *iface,
162 DDSURFACEDESC *pDDSDCurrent, IDirectDrawPalette **ppDirectDrawPalette,
163 DDSURFACEDESC *pDDSDDesired, DWORD *pdwFlags)
165 FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface, pDDSDCurrent, ppDirectDrawPalette, pDDSDDesired,
172 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetFormat(IDirectDrawMediaStream *iface,
173 const DDSURFACEDESC *pDDSurfaceDesc, IDirectDrawPalette *pDirectDrawPalette)
175 FIXME("(%p)->(%p,%p) stub!\n", iface, pDDSurfaceDesc, pDirectDrawPalette);
180 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetDirectDraw(IDirectDrawMediaStream *iface,
181 IDirectDraw **ppDirectDraw)
183 FIXME("(%p)->(%p) stub!\n", iface, ppDirectDraw);
188 static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetDirectDraw(IDirectDrawMediaStream *iface,
189 IDirectDraw *pDirectDraw)
191 FIXME("(%p)->(%p) stub!\n", iface, pDirectDraw);
196 static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSample(IDirectDrawMediaStream *iface,
197 IDirectDrawSurface *pSurface, const RECT *pRect, DWORD dwFlags,
198 IDirectDrawStreamSample **ppSample)
200 TRACE("(%p)->(%p,%p,%x,%p)\n", iface, pSurface, pRect, dwFlags, ppSample);
202 return ddrawstreamsample_create(iface, ppSample);
205 static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetTimePerFrame(IDirectDrawMediaStream *iface,
206 STREAM_TIME *pFrameTime)
208 FIXME("(%p)->(%p) stub!\n", iface, pFrameTime);
213 static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStream_Vtbl =
215 /*** IUnknown methods ***/
216 IDirectDrawMediaStreamImpl_QueryInterface,
217 IDirectDrawMediaStreamImpl_AddRef,
218 IDirectDrawMediaStreamImpl_Release,
219 /*** IMediaStream methods ***/
220 IDirectDrawMediaStreamImpl_GetMultiMediaStream,
221 IDirectDrawMediaStreamImpl_GetInformation,
222 IDirectDrawMediaStreamImpl_SetSameFormat,
223 IDirectDrawMediaStreamImpl_AllocateSample,
224 IDirectDrawMediaStreamImpl_CreateSharedSample,
225 IDirectDrawMediaStreamImpl_SendEndOfStream,
226 /*** IDirectDrawMediaStream methods ***/
227 IDirectDrawMediaStreamImpl_GetFormat,
228 IDirectDrawMediaStreamImpl_SetFormat,
229 IDirectDrawMediaStreamImpl_GetDirectDraw,
230 IDirectDrawMediaStreamImpl_SetDirectDraw,
231 IDirectDrawMediaStreamImpl_CreateSample,
232 IDirectDrawMediaStreamImpl_GetTimePerFrame
235 HRESULT ddrawmediastream_create(IMultiMediaStream *Parent, const MSPID *pPurposeId,
236 STREAM_TYPE StreamType, IMediaStream **ppMediaStream)
238 IDirectDrawMediaStreamImpl *object;
240 TRACE("(%p,%s,%p)\n", Parent, debugstr_guid(pPurposeId), ppMediaStream);
242 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawMediaStreamImpl));
245 ERR("Out of memory\n");
246 return E_OUTOFMEMORY;
249 object->IDirectDrawMediaStream_iface.lpVtbl = &DirectDrawMediaStream_Vtbl;
252 object->Parent = Parent;
253 object->PurposeId = *pPurposeId;
254 object->StreamType = StreamType;
256 *ppMediaStream = (IMediaStream*)&object->IDirectDrawMediaStream_iface;
262 IAudioMediaStream IAudioMediaStream_iface;
264 IMultiMediaStream* parent;
266 STREAM_TYPE stream_type;
267 } IAudioMediaStreamImpl;
269 static inline IAudioMediaStreamImpl *impl_from_IAudioMediaStream(IAudioMediaStream *iface)
271 return CONTAINING_RECORD(iface, IAudioMediaStreamImpl, IAudioMediaStream_iface);
274 /*** IUnknown methods ***/
275 static HRESULT WINAPI IAudioMediaStreamImpl_QueryInterface(IAudioMediaStream *iface,
276 REFIID riid, void **ret_iface)
278 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
280 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ret_iface);
282 if (IsEqualGUID(riid, &IID_IUnknown) ||
283 IsEqualGUID(riid, &IID_IMediaStream) ||
284 IsEqualGUID(riid, &IID_IAudioMediaStream))
286 IAudioMediaStream_AddRef(iface);
293 ERR("(%p/%p)->(%s,%p),not found\n", iface, This, debugstr_guid(riid), ret_iface);
294 return E_NOINTERFACE;
297 static ULONG WINAPI IAudioMediaStreamImpl_AddRef(IAudioMediaStream *iface)
299 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
300 ULONG ref = InterlockedIncrement(&This->ref);
302 TRACE("(%p/%p): new ref = %u\n", iface, This, ref);
307 static ULONG WINAPI IAudioMediaStreamImpl_Release(IAudioMediaStream *iface)
309 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
310 ULONG ref = InterlockedDecrement(&This->ref);
312 TRACE("(%p/%p): new ref = %u\n", iface, This, ref);
315 HeapFree(GetProcessHeap(), 0, This);
320 /*** IMediaStream methods ***/
321 static HRESULT WINAPI IAudioMediaStreamImpl_GetMultiMediaStream(IAudioMediaStream *iface,
322 IMultiMediaStream** multimedia_stream)
324 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
326 FIXME("(%p/%p)->(%p) stub!\n", iface, This, multimedia_stream);
331 static HRESULT WINAPI IAudioMediaStreamImpl_GetInformation(IAudioMediaStream *iface,
332 MSPID *purpose_id, STREAM_TYPE *type)
334 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
336 TRACE("(%p/%p)->(%p,%p)\n", iface, This, purpose_id, type);
339 *purpose_id = This->purpose_id;
341 *type = This->stream_type;
346 static HRESULT WINAPI IAudioMediaStreamImpl_SetSameFormat(IAudioMediaStream *iface,
347 IMediaStream *stream_format, DWORD flags)
349 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
351 FIXME("(%p/%p)->(%p,%x) stub!\n", iface, This, stream_format, flags);
356 static HRESULT WINAPI IAudioMediaStreamImpl_AllocateSample(IAudioMediaStream *iface,
357 DWORD flags, IStreamSample **sample)
359 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
361 FIXME("(%p/%p)->(%x,%p) stub!\n", iface, This, flags, sample);
366 static HRESULT WINAPI IAudioMediaStreamImpl_CreateSharedSample(IAudioMediaStream *iface,
367 IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
369 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
371 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", iface, This, existing_sample, flags, sample);
376 static HRESULT WINAPI IAudioMediaStreamImpl_SendEndOfStream(IAudioMediaStream *iface,
379 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
381 FIXME("(%p/%p)->(%x) stub!\n", iface, This, flags);
386 /*** IAudioMediaStream methods ***/
387 static HRESULT WINAPI IAudioMediaStreamImpl_GetFormat(IAudioMediaStream *iface, WAVEFORMATEX *wave_format_current)
389 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
391 FIXME("(%p/%p)->(%p) stub!\n", iface, This, wave_format_current);
397 static HRESULT WINAPI IAudioMediaStreamImpl_SetFormat(IAudioMediaStream *iface, const WAVEFORMATEX *wave_format)
399 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
401 FIXME("(%p/%p)->(%p) stub!\n", iface, This, wave_format);
406 static HRESULT WINAPI IAudioMediaStreamImpl_CreateSample(IAudioMediaStream *iface, IAudioData *audio_data,
407 DWORD flags, IAudioStreamSample **sample)
409 IAudioMediaStreamImpl *This = impl_from_IAudioMediaStream(iface);
411 TRACE("(%p/%p)->(%p,%u,%p)\n", iface, This, audio_data, flags, sample);
416 return audiostreamsample_create(iface, audio_data, sample);
419 static const struct IAudioMediaStreamVtbl AudioMediaStream_Vtbl =
421 /*** IUnknown methods ***/
422 IAudioMediaStreamImpl_QueryInterface,
423 IAudioMediaStreamImpl_AddRef,
424 IAudioMediaStreamImpl_Release,
425 /*** IMediaStream methods ***/
426 IAudioMediaStreamImpl_GetMultiMediaStream,
427 IAudioMediaStreamImpl_GetInformation,
428 IAudioMediaStreamImpl_SetSameFormat,
429 IAudioMediaStreamImpl_AllocateSample,
430 IAudioMediaStreamImpl_CreateSharedSample,
431 IAudioMediaStreamImpl_SendEndOfStream,
432 /*** IAudioMediaStream methods ***/
433 IAudioMediaStreamImpl_GetFormat,
434 IAudioMediaStreamImpl_SetFormat,
435 IAudioMediaStreamImpl_CreateSample
438 HRESULT audiomediastream_create(IMultiMediaStream *parent, const MSPID *purpose_id,
439 STREAM_TYPE stream_type, IMediaStream **media_stream)
441 IAudioMediaStreamImpl *object;
443 TRACE("(%p,%s,%p)\n", parent, debugstr_guid(purpose_id), media_stream);
445 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAudioMediaStreamImpl));
448 ERR("Out of memory\n");
449 return E_OUTOFMEMORY;
452 object->IAudioMediaStream_iface.lpVtbl = &AudioMediaStream_Vtbl;
455 object->parent = parent;
456 object->purpose_id = *purpose_id;
457 object->stream_type = stream_type;
459 *media_stream = (IMediaStream*)&object->IAudioMediaStream_iface;
465 IDirectDrawStreamSample IDirectDrawStreamSample_iface;
467 IMediaStream *parent;
468 } IDirectDrawStreamSampleImpl;
470 static inline IDirectDrawStreamSampleImpl *impl_from_IDirectDrawStreamSample(IDirectDrawStreamSample *iface)
472 return CONTAINING_RECORD(iface, IDirectDrawStreamSampleImpl, IDirectDrawStreamSample_iface);
475 /*** IUnknown methods ***/
476 static HRESULT WINAPI IDirectDrawStreamSampleImpl_QueryInterface(IDirectDrawStreamSample *iface,
477 REFIID riid, void **ret_iface)
479 TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(riid), ret_iface);
481 if (IsEqualGUID(riid, &IID_IUnknown) ||
482 IsEqualGUID(riid, &IID_IStreamSample) ||
483 IsEqualGUID(riid, &IID_IDirectDrawStreamSample))
485 IDirectDrawStreamSample_AddRef(iface);
492 ERR("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ret_iface);
493 return E_NOINTERFACE;
496 static ULONG WINAPI IDirectDrawStreamSampleImpl_AddRef(IDirectDrawStreamSample *iface)
498 IDirectDrawStreamSampleImpl *This = impl_from_IDirectDrawStreamSample(iface);
499 ULONG ref = InterlockedIncrement(&This->ref);
501 TRACE("(%p)->(): new ref = %u\n", iface, ref);
506 static ULONG WINAPI IDirectDrawStreamSampleImpl_Release(IDirectDrawStreamSample *iface)
508 IDirectDrawStreamSampleImpl *This = impl_from_IDirectDrawStreamSample(iface);
509 ULONG ref = InterlockedDecrement(&This->ref);
511 TRACE("(%p)->(): new ref = %u\n", iface, ref);
514 HeapFree(GetProcessHeap(), 0, This);
519 /*** IStreamSample methods ***/
520 static HRESULT WINAPI IDirectDrawStreamSampleImpl_GetMediaStream(IDirectDrawStreamSample *iface, IMediaStream **media_stream)
522 FIXME("(%p)->(%p): stub\n", iface, media_stream);
527 static HRESULT WINAPI IDirectDrawStreamSampleImpl_GetSampleTimes(IDirectDrawStreamSample *iface, STREAM_TIME *start_time,
528 STREAM_TIME *end_time, STREAM_TIME *current_time)
530 FIXME("(%p)->(%p,%p,%p): stub\n", iface, start_time, end_time, current_time);
535 static HRESULT WINAPI IDirectDrawStreamSampleImpl_SetSampleTimes(IDirectDrawStreamSample *iface, const STREAM_TIME *start_time,
536 const STREAM_TIME *end_time)
538 FIXME("(%p)->(%p,%p): stub\n", iface, start_time, end_time);
543 static HRESULT WINAPI IDirectDrawStreamSampleImpl_Update(IDirectDrawStreamSample *iface, DWORD flags, HANDLE event,
544 PAPCFUNC func_APC, DWORD APC_data)
546 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface, flags, event, func_APC, APC_data);
551 static HRESULT WINAPI IDirectDrawStreamSampleImpl_CompletionStatus(IDirectDrawStreamSample *iface, DWORD flags, DWORD milliseconds)
553 FIXME("(%p)->(%x,%u): stub\n", iface, flags, milliseconds);
558 /*** IDirectDrawStreamSample methods ***/
559 static HRESULT WINAPI IDirectDrawStreamSampleImpl_GetSurface(IDirectDrawStreamSample *iface, IDirectDrawSurface **ddraw_surface,
562 FIXME("(%p)->(%p,%p): stub\n", iface, ddraw_surface, rect);
567 static HRESULT WINAPI IDirectDrawStreamSampleImpl_SetRect(IDirectDrawStreamSample *iface, const RECT *rect)
569 FIXME("(%p)->(%p): stub\n", iface, rect);
574 static const struct IDirectDrawStreamSampleVtbl DirectDrawStreamSample_Vtbl =
576 /*** IUnknown methods ***/
577 IDirectDrawStreamSampleImpl_QueryInterface,
578 IDirectDrawStreamSampleImpl_AddRef,
579 IDirectDrawStreamSampleImpl_Release,
580 /*** IStreamSample methods ***/
581 IDirectDrawStreamSampleImpl_GetMediaStream,
582 IDirectDrawStreamSampleImpl_GetSampleTimes,
583 IDirectDrawStreamSampleImpl_SetSampleTimes,
584 IDirectDrawStreamSampleImpl_Update,
585 IDirectDrawStreamSampleImpl_CompletionStatus,
586 /*** IDirectDrawStreamSample methods ***/
587 IDirectDrawStreamSampleImpl_GetSurface,
588 IDirectDrawStreamSampleImpl_SetRect
591 static HRESULT ddrawstreamsample_create(IDirectDrawMediaStream *parent, IDirectDrawStreamSample **ddraw_stream_sample)
593 IDirectDrawStreamSampleImpl *object;
595 TRACE("(%p)\n", ddraw_stream_sample);
597 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawStreamSampleImpl));
600 ERR("Out of memory\n");
601 return E_OUTOFMEMORY;
604 object->IDirectDrawStreamSample_iface.lpVtbl = &DirectDrawStreamSample_Vtbl;
606 object->parent = (IMediaStream*)parent;
608 *ddraw_stream_sample = (IDirectDrawStreamSample*)&object->IDirectDrawStreamSample_iface;
614 IAudioStreamSample IAudioStreamSample_iface;
616 IMediaStream *parent;
617 IAudioData *audio_data;
618 } IAudioStreamSampleImpl;
620 static inline IAudioStreamSampleImpl *impl_from_IAudioStreamSample(IAudioStreamSample *iface)
622 return CONTAINING_RECORD(iface, IAudioStreamSampleImpl, IAudioStreamSample_iface);
625 /*** IUnknown methods ***/
626 static HRESULT WINAPI IAudioStreamSampleImpl_QueryInterface(IAudioStreamSample *iface,
627 REFIID riid, void **ret_iface)
629 TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(riid), ret_iface);
631 if (IsEqualGUID(riid, &IID_IUnknown) ||
632 IsEqualGUID(riid, &IID_IStreamSample) ||
633 IsEqualGUID(riid, &IID_IAudioStreamSample))
635 IAudioStreamSample_AddRef(iface);
642 ERR("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ret_iface);
643 return E_NOINTERFACE;
646 static ULONG WINAPI IAudioStreamSampleImpl_AddRef(IAudioStreamSample *iface)
648 IAudioStreamSampleImpl *This = impl_from_IAudioStreamSample(iface);
649 ULONG ref = InterlockedIncrement(&This->ref);
651 TRACE("(%p)->(): new ref = %u\n", iface, ref);
656 static ULONG WINAPI IAudioStreamSampleImpl_Release(IAudioStreamSample *iface)
658 IAudioStreamSampleImpl *This = impl_from_IAudioStreamSample(iface);
659 ULONG ref = InterlockedDecrement(&This->ref);
661 TRACE("(%p)->(): new ref = %u\n", iface, ref);
664 HeapFree(GetProcessHeap(), 0, This);
669 /*** IStreamSample methods ***/
670 static HRESULT WINAPI IAudioStreamSampleImpl_GetMediaStream(IAudioStreamSample *iface, IMediaStream **media_stream)
672 FIXME("(%p)->(%p): stub\n", iface, media_stream);
677 static HRESULT WINAPI IAudioStreamSampleImpl_GetSampleTimes(IAudioStreamSample *iface, STREAM_TIME *start_time,
678 STREAM_TIME *end_time, STREAM_TIME *current_time)
680 FIXME("(%p)->(%p,%p,%p): stub\n", iface, start_time, end_time, current_time);
685 static HRESULT WINAPI IAudioStreamSampleImpl_SetSampleTimes(IAudioStreamSample *iface, const STREAM_TIME *start_time,
686 const STREAM_TIME *end_time)
688 FIXME("(%p)->(%p,%p): stub\n", iface, start_time, end_time);
693 static HRESULT WINAPI IAudioStreamSampleImpl_Update(IAudioStreamSample *iface, DWORD flags, HANDLE event,
694 PAPCFUNC func_APC, DWORD APC_data)
696 FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface, flags, event, func_APC, APC_data);
701 static HRESULT WINAPI IAudioStreamSampleImpl_CompletionStatus(IAudioStreamSample *iface, DWORD flags, DWORD milliseconds)
703 FIXME("(%p)->(%x,%u): stub\n", iface, flags, milliseconds);
708 /*** IAudioStreamSample methods ***/
709 static HRESULT WINAPI IAudioStreamSampleImpl_GetAudioData(IAudioStreamSample *iface, IAudioData **audio_data)
711 FIXME("(%p)->(%p): stub\n", iface, audio_data);
716 static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl =
718 /*** IUnknown methods ***/
719 IAudioStreamSampleImpl_QueryInterface,
720 IAudioStreamSampleImpl_AddRef,
721 IAudioStreamSampleImpl_Release,
722 /*** IStreamSample methods ***/
723 IAudioStreamSampleImpl_GetMediaStream,
724 IAudioStreamSampleImpl_GetSampleTimes,
725 IAudioStreamSampleImpl_SetSampleTimes,
726 IAudioStreamSampleImpl_Update,
727 IAudioStreamSampleImpl_CompletionStatus,
728 /*** IAudioStreamSample methods ***/
729 IAudioStreamSampleImpl_GetAudioData
732 static HRESULT audiostreamsample_create(IAudioMediaStream *parent, IAudioData *audio_data, IAudioStreamSample **audio_stream_sample)
734 IAudioStreamSampleImpl *object;
736 TRACE("(%p)\n", audio_stream_sample);
738 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAudioStreamSampleImpl));
741 ERR("Out of memory\n");
742 return E_OUTOFMEMORY;
745 object->IAudioStreamSample_iface.lpVtbl = &AudioStreamSample_Vtbl;
747 object->parent = (IMediaStream*)parent;
748 object->audio_data = audio_data;
750 *audio_stream_sample = (IAudioStreamSample*)&object->IAudioStreamSample_iface;