summaryrefslogtreecommitdiffstats
path: root/src/multimedia/video
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-04-12 14:05:25 +0200
committerLars Knoll <lars.knoll@qt.io>2021-04-16 10:50:06 +0000
commita9a332e265528d12ad05c5b3be23118ab712cc3d (patch)
treeb10e19d8b8ca07f9d5ca77ce66b039b3994843a8 /src/multimedia/video
parent301c0f6fd94e0459fd06cac70f25bbbaea1cc92e (diff)
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 <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
Diffstat (limited to 'src/multimedia/video')
-rw-r--r--src/multimedia/video/qvideosink.cpp72
-rw-r--r--src/multimedia/video/qvideosink.h18
2 files changed, 51 insertions, 39 deletions
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);