Piotr Caban : qcap: Add Avi Mux IConfigInterleaving:: put_Mode implementation.

Alexandre Julliard julliard at winehq.org
Mon Feb 24 15:42:31 CST 2014


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Feb 24 12:11:12 2014 +0100

qcap: Add Avi Mux IConfigInterleaving::put_Mode implementation.

---

 dlls/qcap/avimux.c     |   25 +++++++++++++++++++++++--
 dlls/qcap/tests/qcap.c |   11 +++++++++++
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index f9c2cc2..e3ea363 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -54,6 +54,7 @@ typedef struct {
     IPersistMediaPropertyBag IPersistMediaPropertyBag_iface;
     ISpecifyPropertyPages ISpecifyPropertyPages_iface;
 
+    InterleavingMode mode;
     AviMuxOut *out;
     int input_pin_no;
     AviMuxIn *in[MAX_PIN_NO-1];
@@ -331,8 +332,28 @@ static HRESULT WINAPI ConfigInterleaving_put_Mode(
         IConfigInterleaving *iface, InterleavingMode mode)
 {
     AviMux *This = impl_from_IConfigInterleaving(iface);
-    FIXME("(%p)->(%d)\n", This, mode);
-    return E_NOTIMPL;
+    HRESULT hr = S_OK;
+
+    TRACE("(%p)->(%d)\n", This, mode);
+
+    if(mode>INTERLEAVE_NONE_BUFFERED)
+        return E_INVALIDARG;
+
+    if(This->mode != mode) {
+        int i;
+
+        for(i=0; i<This->input_pin_no; i++) {
+            if(!This->in[i]->pin.pin.pConnectedTo)
+                continue;
+
+           hr = IFilterGraph_Reconnect(This->filter.filterInfo.pGraph, &This->in[i]->pin.pin.IPin_iface);
+           if(FAILED(hr))
+               return hr;
+        }
+    }
+
+    This->mode = mode;
+    return S_OK;
 }
 
 static HRESULT WINAPI ConfigInterleaving_get_Mode(
diff --git a/dlls/qcap/tests/qcap.c b/dlls/qcap/tests/qcap.c
index dff5bb8..3734132 100644
--- a/dlls/qcap/tests/qcap.c
+++ b/dlls/qcap/tests/qcap.c
@@ -1235,6 +1235,7 @@ static void test_AviMux(void)
     IMemInputPin *memin;
     ALLOCATOR_PROPERTIES props;
     IMemAllocator *memalloc;
+    IConfigInterleaving *ci;
     HRESULT hr;
 
     init_test_filter(&source_filter, PINDIR_OUTPUT, SOURCE_FILTER);
@@ -1369,6 +1370,16 @@ static void test_AviMux(void)
     IMemAllocator_Release(memalloc);
     IMemInputPin_Release(memin);
 
+    hr = IBaseFilter_QueryInterface(avimux, &IID_IConfigInterleaving, (void**)&ci);
+    ok(hr == S_OK, "QueryInterface(IID_IConfigInterleaving) returned %x\n", hr);
+    hr = IConfigInterleaving_put_Mode(ci, 5);
+    ok(hr == E_INVALIDARG, "put_Mode returned %x\n", hr);
+    SET_EXPECT(Reconnect);
+    hr = IConfigInterleaving_put_Mode(ci, INTERLEAVE_FULL);
+    ok(hr == S_OK, "put_Mode returned %x\n", hr);
+    CHECK_CALLED(Reconnect);
+    IConfigInterleaving_Release(ci);
+
     hr = IPin_Disconnect(avimux_out);
     ok(hr == S_OK, "Disconnect returned %x\n", hr);
 




More information about the wine-cvs mailing list