Zebediah Figura : quartz/vmr9: Set the destination rect to the whole client area when connecting.

Alexandre Julliard julliard at winehq.org
Fri Jun 26 17:00:53 CDT 2020


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

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Thu Jun 25 17:57:39 2020 -0500

quartz/vmr9: Set the destination rect to the whole client area when connecting.

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

---

 dlls/quartz/tests/vmr7.c | 30 ++++++++++++++++++++++++++++++
 dlls/quartz/tests/vmr9.c | 34 ++++++++++++++++++++++++++++++++--
 dlls/quartz/vmr9.c       |  3 ++-
 3 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c
index 4422a1f914..adf677535b 100644
--- a/dlls/quartz/tests/vmr7.c
+++ b/dlls/quartz/tests/vmr7.c
@@ -2593,6 +2593,7 @@ static void test_basic_video(void)
     UINT count;
     ULONG ref;
     IPin *pin;
+    RECT rect;
 
     IBaseFilter_QueryInterface(filter, &IID_IBasicVideo, (void **)&video);
     IBaseFilter_FindPin(filter, L"VMR Input0", &pin);
@@ -2727,6 +2728,35 @@ static void test_basic_video(void)
     test_basic_video_source(video);
     test_basic_video_destination(video);
 
+    hr = IFilterGraph2_Disconnect(graph, &source.source.pin.IPin_iface);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+    hr = IFilterGraph2_Disconnect(graph, pin);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    vih.bmiHeader.biWidth = 16;
+    vih.bmiHeader.biHeight = 16;
+    hr = IFilterGraph2_ConnectDirect(graph, &source.source.pin.IPin_iface, pin, &req_mt);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    hr = IMemInputPin_GetAllocator(input, &allocator);
+    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+    if (hr == S_OK)
+    {
+        hr = IMemAllocator_SetProperties(allocator, &req_props, &ret_props);
+        ok(hr == S_OK, "Got hr %#x.\n", hr);
+        ok(!memcmp(&ret_props, &req_props, sizeof(req_props)), "Properties did not match.\n");
+        hr = IMemAllocator_Commit(allocator);
+        ok(hr == S_OK, "Got hr %#x.\n", hr);
+        IMemAllocator_Release(allocator);
+    }
+
+    check_source_position(video, 0, 0, 16, 16);
+
+    SetRect(&rect, 0, 0, 0, 0);
+    AdjustWindowRectEx(&rect, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW, FALSE, 0);
+    check_destination_position(video, 0, 0, max(16, GetSystemMetrics(SM_CXMIN) - (rect.right - rect.left)),
+            max(16, GetSystemMetrics(SM_CYMIN) - (rect.bottom - rect.top)));
+
 out:
     ref = IFilterGraph2_Release(graph);
     ok(!ref, "Got outstanding refcount %d.\n", ref);
diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c
index 69065d3576..005b10974f 100644
--- a/dlls/quartz/tests/vmr9.c
+++ b/dlls/quartz/tests/vmr9.c
@@ -3591,6 +3591,7 @@ static void test_basic_video(void)
     UINT count;
     ULONG ref;
     IPin *pin;
+    RECT rect;
 
     IBaseFilter_QueryInterface(filter, &IID_IBasicVideo, (void **)&video);
     IBaseFilter_FindPin(filter, L"VMR Input0", &pin);
@@ -3725,6 +3726,35 @@ static void test_basic_video(void)
     test_basic_video_source(video);
     test_basic_video_destination(video);
 
+    hr = IFilterGraph2_Disconnect(graph, &source.source.pin.IPin_iface);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+    hr = IFilterGraph2_Disconnect(graph, pin);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    vih.bmiHeader.biWidth = 16;
+    vih.bmiHeader.biHeight = 16;
+    hr = IFilterGraph2_ConnectDirect(graph, &source.source.pin.IPin_iface, pin, &req_mt);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+    hr = IMemInputPin_GetAllocator(input, &allocator);
+    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+    if (hr == S_OK)
+    {
+        hr = IMemAllocator_SetProperties(allocator, &req_props, &ret_props);
+        ok(hr == S_OK, "Got hr %#x.\n", hr);
+        ok(!memcmp(&ret_props, &req_props, sizeof(req_props)), "Properties did not match.\n");
+        hr = IMemAllocator_Commit(allocator);
+        ok(hr == S_OK, "Got hr %#x.\n", hr);
+        IMemAllocator_Release(allocator);
+    }
+
+    check_source_position(video, 0, 0, 16, 16);
+
+    SetRect(&rect, 0, 0, 0, 0);
+    AdjustWindowRectEx(&rect, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW, FALSE, 0);
+    check_destination_position(video, 0, 0, max(16, GetSystemMetrics(SM_CXMIN) - (rect.right - rect.left)),
+            max(16, GetSystemMetrics(SM_CYMIN) - (rect.bottom - rect.top)));
+
 out:
     ref = IFilterGraph2_Release(graph);
     ok(!ref, "Got outstanding refcount %d.\n", ref);
@@ -3831,7 +3861,7 @@ static void test_windowless_size(void)
     hr = IVMRWindowlessControl9_GetVideoPosition(windowless_control, NULL, &dst);
     ok(hr == S_OK, "Got hr %#x.\n", hr);
     SetRect(&expect, 0, 0, 0, 0);
-    todo_wine ok(EqualRect(&dst, &expect), "Got dest rect %s.\n", wine_dbgstr_rect(&dst));
+    ok(EqualRect(&dst, &expect), "Got dest rect %s.\n", wine_dbgstr_rect(&dst));
 
     SetRect(&src, 4, 6, 16, 12);
     hr = IVMRWindowlessControl9_SetVideoPosition(windowless_control, &src, NULL);
@@ -3844,7 +3874,7 @@ static void test_windowless_size(void)
     SetRect(&expect, 4, 6, 16, 12);
     ok(EqualRect(&src, &expect), "Got source rect %s.\n", wine_dbgstr_rect(&src));
     SetRect(&expect, 0, 0, 0, 0);
-    todo_wine ok(EqualRect(&dst, &expect), "Got dest rect %s.\n", wine_dbgstr_rect(&dst));
+    ok(EqualRect(&dst, &expect), "Got dest rect %s.\n", wine_dbgstr_rect(&dst));
 
     SetRect(&dst, 40, 60, 120, 160);
     hr = IVMRWindowlessControl9_SetVideoPosition(windowless_control, NULL, &dst);
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index e4db42223e..b6b55c70c5 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -519,12 +519,13 @@ static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE
     filter->VideoWidth = bitmap_header->biWidth;
     filter->VideoHeight = bitmap_header->biHeight;
     SetRect(&rect, 0, 0, filter->VideoWidth, filter->VideoHeight);
-    filter->window.src = filter->window.dst = rect;
+    filter->window.src = rect;
 
     AdjustWindowRectEx(&rect, GetWindowLongW(window, GWL_STYLE), FALSE,
             GetWindowLongW(window, GWL_EXSTYLE));
     SetWindowPos(window, NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top,
             SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
+    GetClientRect(window, &filter->window.dst);
 
     if (filter->mode
             || SUCCEEDED(hr = IVMRFilterConfig9_SetRenderingMode(&filter->IVMRFilterConfig9_iface, VMR9Mode_Windowed)))




More information about the wine-cvs mailing list