Christian Costa : amstream: Add IAMMediaStream interface to AudioMediaStream object.
Alexandre Julliard
julliard at winehq.org
Mon Sep 24 16:04:24 CDT 2012
Module: wine
Branch: master
Commit: e8c256b185fe07bcc835c58a26186839f5acd11b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e8c256b185fe07bcc835c58a26186839f5acd11b
Author: Christian Costa <titan.costa at gmail.com>
Date: Sun Sep 23 20:43:48 2012 +0200
amstream: Add IAMMediaStream interface to AudioMediaStream object.
---
dlls/amstream/mediastream.c | 203 +++++++++++++++++++++++++++++++++++++++-
dlls/amstream/tests/amstream.c | 4 +-
2 files changed, 202 insertions(+), 5 deletions(-)
diff --git a/dlls/amstream/mediastream.c b/dlls/amstream/mediastream.c
index 0657893..dd037fc 100644
--- a/dlls/amstream/mediastream.c
+++ b/dlls/amstream/mediastream.c
@@ -455,6 +455,7 @@ HRESULT ddrawmediastream_create(IMultiMediaStream *parent, const MSPID *purpose_
}
typedef struct {
+ IAMMediaStream IAMMediaStream_iface;
IAudioMediaStream IAudioMediaStream_iface;
LONG ref;
IMultiMediaStream* parent;
@@ -462,6 +463,194 @@ typedef struct {
STREAM_TYPE stream_type;
} AudioMediaStreamImpl;
+static inline AudioMediaStreamImpl *impl_from_AudioMediaStream_IAMMediaStream(IAMMediaStream *iface)
+{
+ return CONTAINING_RECORD(iface, AudioMediaStreamImpl, IAMMediaStream_iface);
+}
+
+/*** IUnknown methods ***/
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_QueryInterface(IAMMediaStream *iface,
+ REFIID riid, void **ret_iface)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ret_iface);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IMediaStream) ||
+ IsEqualGUID(riid, &IID_IAMMediaStream))
+ {
+ IAMMediaStream_AddRef(iface);
+ *ret_iface = iface;
+ return S_OK;
+ }
+ else if (IsEqualGUID(riid, &IID_IAudioMediaStream))
+ {
+ IAMMediaStream_AddRef(iface);
+ *ret_iface = &This->IAudioMediaStream_iface;
+ return S_OK;
+ }
+
+ ERR("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ret_iface);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI AudioMediaStreamImpl_IAMMediaStream_AddRef(IAMMediaStream *iface)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p/%p)->(): new ref = %u\n", iface, This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI AudioMediaStreamImpl_IAMMediaStream_Release(IAMMediaStream *iface)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p/%p)->(): new ref = %u\n", iface, This, ref);
+
+ if (!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+/*** IMediaStream methods ***/
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream(IAMMediaStream *iface,
+ IMultiMediaStream** multi_media_stream)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%p) stub!\n", This, iface, multi_media_stream);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_GetInformation(IAMMediaStream *iface,
+ MSPID *purpose_id, STREAM_TYPE *type)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ TRACE("(%p/%p)->(%p,%p)\n", This, iface, purpose_id, type);
+
+ if (purpose_id)
+ *purpose_id = This->purpose_id;
+ if (type)
+ *type = This->stream_type;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_SetSameFormat(IAMMediaStream *iface,
+ IMediaStream *pStreamThatHasDesiredFormat, DWORD flags)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%p,%x) stub!\n", This, iface, pStreamThatHasDesiredFormat, flags);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_AllocateSample(IAMMediaStream *iface,
+ DWORD flags, IStreamSample **sample)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%x,%p) stub!\n", This, iface, flags, sample);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample(IAMMediaStream *iface,
+ IStreamSample *existing_sample, DWORD flags, IStreamSample **sample)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This, iface, existing_sample, flags, sample);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream(IAMMediaStream *iface, DWORD flags)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%x) stub!\n", This, iface, flags);
+
+ return S_FALSE;
+}
+
+/*** IAMMediaStream methods ***/
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_Initialize(IAMMediaStream *iface, IUnknown *source_object, DWORD flags,
+ REFMSPID purpose_id, const STREAM_TYPE stream_type)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%p,%x,%p,%u) stub!\n", This, iface, source_object, flags, purpose_id, stream_type);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_SetState(IAMMediaStream *iface, FILTER_STATE state)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%u) stub!\n", This, iface, state);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream *iface, IAMMultiMediaStream *am_multi_media_stream)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%p) stub!\n", This, iface, am_multi_media_stream);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_JoinFilter(IAMMediaStream *iface, IMediaStreamFilter *media_stream_filter)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%p) stub!\n", This, iface, media_stream_filter);
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph(IAMMediaStream *iface, IFilterGraph *filtergraph)
+{
+ AudioMediaStreamImpl *This = impl_from_AudioMediaStream_IAMMediaStream(iface);
+
+ FIXME("(%p/%p)->(%p) stub!\n", This, iface, filtergraph);
+
+ return S_FALSE;
+}
+
+static const struct IAMMediaStreamVtbl AudioMediaStreamImpl_IAMMediaStream_Vtbl =
+{
+ /*** IUnknown methods ***/
+ AudioMediaStreamImpl_IAMMediaStream_QueryInterface,
+ AudioMediaStreamImpl_IAMMediaStream_AddRef,
+ AudioMediaStreamImpl_IAMMediaStream_Release,
+ /*** IMediaStream methods ***/
+ AudioMediaStreamImpl_IAMMediaStream_GetMultiMediaStream,
+ AudioMediaStreamImpl_IAMMediaStream_GetInformation,
+ AudioMediaStreamImpl_IAMMediaStream_SetSameFormat,
+ AudioMediaStreamImpl_IAMMediaStream_AllocateSample,
+ AudioMediaStreamImpl_IAMMediaStream_CreateSharedSample,
+ AudioMediaStreamImpl_IAMMediaStream_SendEndOfStream,
+ /*** IAMMediaStream methods ***/
+ AudioMediaStreamImpl_IAMMediaStream_Initialize,
+ AudioMediaStreamImpl_IAMMediaStream_SetState,
+ AudioMediaStreamImpl_IAMMediaStream_JoinAMMultiMediaStream,
+ AudioMediaStreamImpl_IAMMediaStream_JoinFilter,
+ AudioMediaStreamImpl_IAMMediaStream_JoinFilterGraph
+};
+
static inline AudioMediaStreamImpl *impl_from_IAudioMediaStream(IAudioMediaStream *iface)
{
return CONTAINING_RECORD(iface, AudioMediaStreamImpl, IAudioMediaStream_iface);
@@ -483,6 +672,13 @@ static HRESULT WINAPI AudioMediaStreamImpl_IAudioMediaStream_QueryInterface(IAud
*ret_iface = iface;
return S_OK;
}
+ else if (IsEqualGUID(riid, &IID_IAMMediaStream))
+ {
+ IAudioMediaStream_AddRef(iface);
+ *ret_iface = &This->IAMMediaStream_iface;
+ return S_OK;
+ }
+
*ret_iface = NULL;
@@ -615,7 +811,7 @@ static HRESULT WINAPI AudioMediaStreamImpl_IAudioMediaStream_CreateSample(IAudio
return audiostreamsample_create(iface, audio_data, sample);
}
-static const struct IAudioMediaStreamVtbl AudioMediaStreamImpl_AudioMediaStream_Vtbl =
+static const struct IAudioMediaStreamVtbl AudioMediaStreamImpl_IAudioMediaStream_Vtbl =
{
/*** IUnknown methods ***/
AudioMediaStreamImpl_IAudioMediaStream_QueryInterface,
@@ -648,14 +844,15 @@ HRESULT audiomediastream_create(IMultiMediaStream *parent, const MSPID *purpose_
return E_OUTOFMEMORY;
}
- object->IAudioMediaStream_iface.lpVtbl = &AudioMediaStreamImpl_AudioMediaStream_Vtbl;
+ object->IAMMediaStream_iface.lpVtbl = &AudioMediaStreamImpl_IAMMediaStream_Vtbl;
+ object->IAudioMediaStream_iface.lpVtbl = &AudioMediaStreamImpl_IAudioMediaStream_Vtbl;
object->ref = 1;
object->parent = parent;
object->purpose_id = *purpose_id;
object->stream_type = stream_type;
- *media_stream = (IMediaStream*)&object->IAudioMediaStream_iface;
+ *media_stream = (IMediaStream*)&object->IAMMediaStream_iface;
return S_OK;
}
diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c
index fa9d0e4..6a198e0 100644
--- a/dlls/amstream/tests/amstream.c
+++ b/dlls/amstream/tests/amstream.c
@@ -326,8 +326,8 @@ static void test_media_streams(void)
IAudioStreamSample *audio_sample = NULL;
hr = IMediaStream_QueryInterface(audio_stream, &IID_IAMMediaStream, (LPVOID*)&am_media_stream);
- todo_wine ok(hr == S_OK, "IMediaStream_QueryInterface returned: %x\n", hr);
- todo_wine ok((void*)am_media_stream == (void*)audio_stream, "Not same interface, got %p expected %p\n", am_media_stream, video_stream);
+ ok(hr == S_OK, "IMediaStream_QueryInterface returned: %x\n", hr);
+ ok((void*)am_media_stream == (void*)audio_stream, "Not same interface, got %p expected %p\n", am_media_stream, audio_stream);
if (hr == S_OK)
IAMMediaStream_Release(am_media_stream);
More information about the wine-cvs
mailing list