Zebediah Figura : strmbase: Support aggregation in the base transform filter.

Alexandre Julliard julliard at winehq.org
Thu Jun 6 17:05:19 CDT 2019


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

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Thu Jun  6 11:22:53 2019 -0400

strmbase: Support aggregation in the base transform filter.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/quartz/acmwrapper.c         | 13 ++++---------
 dlls/quartz/avidec.c             | 13 ++++---------
 dlls/quartz/tests/acmwrapper.c   |  3 +--
 dlls/quartz/tests/avidec.c       |  3 +--
 dlls/strmbase/transform.c        |  8 ++++----
 dlls/winegstreamer/gsttffilter.c |  9 ++++-----
 dlls/wineqtdecoder/qtvdecoder.c  | 14 +++-----------
 include/wine/strmbase.h          |  2 +-
 8 files changed, 22 insertions(+), 43 deletions(-)

diff --git a/dlls/quartz/acmwrapper.c b/dlls/quartz/acmwrapper.c
index b38f435..adfb022 100644
--- a/dlls/quartz/acmwrapper.c
+++ b/dlls/quartz/acmwrapper.c
@@ -375,25 +375,20 @@ static const TransformFilterFuncTable ACMWrapper_FuncsTable = {
     NULL
 };
 
-HRESULT ACMWrapper_create(IUnknown * pUnkOuter, LPVOID * ppv)
+HRESULT ACMWrapper_create(IUnknown *outer, void **out)
 {
     HRESULT hr;
     ACMWrapperImpl* This;
 
-    TRACE("(%p, %p)\n", pUnkOuter, ppv);
+    *out = NULL;
 
-    *ppv = NULL;
-
-    if (pUnkOuter)
-        return CLASS_E_NOAGGREGATION;
-
-    hr = strmbase_transform_create(sizeof(ACMWrapperImpl), &CLSID_ACMWrapper,
+    hr = strmbase_transform_create(sizeof(ACMWrapperImpl), outer, &CLSID_ACMWrapper,
             &ACMWrapper_FuncsTable, (IBaseFilter **)&This);
 
     if (FAILED(hr))
         return hr;
 
-    *ppv = &This->tf.filter.IBaseFilter_iface;
+    *out = &This->tf.filter.IUnknown_inner;
     This->lasttime_real = This->lasttime_sent = -1;
 
     return hr;
diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c
index a12cad1..4aefd35 100644
--- a/dlls/quartz/avidec.c
+++ b/dlls/quartz/avidec.c
@@ -390,19 +390,14 @@ static const TransformFilterFuncTable AVIDec_FuncsTable = {
     AVIDec_NotifyDrop
 };
 
-HRESULT AVIDec_create(IUnknown * pUnkOuter, LPVOID * ppv)
+HRESULT AVIDec_create(IUnknown *outer, void **out)
 {
     HRESULT hr;
     AVIDecImpl * This;
 
-    TRACE("(%p, %p)\n", pUnkOuter, ppv);
+    *out = NULL;
 
-    *ppv = NULL;
-
-    if (pUnkOuter)
-        return CLASS_E_NOAGGREGATION;
-
-    hr = strmbase_transform_create(sizeof(AVIDecImpl), &CLSID_AVIDec,
+    hr = strmbase_transform_create(sizeof(AVIDecImpl), outer, &CLSID_AVIDec,
             &AVIDec_FuncsTable, (IBaseFilter **)&This);
 
     if (FAILED(hr))
@@ -412,7 +407,7 @@ HRESULT AVIDec_create(IUnknown * pUnkOuter, LPVOID * ppv)
     This->pBihIn = NULL;
     This->pBihOut = NULL;
 
-    *ppv = &This->tf.filter.IBaseFilter_iface;
+    *out = &This->tf.filter.IUnknown_inner;
 
     return hr;
 }
diff --git a/dlls/quartz/tests/acmwrapper.c b/dlls/quartz/tests/acmwrapper.c
index 48451f80..1c41872 100644
--- a/dlls/quartz/tests/acmwrapper.c
+++ b/dlls/quartz/tests/acmwrapper.c
@@ -158,8 +158,7 @@ static void test_aggregation(void)
 
     hr = CoCreateInstance(&CLSID_ACMWrapper, &test_outer, CLSCTX_INPROC_SERVER,
             &IID_IUnknown, (void **)&unk);
-    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
-    if (FAILED(hr)) return;
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
     ok(outer_ref == 1, "Got unexpected refcount %d.\n", outer_ref);
     ok(unk != &test_outer, "Returned IUnknown should not be outer IUnknown.\n");
     ref = get_refcount(unk);
diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c
index fe86d33..0183e0b 100644
--- a/dlls/quartz/tests/avidec.c
+++ b/dlls/quartz/tests/avidec.c
@@ -183,8 +183,7 @@ static void test_aggregation(void)
 
     hr = CoCreateInstance(&CLSID_AVIDec, &test_outer, CLSCTX_INPROC_SERVER,
             &IID_IUnknown, (void **)&unk);
-    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
-    if (FAILED(hr)) return;
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
     ok(outer_ref == 1, "Got unexpected refcount %d.\n", outer_ref);
     ok(unk != &test_outer, "Returned IUnknown should not be outer IUnknown.\n");
     ref = get_refcount(unk);
diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c
index bfe87a1..a7c47b5 100644
--- a/dlls/strmbase/transform.c
+++ b/dlls/strmbase/transform.c
@@ -281,14 +281,14 @@ static const IBaseFilterVtbl transform_vtbl =
     BaseFilterImpl_QueryVendorInfo
 };
 
-static HRESULT strmbase_transform_init(const CLSID *clsid,
+static HRESULT strmbase_transform_init(IUnknown *outer, const CLSID *clsid,
         const TransformFilterFuncTable *func_table, TransformFilter *filter)
 {
     HRESULT hr;
     PIN_INFO piInput;
     PIN_INFO piOutput;
 
-    strmbase_filter_init(&filter->filter, &transform_vtbl, NULL, clsid,
+    strmbase_filter_init(&filter->filter, &transform_vtbl, outer, clsid,
             (DWORD_PTR)(__FILE__ ": TransformFilter.csFilter"), &tfBaseFuncTable);
 
     InitializeCriticalSection(&filter->csReceive);
@@ -349,7 +349,7 @@ static HRESULT strmbase_transform_init(const CLSID *clsid,
     return hr;
 }
 
-HRESULT strmbase_transform_create(LONG filter_size, const CLSID *pClsid,
+HRESULT strmbase_transform_create(LONG filter_size, IUnknown *outer, const CLSID *pClsid,
         const TransformFilterFuncTable *pFuncsTable, IBaseFilter **ppTransformFilter)
 {
     TransformFilter* pTf;
@@ -365,7 +365,7 @@ HRESULT strmbase_transform_create(LONG filter_size, const CLSID *pClsid,
 
     ZeroMemory(pTf, filter_size);
 
-    if (SUCCEEDED(strmbase_transform_init(pClsid, pFuncsTable, pTf)))
+    if (SUCCEEDED(strmbase_transform_init(outer, pClsid, pFuncsTable, pTf)))
     {
         *ppTransformFilter = &pTf->filter.IBaseFilter_iface;
         return S_OK;
diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c
index b45d844..60697e5 100644
--- a/dlls/winegstreamer/gsttffilter.c
+++ b/dlls/winegstreamer/gsttffilter.c
@@ -489,17 +489,16 @@ static HRESULT WINAPI Gstreamer_transform_QOS(TransformFilter *iface, IBaseFilte
     return TransformFilterImpl_Notify(iface, sender, qm);
 }
 
-static HRESULT Gstreamer_transform_create(IUnknown *punkouter, const CLSID *clsid, const char *name, const TransformFilterFuncTable *vtbl, void **obj)
+static HRESULT Gstreamer_transform_create(IUnknown *outer, const CLSID *clsid,
+        const char *name, const TransformFilterFuncTable *vtbl, void **obj)
 {
     GstTfImpl *This;
 
-    TRACE("%p, %p, %p, %p, %p\n", punkouter, clsid, name, vtbl, obj);
-
-    if (FAILED(strmbase_transform_create(sizeof(GstTfImpl), clsid, vtbl, (IBaseFilter **)&This)))
+    if (FAILED(strmbase_transform_create(sizeof(GstTfImpl), outer, clsid, vtbl, (IBaseFilter **)&This)))
         return E_OUTOFMEMORY;
 
     This->gstreamer_name = name;
-    *obj = This;
+    *obj = &This->tf.filter.IUnknown_inner;
 
     TRACE("returning %p\n", This);
 
diff --git a/dlls/wineqtdecoder/qtvdecoder.c b/dlls/wineqtdecoder/qtvdecoder.c
index 4ad73d8..57101d4 100644
--- a/dlls/wineqtdecoder/qtvdecoder.c
+++ b/dlls/wineqtdecoder/qtvdecoder.c
@@ -518,22 +518,14 @@ static const TransformFilterFuncTable QTVDecoder_FuncsTable = {
     NULL
 };
 
-IUnknown * CALLBACK QTVDecoder_create(IUnknown * pUnkOuter, HRESULT* phr)
+IUnknown * CALLBACK QTVDecoder_create(IUnknown *outer, HRESULT* phr)
 {
     HRESULT hr;
     QTVDecoderImpl * This;
 
-    TRACE("(%p, %p)\n", pUnkOuter, phr);
-
     *phr = S_OK;
 
-    if (pUnkOuter)
-    {
-        *phr = CLASS_E_NOAGGREGATION;
-        return NULL;
-    }
-
-    hr = strmbase_transform_create(sizeof(QTVDecoderImpl), &CLSID_QTVDecoder,
+    hr = strmbase_transform_create(sizeof(QTVDecoderImpl), outer, &CLSID_QTVDecoder,
             &QTVDecoder_FuncsTable, (IBaseFilter **)&This);
 
     if (FAILED(hr))
@@ -543,5 +535,5 @@ IUnknown * CALLBACK QTVDecoder_create(IUnknown * pUnkOuter, HRESULT* phr)
     }
 
     *phr = hr;
-    return (IUnknown*)This;
+    return &This->tf.filter.IUnknown_inner;
 }
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 7ee8be6..56560ed 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -249,7 +249,7 @@ typedef struct TransformFilterFuncTable {
 
 HRESULT WINAPI TransformFilterImpl_Notify(TransformFilter *iface, IBaseFilter *sender, Quality qm);
 
-HRESULT strmbase_transform_create(LONG filter_size, const CLSID *clsid,
+HRESULT strmbase_transform_create(LONG filter_size, IUnknown *outer, const CLSID *clsid,
         const TransformFilterFuncTable *func_table, IBaseFilter **filter);
 
 /* Source Seeking */




More information about the wine-cvs mailing list