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