From a9a332e265528d12ad05c5b3be23118ab712cc3d Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 12 Apr 2021 14:05:25 +0200 Subject: Clean up QVideoSink and it's platform implementation * Normalize ranges of brightness and friends to [-1, 1] and use floating point numbers. * Remove getters for values from the platform API, rather store them in the frontend. This simplifies the work that needs to be done on the backend side. Change-Id: I8d63dacaa6b2873b33e17fcd7831e41173109a7e Reviewed-by: Lars Knoll Reviewed-by: Doris Verria --- src/multimedia/video/qvideosink.cpp | 72 ++++++++++++++++++++++--------------- src/multimedia/video/qvideosink.h | 18 +++++----- 2 files changed, 51 insertions(+), 39 deletions(-) (limited to 'src/multimedia/video') diff --git a/src/multimedia/video/qvideosink.cpp b/src/multimedia/video/qvideosink.cpp index 93308112e..7cd786651 100644 --- a/src/multimedia/video/qvideosink.cpp +++ b/src/multimedia/video/qvideosink.cpp @@ -65,17 +65,15 @@ public: QVideoSink *q_ptr = nullptr; QPlatformVideoSink *videoSink = nullptr; QVideoSink::GraphicsType type = QVideoSink::Memory; - QVideoFrameFormat surfaceFormat; - QSize nativeResolution; - bool active = false; + bool fullScreen = false; WId window = 0; QRhi *rhi = nullptr; Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio; QRectF targetRect; - int brightness = 0; - int contrast = 0; - int saturation = 0; - int hue = 0; + float brightness = 0; + float contrast = 0; + float saturation = 0; + float hue = 0; Qt::BGMode backgroundMode = Qt::OpaqueMode; }; @@ -133,18 +131,12 @@ void QVideoSink::setGraphicsType(QVideoSink::GraphicsType type) d->videoSink->setGraphicsType(type); } -bool QVideoSink::isGraphicsTypeSupported(QVideoSink::GraphicsType type) -{ - // #### - return type == NativeWindow; -} - /*! Returns the native window id that the sink is currently rendering to. */ WId QVideoSink::nativeWindowId() const { - return d->videoSink->winId(); + return d->window; } /*! @@ -157,6 +149,9 @@ WId QVideoSink::nativeWindowId() const */ void QVideoSink::setNativeWindowId(WId id) { + if (d->window == id) + return; + d->window = id; d->videoSink->setWinId(id); } @@ -189,6 +184,9 @@ void QVideoSink::setRhi(QRhi *rhi) */ void QVideoSink::setFullScreen(bool fullscreen) { + if (d->fullScreen == fullscreen) + return; + d->fullScreen = fullscreen; d->videoSink->setFullScreen(fullscreen); } @@ -197,16 +195,18 @@ void QVideoSink::setFullScreen(bool fullscreen) */ bool QVideoSink::isFullscreen() const { - return d->videoSink->isFullScreen(); + return d->fullScreen; } Qt::AspectRatioMode QVideoSink::aspectRatioMode() const { - return d->videoSink->aspectRatioMode(); + return d->aspectRatioMode; } void QVideoSink::setAspectRatioMode(Qt::AspectRatioMode mode) { + if (d->aspectRatioMode == mode) + return; d->videoSink->setAspectRatioMode(mode); } @@ -217,47 +217,61 @@ QRectF QVideoSink::targetRect() const void QVideoSink::setTargetRect(const QRectF &rect) { - d->videoSink->setDisplayRect(rect.toRect()); + if (d->targetRect == rect) + return; d->targetRect = rect; + d->videoSink->setDisplayRect(rect.toRect()); } -int QVideoSink::brightness() const +float QVideoSink::brightness() const { - return d->videoSink->brightness(); + return d->brightness; } -void QVideoSink::setBrightness(int brightness) +void QVideoSink::setBrightness(float brightness) { + if (d->brightness == brightness) + return; + d->brightness = brightness; d->videoSink->setBrightness(brightness); } -int QVideoSink::contrast() const +float QVideoSink::contrast() const { - return d->videoSink->contrast(); + return d->contrast; } -void QVideoSink::setContrast(int contrast) +void QVideoSink::setContrast(float contrast) { + if (d->contrast == contrast) + return; + d->contrast = contrast; d->videoSink->setContrast(contrast); } -int QVideoSink::hue() const +float QVideoSink::hue() const { - return d->videoSink->hue(); + return d->hue; } -void QVideoSink::setHue(int hue) +void QVideoSink::setHue(float hue) { + if (d->hue == hue) + return; + d->hue = hue; d->videoSink->setHue(hue); } -int QVideoSink::saturation() const +float QVideoSink::saturation() const { - return d->videoSink->saturation(); + return d->saturation; } -void QVideoSink::setSaturation(int saturation) +void QVideoSink::setSaturation(float saturation) { + if (d->saturation == saturation) + return; + d->saturation = saturation; d->videoSink->setSaturation(saturation); } diff --git a/src/multimedia/video/qvideosink.h b/src/multimedia/video/qvideosink.h index e88a288c5..34b2f7bf9 100644 --- a/src/multimedia/video/qvideosink.h +++ b/src/multimedia/video/qvideosink.h @@ -71,8 +71,6 @@ public: GraphicsType graphicsType() const; void setGraphicsType(GraphicsType type); - static bool isGraphicsTypeSupported(GraphicsType type); - // setter sets graphics type to NativeWindow WId nativeWindowId() const; void setNativeWindowId(WId id); @@ -89,17 +87,17 @@ public: QRectF targetRect() const; void setTargetRect(const QRectF &rect); - int brightness() const; - void setBrightness(int brightness); + float brightness() const; + void setBrightness(float brightness); - int contrast() const; - void setContrast(int contrast); + float contrast() const; + void setContrast(float contrast); - int hue() const; - void setHue(int hue); + float hue() const; + void setHue(float hue); - int saturation() const; - void setSaturation(int saturation); + float saturation() const; + void setSaturation(float saturation); Qt::BGMode backgroundMode() const; void setBackgroundMode(Qt::BGMode mode); -- cgit v1.2.3