29static const WCHAR sink_id[] =
L"I{A35FF56B-9FDA-11D0-8FDF-00C04FD9189D}";
87 IMediaSample_Release(receive->
sample);
144 if (
sample->update_hr != MS_S_PENDING)
176 IAudioStreamSample_AddRef(iface);
191 TRACE(
"%p increasing refcount to %lu.\n",
sample, refcount);
199 TRACE(
"%p decreasing refcount to %lu.\n",
sample, refcount);
202 IAMMediaStream_Release(&
sample->parent->IAMMediaStream_iface);
203 IAudioData_Release(
sample->audio_data);
215 TRACE(
"sample %p, media_stream %p.\n", iface, media_stream);
220 IAMMediaStream_AddRef(&
sample->parent->IAMMediaStream_iface);
234 IMediaStreamFilter_GetCurrentStreamTime(
sample->parent->filter, current_time);
260 TRACE(
"sample %p, flags %#lx, event %p, apc_func %p, apc_data %#lx.\n",
272 FIXME(
"APC support is not implemented!\n");
278 FIXME(
"Event parameter support is not implemented!\n");
290 if (
sample->parent->state != State_Running)
293 return MS_E_NOTRUNNING;
295 if (!
sample->parent->peer)
298 return MS_S_ENDOFSTREAM;
300 if (MS_S_PENDING ==
sample->update_hr)
309 sample->update_hr = MS_S_PENDING;
331 TRACE(
"sample %p, flags %#lx, milliseconds %lu.\n",
sample,
flags, milliseconds);
358 IAudioData_AddRef(
sample->audio_data);
384 TRACE(
"(%p)\n", audio_stream_sample);
386 if (!(
object =
calloc(1,
sizeof(*
object))))
392 IAMMediaStream_AddRef(&
parent->IAMMediaStream_iface);
397 *audio_stream_sample = &
object->IAudioStreamSample_iface;
419 IAMMediaStream_AddRef(iface);
425 IAMMediaStream_AddRef(iface);
426 *ret_iface = &
This->IAudioMediaStream_iface;
431 IAMMediaStream_AddRef(iface);
432 *ret_iface = &
This->IPin_iface;
437 IAMMediaStream_AddRef(iface);
438 *ret_iface = &
This->IMemInputPin_iface;
451 TRACE(
"(%p/%p)->(): new ref = %lu\n", iface,
This,
ref);
478 TRACE(
"stream %p, mmstream %p.\n",
stream, mmstream);
484 IMultiMediaStream_AddRef(
stream->parent);
485 *mmstream =
stream->parent;
509 FIXME(
"(%p/%p)->(%p,%lx) stub!\n",
This, iface, pStreamThatHasDesiredFormat,
flags);
549 TRACE(
"stream %p, source_object %p, flags %lx, purpose_id %s, stream_type %u.\n",
stream, source_object,
flags,
556 FIXME(
"Specifying a stream object is not yet supported.\n");
559 FIXME(
"AMMSF_CREATEPEER is not yet supported.\n");
575 if (
state == State_Stopped)
577 if (
stream->state == State_Stopped)
592 TRACE(
"stream %p, mmstream %p.\n",
stream, mmstream);
614 TRACE(
"stream %p, filtergraph %p.\n",
stream, filtergraph);
648 return IAMMediaStream_QueryInterface(&
This->IAMMediaStream_iface,
riid, ret_iface);
655 return IAMMediaStream_AddRef(&
This->IAMMediaStream_iface);
662 return IAMMediaStream_Release(&
This->IAMMediaStream_iface);
669 return IAMMediaStream_GetMultiMediaStream(&
stream->IAMMediaStream_iface, mmstream);
683 return IAMMediaStream_SetSameFormat(&
stream->IAMMediaStream_iface,
other,
flags);
690 return IAMMediaStream_AllocateSample(&
stream->IAMMediaStream_iface,
flags,
sample);
697 return IAMMediaStream_CreateSharedSample(&
stream->IAMMediaStream_iface, existing_sample,
flags,
sample);
703 return IAMMediaStream_SendEndOfStream(&
stream->IAMMediaStream_iface,
flags);
721 return MS_E_NOSTREAM;
808 IEnumMediaTypes_AddRef(iface);
844 .nSamplesPerSec = 11025,
845 .nAvgBytesPerSec = 11025 * 2,
847 .wBitsPerSample = 16,
851 TRACE(
"iface %p, count %lu, mts %p, ret_count %p.\n", iface,
count, mts, ret_count);
860 mts[0]->majortype = MEDIATYPE_Audio;
862 mts[0]->bFixedSizeSamples =
TRUE;
863 mts[0]->bTemporalCompression =
FALSE;
864 mts[0]->lSampleSize = 2;
865 mts[0]->formattype = FORMAT_WaveFormatEx;
883 TRACE(
"iface %p, count %lu.\n", iface,
count);
893 TRACE(
"iface %p.\n", iface);
904 TRACE(
"iface %p, out %p.\n", iface,
out);
906 if (!(
object =
calloc(1,
sizeof(*
object))))
910 object->refcount = 1;
913 *
out = &
object->IEnumMediaTypes_iface;
936 return IAMMediaStream_QueryInterface(&
stream->IAMMediaStream_iface, iid,
out);
942 return IAMMediaStream_AddRef(&
stream->IAMMediaStream_iface);
948 return IAMMediaStream_Release(&
stream->IAMMediaStream_iface);
953 WARN(
"iface %p, peer %p, mt %p, unexpected call!\n", iface,
peer,
mt);
980 IPin_QueryDirection(
peer, &
dir);
983 WARN(
"Rejecting connection from input pin.\n");
1016 IPin_Release(
stream->peer);
1091 TRACE(
"iface %p, dir %p.\n", iface,
dir);
1098 TRACE(
"iface %p, id %p.\n", iface,
id);
1110 TRACE(
"iface %p, mt %p.\n", iface,
mt);
1123 if (!(
object =
calloc(1,
sizeof(*
object))))
1127 object->refcount = 1;
1136 TRACE(
"iface %p, pins %p, count %p.\n", iface, pins,
count);
1163 IMediaStreamFilter_EndOfStream(
stream->filter);
1177 cancel_eos =
stream->eos;
1188 IMediaStreamFilter_Flush(
stream->filter, cancel_eos);
1212 TRACE(
"stream %p, start %s, stop %s, rate %0.16e\n",
1254 return IAMMediaStream_QueryInterface(&
stream->IAMMediaStream_iface, iid,
out);
1260 return IAMMediaStream_AddRef(&
stream->IAMMediaStream_iface);
1266 return IAMMediaStream_Release(&
stream->IAMMediaStream_iface);
1297 IMemAllocator_Release(
stream->allocator);
1305 TRACE(
"iface %p, props %p.\n", iface,
props);
1322 if (
stream->state == State_Stopped)
1342 receive =
calloc(1,
sizeof(*receive));
1349 receive->
length = IMediaSample_GetActualDataLength(
sample);
1353 IMediaSample_AddRef(receive->
sample);
1372 TRACE(
"iface %p.\n", iface);
1396 if (!(
object =
calloc(1,
sizeof(*
object))))
1409 TRACE(
"Created audio stream %p.\n",
object);
1411 *
out = &
object->IAMMediaStream_iface;
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
static void CALLBACK apc_func(ULONG_PTR param)
#define InterlockedIncrement
#define InterlockedDecrement
static struct enum_media_types * impl_from_IEnumMediaTypes(IEnumMediaTypes *iface)
static HRESULT WINAPI audio_sink_QueryInterface(IPin *iface, REFIID iid, void **out)
static ULONG WINAPI enum_media_types_Release(IEnumMediaTypes *iface)
static HRESULT WINAPI audio_sample_GetMediaStream(IAudioStreamSample *iface, IMediaStream **media_stream)
static HRESULT WINAPI audio_sample_QueryInterface(IAudioStreamSample *iface, REFIID riid, void **ret_iface)
static void flush_receive_queue(struct audio_stream *stream)
static struct audio_stream * impl_from_IPin(IPin *iface)
static void remove_queued_receive(struct queued_receive *receive)
static HRESULT WINAPI audio_meminput_Receive(IMemInputPin *iface, IMediaSample *sample)
static HRESULT WINAPI audio_IAudioMediaStream_SetFormat(IAudioMediaStream *iface, const WAVEFORMATEX *format)
static ULONG WINAPI audio_sample_Release(IAudioStreamSample *iface)
static ULONG WINAPI audio_IAudioMediaStream_AddRef(IAudioMediaStream *iface)
static HRESULT WINAPI audio_IAudioMediaStream_AllocateSample(IAudioMediaStream *iface, DWORD flags, IStreamSample **sample)
HRESULT audio_stream_create(IUnknown *outer, void **out)
static HRESULT WINAPI audio_IAudioMediaStream_GetFormat(IAudioMediaStream *iface, WAVEFORMATEX *format)
static HRESULT WINAPI audio_sink_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *mt)
static const IPinVtbl audio_sink_vtbl
static struct audio_stream * impl_from_IMemInputPin(IMemInputPin *iface)
static HRESULT WINAPI audio_sink_EndFlush(IPin *iface)
static HRESULT WINAPI audio_sample_GetSampleTimes(IAudioStreamSample *iface, STREAM_TIME *start_time, STREAM_TIME *end_time, STREAM_TIME *current_time)
static HRESULT WINAPI audio_sink_EnumMediaTypes(IPin *iface, IEnumMediaTypes **enum_media_types)
static HRESULT WINAPI audio_IAudioMediaStream_GetMultiMediaStream(IAudioMediaStream *iface, IMultiMediaStream **mmstream)
static HRESULT WINAPI enum_media_types_QueryInterface(IEnumMediaTypes *iface, REFIID iid, void **out)
static ULONG WINAPI audio_sink_AddRef(IPin *iface)
static HRESULT WINAPI audio_sample_CompletionStatus(IAudioStreamSample *iface, DWORD flags, DWORD milliseconds)
static HRESULT WINAPI audio_IAMMediaStream_JoinFilter(IAMMediaStream *iface, IMediaStreamFilter *filter)
static const struct IAudioStreamSampleVtbl AudioStreamSample_Vtbl
static HRESULT WINAPI audio_sink_QueryInternalConnections(IPin *iface, IPin **pins, ULONG *count)
static HRESULT WINAPI audio_IAMMediaStream_SetState(IAMMediaStream *iface, FILTER_STATE state)
static HRESULT WINAPI audio_meminput_QueryInterface(IMemInputPin *iface, REFIID iid, void **out)
static HRESULT WINAPI audio_sink_Connect(IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
static const IMemInputPinVtbl audio_meminput_vtbl
static HRESULT WINAPI audio_sink_Disconnect(IPin *iface)
static HRESULT WINAPI audio_sink_NewSegment(IPin *iface, REFERENCE_TIME start, REFERENCE_TIME stop, double rate)
static const struct IAudioMediaStreamVtbl audio_IAudioMediaStream_vtbl
static HRESULT WINAPI audio_sink_ConnectedTo(IPin *iface, IPin **peer)
static HRESULT WINAPI audio_IAudioMediaStream_SendEndOfStream(IAudioMediaStream *iface, DWORD flags)
static HRESULT WINAPI audio_IAMMediaStream_QueryInterface(IAMMediaStream *iface, REFIID riid, void **ret_iface)
static HRESULT WINAPI audio_IAudioMediaStream_SetSameFormat(IAudioMediaStream *iface, IMediaStream *other, DWORD flags)
static HRESULT WINAPI audio_IAudioMediaStream_CreateSample(IAudioMediaStream *iface, IAudioData *audio_data, DWORD flags, IAudioStreamSample **sample)
static void remove_queued_update(struct audio_sample *sample)
static HRESULT WINAPI audio_IAMMediaStream_GetInformation(IAMMediaStream *iface, MSPID *purpose_id, STREAM_TYPE *type)
static HRESULT WINAPI audio_IAudioMediaStream_QueryInterface(IAudioMediaStream *iface, REFIID riid, void **ret_iface)
static ULONG WINAPI audio_meminput_Release(IMemInputPin *iface)
static ULONG WINAPI audio_IAudioMediaStream_Release(IAudioMediaStream *iface)
static HRESULT WINAPI enum_media_types_Reset(IEnumMediaTypes *iface)
static HRESULT WINAPI audio_meminput_NotifyAllocator(IMemInputPin *iface, IMemAllocator *allocator, BOOL readonly)
static HRESULT WINAPI audio_sink_QueryId(IPin *iface, WCHAR **id)
static ULONG WINAPI audio_IAMMediaStream_AddRef(IAMMediaStream *iface)
static ULONG WINAPI enum_media_types_AddRef(IEnumMediaTypes *iface)
static HRESULT WINAPI audio_IAMMediaStream_SetSameFormat(IAMMediaStream *iface, IMediaStream *pStreamThatHasDesiredFormat, DWORD flags)
static HRESULT WINAPI audio_IAudioMediaStream_CreateSharedSample(IAudioMediaStream *iface, IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
static HRESULT WINAPI audio_meminput_GetAllocatorRequirements(IMemInputPin *iface, ALLOCATOR_PROPERTIES *props)
static HRESULT WINAPI audio_sink_ReceiveConnection(IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
static HRESULT WINAPI audio_meminput_ReceiveMultiple(IMemInputPin *iface, IMediaSample **samples, LONG count, LONG *processed)
static HRESULT WINAPI audio_IAMMediaStream_JoinFilterGraph(IAMMediaStream *iface, IFilterGraph *filtergraph)
static HRESULT WINAPI audio_IAMMediaStream_SendEndOfStream(IAMMediaStream *iface, DWORD flags)
static HRESULT WINAPI audio_IAMMediaStream_CreateSharedSample(IAMMediaStream *iface, IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
static HRESULT WINAPI audio_meminput_ReceiveCanBlock(IMemInputPin *iface)
static HRESULT WINAPI audio_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream *iface, IAMMultiMediaStream *mmstream)
static const struct IAMMediaStreamVtbl audio_IAMMediaStream_vtbl
static struct audio_sample * impl_from_IAudioStreamSample(IAudioStreamSample *iface)
static STREAM_TIME stream_time_from_position(struct audio_stream *stream, struct queued_receive *receive)
static HRESULT WINAPI audio_sink_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *mt)
static void process_updates(struct audio_stream *stream)
static HRESULT WINAPI audio_IAMMediaStream_Initialize(IAMMediaStream *iface, IUnknown *source_object, DWORD flags, REFMSPID purpose_id, const STREAM_TYPE stream_type)
static ULONG WINAPI audio_meminput_AddRef(IMemInputPin *iface)
static ULONG WINAPI audio_sink_Release(IPin *iface)
static HRESULT WINAPI enum_media_types_Next(IEnumMediaTypes *iface, ULONG count, AM_MEDIA_TYPE **mts, ULONG *ret_count)
static HRESULT WINAPI audio_sink_QueryDirection(IPin *iface, PIN_DIRECTION *dir)
static HRESULT WINAPI enum_media_types_Clone(IEnumMediaTypes *iface, IEnumMediaTypes **out)
static HRESULT WINAPI audio_IAMMediaStream_AllocateSample(IAMMediaStream *iface, DWORD flags, IStreamSample **sample)
static struct audio_stream * impl_from_IAudioMediaStream(IAudioMediaStream *iface)
static ULONG WINAPI audio_IAMMediaStream_Release(IAMMediaStream *iface)
static HRESULT WINAPI audio_IAudioMediaStream_GetInformation(IAudioMediaStream *iface, MSPID *purpose_id, STREAM_TYPE *type)
static HRESULT WINAPI audio_sink_EndOfStream(IPin *iface)
static ULONG WINAPI audio_sample_AddRef(IAudioStreamSample *iface)
static const WCHAR sink_id[]
static HRESULT audiostreamsample_create(struct audio_stream *parent, IAudioData *audio_data, IAudioStreamSample **audio_stream_sample)
static HRESULT WINAPI enum_media_types_Skip(IEnumMediaTypes *iface, ULONG count)
static HRESULT WINAPI audio_sample_SetSampleTimes(IAudioStreamSample *iface, const STREAM_TIME *start_time, const STREAM_TIME *end_time)
static HRESULT WINAPI audio_IAMMediaStream_GetMultiMediaStream(IAMMediaStream *iface, IMultiMediaStream **mmstream)
static const IEnumMediaTypesVtbl enum_media_types_vtbl
static void process_update(struct audio_sample *sample, struct queued_receive *receive)
static HRESULT WINAPI audio_sample_Update(IAudioStreamSample *iface, DWORD flags, HANDLE event, PAPCFUNC apc_func, DWORD apc_data)
static HRESULT WINAPI audio_sink_QueryPinInfo(IPin *iface, PIN_INFO *info)
static struct audio_stream * impl_from_IAMMediaStream(IAMMediaStream *iface)
static HRESULT WINAPI audio_sink_BeginFlush(IPin *iface)
static HRESULT WINAPI audio_sample_GetAudioData(IAudioStreamSample *iface, IAudioData **audio_data)
static HRESULT WINAPI audio_meminput_GetAllocator(IMemInputPin *iface, IMemAllocator **allocator)
enum _PinDirection PIN_DIRECTION
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLsizei const GLvoid * pointer
GLuint GLsizei GLsizei * length
#define memcpy(s1, s2, n)
#define IsEqualGUID(rguid1, rguid2)
HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE *pDest, const AM_MEDIA_TYPE *pSrc)
void WINAPI FreeMediaType(AM_MEDIA_TYPE *pMediaType)
struct audio_stream * parent
IAudioStreamSample IAudioStreamSample_iface
IMultiMediaStream * parent
IMediaStreamFilter * filter
REFERENCE_TIME segment_start
IAudioMediaStream IAudioMediaStream_iface
IMemInputPin IMemInputPin_iface
IAMMediaStream IAMMediaStream_iface
IMemAllocator * allocator
struct list receive_queue
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
#define CONTAINING_RECORD(address, type, field)
static int processed(const type_t *type)
#define VFW_E_ALREADY_CONNECTED
#define VFW_E_TYPE_NOT_ACCEPTED
#define VFW_E_INVALID_DIRECTION
#define VFW_E_WRONG_STATE
#define VFW_E_NO_ALLOCATOR
#define VFW_E_NOT_CONNECTED
static const WCHAR props[]
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define CLASS_E_NOAGGREGATION