Piotr Caban : qcap: Add Avi Mux input pin ReceiveConnection test.

Alexandre Julliard julliard at winehq.org
Tue Nov 26 15:51:44 CST 2013


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Nov 26 14:35:08 2013 +0100

qcap: Add Avi Mux input pin ReceiveConnection test.

---

 dlls/qcap/avimux.c     |    6 +++---
 dlls/qcap/tests/qcap.c |   38 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index a44cfa1..37849f6 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -953,9 +953,6 @@ static HRESULT WINAPI AviMuxIn_CheckMediaType(BasePin *base, const AM_MEDIA_TYPE
     FIXME("(%p:%s)->(AM_MEDIA_TYPE(%p))\n", base, debugstr_w(base->pinInfo.achName), pmt);
     dump_AM_MEDIA_TYPE(pmt);
 
-    if(!pmt)
-        return E_POINTER;
-
     if(IsEqualIID(&pmt->majortype, &MEDIATYPE_Audio) &&
             IsEqualIID(&pmt->formattype, &FORMAT_WaveFormatEx))
         return S_OK;
@@ -1073,6 +1070,9 @@ static HRESULT WINAPI AviMuxIn_ReceiveConnection(IPin *iface,
             debugstr_w(avimuxin->pin.pin.pinInfo.achName), pConnector, pmt);
     dump_AM_MEDIA_TYPE(pmt);
 
+    if(!pmt)
+        return E_POINTER;
+
     hr = BaseInputPinImpl_ReceiveConnection(iface, pConnector, pmt);
     if(FAILED(hr))
         return hr;
diff --git a/dlls/qcap/tests/qcap.c b/dlls/qcap/tests/qcap.c
index 03aa5ad..b17ee40 100644
--- a/dlls/qcap/tests/qcap.c
+++ b/dlls/qcap/tests/qcap.c
@@ -275,6 +275,9 @@ int call_no;
 
 static void check_calls_list(const char *func, call_id id, filter_type type)
 {
+    if(!current_calls_list)
+        return;
+
     while(current_calls_list[call_no].wine_missing || current_calls_list[call_no].wine_extra ||
          current_calls_list[call_no].optional || current_calls_list[call_no].broken) {
         if(current_calls_list[call_no].wine_missing) {
@@ -1067,7 +1070,11 @@ static void test_AviMux_QueryInterface(void)
 
 static void test_AviMux(void)
 {
-    IPin *avimux_in, *avimux_out;
+    test_filter source_filter = {{&BaseFilterVtbl}, {&EnumPinsVtbl}, {&PinVtbl},
+        {&KsPropertySetVtbl}, {&EnumMediaTypesVtbl}, PINDIR_OUTPUT, SOURCE_FILTER};
+    VIDEOINFOHEADER videoinfoheader;
+    IPin *avimux_in, *avimux_out, *pin;
+    AM_MEDIA_TYPE source_media_type;
     AM_MEDIA_TYPE *media_type;
     PIN_DIRECTION dir;
     IBaseFilter *avimux;
@@ -1128,6 +1135,35 @@ static void test_AviMux(void)
     ok(hr == S_FALSE, "Next returned %x\n", hr);
     IEnumMediaTypes_Release(emt);
 
+    hr = IPin_ReceiveConnection(avimux_in, &source_filter.IPin_iface, NULL);
+    ok(hr == E_POINTER, "ReceiveConnection returned %x\n", hr);
+
+    current_calls_list = NULL;
+    memset(&source_media_type, 0, sizeof(AM_MEDIA_TYPE));
+    memset(&videoinfoheader, 0, sizeof(VIDEOINFOHEADER));
+    source_media_type.majortype = MEDIATYPE_Video;
+    source_media_type.subtype = MEDIASUBTYPE_RGB32;
+    source_media_type.formattype = FORMAT_VideoInfo;
+    source_media_type.bFixedSizeSamples = TRUE;
+    source_media_type.lSampleSize = 40000;
+    source_media_type.cbFormat = sizeof(VIDEOINFOHEADER);
+    source_media_type.pbFormat = (BYTE*)&videoinfoheader;
+    videoinfoheader.AvgTimePerFrame = 333333;
+    videoinfoheader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+    videoinfoheader.bmiHeader.biWidth = 100;
+    videoinfoheader.bmiHeader.biHeight = 100;
+    videoinfoheader.bmiHeader.biPlanes = 1;
+    videoinfoheader.bmiHeader.biBitCount = 32;
+    videoinfoheader.bmiHeader.biSizeImage = 40000;
+    videoinfoheader.bmiHeader.biClrImportant = 256;
+    hr = IPin_ReceiveConnection(avimux_in, &source_filter.IPin_iface, &source_media_type);
+    ok(hr == S_OK, "ReceiveConnection returned %x\n", hr);
+
+    hr = IPin_ConnectedTo(avimux_in, &pin);
+    ok(hr == S_OK, "ConnectedTo returned %x\n", hr);
+    ok(pin == &source_filter.IPin_iface, "incorrect pin: %p, expected %p\n",
+            pin, &source_filter.IPin_iface);
+
     IPin_Release(avimux_in);
     IPin_Release(avimux_out);
     IBaseFilter_Release(avimux);




More information about the wine-cvs mailing list