ReactOS 0.4.17-dev-934-g091855f
audiostream.c File Reference
#include "amstream_private.h"
#include "wine/debug.h"
#include "wine/list.h"
#include "wine/strmbase.h"
Include dependency graph for audiostream.c:

Go to the source code of this file.

Classes

struct  queued_receive
 
struct  audio_stream
 
struct  audio_sample
 
struct  enum_media_types
 

Macros

#define COBJMACROS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (quartz)
 
static void remove_queued_receive (struct queued_receive *receive)
 
static void remove_queued_update (struct audio_sample *sample)
 
static void flush_receive_queue (struct audio_stream *stream)
 
static STREAM_TIME stream_time_from_position (struct audio_stream *stream, struct queued_receive *receive)
 
static void process_update (struct audio_sample *sample, struct queued_receive *receive)
 
static void process_updates (struct audio_stream *stream)
 
static struct audio_sample * impl_from_IAudioStreamSample (IAudioStreamSample *iface)
 
static HRESULT WINAPI audio_sample_QueryInterface (IAudioStreamSample *iface, REFIID riid, void **ret_iface)
 
static ULONG WINAPI audio_sample_AddRef (IAudioStreamSample *iface)
 
static ULONG WINAPI audio_sample_Release (IAudioStreamSample *iface)
 
static HRESULT WINAPI audio_sample_GetMediaStream (IAudioStreamSample *iface, IMediaStream **media_stream)
 
static HRESULT WINAPI audio_sample_GetSampleTimes (IAudioStreamSample *iface, STREAM_TIME *start_time, STREAM_TIME *end_time, STREAM_TIME *current_time)
 
static HRESULT WINAPI audio_sample_SetSampleTimes (IAudioStreamSample *iface, const STREAM_TIME *start_time, const STREAM_TIME *end_time)
 
static HRESULT WINAPI audio_sample_Update (IAudioStreamSample *iface, DWORD flags, HANDLE event, PAPCFUNC apc_func, DWORD apc_data)
 
static HRESULT WINAPI audio_sample_CompletionStatus (IAudioStreamSample *iface, DWORD flags, DWORD milliseconds)
 
static HRESULT WINAPI audio_sample_GetAudioData (IAudioStreamSample *iface, IAudioData **audio_data)
 
static HRESULT audiostreamsample_create (struct audio_stream *parent, IAudioData *audio_data, IAudioStreamSample **audio_stream_sample)
 
static struct audio_stream * impl_from_IAMMediaStream (IAMMediaStream *iface)
 
static HRESULT WINAPI audio_IAMMediaStream_QueryInterface (IAMMediaStream *iface, REFIID riid, void **ret_iface)
 
static ULONG WINAPI audio_IAMMediaStream_AddRef (IAMMediaStream *iface)
 
static ULONG WINAPI audio_IAMMediaStream_Release (IAMMediaStream *iface)
 
static HRESULT WINAPI audio_IAMMediaStream_GetMultiMediaStream (IAMMediaStream *iface, IMultiMediaStream **mmstream)
 
static HRESULT WINAPI audio_IAMMediaStream_GetInformation (IAMMediaStream *iface, MSPID *purpose_id, STREAM_TYPE *type)
 
static HRESULT WINAPI audio_IAMMediaStream_SetSameFormat (IAMMediaStream *iface, IMediaStream *pStreamThatHasDesiredFormat, DWORD flags)
 
static HRESULT WINAPI audio_IAMMediaStream_AllocateSample (IAMMediaStream *iface, DWORD flags, IStreamSample **sample)
 
