From 06a753c4d17e7dda17b8a9c82a6de806c9480dd0 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 22 Dec 2022 12:37:58 -0600 Subject: [PATCH] Fix streaming with non-B8G8R8A8 desktop mode --- src/platform/windows/display_base.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/platform/windows/display_base.cpp b/src/platform/windows/display_base.cpp index e6951cce47e..53b329cc763 100644 --- a/src/platform/windows/display_base.cpp +++ b/src/platform/windows/display_base.cpp @@ -318,9 +318,17 @@ int display_base_t::init(int framerate, const std::string &display_name) { DXGI_OUTDUPL_DESC dup_desc; dup.dup->GetDesc(&dup_desc); - format = dup_desc.ModeDesc.Format; - - BOOST_LOG(debug) << "Source format ["sv << format_str[dup_desc.ModeDesc.Format] << ']'; + BOOST_LOG(info) << "Desktop resolution ["sv << dup_desc.ModeDesc.Width << 'x' << dup_desc.ModeDesc.Height << ']'; + BOOST_LOG(info) << "Desktop format ["sv << format_str[dup_desc.ModeDesc.Format] << ']'; + + // For IDXGIOutput1::DuplicateOutput(), the format of the desktop image we receive from AcquireNextFrame() is + // converted to DXGI_FORMAT_B8G8R8A8_UNORM, even if the current mode (as returned in dup_desc) differs. + // See https://learn.microsoft.com/en-us/windows/win32/direct3ddxgi/desktop-dup-api for details. + // + // TODO: When we implement IDXGIOutput5, we will need to actually call AcquireNextFrame(), then call GetDesc() + // on the the texture we receive to determine which format in our list that it has decided to use. + format = DXGI_FORMAT_B8G8R8A8_UNORM; + BOOST_LOG(info) << "Capture format ["sv << format_str[format] << ']'; return 0; }