diff options
Diffstat (limited to 'src/qtmultimediaquicktools')
8 files changed, 54 insertions, 34 deletions
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp index 0cb6659ca..c51aec088 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp @@ -130,7 +130,7 @@ class FilterRunnableDeleter : public QRunnable { public: FilterRunnableDeleter(const QList<QVideoFilterRunnable *> &runnables) : m_runnables(runnables) { } - void run() Q_DECL_OVERRIDE { + void run() override { for (QVideoFilterRunnable *runnable : qAsConst(m_runnables)) delete runnable; } diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h index c84612960..4f1a90c8b 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render_p.h @@ -74,25 +74,25 @@ public: QDeclarativeVideoRendererBackend(QDeclarativeVideoOutput *parent); ~QDeclarativeVideoRendererBackend(); - bool init(QMediaService *service) Q_DECL_OVERRIDE; - void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) Q_DECL_OVERRIDE; - void releaseSource() Q_DECL_OVERRIDE; - void releaseControl() Q_DECL_OVERRIDE; - QSize nativeSize() const Q_DECL_OVERRIDE; - void updateGeometry() Q_DECL_OVERRIDE; - QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) Q_DECL_OVERRIDE; - QAbstractVideoSurface *videoSurface() const Q_DECL_OVERRIDE; - QRectF adjustedViewport() const Q_DECL_OVERRIDE; + bool init(QMediaService *service) override; + void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) override; + void releaseSource() override; + void releaseControl() override; + QSize nativeSize() const override; + void updateGeometry() override; + QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override; + QAbstractVideoSurface *videoSurface() const override; + QRectF adjustedViewport() const override; QOpenGLContext *glContext() const; friend class QSGVideoItemSurface; void present(const QVideoFrame &frame); void stop(); - void appendFilter(QAbstractVideoFilter *filter) Q_DECL_OVERRIDE; - void clearFilters() Q_DECL_OVERRIDE; - void releaseResources() Q_DECL_OVERRIDE; - void invalidateSceneGraph() Q_DECL_OVERRIDE; + void appendFilter(QAbstractVideoFilter *filter) override; + void clearFilters() override; + void releaseResources() override; + void invalidateSceneGraph() override; private: void scheduleDeleteFilterResources(); diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h index 942cc18d9..eb1814b07 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_window_p.h @@ -63,15 +63,15 @@ public: QDeclarativeVideoWindowBackend(QDeclarativeVideoOutput *parent); ~QDeclarativeVideoWindowBackend(); - bool init(QMediaService *service) Q_DECL_OVERRIDE; - void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) Q_DECL_OVERRIDE; - void releaseSource() Q_DECL_OVERRIDE; - void releaseControl() Q_DECL_OVERRIDE; - QSize nativeSize() const Q_DECL_OVERRIDE; - void updateGeometry() Q_DECL_OVERRIDE; - QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) Q_DECL_OVERRIDE; - QAbstractVideoSurface *videoSurface() const Q_DECL_OVERRIDE; - QRectF adjustedViewport() const Q_DECL_OVERRIDE; + bool init(QMediaService *service) override; + void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &changeData) override; + void releaseSource() override; + void releaseControl() override; + QSize nativeSize() const override; + void updateGeometry() override; + QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override; + QAbstractVideoSurface *videoSurface() const override; + QRectF adjustedViewport() const override; private: QPointer<QVideoWindowControl> m_videoWindowControl; diff --git a/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp b/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp index 0dfa11ab9..d039e1e0b 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp @@ -113,11 +113,19 @@ protected: class QSGVideoMaterialShader_RGB_swizzle : public QSGVideoMaterialShader_RGB { public: - QSGVideoMaterialShader_RGB_swizzle() - : QSGVideoMaterialShader_RGB() + QSGVideoMaterialShader_RGB_swizzle(bool hasAlpha) + : m_hasAlpha(hasAlpha) { setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag")); } + +protected: + void initialize() override { + QSGVideoMaterialShader_RGB::initialize(); + program()->setUniformValue(program()->uniformLocation("hasAlpha"), GLboolean(m_hasAlpha)); + } + + bool m_hasAlpha; }; @@ -145,7 +153,8 @@ public: } QSGMaterialShader *createShader() const override { - return needsSwizzling() ? new QSGVideoMaterialShader_RGB_swizzle + const bool hasAlpha = m_format.pixelFormat() == QVideoFrame::Format_ARGB32; + return needsSwizzling() ? new QSGVideoMaterialShader_RGB_swizzle(hasAlpha) : new QSGVideoMaterialShader_RGB; } diff --git a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp index a26d59532..f5545afc7 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp @@ -108,11 +108,19 @@ protected: class QSGVideoMaterialShader_Texture_swizzle : public QSGVideoMaterialShader_Texture { public: - QSGVideoMaterialShader_Texture_swizzle() - : QSGVideoMaterialShader_Texture() + QSGVideoMaterialShader_Texture_swizzle(bool hasAlpha) + : m_hasAlpha(hasAlpha) { setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag")); } + +protected: + void initialize() override { + QSGVideoMaterialShader_Texture::initialize(); + program()->setUniformValue(program()->uniformLocation("hasAlpha"), GLboolean(m_hasAlpha)); + } + + int m_hasAlpha; }; @@ -138,7 +146,8 @@ public: } QSGMaterialShader *createShader() const override { - return needsSwizzling() ? new QSGVideoMaterialShader_Texture_swizzle + const bool hasAlpha = m_format.pixelFormat() == QVideoFrame::Format_ARGB32; + return needsSwizzling() ? new QSGVideoMaterialShader_Texture_swizzle(hasAlpha) : new QSGVideoMaterialShader_Texture; } diff --git a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp index b04c6b38b..9eff9dbd6 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp @@ -120,9 +120,9 @@ public: setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/uyvyvideo.frag")); } - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) Q_DECL_OVERRIDE; + void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - char const *const *attributeNames() const Q_DECL_OVERRIDE { + char const *const *attributeNames() const override { static const char *names[] = { "qt_VertexPosition", "qt_VertexTexCoord", @@ -132,7 +132,7 @@ public: } protected: - void initialize() Q_DECL_OVERRIDE { + void initialize() override { m_id_matrix = program()->uniformLocation("qt_Matrix"); m_id_yTexture = program()->uniformLocation("yTexture"); m_id_uvTexture = program()->uniformLocation("uvTexture"); diff --git a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro index e4e157a54..bffdc6ec2 100644 --- a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro +++ b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro @@ -1,4 +1,4 @@ -TARGET = QtMultimediaQuick_p +TARGET = QtMultimediaQuick QT = core quick multimedia-private CONFIG += internal_module diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag b/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag index f01dc86a0..99caa19fb 100644 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag +++ b/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag @@ -1,8 +1,10 @@ uniform sampler2D rgbTexture; uniform lowp float opacity; varying highp vec2 qt_TexCoord; +uniform bool hasAlpha; void main() { - gl_FragColor = vec4(texture2D(rgbTexture, qt_TexCoord).bgr, 1.0) * opacity; + lowp vec4 v = texture2D(rgbTexture, qt_TexCoord); + gl_FragColor = vec4(v.bgr, hasAlpha ? v.a : 1.0) * opacity; } |