summaryrefslogtreecommitdiffstats
path: root/src/multimedia/qmultimediautils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/qmultimediautils.cpp')
-rw-r--r--src/multimedia/qmultimediautils.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/multimedia/qmultimediautils.cpp b/src/multimedia/qmultimediautils.cpp
index b08875592..9740b6d60 100644
--- a/src/multimedia/qmultimediautils.cpp
+++ b/src/multimedia/qmultimediautils.cpp
@@ -3,6 +3,7 @@
#include "qmultimediautils_p.h"
#include "qvideoframe.h"
+#include "qvideoframeformat.h"
#include <QtCore/qdir.h>
@@ -70,4 +71,30 @@ QUrl qMediaFromUserInput(QUrl url)
return url;
}
+bool qIsAutoHdrEnabled()
+{
+ static const bool autoHdrEnabled = qEnvironmentVariableIntValue("QT_MEDIA_AUTO_HDR");
+
+ return autoHdrEnabled;
+}
+
+QRhiSwapChain::Format qGetRequiredSwapChainFormat(const QVideoFrameFormat &format)
+{
+ constexpr auto sdrMaxLuminance = 100.0f;
+ const auto formatMaxLuminance = format.maxLuminance();
+
+ return formatMaxLuminance > sdrMaxLuminance ? QRhiSwapChain::HDRExtendedSrgbLinear
+ : QRhiSwapChain::SDR;
+}
+
+bool qShouldUpdateSwapChainFormat(QRhiSwapChain *swapChain,
+ QRhiSwapChain::Format requiredSwapChainFormat)
+{
+ if (!swapChain)
+ return false;
+
+ return qIsAutoHdrEnabled() && swapChain->format() != requiredSwapChainFormat
+ && swapChain->isFormatSupported(requiredSwapChainFormat);
+}
+
QT_END_NAMESPACE