static HRESULT WINAPI audio_IAMMediaStream_CreateSharedSample (IAMMediaStream *iface, IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
 
static HRESULT WINAPI audio_IAMMediaStream_SendEndOfStream (IAMMediaStream *iface, DWORD flags)
 
static HRESULT WINAPI audio_IAMMediaStream_Initialize (IAMMediaStream *iface, IUnknown *source_object, DWORD flags, REFMSPID purpose_id, const STREAM_TYPE stream_type)
 
static HRESULT WINAPI audio_IAMMediaStream_SetState (IAMMediaStream *iface, FILTER_STATE state)
 
static HRESULT WINAPI audio_IAMMediaStream_JoinAMMultiMediaStream (IAMMediaStream *iface, IAMMultiMediaStream *mmstream)
 
static HRESULT WINAPI audio_IAMMediaStream_JoinFilter (IAMMediaStream *iface, IMediaStreamFilter *filter)
 
static HRESULT WINAPI audio_IAMMediaStream_JoinFilterGraph (IAMMediaStream *iface, IFilterGraph *filtergraph)
 
static struct audio_stream * impl_from_IAudioMediaStream (IAudioMediaStream *iface)
 
static HRESULT WINAPI audio_IAudioMediaStream_QueryInterface (IAudioMediaStream *iface, REFIID riid, void **ret_iface)
 
static ULONG WINAPI audio_IAudioMediaStream_AddRef (IAudioMediaStream *iface)
 
static ULONG WINAPI audio_IAudioMediaStream_Release (IAudioMediaStream *iface)
 
static HRESULT WINAPI audio_IAudioMediaStream_GetMultiMediaStream (IAudioMediaStream *iface, IMultiMediaStream **mmstream)
 
static HRESULT WINAPI audio_IAudioMediaStream_GetInformation (IAudioMediaStream *iface, MSPID *purpose_id, STREAM_TYPE *type)
 
static HRESULT WINAPI audio_IAudioMediaStream_SetSameFormat (IAudioMediaStream *iface, IMediaStream *other, DWORD flags)
 
static HRESULT WINAPI audio_IAudioMediaStream_AllocateSample (IAudioMediaStream *iface, DWORD flags, IStreamSample **sample)
 
static HRESULT WINAPI audio_IAudioMediaStream_CreateSharedSample (IAudioMediaStream *iface, IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
 
static HRESULT WINAPI audio_IAudioMediaStream_SendEndOfStream (IAudioMediaStream *iface, DWORD flags)
 
static HRESULT WINAPI audio_IAudioMediaStream_GetFormat (IAudioMediaStream *iface, WAVEFORMATEX *format)
 
static HRESULT WINAPI audio_IAudioMediaStream_SetFormat (IAudioMediaStream *iface, const WAVEFORMATEX *format)
 
static HRESULT WINAPI audio_IAudioMediaStream_CreateSample (IAudioMediaStream *iface, IAudioData *audio_data, DWORD flags, IAudioStreamSample **sample)
 
static struct enum_media_types * impl_from_IEnumMediaTypes (IEnumMediaTypes *iface)
 
static HRESULT WINAPI enum_media_types_QueryInterface (IEnumMediaTypes *iface, REFIID iid, void **out)
 
static ULONG WINAPI enum_media_types_AddRef (IEnumMediaTypes *iface)
 
static ULONG WINAPI enum_media_types_Release (IEnumMediaTypes *iface)
 
static HRESULT WINAPI enum_media_types_Next (IEnumMediaTypes *iface, ULONG count, AM_MEDIA_TYPE **mts, ULONG *ret_count)
 
static HRESULT WINAPI enum_media_types_Skip (IEnumMediaTypes *iface, ULONG count)
 
static HRESULT WINAPI enum_media_types_Reset (IEnumMediaTypes *iface)
 
static HRESULT WINAPI enum_media_types_Clone (IEnumMediaTypes *iface, IEnumMediaTypes **out)
 
static struct audio_stream * impl_from_IPin (IPin *iface)
 
static HRESULT WINAPI audio_sink_QueryInterface (IPin *iface, REFIID iid, void **out)
 
static ULONG WINAPI audio_sink_AddRef (IPin *iface)
 
static ULONG WINAPI audio_sink_Release (IPin *iface)
 
static HRESULT WINAPI audio_sink_Connect (IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
 
static HRESULT WINAPI audio_sink_ReceiveConnection (IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
 
static HRESULT WINAPI audio_sink_Disconnect (IPin *iface)
 
static HRESULT WINAPI audio_sink_ConnectedTo (IPin *iface, IPin **peer)
 
static HRESULT WINAPI audio_sink_ConnectionMediaType (IPin *iface, AM_MEDIA_TYPE *mt)
 
static HRESULT WINAPI audio_sink_QueryPinInfo (IPin *iface, PIN_INFO *info)
 
static HRESULT WINAPI audio_sink_QueryDirection (IPin *iface, PIN_DIRECTION *dir)
 
static HRESULT WINAPI audio_sink_QueryId (IPin *iface, WCHAR **id)
 
static HRESULT WINAPI audio_sink_QueryAccept (IPin *iface, const AM_MEDIA_TYPE *mt)
 
static HRESULT WINAPI audio_sink_EnumMediaTypes (IPin *iface, IEnumMediaTypes **enum_media_types)
 
static HRESULT WINAPI audio_sink_QueryInternalConnections (IPin *iface, IPin **pins, ULONG *count)
 
static HRESULT WINAPI audio_sink_EndOfStream (IPin *iface)
 
static HRESULT WINAPI audio_sink_BeginFlush (IPin *iface)
 
static HRESULT WINAPI audio_sink_EndFlush (IPin *iface)
 
static HRESULT WINAPI audio_sink_NewSegment (IPin *iface, REFERENCE_TIME start, REFERENCE_TIME stop, double rate)
 
static struct audio_stream * impl_from_IMemInputPin (IMemInputPin *iface)
 
static HRESULT WINAPI audio_meminput_QueryInterface (IMemInputPin *iface, REFIID iid, void **out)
 
static ULONG WINAPI audio_meminput_AddRef (IMemInputPin *iface)
 
static ULONG WINAPI audio_meminput_Release (IMemInputPin *iface)
 
static HRESULT WINAPI audio_meminput_GetAllocator (IMemInputPin *iface, IMemAllocator **allocator)
 
static HRESULT WINAPI audio_meminput_NotifyAllocator (IMemInputPin *iface, IMemAllocator *allocator, BOOL readonly)
 
static HRESULT WINAPI audio_meminput_GetAllocatorRequirements (IMemInputPin *iface, ALLOCATOR_PROPERTIES *props)
 
static HRESULT WINAPI audio_meminput_Receive (IMemInputPin *iface, IMediaSample *sample)
 
static HRESULT WINAPI audio_meminput_ReceiveMultiple (IMemInputPin *iface, IMediaSample **samples, LONG count, LONG *processed)
 
static HRESULT WINAPI audio_meminput_ReceiveCanBlock (IMemInputPin *iface)
 
HRESULT audio_stream_create (IUnknown *outer, void **out)
 

Variables

static const WCHAR sink_id [] = L"I{A35FF56B-9FDA-11D0-8FDF-00C04FD9189D}"
 
static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
 
static const struct IAMMediaStreamVtbl audio_IAMMediaStream_vtbl
 
static const struct IAudioMediaStreamVtbl audio_IAudioMediaStream_vtbl
 
static const IEnumMediaTypesVtbl enum_media_types_vtbl
 
static const IPinVtbl audio_sink_vtbl
 
static const IMemInputPinVtbl audio_meminput_vtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 21 of file audiostream.c.

Function Documentation

◆ audio_IAMMediaStream_AddRef()

static ULONG WINAPI audio_IAMMediaStream_AddRef ( IAMMediaStream *  iface)
static

Definition at line 446 of file audiostream.c.

447{
450
451 TRACE("(%p/%p)->(): new ref = %lu\n", iface, This, ref);
452
453 return ref;
454}
#define InterlockedIncrement
Definition: armddk.h:53
static struct audio_stream * impl_from_IAMMediaStream(IAMMediaStream *iface)
Definition: audiostream.c:402
#define TRACE(s)
Definition: solgame.cpp:4
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ audio_IAMMediaStream_AllocateSample()

static HRESULT WINAPI audio_IAMMediaStream_AllocateSample ( IAMMediaStream *  iface,
DWORD  flags,
IStreamSample **  sample 
)
static

Definition at line 514 of file audiostream.c.

516{
518
519 FIXME("(%p/%p)->(%lx,%p) stub!\n", This, iface, flags, sample);
520
521 return S_FALSE;
522}
#define FIXME(fmt,...)
Definition: precomp.h:53
GLbitfield flags
Definition: glext.h:7161
Definition: wave.c:25
#define S_FALSE
Definition: winerror.h:3451

◆ audio_IAMMediaStream_CreateSharedSample()

static HRESULT WINAPI audio_IAMMediaStream_CreateSharedSample ( IAMMediaStream *  iface,
IStreamSample *  existing_sample,
DWORD  flags,
IStreamSample **  sample 
)
static

Definition at line 524 of file audiostream.c.

526{
528
529 FIXME("(%p/%p)->(%p,%lx,%p) stub!\n", This, iface, existing_sample, flags, sample);
530
531 return S_FALSE;
532}

◆ audio_IAMMediaStream_GetInformation()

static HRESULT WINAPI audio_IAMMediaStream_GetInformation ( IAMMediaStream *  iface,
MSPID *  purpose_id,
STREAM_TYPE *  type 
)
static

Definition at line 489 of file audiostream.c.

491{
493
494 TRACE("(%p/%p)->(%p,%p)\n", This, iface, purpose_id, type);
495
496 if (purpose_id)
497 *purpose_id = This->purpose_id;
498 if (type)
499 *type = This->stream_type;
500
501 return S_OK;
502}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define S_OK
Definition: intsafe.h:52
MSPID purpose_id
Definition: audiostream.c:50

◆ audio_IAMMediaStream_GetMultiMediaStream()

static HRESULT WINAPI audio_IAMMediaStream_GetMultiMediaStream ( IAMMediaStream *  iface,
IMultiMediaStream **  mmstream 
)
static

Definition at line 473 of file audiostream.c.

475{
477
478 TRACE("stream %p, mmstream %p.\n", stream, mmstream);
479
480 if (!mmstream)
481 return E_POINTER;
482
483 if (stream->parent)
484 IMultiMediaStream_AddRef(stream->parent);
485 *mmstream = stream->parent;
486 return S_OK;
487}
Definition: parse.h:23
#define E_POINTER
Definition: winerror.h:3480

◆ audio_IAMMediaStream_Initialize()

static HRESULT WINAPI audio_IAMMediaStream_Initialize ( IAMMediaStream *  iface,
IUnknown *  source_object,
DWORD  flags,
REFMSPID  purpose_id,
const STREAM_TYPE  stream_type 
)
static

Definition at line 544 of file audiostream.c.

546{
548
549 TRACE("stream %p, source_object %p, flags %lx, purpose_id %s, stream_type %u.\n", stream, source_object, flags,
551
552 if (!purpose_id)
553 return E_POINTER;
554
555 if (source_object)
556 FIXME("Specifying a stream object is not yet supported.\n");
557
559 FIXME("AMMSF_CREATEPEER is not yet supported.\n");
560
561 stream->purpose_id = *purpose_id;
562 stream->stream_type = stream_type;
563
564 return S_OK;
565}
@ AMMSF_CREATEPEER
Definition: amstream.idl:46
#define debugstr_guid
Definition: kernel32.h:35
STREAM_TYPE stream_type
Definition: audiostream.c:51

◆ audio_IAMMediaStream_JoinAMMultiMediaStream()

static HRESULT WINAPI audio_IAMMediaStream_JoinAMMultiMediaStream ( IAMMediaStream *  iface,
IAMMultiMediaStream *  mmstream 
)
static

Definition at line 587 of file audiostream.c.

589{
591
592 TRACE("stream %p, mmstream %p.\n", stream, mmstream);
593
594 stream->parent = (IMultiMediaStream *)mmstream;
595
596 return S_OK;
597}

◆ audio_IAMMediaStream_JoinFilter()

static HRESULT WINAPI audio_IAMMediaStream_JoinFilter ( IAMMediaStream *  iface,
IMediaStreamFilter *  filter 
)
static

Definition at line 599 of file audiostream.c.

600{
602
603 TRACE("stream %p, filter %p.\n", stream, filter);
604
605 stream->filter = filter;
606
607 return S_OK;
608}
IMediaStreamFilter * filter
Definition: audiostream.c:53
Definition: filter.c:165

◆ audio_IAMMediaStream_JoinFilterGraph()

static HRESULT WINAPI audio_IAMMediaStream_JoinFilterGraph ( IAMMediaStream *  iface,
IFilterGraph *  filtergraph 
)
static

Definition at line 610 of file audiostream.c.

611{
613
614 TRACE("stream %p, filtergraph %p.\n", stream, filtergraph);
615
616 return S_OK;
617}

◆ audio_IAMMediaStream_QueryInterface()

static HRESULT WINAPI audio_IAMMediaStream_QueryInterface ( IAMMediaStream *  iface,
REFIID  riid,
void **  ret_iface 
)
static

Definition at line 408 of file audiostream.c.

410{
412
413 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ret_iface);
414
416 IsEqualGUID(riid, &IID_IMediaStream) ||
417 IsEqualGUID(riid, &IID_IAMMediaStream))
418 {
419 IAMMediaStream_AddRef(iface);
420 *ret_iface = iface;
421 return S_OK;
422 }
423 else if (IsEqualGUID(riid, &IID_IAudioMediaStream))
424 {
425 IAMMediaStream_AddRef(iface);
426 *ret_iface = &This->IAudioMediaStream_iface;
427 return S_OK;
428 }
429 else if (IsEqualGUID(riid, &IID_IPin))
430 {
431 IAMMediaStream_AddRef(iface);
432 *ret_iface = &This->IPin_iface;
433 return S_OK;
434 }
435 else if (IsEqualGUID(riid, &IID_IMemInputPin))
436 {
437 IAMMediaStream_AddRef(iface);
438 *ret_iface = &This->IMemInputPin_iface;
439 return S_OK;
440 }
441
442 ERR("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ret_iface);
443 return E_NOINTERFACE;
444}
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
const GUID IID_IPin
Definition: pincontrol.cpp:15
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ audio_IAMMediaStream_Release()

static ULONG WINAPI audio_IAMMediaStream_Release ( IAMMediaStream *  iface)
static

Definition at line 456 of file audiostream.c.

457{
460
461 TRACE("%p decreasing refcount to %lu.\n", stream, ref);
462
463 if (!ref)
464 {
466 free(stream);
467 }
468
469 return ref;
470}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)

◆ audio_IAMMediaStream_SendEndOfStream()

static HRESULT WINAPI audio_IAMMediaStream_SendEndOfStream ( IAMMediaStream *  iface,
DWORD  flags 
)
static

Definition at line 534 of file audiostream.c.

535{
537
538 FIXME("(%p/%p)->(%lx) stub!\n", This, iface, flags);
539
540 return S_FALSE;
541}

◆ audio_IAMMediaStream_SetSameFormat()

static HRESULT WINAPI audio_IAMMediaStream_SetSameFormat ( IAMMediaStream *  iface,
IMediaStream *  pStreamThatHasDesiredFormat,
DWORD  flags 
)
static

Definition at line 504 of file audiostream.c.

506{
508
509 FIXME("(%p/%p)->(%p,%lx) stub!\n", This, iface, pStreamThatHasDesiredFormat, flags);
510
511 return S_FALSE;
512}

◆ audio_IAMMediaStream_SetState()

static HRESULT WINAPI audio_IAMMediaStream_SetState ( IAMMediaStream *  iface,
FILTER_STATE  state 
)
static

Definition at line 567 of file audiostream.c.

568{
570
571 TRACE("stream %p, state %u.\n", stream, state);
572
574
575 if (state == State_Stopped)
577 if (stream->state == State_Stopped)
578 stream->eos = FALSE;
579
580 stream->state = state;
581
583
584 return S_OK;
585}
static int state
Definition: maze.c:121
static void flush_receive_queue(struct audio_stream *stream)
Definition: audiostream.c:103
#define FALSE
Definition: types.h:117
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)

◆ audio_IAudioMediaStream_AddRef()

static ULONG WINAPI audio_IAudioMediaStream_AddRef ( IAudioMediaStream *  iface)
static

Definition at line 651 of file audiostream.c.

652{
654 TRACE("(%p/%p)\n", iface, This);
655 return IAMMediaStream_AddRef(&This->IAMMediaStream_iface);
656}
static struct audio_stream * impl_from_IAudioMediaStream(IAudioMediaStream *iface)
Definition: audiostream.c:637

◆ audio_IAudioMediaStream_AllocateSample()

static HRESULT WINAPI audio_IAudioMediaStream_AllocateSample ( IAudioMediaStream *  iface,
DWORD  flags,
IStreamSample **  sample 
)
static

Definition at line 686 of file audiostream.c.

688{
690 return IAMMediaStream_AllocateSample(&stream->IAMMediaStream_iface, flags, sample);
691}

◆ audio_IAudioMediaStream_CreateSample()

static HRESULT WINAPI audio_IAudioMediaStream_CreateSample ( IAudioMediaStream *  iface,
IAudioData *  audio_data,
DWORD  flags,
IAudioStreamSample **  sample 
)
static

Definition at line 759 of file audiostream.c.

761{
763
764 TRACE("(%p/%p)->(%p,%lu,%p)\n", iface, This, audio_data, flags, sample);
765
766 if (!audio_data)
767 return E_POINTER;
768
769 return audiostreamsample_create(This, audio_data, sample);
770}
static HRESULT audiostreamsample_create(struct audio_stream *parent, IAudioData *audio_data, IAudioStreamSample **audio_stream_sample)
Definition: audiostream.c:380

◆ audio_IAudioMediaStream_CreateSharedSample()

static HRESULT WINAPI audio_IAudioMediaStream_CreateSharedSample ( IAudioMediaStream *  iface,
IStreamSample *  existing_sample,
DWORD  flags,
IStreamSample **  sample 
)
static

Definition at line 693 of file audiostream.c.

695{
697 return IAMMediaStream_CreateSharedSample(&stream->IAMMediaStream_iface, existing_sample, flags, sample);
698}

◆ audio_IAudioMediaStream_GetFormat()

static HRESULT WINAPI audio_IAudioMediaStream_GetFormat ( IAudioMediaStream *  iface,
WAVEFORMATEX *  format 
)
static

Definition at line 707 of file audiostream.c.

708{
710
711 TRACE("stream %p, format %p.\n", stream, format);
712
713 if (!format)
714 return E_POINTER;
715
717
718 if (!stream->peer)
719 {
721 return MS_E_NOSTREAM;
722 }
723
724 *format = *(WAVEFORMATEX *)stream->mt.pbFormat;
725
727
728 return S_OK;
729}

◆ audio_IAudioMediaStream_GetInformation()

static HRESULT WINAPI audio_IAudioMediaStream_GetInformation ( IAudioMediaStream *  iface,
MSPID *  purpose_id,
STREAM_TYPE *  type 
)
static

Definition at line 672 of file audiostream.c.

674{
676 return IAMMediaStream_GetInformation(&stream->IAMMediaStream_iface, purpose_id, type);
677}

◆ audio_IAudioMediaStream_GetMultiMediaStream()

static HRESULT WINAPI audio_IAudioMediaStream_GetMultiMediaStream ( IAudioMediaStream *  iface,
IMultiMediaStream **  mmstream 
)
static

Definition at line 665 of file audiostream.c.

667{
669 return IAMMediaStream_GetMultiMediaStream(&stream->IAMMediaStream_iface, mmstream);
670}

◆ audio_IAudioMediaStream_QueryInterface()

static HRESULT WINAPI audio_IAudioMediaStream_QueryInterface ( IAudioMediaStream *  iface,
REFIID  riid,
void **  ret_iface 
)
static

Definition at line 643 of file audiostream.c.

645{
647 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ret_iface);
648 return IAMMediaStream_QueryInterface(&This->IAMMediaStream_iface, riid, ret_iface);
649}

◆ audio_IAudioMediaStream_Release()

static ULONG WINAPI audio_IAudioMediaStream_Release ( IAudioMediaStream *  iface)
static

Definition at line 658 of file audiostream.c.

659{
661 TRACE("(%p/%p)\n", iface, This);
662 return IAMMediaStream_Release(&This->IAMMediaStream_iface);
663}

◆ audio_IAudioMediaStream_SendEndOfStream()

static HRESULT WINAPI audio_IAudioMediaStream_SendEndOfStream ( IAudioMediaStream *  iface,
DWORD  flags 
)
static

Definition at line 700 of file audiostream.c.

701{
703 return IAMMediaStream_SendEndOfStream(&stream->IAMMediaStream_iface, flags);
704}

◆ audio_IAudioMediaStream_SetFormat()

static HRESULT WINAPI audio_IAudioMediaStream_SetFormat ( IAudioMediaStream *  iface,
const WAVEFORMATEX *  format 
)
static

Definition at line 731 of file audiostream.c.

732{
734
735 TRACE("stream %p, format %p.\n", stream, format);
736
737 if (!format)
738 return E_POINTER;
739
740 if (format->wFormatTag != WAVE_FORMAT_PCM)
741 return E_INVALIDARG;
742
744
745 if ((stream->peer && memcmp(format, stream->mt.pbFormat, sizeof(WAVEFORMATEX)))
746 || (stream->format.wFormatTag && memcmp(format, &stream->format, sizeof(WAVEFORMATEX))))
747 {
749 return E_INVALIDARG;
750 }
751
752 stream->format = *format;
753
755
756 return S_OK;
757}
#define WAVE_FORMAT_PCM
Definition: constants.h:425
#define E_INVALIDARG
Definition: ddrawi.h:101
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
WAVEFORMATEX format
Definition: audiostream.c:58

◆ audio_IAudioMediaStream_SetSameFormat()

static HRESULT WINAPI audio_IAudioMediaStream_SetSameFormat ( IAudioMediaStream *  iface,
IMediaStream *  other,
DWORD  flags 
)
static

Definition at line 679 of file audiostream.c.

681{
683 return IAMMediaStream_SetSameFormat(&stream->IAMMediaStream_iface, other, flags);
684}
int other
Definition: msacm.c:1376

◆ audio_meminput_AddRef()

static ULONG WINAPI audio_meminput_AddRef ( IMemInputPin *  iface)
static

Definition at line 1257 of file audiostream.c.

1258{
1260 return IAMMediaStream_AddRef(&stream->IAMMediaStream_iface);
1261}
static struct audio_stream * impl_from_IMemInputPin(IMemInputPin *iface)
Definition: audiostream.c:1246

◆ audio_meminput_GetAllocator()

static HRESULT WINAPI audio_meminput_GetAllocator ( IMemInputPin *  iface,
IMemAllocator **  allocator 
)
static

Definition at line 1269 of file audiostream.c.

1270{
1272
1273 TRACE("stream %p, allocator %p.\n", stream, allocator);
1274
1275 if (stream->allocator)
1276 {
1277 IMemAllocator_AddRef(*allocator = stream->allocator);
1278 return S_OK;
1279 }
1280
1281 *allocator = NULL;
1282 return VFW_E_NO_ALLOCATOR;
1283}
#define NULL
Definition: types.h:112
#define VFW_E_NO_ALLOCATOR
Definition: vfwmsgs.h:49

◆ audio_meminput_GetAllocatorRequirements()

static HRESULT WINAPI audio_meminput_GetAllocatorRequirements ( IMemInputPin *  iface,
ALLOCATOR_PROPERTIES *  props 
)
static

Definition at line 1303 of file audiostream.c.

1304{
1305 TRACE("iface %p, props %p.\n", iface, props);
1306 return E_NOTIMPL;
1307}
#define E_NOTIMPL
Definition: ddrawi.h:99
static const WCHAR props[]
Definition: wbemdisp.c:288

◆ audio_meminput_NotifyAllocator()

static HRESULT WINAPI audio_meminput_NotifyAllocator ( IMemInputPin *  iface,
IMemAllocator *  allocator,
BOOL  readonly 
)
static

Definition at line 1285 of file audiostream.c.

1286{
1288
1289 TRACE("stream %p, allocator %p, readonly %d.\n", stream, allocator, readonly);
1290
1291 if (!allocator)
1292 return E_POINTER;
1293
1294 if (allocator)
1295 IMemAllocator_AddRef(allocator);
1296 if (stream->allocator)
1297 IMemAllocator_Release(stream->allocator);
1298 stream->allocator = allocator;
1299
1300 return S_OK;
1301}
IMemAllocator * allocator
Definition: audiostream.c:56

◆ audio_meminput_QueryInterface()

static HRESULT WINAPI audio_meminput_QueryInterface ( IMemInputPin *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 1251 of file audiostream.c.

1252{
1254 return IAMMediaStream_QueryInterface(&stream->IAMMediaStream_iface, iid, out);
1255}
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ audio_meminput_Receive()

static HRESULT WINAPI audio_meminput_Receive ( IMemInputPin *  iface,
IMediaSample *  sample 
)
static

Definition at line 1309 of file audiostream.c.

1310{
1312 struct queued_receive *receive;
1314 REFERENCE_TIME end_time = 0;
1315 BYTE *pointer;
1316 HRESULT hr;
1317
1318 TRACE("stream %p, sample %p.\n", stream, sample);
1319
1321
1322 if (stream->state == State_Stopped)
1323 {
1325 return VFW_E_WRONG_STATE;
1326 }
1327 if (stream->flushing)
1328 {
1330 return S_FALSE;
1331 }
1332
1333 hr = IMediaSample_GetPointer(sample, &pointer);
1334 if (FAILED(hr))
1335 {
1337 return hr;
1338 }
1339
1340 IMediaSample_GetTime(sample, &start_time, &end_time);
1341
1342 receive = calloc(1, sizeof(*receive));
1343 if (!receive)
1344 {
1346 return E_OUTOFMEMORY;
1347 }
1348
1349 receive->length = IMediaSample_GetActualDataLength(sample);
1350 receive->pointer = pointer;
1351 receive->sample = sample;
1352 receive->start_time = start_time + stream->segment_start;
1353 IMediaSample_AddRef(receive->sample);
1354 list_add_tail(&stream->receive_queue, &receive->entry);
1355
1357
1359
1360 return S_OK;
1361}
static void process_updates(struct audio_stream *stream)
Definition: audiostream.c:135
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT hr
Definition: delayimp.cpp:582
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
GLsizei const GLvoid * pointer
Definition: glext.h:5848
#define FAILED(hr)
Definition: intsafe.h:51
#define calloc
Definition: rosglue.h:14
struct list entry
Definition: audiostream.c:33
BYTE * pointer
Definition: audiostream.c:36
STREAM_TIME start_time
Definition: audiostream.c:38
IMediaSample * sample
Definition: audiostream.c:34
#define VFW_E_WRONG_STATE
Definition: vfwmsgs.h:78
unsigned char BYTE
Definition: xxhash.c:193

◆ audio_meminput_ReceiveCanBlock()

static HRESULT WINAPI audio_meminput_ReceiveCanBlock ( IMemInputPin *  iface)
static

Definition at line 1370 of file audiostream.c.

1371{
1372 TRACE("iface %p.\n", iface);
1373 return S_OK;
1374}

◆ audio_meminput_ReceiveMultiple()

static HRESULT WINAPI audio_meminput_ReceiveMultiple ( IMemInputPin *  iface,
IMediaSample **  samples,
LONG  count,
LONG *  processed 
)
static

Definition at line 1363 of file audiostream.c.

1365{
1366 FIXME("iface %p, samples %p, count %lu, processed %p, stub!\n", iface, samples, count, processed);
1367 return E_NOTIMPL;
1368}
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizei samples
Definition: glext.h:7006
static int processed(const type_t *type)
Definition: typegen.c:2524

◆ audio_meminput_Release()

static ULONG WINAPI audio_meminput_Release ( IMemInputPin *  iface)
static

Definition at line 1263 of file audiostream.c.

1264{
1266 return IAMMediaStream_Release(&stream->IAMMediaStream_iface);
1267}

◆ audio_sample_AddRef()

static ULONG WINAPI audio_sample_AddRef ( IAudioStreamSample *  iface)
static

Definition at line 187 of file audiostream.c.

188{
190 ULONG refcount = InterlockedIncrement(&sample->ref);
191 TRACE("%p increasing refcount to %lu.\n", sample, refcount);
192 return refcount;
193}
static struct audio_sample * impl_from_IAudioStreamSample(IAudioStreamSample *iface)
Definition: audiostream.c:161

◆ audio_sample_CompletionStatus()

static HRESULT WINAPI audio_sample_CompletionStatus ( IAudioStreamSample *  iface,
DWORD  flags,
DWORD  milliseconds 
)
static

Definition at line 326 of file audiostream.c.

327{
329 HRESULT hr;
330
331 TRACE("sample %p, flags %#lx, milliseconds %lu.\n", sample, flags, milliseconds);
332
333 if (flags)
334 {
335 FIXME("Unhandled flags %#lx.\n", flags);
336 return E_NOTIMPL;
337 }
338
339 EnterCriticalSection(&sample->parent->cs);
340
341 hr = sample->update_hr;
342
343 LeaveCriticalSection(&sample->parent->cs);
344
345 return hr;
346}

◆ audio_sample_GetAudioData()

static HRESULT WINAPI audio_sample_GetAudioData ( IAudioStreamSample *  iface,
IAudioData **  audio_data 
)
static

Definition at line 349 of file audiostream.c.

350{
352
353 TRACE("sample %p, audio_data %p.\n", sample, audio_data);
354
355 if (!audio_data)
356 return E_POINTER;
357
358 IAudioData_AddRef(sample->audio_data);
359 *audio_data = sample->audio_data;
360
361 return S_OK;
362}
IAudioData * audio_data
Definition: audiostream.c:72

◆ audio_sample_GetMediaStream()

static HRESULT WINAPI audio_sample_GetMediaStream ( IAudioStreamSample *  iface,
IMediaStream **  media_stream 
)
static

Definition at line 211 of file audiostream.c.

212{
214
215 TRACE("sample %p, media_stream %p.\n", iface, media_stream);
216
217 if (!media_stream)
218 return E_POINTER;
219
220 IAMMediaStream_AddRef(&sample->parent->IAMMediaStream_iface);
221 *media_stream = (IMediaStream *)&sample->parent->IAMMediaStream_iface;
222
223 return S_OK;
224}

◆ audio_sample_GetSampleTimes()

static HRESULT WINAPI audio_sample_GetSampleTimes ( IAudioStreamSample *  iface,
STREAM_TIME *  start_time,
STREAM_TIME *  end_time,
STREAM_TIME *  current_time 
)
static

Definition at line 226 of file audiostream.c.

228{
230
231 TRACE("sample %p, start_time %p, end_time %p, current_time %p.\n", sample, start_time, end_time, current_time);
232
233 if (current_time)
234 IMediaStreamFilter_GetCurrentStreamTime(sample->parent->filter, current_time);
235
236 if (start_time)
237 *start_time = sample->start_time;
238 if (end_time)
239 *end_time = sample->end_time;
240
241 return S_OK;
242}
STREAM_TIME start_time
Definition: audiostream.c:73
STREAM_TIME end_time
Definition: audiostream.c:74

◆ audio_sample_QueryInterface()

static HRESULT WINAPI audio_sample_QueryInterface ( IAudioStreamSample *  iface,
REFIID  riid,
void **  ret_iface 
)
static

Definition at line 167 of file audiostream.c.

169{
170 TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(riid), ret_iface);
171
173 IsEqualGUID(riid, &IID_IStreamSample) ||
174 IsEqualGUID(riid, &IID_IAudioStreamSample))
175 {
176 IAudioStreamSample_AddRef(iface);
177 *ret_iface = iface;
178 return S_OK;
179 }
180
181 *ret_iface = NULL;
182
183 ERR("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ret_iface);
184 return E_NOINTERFACE;
185}

◆ audio_sample_Release()

static ULONG WINAPI audio_sample_Release ( IAudioStreamSample *  iface)
static

Definition at line 195 of file audiostream.c.

196{
198 ULONG refcount = InterlockedDecrement(&sample->ref);
199 TRACE("%p decreasing refcount to %lu.\n", sample, refcount);
200 if (!refcount)
201 {
202 IAMMediaStream_Release(&sample->parent->IAMMediaStream_iface);
203 IAudioData_Release(sample->audio_data);
204 CloseHandle(sample->update_event);
205 free(sample);
206 }
207 return refcount;
208}
#define CloseHandle
Definition: compat.h:739

◆ audio_sample_SetSampleTimes()

static HRESULT WINAPI audio_sample_SetSampleTimes ( IAudioStreamSample *  iface,
const STREAM_TIME *  start_time,
const STREAM_TIME *  end_time 
)
static

Definition at line 244 of file audiostream.c.

246{
247 FIXME("(%p)->(%p,%p): stub\n", iface, start_time, end_time);
248
249 return E_NOTIMPL;
250}

◆ audio_sample_Update()

static HRESULT WINAPI audio_sample_Update ( IAudioStreamSample *  iface,
DWORD  flags,
HANDLE  event,
PAPCFUNC  apc_func,
DWORD  apc_data 
)
static

Definition at line 252 of file audiostream.c.

254{
256 BYTE *pointer;
258 HRESULT hr;
259
260 TRACE("sample %p, flags %#lx, event %p, apc_func %p, apc_data %#lx.\n",
261 sample, flags, event, apc_func, apc_data);
262
263 hr = IAudioData_GetInfo(sample->audio_data, &length, &pointer, NULL);
264 if (FAILED(hr))
265 return hr;
266
267 if (event && apc_func)
268 return E_INVALIDARG;
269
270 if (apc_func)
271 {
272 FIXME("APC support is not implemented!\n");
273 return E_NOTIMPL;
274 }
275
276 if (event)
277 {
278 FIXME("Event parameter support is not implemented!\n");
279 return E_NOTIMPL;
280 }
281
282 if (flags & ~SSUPDATE_ASYNC)
283 {
284 FIXME("Unsupported flags %#lx.\n", flags);
285 return E_NOTIMPL;
286 }
287
288 EnterCriticalSection(&sample->parent->cs);
289
290 if (sample->parent->state != State_Running)
291 {
292 LeaveCriticalSection(&sample->parent->cs);
293 return MS_E_NOTRUNNING;
294 }
295 if (!sample->parent->peer)
296 {
297 LeaveCriticalSection(&sample->parent->cs);
298 return MS_S_ENDOFSTREAM;
299 }
300 if (MS_S_PENDING == sample->update_hr)
301 {
302 LeaveCriticalSection(&sample->parent->cs);
303 return MS_E_BUSY;
304 }
305
306 sample->length = length;
307 sample->pointer = pointer;
308 sample->position = 0;
309 sample->update_hr = MS_S_PENDING;
310 ResetEvent(sample->update_event);
311 list_add_tail(&sample->parent->update_queue, &sample->entry);
312
313 process_updates(sample->parent);
314 hr = sample->update_hr;
315
316 LeaveCriticalSection(&sample->parent->cs);
317
318 if (hr != MS_S_PENDING || (flags & SSUPDATE_ASYNC))
319 return hr;
320
321 WaitForSingleObject(sample->update_event, INFINITE);
322
323 return sample->update_hr;
324}
static void CALLBACK apc_func(ULONG_PTR param)
Definition: amstream.c:4625
#define INFINITE
Definition: serial.h:102
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
@ SSUPDATE_ASYNC
Definition: mmstream.idl:75
Definition: filter.c:185
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
Definition: synch.c:650

◆ audio_sink_AddRef()

static ULONG WINAPI audio_sink_AddRef ( IPin *  iface)
static

Definition at line 939 of file audiostream.c.

940{
941 struct audio_stream *stream = impl_from_IPin(iface);
942 return IAMMediaStream_AddRef(&stream->IAMMediaStream_iface);
943}
static struct audio_stream * impl_from_IPin(IPin *iface)
Definition: audiostream.c:928

◆ audio_sink_BeginFlush()

static HRESULT WINAPI audio_sink_BeginFlush ( IPin *  iface)
static

Definition at line 1168 of file audiostream.c.

1169{
1170 struct audio_stream *stream = impl_from_IPin(iface);
1171 BOOL cancel_eos;
1172
1173 TRACE("stream %p.\n", stream);
1174
1176
1177 cancel_eos = stream->eos;
1178
1179 stream->flushing = TRUE;
1180 stream->eos = FALSE;
1182
1184
1185 /* Calling IMediaStreamFilter::Flush() inside the critical section would
1186 * invert the locking order, so we must leave it first to avoid the
1187 * application thread deadlocking on the filter's critical section. */
1188 IMediaStreamFilter_Flush(stream->filter, cancel_eos);
1189
1190 return S_OK;
1191}
#define TRUE
Definition: types.h:120
unsigned int BOOL
Definition: ntddk_ex.h:94

◆ audio_sink_Connect()

static HRESULT WINAPI audio_sink_Connect ( IPin *  iface,
IPin *  peer,
const AM_MEDIA_TYPE *  mt 
)
static

Definition at line 951 of file audiostream.c.

952{
953 WARN("iface %p, peer %p, mt %p, unexpected call!\n", iface, peer, mt);
954 return E_UNEXPECTED;
955}
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_UNEXPECTED
Definition: winerror.h:3528

◆ audio_sink_ConnectedTo()

static HRESULT WINAPI audio_sink_ConnectedTo ( IPin *  iface,
IPin **  peer 
)
static

Definition at line 1026 of file audiostream.c.

1027{
1028 struct audio_stream *stream = impl_from_IPin(iface);
1029 HRESULT hr;
1030
1031 TRACE("stream %p, peer %p.\n", stream, peer);
1032
1034
1035 if (stream->peer)
1036 {
1037 IPin_AddRef(*peer = stream->peer);
1038 hr = S_OK;
1039 }
1040 else
1041 {
1042 *peer = NULL;
1044 }
1045
1047
1048 return hr;
1049}
IPin * peer
Definition: audiostream.c:55
#define VFW_E_NOT_CONNECTED
Definition: vfwmsgs.h:48

◆ audio_sink_ConnectionMediaType()

static HRESULT WINAPI audio_sink_ConnectionMediaType ( IPin *  iface,
AM_MEDIA_TYPE *  mt 
)
static

Definition at line 1051 of file audiostream.c.

1052{
1053 struct audio_stream *stream = impl_from_IPin(iface);
1054 HRESULT hr;
1055
1056 TRACE("stream %p, mt %p.\n", stream, mt);
1057
1059
1060 if (stream->peer)
1061 {
1062 CopyMediaType(mt, &stream->mt);
1063 hr = S_OK;
1064 }
1065 else
1066 {
1067 memset(mt, 0, sizeof(AM_MEDIA_TYPE));
1069 }
1070
1072
1073 return hr;
1074}
#define memset(x, y, z)
Definition: compat.h:39
HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE *pDest, const AM_MEDIA_TYPE *pSrc)
Definition: mediatype.c:150
AM_MEDIA_TYPE mt
Definition: audiostream.c:57

