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