Christian Costa : amstream: Create MediaStream filter when initialising AMMutiMediaStream.

Alexandre Julliard julliard at winehq.org
Thu Mar 15 15:35:21 CDT 2012


Module: wine
Branch: master
Commit: c6c44723818302c39b79d7a1b4a6bdf67e001723
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c6c44723818302c39b79d7a1b4a6bdf67e001723

Author: Christian Costa <titan.costa at gmail.com>
Date:   Wed Mar 14 21:51:35 2012 +0100

amstream: Create MediaStream filter when initialising AMMutiMediaStream.

---

 dlls/amstream/amstream.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/dlls/amstream/amstream.c b/dlls/amstream/amstream.c
index 516f2ba..b7393fa 100644
--- a/dlls/amstream/amstream.c
+++ b/dlls/amstream/amstream.c
@@ -37,6 +37,7 @@ typedef struct {
     IGraphBuilder* pFilterGraph;
     IMediaSeeking* media_seeking;
     IMediaControl* media_control;
+    IBaseFilter* media_stream_filter;
     IPin* ipin;
     ULONG nbStreams;
     IMediaStream** pStreams;
@@ -118,6 +119,8 @@ static ULONG WINAPI IAMMultiMediaStreamImpl_Release(IAMMultiMediaStream* iface)
             IMediaStream_Release(This->pStreams[i]);
         if (This->ipin)
             IPin_Release(This->ipin);
+        if (This->media_stream_filter)
+            IBaseFilter_Release(This->media_stream_filter);
         if (This->media_seeking)
             IMediaSeeking_Release(This->media_seeking);
         if (This->media_control)
@@ -230,6 +233,7 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_Initialize(IAMMultiMediaStream* if
 {
     IAMMultiMediaStreamImpl *This = impl_from_IAMMultiMediaStream(iface);
     HRESULT hr = S_OK;
+    const WCHAR filternameW[] = {'M','e','d','i','a','S','t','r','e','a','m','F','i','l','t','e','r',0};
 
     TRACE("(%p/%p)->(%x,%x,%p)\n", This, iface, (DWORD)StreamType, dwFlags, pFilterGraph);
 
@@ -249,10 +253,17 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_Initialize(IAMMultiMediaStream* if
         hr = IGraphBuilder_QueryInterface(This->pFilterGraph, &IID_IMediaSeeking, (void**)&This->media_seeking);
         if (SUCCEEDED(hr))
             IGraphBuilder_QueryInterface(This->pFilterGraph, &IID_IMediaControl, (void**)&This->media_control);
+        if (SUCCEEDED(hr))
+            hr = CoCreateInstance(&CLSID_MediaStreamFilter, NULL, CLSCTX_INPROC_SERVER, &IID_IBaseFilter, (LPVOID*)&This->media_stream_filter);
+        if (SUCCEEDED(hr))
+            IGraphBuilder_AddFilter(This->pFilterGraph, This->media_stream_filter, filternameW);
     }
 
     if (FAILED(hr))
     {
+        if (This->media_stream_filter)
+            IBaseFilter_Release(This->media_stream_filter);
+        This->media_stream_filter = NULL;
         if (This->media_seeking)
             IMediaSeeking_Release(This->media_seeking);
         This->media_seeking = NULL;




More information about the wine-cvs mailing list