◆ audio_sink_Disconnect()

static HRESULT WINAPI audio_sink_Disconnect ( IPin *  iface)
static

Definition at line 1002 of file audiostream.c.

1003{
1004 struct audio_stream *stream = impl_from_IPin(iface);
1005
1006 TRACE("stream %p.\n", stream);
1007
1009
1010 if (!stream->peer)
1011 {
1013 return S_FALSE;
1014 }
1015
1016 IPin_Release(stream->peer);
1017 stream->peer = NULL;
1018 FreeMediaType(&stream->mt);
1019 memset(&stream->mt, 0, sizeof(AM_MEDIA_TYPE));
1020
1022
1023 return S_OK;
1024}
void WINAPI FreeMediaType(AM_MEDIA_TYPE *pMediaType)
Definition: mediatype.c:165

◆ audio_sink_EndFlush()

static HRESULT WINAPI audio_sink_EndFlush ( IPin *  iface)
static

Definition at line 1193 of file audiostream.c.

1194{
1195 struct audio_stream *stream = impl_from_IPin(iface);
1196
1197 TRACE("stream %p.\n", stream);
1198
1200
1201 stream->flushing = FALSE;
1202
1204
1205 return S_OK;
1206}

◆ audio_sink_EndOfStream()

static HRESULT WINAPI audio_sink_EndOfStream ( IPin *  iface)
static

