From: Brendan McGrath <bmcgrath@codeweavers.com> --- dlls/amstream/ddrawstream.c | 12 ++++++++++++ dlls/amstream/tests/amstream.c | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dlls/amstream/ddrawstream.c b/dlls/amstream/ddrawstream.c index 29e17f54542..384d0430b55 100644 --- a/dlls/amstream/ddrawstream.c +++ b/dlls/amstream/ddrawstream.c @@ -1060,6 +1060,7 @@ static HRESULT WINAPI ddraw_sink_ReceiveConnection(IPin *iface, IPin *peer, cons DWORD width; DWORD height; DDPIXELFORMAT pf = {sizeof(DDPIXELFORMAT)}; + HRESULT hr; TRACE("stream %p, peer %p, mt %p.\n", stream, peer, mt); strmbase_dump_media_type(mt); @@ -1137,6 +1138,17 @@ static HRESULT WINAPI ddraw_sink_ReceiveConnection(IPin *iface, IPin *peer, cons return VFW_E_INVALID_DIRECTION; } + if (video_info->bmiHeader.biHeight > 0) + { + hr = IPin_QueryAccept(peer, mt); + if (hr != S_OK) + { + TRACE("Rejecting filter that can't produce top-down images.\n"); + LeaveCriticalSection(&stream->cs); + return VFW_E_TYPE_NOT_ACCEPTED; + } + } + CopyMediaType(&stream->mt, mt); IPin_AddRef(stream->peer = peer); diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c index 35f4b72cbe3..74771ea2a13 100644 --- a/dlls/amstream/tests/amstream.c +++ b/dlls/amstream/tests/amstream.c @@ -4093,9 +4093,9 @@ static void test_ddrawstream_receive_connection(void) CopyMediaType(&mt, &rgb32_mt); ((VIDEOINFO*)mt.pbFormat)->bmiHeader.biHeight = -rgb32_video_info.bmiHeader.biHeight; hr = IPin_ReceiveConnection(pin, &source.source.pin.IPin_iface, &mt); - todo_wine ok(hr == VFW_E_TYPE_NOT_ACCEPTED, "Got hr %#lx.\n", hr); hr = IPin_Disconnect(pin); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); /* Return S_OK from QueryAccept */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10595