Definition at line 1140 of file audiostream.c.

1141{
1142 struct audio_stream *stream = impl_from_IPin(iface);
1143
1144 TRACE("stream %p.\n", stream);
1145
1147
1148 if (stream->eos || stream->flushing)
1149 {
1151 return E_FAIL;
1152 }
1153
1154 stream->eos = TRUE;
1155
1157
1159
1160 /* Calling IMediaStreamFilter::EndOfStream() inside the critical section
1161 * would invert the locking order, so we must leave it first to avoid
1162 * the streaming thread deadlocking on the filter's critical section. */
1163 IMediaStreamFilter_EndOfStream(stream->filter);
1164
1165 return S_OK;
1166}
#define E_FAIL
Definition: ddrawi.h:102

◆ audio_sink_EnumMediaTypes()

static HRESULT WINAPI audio_sink_EnumMediaTypes ( IPin *  iface,
IEnumMediaTypes **  enum_media_types 
)
static

Definition at line 1114 of file audiostream.c.

1115{
1116 struct enum_media_types *object;
1117
1118 TRACE("iface %p, enum_media_types %p.\n", iface, enum_media_types);
1119
1120 if (!enum_media_types)
1121 return E_POINTER;
1122
1123 if (!(object = calloc(1, sizeof(*object))))
1124 return E_OUTOFMEMORY;
1125
1126 object->IEnumMediaTypes_iface.lpVtbl = &enum_media_types_vtbl;
1127 object->refcount = 1;
1128 object->index = 0;
1129
1131 return S_OK;
1132}
static const IEnumMediaTypesVtbl enum_media_types_vtbl
Definition: audiostream.c:795
IEnumMediaTypes IEnumMediaTypes_iface
Definition: audiostream.c:790

◆ audio_sink_NewSegment()

static HRESULT WINAPI audio_sink_NewSegment ( IPin *  iface,
REFERENCE_TIME  start,
REFERENCE_TIME  stop,
double  rate 
)
static

Definition at line 1208 of file audiostream.c.

1209{
1210 struct audio_stream *stream = impl_from_IPin(iface);
1211
1212 TRACE("stream %p, start %s, stop %s, rate %0.16e\n",
1214
1216
1217 stream->segment_start = start;
1218
1220
1221 return S_OK;
1222}
unsigned int rate
Definition: audiorecord.c:87
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
GLuint start
Definition: gl.h:1545

◆ audio_sink_QueryAccept()

static HRESULT WINAPI audio_sink_QueryAccept ( IPin *  iface,
const AM_MEDIA_TYPE *  mt 
)
static

Definition at line 1108 of file audiostream.c.

1109{
1110 TRACE("iface %p, mt %p.\n", iface, mt);
1111 return E_NOTIMPL;
1112}

◆ audio_sink_QueryDirection()

static HRESULT WINAPI audio_sink_QueryDirection ( IPin *  iface,
PIN_DIRECTION *  dir 
)
static

Definition at line 1089 of file audiostream.c.

1090{
1091 TRACE("iface %p, dir %p.\n", iface, dir);
1092 *dir = PINDIR_INPUT;
1093 return S_OK;
1094}
unsigned int dir
Definition: maze.c:112
@ PINDIR_INPUT
Definition: axcore.idl:41

◆ audio_sink_QueryId()

static HRESULT WINAPI audio_sink_QueryId ( IPin *  iface,
WCHAR **  id 
)
static

Definition at line 1096 of file audiostream.c.

1097{
1098 TRACE("iface %p, id %p.\n", iface, id);
1099
1100 if (!(*id = CoTaskMemAlloc(sizeof(sink_id))))
1101 return E_OUTOFMEMORY;
1102
1103 wcscpy(*id, sink_id);
1104
1105 return S_OK;
1106}
static const WCHAR sink_id[]
Definition: audiostream.c:29
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
wcscpy

◆ audio_sink_QueryInterface()

static HRESULT WINAPI audio_sink_QueryInterface ( IPin *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 933 of file audiostream.c.

934{
935 struct audio_stream *stream = impl_from_IPin(iface);
936 return IAMMediaStream_QueryInterface(&stream->IAMMediaStream_iface, iid, out);
937}

◆ audio_sink_QueryInternalConnections()

static HRESULT WINAPI audio_sink_QueryInternalConnections ( IPin *  iface,
IPin **  pins,
ULONG *  count 
)
static

Definition at line 1134 of file audiostream.c.

1135{
1136 TRACE("iface %p, pins %p, count %p.\n", iface, pins, count);
1137 return E_NOTIMPL;
1138}

◆ audio_sink_QueryPinInfo()

static HRESULT WINAPI audio_sink_QueryPinInfo ( IPin *  iface,
PIN_INFO *  info 
)
static

Definition at line 1076 of file audiostream.c.

1077{
1078 struct audio_stream *stream = impl_from_IPin(iface);
1079
1080 TRACE("stream %p, info %p.\n", stream, info);
1081
1082 IBaseFilter_AddRef(info->pFilter = (IBaseFilter *)stream->filter);
1083 info->dir = PINDIR_INPUT;
1084 wcscpy(info->achName, sink_id);
1085
1086 return S_OK;
1087}

◆ audio_sink_ReceiveConnection()

static HRESULT WINAPI audio_sink_ReceiveConnection ( IPin *  iface,
IPin *  peer,
const AM_MEDIA_TYPE *  mt 
)
static

Definition at line 957 of file audiostream.c.

958{
959 struct audio_stream *stream = impl_from_IPin(iface);
961
962 TRACE("stream %p, peer %p, mt %p.\n", stream, peer, mt);
963
964 if (!IsEqualGUID(&mt->majortype, &MEDIATYPE_Audio)
965 || !IsEqualGUID(&mt->formattype, &FORMAT_WaveFormatEx)
966 || mt->cbFormat < sizeof(WAVEFORMATEX))
968
969 if (((const WAVEFORMATEX *)mt->pbFormat)->wFormatTag != WAVE_FORMAT_PCM)
970 return E_INVALIDARG;
971
973
974 if (stream->peer)
975 {
978 }
979
980 IPin_QueryDirection(peer, &dir);
981 if (dir != PINDIR_OUTPUT)
982 {
983 WARN("Rejecting connection from input pin.\n");
986 }
987
988 if (stream->format.wFormatTag && memcmp(mt->pbFormat, &stream->format, sizeof(WAVEFORMATEX)))
989 {
991 return E_INVALIDARG;
992 }
993
994 CopyMediaType(&stream->mt, mt);
995 IPin_AddRef(stream->peer = peer);
996
998
999 return S_OK;
1000}
enum _PinDirection PIN_DIRECTION
@ PINDIR_OUTPUT
Definition: axcore.idl:42
#define VFW_E_ALREADY_CONNECTED
Definition: vfwmsgs.h:43
#define VFW_E_TYPE_NOT_ACCEPTED
Definition: vfwmsgs.h:81
#define VFW_E_INVALID_DIRECTION
Definition: vfwmsgs.h:47

◆ audio_sink_Release()

static ULONG WINAPI audio_sink_Release ( IPin *  iface)
static

Definition at line 945 of file audiostream.c.

946{
947 struct audio_stream *stream = impl_from_IPin(iface);
948 return IAMMediaStream_Release(&stream->IAMMediaStream_iface);
949}

◆ audio_stream_create()

HRESULT audio_stream_create ( IUnknown *  outer,
void **  out 
)

Definition at line 1389 of file audiostream.c.

1390{
1391 struct audio_stream *object;
1392
1393 if (outer)
1394 return CLASS_E_NOAGGREGATION;
1395
1396 if (!(object = calloc(1, sizeof(*object))))
1397 return E_OUTOFMEMORY;
1398
1399 object->IAMMediaStream_iface.lpVtbl = &audio_IAMMediaStream_vtbl;
1400 object->IAudioMediaStream_iface.lpVtbl = &audio_IAudioMediaStream_vtbl;
1401 object->IMemInputPin_iface.lpVtbl = &audio_meminput_vtbl;
1402 object->IPin_iface.lpVtbl = &audio_sink_vtbl;
1403 object->ref = 1;
1404
1406 list_init(&object->receive_queue);
1407 list_init(&object->update_queue);
1408
1409 TRACE("Created audio stream %p.\n", object);
1410
1411 *out = &object->IAMMediaStream_iface;
1412
1413 return S_OK;
1414}
static const IPinVtbl audio_sink_vtbl
Definition: audiostream.c:1224
static const IMemInputPinVtbl audio_meminput_vtbl
Definition: audiostream.c:1376
static const struct IAudioMediaStreamVtbl audio_IAudioMediaStream_vtbl
Definition: audiostream.c:772
static const struct IAMMediaStreamVtbl audio_IAMMediaStream_vtbl
Definition: audiostream.c:619
static void list_init(struct list_entry *head)
Definition: list.h:51
static IUnknown * outer
Definition: compobj.c:82
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:687
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

Referenced by multimedia_stream_AddMediaStream().

◆ audiostreamsample_create()

static HRESULT audiostreamsample_create ( struct audio_stream *  parent,
IAudioData *  audio_data,
IAudioStreamSample **  audio_stream_sample 
)
static

Definition at line 380 of file audiostream.c.

381{
382 struct audio_sample *object;
383
384 TRACE("(%p)\n", audio_stream_sample);
385
386 if (!(object = calloc(1, sizeof(*object))))
387 return E_OUTOFMEMORY;
388
389 object->IAudioStreamSample_iface.lpVtbl = &AudioStreamSample_Vtbl;
390 object->ref = 1;
391 object->parent = parent;
392 IAMMediaStream_AddRef(&parent->IAMMediaStream_iface);
393 object->audio_data = audio_data;
394 IAudioData_AddRef(audio_data);
395 object->update_event = CreateEventW(NULL, FALSE, FALSE, NULL);
396
397 *audio_stream_sample = &object->IAudioStreamSample_iface;
398
399 return S_OK;
400}
static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
Definition: audiostream.c:364
r parent
Definition: btrfs.c:3010
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:587

Referenced by audio_IAudioMediaStream_CreateSample().

◆ enum_media_types_AddRef()

static ULONG WINAPI enum_media_types_AddRef ( IEnumMediaTypes *  iface)
static

Definition at line 818 of file audiostream.c.

819{
822 TRACE("%p increasing refcount to %lu.\n", enum_media_types, refcount);
823 return refcount;
824}
static struct enum_media_types * impl_from_IEnumMediaTypes(IEnumMediaTypes *iface)
Definition: audiostream.c:797

◆ enum_media_types_Clone()

static HRESULT WINAPI enum_media_types_Clone ( IEnumMediaTypes *  iface,
IEnumMediaTypes **  out 
)
static

Definition at line 899 of file audiostream.c.

900{
902 struct enum_media_types *object;
903
904 TRACE("iface %p, out %p.\n", iface, out);
905
906 if (!(object = calloc(1, sizeof(*object))))
907 return E_OUTOFMEMORY;
908
909 object->IEnumMediaTypes_iface.lpVtbl = &enum_media_types_vtbl;
910 object->refcount = 1;
911 object->index = enum_media_types->index;
912
913 *out = &object->IEnumMediaTypes_iface;
914 return S_OK;
915}
unsigned int index
Definition: audiostream.c:792

◆ enum_media_types_Next()

static HRESULT WINAPI enum_media_types_Next ( IEnumMediaTypes *  iface,
ULONG  count,
AM_MEDIA_TYPE **  mts,
ULONG *  ret_count 
)
static

Definition at line 836 of file audiostream.c.

837{
839
840 static const WAVEFORMATEX wfx =
841 {
843 .nChannels = 1,
844 .nSamplesPerSec = 11025,
845 .nAvgBytesPerSec = 11025 * 2,
846 .nBlockAlign = 2,
847 .wBitsPerSample = 16,
848 .cbSize = 0,
849 };
850
851 TRACE("iface %p, count %lu, mts %p, ret_count %p.\n", iface, count, mts, ret_count);
852
853 if (!ret_count)
854 return E_POINTER;
855
857 {
858 mts[0] = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
859 memset(mts[0], 0, sizeof(AM_MEDIA_TYPE));
860 mts[0]->majortype = MEDIATYPE_Audio;
861 mts[0]->subtype = GUID_NULL;
862 mts[0]->bFixedSizeSamples = TRUE;
863 mts[0]->bTemporalCompression = FALSE;
864 mts[0]->lSampleSize = 2;
865 mts[0]->formattype = FORMAT_WaveFormatEx;
866 mts[0]->cbFormat = sizeof(WAVEFORMATEX);
867 mts[0]->pbFormat = CoTaskMemAlloc(sizeof(WAVEFORMATEX));
868 memcpy(mts[0]->pbFormat, &wfx, sizeof(WAVEFORMATEX));
869
871 *ret_count = 1;
872 return count == 1 ? S_OK : S_FALSE;
873 }
874
875 *ret_count = 0;
876 return count ? S_FALSE : S_OK;
877}
#define GUID_NULL
Definition: ks.h:106
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

◆ enum_media_types_QueryInterface()

static HRESULT WINAPI enum_media_types_QueryInterface ( IEnumMediaTypes *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 802 of file audiostream.c.

803{
804 TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
805
806 if (IsEqualGUID(iid, &IID_IUnknown) || IsEqualGUID(iid, &IID_IEnumMediaTypes))
807 {
808 IEnumMediaTypes_AddRef(iface);
809 *out = iface;
810 return S_OK;
811 }
812
813 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
814 *out = NULL;
815 return E_NOINTERFACE;
816}

◆ enum_media_types_Release()

static ULONG WINAPI enum_media_types_Release ( IEnumMediaTypes *  iface)
static

Definition at line 826 of file audiostream.c.

827{
830 TRACE("%p decreasing refcount to %lu.\n", enum_media_types, refcount);
831 if (!refcount)
833 return refcount;
834}

◆ enum_media_types_Reset()

static HRESULT WINAPI enum_media_types_Reset ( IEnumMediaTypes *  iface)
static

Definition at line 889 of file audiostream.c.

890{
892
893 TRACE("iface %p.\n", iface);
894
896 return S_OK;
897}

◆ enum_media_types_Skip()

static HRESULT WINAPI enum_media_types_Skip ( IEnumMediaTypes *  iface,
ULONG  count 
)
static

Definition at line 879 of file audiostream.c.

880{
882
883 TRACE("iface %p, count %lu.\n", iface, count);
884
886 return S_OK;
887}

◆ flush_receive_queue()

static void flush_receive_queue ( struct audio_stream *  stream)
static

Definition at line 103 of file audiostream.c.

104{
105 struct list *entry;
106
107 while ((entry = list_head(&stream->receive_queue)))
109}
static void remove_queued_receive(struct queued_receive *receive)
Definition: audiostream.c:84
Definition: list.h:39
uint32_t entry
Definition: isohybrid.c:63
Definition: list.h:15
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by audio_IAMMediaStream_SetState(), and audio_sink_BeginFlush().

◆ impl_from_IAMMediaStream()

◆ impl_from_IAudioMediaStream()

◆ impl_from_IAudioStreamSample()

static struct audio_sample * impl_from_IAudioStreamSample ( IAudioStreamSample *  iface)
inlinestatic

◆ impl_from_IEnumMediaTypes()

static struct enum_media_types * impl_from_IEnumMediaTypes ( IEnumMediaTypes *  iface)
static

◆ impl_from_IMemInputPin()

static struct audio_stream * impl_from_IMemInputPin ( IMemInputPin *  iface)
inlinestatic

◆ impl_from_IPin()

◆ process_update()

static void process_update ( struct audio_sample *  sample,
struct queued_receive *  receive 
)
static

Definition at line 117 of file audiostream.c.

118{
120
121 advance = min(receive->length - receive->position, sample->length - sample->position);
122 memcpy(&sample->pointer[sample->position], &receive->pointer[receive->position], advance);
123
124 if (!sample->position)
125 sample->start_time = stream_time_from_position(sample->parent, receive);
126
127 receive->position += advance;
128 sample->position += advance;
129
130 sample->end_time = stream_time_from_position(sample->parent, receive);
131
132 sample->update_hr = (sample->position == sample->length) ? S_OK : MS_S_PENDING;
133}
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
static STREAM_TIME stream_time_from_position(struct audio_stream *stream, struct queued_receive *receive)
Definition: audiostream.c:111
#define min(a, b)
Definition: monoChain.cc:55

Referenced by process_updates().

◆ process_updates()

static void process_updates ( struct audio_stream *  stream)
static

Definition at line 135 of file audiostream.c.

136{
137 while (!list_empty(&stream->update_queue) && !list_empty(&stream->receive_queue))
138 {
139 struct audio_sample *sample = LIST_ENTRY(list_head(&stream->update_queue), struct audio_sample, entry);
140 struct queued_receive *receive = LIST_ENTRY(list_head(&stream->receive_queue), struct queued_receive, entry);
141
142 process_update(sample, receive);
143
144 if (sample->update_hr != MS_S_PENDING)
146 if (receive->position == receive->length)
147 remove_queued_receive(receive);
148 }
149 if (stream->eos)
150 {
151 while (!list_empty(&stream->update_queue))
152 {
153 struct audio_sample *sample = LIST_ENTRY(list_head(&stream->update_queue), struct audio_sample, entry);
154
155 sample->update_hr = sample->position ? S_OK : MS_S_ENDOFSTREAM;
157 }
158 }
159}
static void remove_queued_update(struct audio_sample *sample)
Definition: audiostream.c:91
static void process_update(struct audio_sample *sample, struct queued_receive *receive)
Definition: audiostream.c:117
static int list_empty(struct list_entry *head)
Definition: list.h:58

Referenced by audio_meminput_Receive(), audio_sample_Update(), and audio_sink_EndOfStream().

◆ remove_queued_receive()

static void remove_queued_receive ( struct queued_receive *  receive)
static

Definition at line 84 of file audiostream.c.

85{
86 list_remove(&receive->entry);
87 IMediaSample_Release(receive->sample);
88 free(receive);
89}
static void list_remove(struct list_entry *entry)
Definition: list.h:90

Referenced by flush_receive_queue(), and process_updates().

◆ remove_queued_update()

static void remove_queued_update ( struct audio_sample *  sample)
static

Definition at line 91 of file audiostream.c.

92{
93 HRESULT hr;
94
95 hr = IAudioData_SetActual(sample->audio_data, sample->position);
96 if (FAILED(hr))
97 sample->update_hr = hr;
98
99 list_remove(&sample->entry);
100 SetEvent(sample->update_event);
101}
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669

Referenced by process_updates().

◆ stream_time_from_position()

static STREAM_TIME stream_time_from_position ( struct audio_stream *  stream,
struct queued_receive *  receive 
)
static

Definition at line 111 of file audiostream.c.

112{
113 const WAVEFORMATEX *format = (WAVEFORMATEX *)stream->mt.pbFormat;
114 return receive->start_time + (receive->position * 10000000 + format->nAvgBytesPerSec / 2) / format->nAvgBytesPerSec;
115}

Referenced by process_update().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( quartz  )

Variable Documentation

◆ audio_IAMMediaStream_vtbl

const struct IAMMediaStreamVtbl audio_IAMMediaStream_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI audio_IAMMediaStream_JoinFilter(IAMMediaStream *iface, IMediaStreamFilter *filter)
Definition: audiostream.c:599
static HRESULT WINAPI audio_IAMMediaStream_SetState(IAMMediaStream *iface, FILTER_STATE state)
Definition: audiostream.c:567
static HRESULT WINAPI audio_IAMMediaStream_QueryInterface(IAMMediaStream *iface, REFIID riid, void **ret_iface)
Definition: audiostream.c:408
static HRESULT WINAPI audio_IAMMediaStream_GetInformation(IAMMediaStream *iface, MSPID *purpose_id, STREAM_TYPE *type)
Definition: audiostream.c:489
static ULONG WINAPI audio_IAMMediaStream_AddRef(IAMMediaStream *iface)
Definition: audiostream.c:446
static HRESULT WINAPI audio_IAMMediaStream_SetSameFormat(IAMMediaStream *iface, IMediaStream *pStreamThatHasDesiredFormat, DWORD flags)
Definition: audiostream.c:504
static HRESULT WINAPI audio_IAMMediaStream_JoinFilterGraph(IAMMediaStream *iface, IFilterGraph *filtergraph)
Definition: audiostream.c:610
static HRESULT WINAPI audio_IAMMediaStream_SendEndOfStream(IAMMediaStream *iface, DWORD flags)
Definition: audiostream.c:534
static HRESULT WINAPI audio_IAMMediaStream_CreateSharedSample(IAMMediaStream *iface, IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
Definition: audiostream.c:524
static HRESULT WINAPI audio_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream *iface, IAMMultiMediaStream *mmstream)
Definition: audiostream.c:587
static HRESULT WINAPI audio_IAMMediaStream_Initialize(IAMMediaStream *iface, IUnknown *source_object, DWORD flags, REFMSPID purpose_id, const STREAM_TYPE stream_type)
Definition: audiostream.c:544
static HRESULT WINAPI audio_IAMMediaStream_AllocateSample(IAMMediaStream *iface, DWORD flags, IStreamSample **sample)
Definition: audiostream.c:514
static ULONG WINAPI audio_IAMMediaStream_Release(IAMMediaStream *iface)
Definition: audiostream.c:456
static HRESULT WINAPI audio_IAMMediaStream_GetMultiMediaStream(IAMMediaStream *iface, IMultiMediaStream **mmstream)
Definition: audiostream.c:473

Definition at line 619 of file audiostream.c.

Referenced by audio_stream_create().

◆ audio_IAudioMediaStream_vtbl

const struct IAudioMediaStreamVtbl audio_IAudioMediaStream_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI audio_IAudioMediaStream_SetFormat(IAudioMediaStream *iface, const WAVEFORMATEX *format)
Definition: audiostream.c:731
static ULONG WINAPI audio_IAudioMediaStream_AddRef(IAudioMediaStream *iface)
Definition: audiostream.c:651
static HRESULT WINAPI audio_IAudioMediaStream_AllocateSample(IAudioMediaStream *iface, DWORD flags, IStreamSample **sample)
Definition: audiostream.c:686
static HRESULT WINAPI audio_IAudioMediaStream_GetFormat(IAudioMediaStream *iface, WAVEFORMATEX *format)
Definition: audiostream.c:707
static HRESULT WINAPI audio_IAudioMediaStream_GetMultiMediaStream(IAudioMediaStream *iface, IMultiMediaStream **mmstream)
Definition: audiostream.c:665
static HRESULT WINAPI audio_IAudioMediaStream_SendEndOfStream(IAudioMediaStream *iface, DWORD flags)
Definition: audiostream.c:700
static HRESULT WINAPI audio_IAudioMediaStream_SetSameFormat(IAudioMediaStream *iface, IMediaStream *other, DWORD flags)
Definition: audiostream.c:679
static HRESULT WINAPI audio_IAudioMediaStream_CreateSample(IAudioMediaStream *iface, IAudioData *audio_data, DWORD flags, IAudioStreamSample **sample)
Definition: audiostream.c:759
static HRESULT WINAPI audio_IAudioMediaStream_QueryInterface(IAudioMediaStream *iface, REFIID riid, void **ret_iface)
Definition: audiostream.c:643
static ULONG WINAPI audio_IAudioMediaStream_Release(IAudioMediaStream *iface)
Definition: audiostream.c:658
static HRESULT WINAPI audio_IAudioMediaStream_CreateSharedSample(IAudioMediaStream *iface, IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
Definition: audiostream.c:693
static HRESULT WINAPI audio_IAudioMediaStream_GetInformation(IAudioMediaStream *iface, MSPID *purpose_id, STREAM_TYPE *type)
Definition: audiostream.c:672

Definition at line 772 of file audiostream.c.

Referenced by audio_stream_create().

◆ audio_meminput_vtbl

const IMemInputPinVtbl audio_meminput_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI audio_meminput_Receive(IMemInputPin *iface, IMediaSample *sample)
Definition: audiostream.c:1309
static HRESULT WINAPI audio_meminput_QueryInterface(IMemInputPin *iface, REFIID iid, void **out)
Definition: audiostream.c:1251
static ULONG WINAPI audio_meminput_Release(IMemInputPin *iface)
Definition: audiostream.c:1263
static HRESULT WINAPI audio_meminput_NotifyAllocator(IMemInputPin *iface, IMemAllocator *allocator, BOOL readonly)
Definition: audiostream.c:1285
static HRESULT WINAPI audio_meminput_GetAllocatorRequirements(IMemInputPin *iface, ALLOCATOR_PROPERTIES *props)
Definition: audiostream.c:1303
static HRESULT WINAPI audio_meminput_ReceiveMultiple(IMemInputPin *iface, IMediaSample **samples, LONG count, LONG *processed)
Definition: audiostream.c:1363
static HRESULT WINAPI audio_meminput_ReceiveCanBlock(IMemInputPin *iface)
Definition: audiostream.c:1370
static ULONG WINAPI audio_meminput_AddRef(IMemInputPin *iface)
Definition: audiostream.c:1257
static HRESULT WINAPI audio_meminput_GetAllocator(IMemInputPin *iface, IMemAllocator **allocator)
Definition: audiostream.c:1269

Definition at line 1376 of file audiostream.c.

Referenced by audio_stream_create().

◆ audio_sink_vtbl

const IPinVtbl audio_sink_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI audio_sink_QueryInterface(IPin *iface, REFIID iid, void **out)
Definition: audiostream.c:933
static HRESULT WINAPI audio_sink_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *mt)
Definition: audiostream.c:1051
static HRESULT WINAPI audio_sink_EndFlush(IPin *iface)
Definition: audiostream.c:1193
static HRESULT WINAPI audio_sink_EnumMediaTypes(IPin *iface, IEnumMediaTypes **enum_media_types)
Definition: audiostream.c:1114
static ULONG WINAPI audio_sink_AddRef(IPin *iface)
Definition: audiostream.c:939
static HRESULT WINAPI audio_sink_QueryInternalConnections(IPin *iface, IPin **pins, ULONG *count)
Definition: audiostream.c:1134
static HRESULT WINAPI audio_sink_Connect(IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
Definition: audiostream.c:951
static HRESULT WINAPI audio_sink_Disconnect(IPin *iface)
Definition: audiostream.c:1002
static HRESULT WINAPI audio_sink_NewSegment(IPin *iface, REFERENCE_TIME start, REFERENCE_TIME stop, double rate)
Definition: audiostream.c:1208
static HRESULT WINAPI audio_sink_ConnectedTo(IPin *iface, IPin **peer)
Definition: audiostream.c:1026
static HRESULT WINAPI audio_sink_QueryId(IPin *iface, WCHAR **id)
Definition: audiostream.c:1096
static HRESULT WINAPI audio_sink_ReceiveConnection(IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
Definition: audiostream.c:957
static HRESULT WINAPI audio_sink_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *mt)
Definition: audiostream.c:1108
static ULONG WINAPI audio_sink_Release(IPin *iface)
Definition: audiostream.c:945
static HRESULT WINAPI audio_sink_QueryDirection(IPin *iface, PIN_DIRECTION *dir)
Definition: audiostream.c:1089
static HRESULT WINAPI audio_sink_EndOfStream(IPin *iface)
Definition: audiostream.c:1140
static HRESULT WINAPI audio_sink_QueryPinInfo(IPin *iface, PIN_INFO *info)
Definition: audiostream.c:1076
static HRESULT WINAPI audio_sink_BeginFlush(IPin *iface)
Definition: audiostream.c:1168

Definition at line 1224 of file audiostream.c.

Referenced by audio_stream_create().

◆ AudioStreamSample_Vtbl

const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI audio_sample_GetMediaStream(IAudioStreamSample *iface, IMediaStream **media_stream)
Definition: audiostream.c:211
static HRESULT WINAPI audio_sample_QueryInterface(IAudioStreamSample *iface, REFIID riid, void **ret_iface)
Definition: audiostream.c:167
static ULONG WINAPI audio_sample_Release(IAudioStreamSample *iface)
Definition: audiostream.c:195
static HRESULT WINAPI audio_sample_GetSampleTimes(IAudioStreamSample *iface, STREAM_TIME *start_time, STREAM_TIME *end_time, STREAM_TIME *current_time)
Definition: audiostream.c:226
static HRESULT WINAPI audio_sample_CompletionStatus(IAudioStreamSample *iface, DWORD flags, DWORD milliseconds)
Definition: audiostream.c:326
static ULONG WINAPI audio_sample_AddRef(IAudioStreamSample *iface)
Definition: audiostream.c:187
static HRESULT WINAPI audio_sample_SetSampleTimes(IAudioStreamSample *iface, const STREAM_TIME *start_time, const STREAM_TIME *end_time)
Definition: audiostream.c:244
static HRESULT WINAPI audio_sample_Update(IAudioStreamSample *iface, DWORD flags, HANDLE event, PAPCFUNC apc_func, DWORD apc_data)
Definition: audiostream.c:252
static HRESULT WINAPI audio_sample_GetAudioData(IAudioStreamSample *iface, IAudioData **audio_data)
Definition: audiostream.c:349

Definition at line 364 of file audiostream.c.

Referenced by audiostreamsample_create().

◆ enum_media_types_vtbl

static const IEnumMediaTypesVtbl enum_media_types_vtbl
static
Initial value:
=
{
}
static ULONG WINAPI enum_media_types_Release(IEnumMediaTypes *iface)
Definition: audiostream.c:826
static HRESULT WINAPI enum_media_types_QueryInterface(IEnumMediaTypes *iface, REFIID iid, void **out)
Definition: audiostream.c:802
static HRESULT WINAPI enum_media_types_Reset(IEnumMediaTypes *iface)
Definition: audiostream.c:889
static ULONG WINAPI enum_media_types_AddRef(IEnumMediaTypes *iface)
Definition: audiostream.c:818
static HRESULT WINAPI enum_media_types_Next(IEnumMediaTypes *iface, ULONG count, AM_MEDIA_TYPE **mts, ULONG *ret_count)
Definition: audiostream.c:836
static HRESULT WINAPI enum_media_types_Clone(IEnumMediaTypes *iface, IEnumMediaTypes **out)
Definition: audiostream.c:899
static HRESULT WINAPI enum_media_types_Skip(IEnumMediaTypes *iface, ULONG count)
Definition: audiostream.c:879

Definition at line 795 of file audiostream.c.

Referenced by audio_sink_EnumMediaTypes(), and enum_media_types_Clone().

◆ sink_id

const WCHAR sink_id[] = L"I{A35FF56B-9FDA-11D0-8FDF-00C04FD9189D}"
static

Definition at line 29 of file audiostream.c.

Referenced by audio_sink_QueryId(), and audio_sink_QueryPinInfo().