diff options
author | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2020-06-04 16:31:22 +0200 |
---|---|---|
committer | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2020-06-04 18:40:03 +0200 |
commit | cf815557eef1d1d34e20d13df24baae5e2f138ac (patch) | |
tree | 6a96e21bef8ba08c08dac0be36dbc065bbaef4f7 /src | |
parent | 0e3b08d2b8cec6b6489cb99de3f58d1ccdb439d8 (diff) |
RHI: Remove gl code from video nodes
Now QSGMaterialShader handles rhi textures too.
Task-number: QTBUG-78678
Change-Id: I410185c80bd104741fd5b52deeb87eb97531410a
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src')
47 files changed, 79 insertions, 1051 deletions
diff --git a/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp b/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp index 5746a644a..c5c82de4a 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp @@ -38,12 +38,8 @@ ****************************************************************************/ #include "qsgvideonode_rgb_p.h" #include "qsgvideotexture_p.h" -#include <QtQuick/qsgtexturematerial.h> #include <QtQuick/qsgmaterial.h> #include <QtCore/qmutex.h> -#include <QtGui/QOpenGLContext> -#include <QtGui/QOpenGLFunctions> -#include <QtOpenGL/QOpenGLShaderProgram> QT_BEGIN_NAMESPACE @@ -71,71 +67,13 @@ QSGVideoNode *QSGVideoNodeFactory_RGB::createNode(const QVideoSurfaceFormat &for return 0; } - -class QSGVideoMaterialShader_RGB : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_RGB() - : QSGMaterialShader(), - m_id_matrix(-1), - m_id_width(-1), - m_id_rgbTexture(-1), - m_id_opacity(-1) - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo_padded.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_width = program()->uniformLocation("width"); - m_id_rgbTexture = program()->uniformLocation("rgbTexture"); - m_id_opacity = program()->uniformLocation("opacity"); - } - - int m_id_matrix; - int m_id_width; - int m_id_rgbTexture; - int m_id_opacity; -}; - -class QSGVideoMaterialShader_RGB_swizzle : public QSGVideoMaterialShader_RGB -{ -public: - 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; -}; - -class QSGVideoMaterialRhiShader_RGB : public QSGMaterialRhiShader +class QSGVideoMaterialRhiShader_RGB : public QSGMaterialShader { public: QSGVideoMaterialRhiShader_RGB() { - setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb")); - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb")); + setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.vert.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.frag.qsb")); } bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, @@ -150,45 +88,29 @@ class QSGVideoMaterial_RGB : public QSGMaterial public: QSGVideoMaterial_RGB(const QVideoSurfaceFormat &format) : m_format(format), - m_textureId(0), - m_opacity(1.0), - m_width(1.0) + m_opacity(1.0) { setFlag(Blending, false); - setFlag(SupportsRhiShader, true); - } - - ~QSGVideoMaterial_RGB() - { - if (m_textureId) - QOpenGLContext::currentContext()->functions()->glDeleteTextures(1, &m_textureId); } QSGMaterialType *type() const override { - static QSGMaterialType normalType, swizzleType; - return needsSwizzling() ? &swizzleType : &normalType; + static QSGMaterialType normalType; + return &normalType; } QSGMaterialShader *createShader() const override { - if (flags().testFlag(RhiShaderWanted)) - return new QSGVideoMaterialRhiShader_RGB; - - const bool hasAlpha = m_format.pixelFormat() == QVideoFrame::Format_ARGB32; - return needsSwizzling() ? new QSGVideoMaterialShader_RGB_swizzle(hasAlpha) - : new QSGVideoMaterialShader_RGB; + return new QSGVideoMaterialRhiShader_RGB; } int compare(const QSGMaterial *other) const override { const QSGVideoMaterial_RGB *m = static_cast<const QSGVideoMaterial_RGB *>(other); - if (!m_textureId) - return 1; - - return m_textureId - m->m_textureId; + const qint64 diff = m_texture->comparisonKey() - m->m_texture->comparisonKey(); + return diff < 0 ? -1 : (diff > 0 ? 1 : 0); } void updateBlending() { - setFlag(Blending, qFuzzyCompare(m_opacity, qreal(1.0)) ? false : true); + setFlag(Blending, !qFuzzyCompare(m_opacity, float(1.0))); } void setVideoFrame(const QVideoFrame &frame) { @@ -196,88 +118,17 @@ public: m_frame = frame; } - void bind() - { - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - - QMutexLocker lock(&m_frameMutex); - if (m_frame.isValid()) { - if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) { - QSize textureSize = m_frame.size(); - - int stride = m_frame.bytesPerLine(); - switch (m_frame.pixelFormat()) { - case QVideoFrame::Format_RGB565: - stride /= 2; - break; - default: - stride /= 4; - } - - m_width = qreal(m_frame.width()) / stride; - textureSize.setWidth(stride); - - if (m_textureSize != textureSize) { - if (!m_textureSize.isEmpty()) - functions->glDeleteTextures(1, &m_textureId); - functions->glGenTextures(1, &m_textureId); - m_textureSize = textureSize; - } - - GLint dataType = GL_UNSIGNED_BYTE; - GLint dataFormat = GL_RGBA; - - if (m_frame.pixelFormat() == QVideoFrame::Format_RGB565) { - dataType = GL_UNSIGNED_SHORT_5_6_5; - dataFormat = GL_RGB; - } - - GLint previousAlignment; - functions->glGetIntegerv(GL_UNPACK_ALIGNMENT, &previousAlignment); - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - functions->glActiveTexture(GL_TEXTURE0); - functions->glBindTexture(GL_TEXTURE_2D, m_textureId); - functions->glTexImage2D(GL_TEXTURE_2D, 0, dataFormat, - m_textureSize.width(), m_textureSize.height(), - 0, dataFormat, dataType, m_frame.bits()); - - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, previousAlignment); - - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - m_frame.unmap(); - } - m_frame = QVideoFrame(); - } else { - functions->glActiveTexture(GL_TEXTURE0); - functions->glBindTexture(GL_TEXTURE_2D, m_textureId); - } - } - QVideoFrame m_frame; QMutex m_frameMutex; QSize m_textureSize; QVideoSurfaceFormat m_format; - GLuint m_textureId; - qreal m_opacity; - GLfloat m_width; + float m_opacity; QScopedPointer<QSGVideoTexture> m_texture; - -private: - bool needsSwizzling() const { - return m_format.pixelFormat() == QVideoFrame::Format_RGB32 - || m_format.pixelFormat() == QVideoFrame::Format_ARGB32; - } }; bool QSGVideoMaterialRhiShader_RGB::updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) { - Q_UNUSED(newMaterial); Q_UNUSED(oldMaterial); bool changed = false; @@ -289,8 +140,10 @@ bool QSGVideoMaterialRhiShader_RGB::updateUniformData(RenderState &state, QSGMat } if (state.isOpacityDirty()) { - const float opacity = state.opacity(); - memcpy(buf->data() + 64, &opacity, 4); + auto m = static_cast<QSGVideoMaterial_RGB *>(newMaterial); + m->m_opacity = state.opacity(); + m->updateBlending(); + memcpy(buf->data() + 64, &m->m_opacity, 4); changed = true; } @@ -311,7 +164,6 @@ void QSGVideoMaterialRhiShader_RGB::updateSampledImage(RenderState &state, int b m->m_frameMutex.lock(); auto frame = m->m_frame; - m->m_frameMutex.unlock(); if (frame.pixelFormat() == QVideoFrame::Format_RGB565) // Format_RGB565 requires GL_UNSIGNED_SHORT_5_6_5 frame = frame.image().convertToFormat(QImage::Format_RGBA8888_Premultiplied); @@ -327,6 +179,7 @@ void QSGVideoMaterialRhiShader_RGB::updateSampledImage(RenderState &state, int b m->m_texture->setData(format, frame.size(), frame.bits(), frame.bytesPerLine() * frame.height()); frame.unmap(); } + m->m_frameMutex.unlock(); m->m_texture->commitTextureOperations(state.rhi(), state.resourceUpdateBatch()); *texture = m->m_texture.data(); @@ -350,25 +203,4 @@ void QSGVideoNode_RGB::setCurrentFrame(const QVideoFrame &frame, FrameFlags) markDirty(DirtyMaterial); } -void QSGVideoMaterialShader_RGB::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - QSGVideoMaterial_RGB *mat = static_cast<QSGVideoMaterial_RGB *>(newMaterial); - program()->setUniformValue(m_id_rgbTexture, 0); - - mat->bind(); - - program()->setUniformValue(m_id_width, mat->m_width); - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - mat->updateBlending(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - QT_END_NAMESPACE diff --git a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp index a5206eefb..de7b8efd9 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp @@ -38,12 +38,8 @@ ****************************************************************************/ #include "qsgvideonode_texture_p.h" #include "qsgvideotexture_p.h" -#include <QtQuick/qsgtexturematerial.h> #include <QtQuick/qsgmaterial.h> #include <QtCore/qmutex.h> -#include <QtGui/QOpenGLContext> -#include <QtGui/QOpenGLFunctions> -#include <QtOpenGL/QOpenGLShaderProgram> #include <QtMultimedia/private/qtmultimediaglobal_p.h> QT_BEGIN_NAMESPACE @@ -75,65 +71,13 @@ QSGVideoNode *QSGVideoNodeFactory_Texture::createNode(const QVideoSurfaceFormat return 0; } - -class QSGVideoMaterialShader_Texture : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_Texture() - : QSGMaterialShader() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/monoplanarvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_Texture = program()->uniformLocation("rgbTexture"); - m_id_opacity = program()->uniformLocation("opacity"); - } - - int m_id_matrix; - int m_id_Texture; - int m_id_opacity; -}; - -class QSGVideoMaterialShader_Texture_swizzle : public QSGVideoMaterialShader_Texture -{ -public: - 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; -}; - -class QSGVideoMaterialRhiShader_Texture : public QSGMaterialRhiShader +class QSGVideoMaterialRhiShader_Texture : public QSGMaterialShader { public: QSGVideoMaterialRhiShader_Texture() { - setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb")); - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb")); + setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.vert.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.frag.qsb")); } bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, @@ -148,7 +92,7 @@ class QSGVideoMaterialRhiShader_Texture_swizzle : public QSGVideoMaterialRhiShad public: QSGVideoMaterialRhiShader_Texture_swizzle() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/bgra.frag.qsb")); } }; @@ -157,16 +101,13 @@ class QSGVideoMaterial_Texture : public QSGMaterial public: QSGVideoMaterial_Texture(const QVideoSurfaceFormat &format) : m_format(format), - m_textureId(0), m_opacity(1.0) { setFlag(Blending, false); - setFlag(SupportsRhiShader, true); } ~QSGVideoMaterial_Texture() { - m_frame = QVideoFrame(); } QSGMaterialType *type() const override { @@ -175,34 +116,19 @@ public: } QSGMaterialShader *createShader() const override { - if (flags().testFlag(RhiShaderWanted)) - return needsSwizzling() ? new QSGVideoMaterialRhiShader_Texture_swizzle - : new QSGVideoMaterialRhiShader_Texture; - - const bool hasAlpha = m_format.pixelFormat() == QVideoFrame::Format_ARGB32; - return needsSwizzling() ? new QSGVideoMaterialShader_Texture_swizzle(hasAlpha) - : new QSGVideoMaterialShader_Texture; + return needsSwizzling() ? new QSGVideoMaterialRhiShader_Texture_swizzle + : new QSGVideoMaterialRhiShader_Texture; } int compare(const QSGMaterial *other) const override { const QSGVideoMaterial_Texture *m = static_cast<const QSGVideoMaterial_Texture *>(other); - if (!m_textureId) - return 1; - - int diff = m_textureId - m->m_textureId; - if (diff) - return diff; - - diff = m_format.pixelFormat() - m->m_format.pixelFormat(); - if (diff) - return diff; - - return (m_opacity > m->m_opacity) ? 1 : -1; + const qint64 diff = m_texture->comparisonKey() - m->m_texture->comparisonKey(); + return diff < 0 ? -1 : (diff > 0 ? 1 : 0); } void updateBlending() { - setFlag(Blending, qFuzzyCompare(m_opacity, qreal(1.0)) ? false : true); + setFlag(Blending, qFuzzyCompare(m_opacity, float(1.0)) ? false : true); } void setVideoFrame(const QVideoFrame &frame) { @@ -210,29 +136,11 @@ public: m_frame = frame; } - void bind() - { - QMutexLocker lock(&m_frameMutex); - if (m_frame.isValid()) { - m_textureId = m_frame.handle().toUInt(); - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - functions->glBindTexture(GL_TEXTURE_2D, m_textureId); - - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - } else { - m_textureId = 0; - } - } - QVideoFrame m_frame; QMutex m_frameMutex; - QSize m_textureSize; QVideoSurfaceFormat m_format; quint64 m_textureId; - qreal m_opacity; + float m_opacity; QScopedPointer<QSGVideoTexture> m_texture; private: @@ -245,7 +153,6 @@ private: bool QSGVideoMaterialRhiShader_Texture::updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) { - Q_UNUSED(newMaterial); Q_UNUSED(oldMaterial); bool changed = false; @@ -257,8 +164,10 @@ bool QSGVideoMaterialRhiShader_Texture::updateUniformData(RenderState &state, QS } if (state.isOpacityDirty()) { - const float opacity = state.opacity(); - memcpy(buf->data() + 64, &opacity, 4); + auto m = static_cast<QSGVideoMaterial_Texture *>(newMaterial); + m->m_opacity = state.opacity(); + m->updateBlending(); + memcpy(buf->data() + 64, &m->m_opacity, 4); changed = true; } @@ -306,24 +215,4 @@ void QSGVideoNode_Texture::setCurrentFrame(const QVideoFrame &frame, FrameFlags) markDirty(DirtyMaterial); } -void QSGVideoMaterialShader_Texture::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - QSGVideoMaterial_Texture *mat = static_cast<QSGVideoMaterial_Texture *>(newMaterial); - program()->setUniformValue(m_id_Texture, 0); - - mat->bind(); - - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - mat->updateBlending(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - QT_END_NAMESPACE diff --git a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp index 006704a23..5d5147cc2 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp @@ -39,33 +39,7 @@ #include "qsgvideonode_yuv_p.h" #include "qsgvideotexture_p.h" #include <QtCore/qmutex.h> -#include <QtQuick/qsgtexturematerial.h> #include <QtQuick/qsgmaterial.h> -#include <QtGui/QOpenGLContext> -#include <QtGui/QOpenGLFunctions> -#include <QtOpenGL/QOpenGLShaderProgram> - -#ifndef GL_RED -#define GL_RED 0x1903 -#endif -#ifndef GL_GREEN -#define GL_GREEN 0x1904 -#endif -#ifndef GL_RG -#define GL_RG 0x8227 -#endif -#ifndef GL_TEXTURE_SWIZZLE_R -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#endif -#ifndef GL_TEXTURE_SWIZZLE_G -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#endif -#ifndef GL_TEXTURE_SWIZZLE_B -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#endif -#ifndef GL_TEXTURE_SWIZZLE_A -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#endif QT_BEGIN_NAMESPACE @@ -91,136 +65,12 @@ QSGVideoNode *QSGVideoNodeFactory_YUV::createNode(const QVideoSurfaceFormat &for return 0; } - -class QSGVideoMaterialShader_YUV_BiPlanar : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_YUV_BiPlanar() - : QSGMaterialShader() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_plane1Width = program()->uniformLocation("plane1Width"); - m_id_plane2Width = program()->uniformLocation("plane2Width"); - m_id_plane1Texture = program()->uniformLocation("plane1Texture"); - m_id_plane2Texture = program()->uniformLocation("plane2Texture"); - m_id_colorMatrix = program()->uniformLocation("colorMatrix"); - m_id_opacity = program()->uniformLocation("opacity"); - } - - int m_id_matrix; - int m_id_plane1Width; - int m_id_plane2Width; - int m_id_plane1Texture; - int m_id_plane2Texture; - int m_id_colorMatrix; - int m_id_opacity; -}; - -class QSGVideoMaterialShader_UYVY : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_UYVY() - : QSGMaterialShader() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/monoplanarvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/uyvyvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_yTexture = program()->uniformLocation("yTexture"); - m_id_uvTexture = program()->uniformLocation("uvTexture"); - m_id_colorMatrix = program()->uniformLocation("colorMatrix"); - m_id_opacity = program()->uniformLocation("opacity"); - QSGMaterialShader::initialize(); - } - - int m_id_matrix; - int m_id_yTexture; - int m_id_uvTexture; - int m_id_colorMatrix; - int m_id_opacity; -}; - - -class QSGVideoMaterialShader_YUYV : public QSGVideoMaterialShader_UYVY -{ -public: - QSGVideoMaterialShader_YUYV() - : QSGVideoMaterialShader_UYVY() - { - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/yuyvvideo.frag")); - } -}; - -class QSGVideoMaterialShader_YUV_BiPlanar_swizzle : public QSGVideoMaterialShader_YUV_BiPlanar -{ -public: - QSGVideoMaterialShader_YUV_BiPlanar_swizzle() - : QSGVideoMaterialShader_YUV_BiPlanar() - { - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag")); - } -}; - -class QSGVideoMaterialShader_YUV_TriPlanar : public QSGVideoMaterialShader_YUV_BiPlanar -{ -public: - QSGVideoMaterialShader_YUV_TriPlanar() - : QSGVideoMaterialShader_YUV_BiPlanar() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - -protected: - void initialize() override { - m_id_plane3Width = program()->uniformLocation("plane3Width"); - m_id_plane3Texture = program()->uniformLocation("plane3Texture"); - QSGVideoMaterialShader_YUV_BiPlanar::initialize(); - } - - int m_id_plane3Width; - int m_id_plane3Texture; -}; - -class QSGVideoMaterialRhiShader_YUV : public QSGMaterialRhiShader +class QSGVideoMaterialRhiShader_YUV : public QSGMaterialShader { public: QSGVideoMaterialRhiShader_YUV() { - setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb")); + setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders/yuv.vert.qsb")); } bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, @@ -232,7 +82,7 @@ public: virtual void mapFrame(QSGVideoMaterial_YUV *) = 0; protected: - GLfloat m_planeWidth[3] = {0, 0, 0}; + qreal m_planeWidth[3] = {0, 0, 0}; QMatrix4x4 m_colorMatrix; }; @@ -241,7 +91,7 @@ class QSGVideoMaterialRhiShader_UYVY : public QSGVideoMaterialRhiShader_YUV public: QSGVideoMaterialRhiShader_UYVY() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/uyvy.frag.qsb")); } void mapFrame(QSGVideoMaterial_YUV *m) override; @@ -252,7 +102,7 @@ class QSGVideoMaterialRhiShader_YUYV : public QSGVideoMaterialRhiShader_UYVY public: QSGVideoMaterialRhiShader_YUYV() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/yuyv.frag.qsb")); } }; @@ -261,7 +111,7 @@ class QSGVideoMaterialRhiShader_YUV_YV : public QSGVideoMaterialRhiShader_YUV public: QSGVideoMaterialRhiShader_YUV_YV() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb")); } void mapFrame(QSGVideoMaterial_YUV *m) override; @@ -272,7 +122,7 @@ class QSGVideoMaterialRhiShader_NV12 : public QSGVideoMaterialRhiShader_YUV public: QSGVideoMaterialRhiShader_NV12() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/nv12.frag.qsb")); } void mapFrame(QSGVideoMaterial_YUV *m) override; @@ -283,7 +133,7 @@ class QSGVideoMaterialRhiShader_NV21 : public QSGVideoMaterialRhiShader_NV12 public: QSGVideoMaterialRhiShader_NV21() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/nv21.frag.qsb")); } }; @@ -291,7 +141,6 @@ class QSGVideoMaterial_YUV : public QSGMaterial { public: QSGVideoMaterial_YUV(const QVideoSurfaceFormat &format); - ~QSGVideoMaterial_YUV(); QSGMaterialType *type() const override { static QSGMaterialType biPlanarType, biPlanarSwizzleType, triPlanarType, uyvyType, yuyvType; @@ -311,51 +160,34 @@ public: } QSGMaterialShader *createShader() const override { - if (flags().testFlag(RhiShaderWanted)) { - switch (m_format.pixelFormat()) { - case QVideoFrame::Format_NV12: - return new QSGVideoMaterialRhiShader_NV12; - case QVideoFrame::Format_NV21: - return new QSGVideoMaterialRhiShader_NV21; - case QVideoFrame::Format_UYVY: - return new QSGVideoMaterialRhiShader_UYVY; - case QVideoFrame::Format_YUYV: - return new QSGVideoMaterialRhiShader_YUYV; - default: // Currently: YUV420P, YUV422P and YV12 - return new QSGVideoMaterialRhiShader_YUV_YV; - } - } - switch (m_format.pixelFormat()) { case QVideoFrame::Format_NV12: - return new QSGVideoMaterialShader_YUV_BiPlanar; + return new QSGVideoMaterialRhiShader_NV12; case QVideoFrame::Format_NV21: - return new QSGVideoMaterialShader_YUV_BiPlanar_swizzle; + return new QSGVideoMaterialRhiShader_NV21; case QVideoFrame::Format_UYVY: - return new QSGVideoMaterialShader_UYVY; + return new QSGVideoMaterialRhiShader_UYVY; case QVideoFrame::Format_YUYV: - return new QSGVideoMaterialShader_YUYV; + return new QSGVideoMaterialRhiShader_YUYV; default: // Currently: YUV420P, YUV422P and YV12 - return new QSGVideoMaterialShader_YUV_TriPlanar; + return new QSGVideoMaterialRhiShader_YUV_YV; } } int compare(const QSGMaterial *other) const override { const QSGVideoMaterial_YUV *m = static_cast<const QSGVideoMaterial_YUV *>(other); - if (!m_textureIds[0]) - return 1; - - int d = m_textureIds[0] - m->m_textureIds[0]; - if (d) - return d; - else if ((d = m_textureIds[1] - m->m_textureIds[1]) != 0) - return d; - else - return m_textureIds[2] - m->m_textureIds[2]; + + qint64 diff = m_textures[0]->comparisonKey() - m->m_textures[0]->comparisonKey(); + if (!diff) + diff = m_textures[1]->comparisonKey() - m->m_textures[1]->comparisonKey(); + if (!diff) + diff = m_textures[2]->comparisonKey() - m->m_textures[2]->comparisonKey(); + + return diff < 0 ? -1 : (diff > 0 ? 1 : 0); } void updateBlending() { - setFlag(Blending, qFuzzyCompare(m_opacity, qreal(1.0)) ? false : true); + setFlag(Blending, !qFuzzyCompare(m_opacity, float(1.0))); } void setCurrentFrame(const QVideoFrame &frame) { @@ -363,22 +195,12 @@ public: m_frame = frame; } - void bind(); - void bindTexture(int id, int w, int h, const uchar *bits, GLenum format); - QVideoSurfaceFormat m_format; - QSize m_textureSize; - int m_planeCount; - - GLuint m_textureIds[3]; - GLfloat m_planeWidth[3]; - - qreal m_opacity; + float m_planeWidth[3]; + float m_opacity; QMatrix4x4 m_colorMatrix; - QVideoFrame m_frame; QMutex m_frameMutex; - QScopedPointer<QSGVideoTexture> m_textures[3]; }; @@ -403,8 +225,9 @@ bool QSGVideoMaterialRhiShader_YUV::updateUniformData(RenderState &state, QSGMat m_colorMatrix = m->m_colorMatrix; if (state.isOpacityDirty()) { - const float opacity = state.opacity(); - memcpy(buf->data() + 64 + 64, &opacity, 4); + m->m_opacity = state.opacity(); + m->updateBlending(); + memcpy(buf->data() + 64 + 64, &m->m_opacity, 4); changed = true; } @@ -413,7 +236,9 @@ bool QSGVideoMaterialRhiShader_YUV::updateUniformData(RenderState &state, QSGMat m->m_textures[1].reset(new QSGVideoTexture); } + m->m_frameMutex.lock(); mapFrame(m); + m->m_frameMutex.unlock(); if (m->m_planeWidth[0] != m_planeWidth[0] || m->m_planeWidth[1] != m_planeWidth[1] @@ -516,26 +341,6 @@ QSGVideoMaterial_YUV::QSGVideoMaterial_YUV(const QVideoSurfaceFormat &format) : m_format(format), m_opacity(1.0) { - setFlag(SupportsRhiShader, true); - memset(m_textureIds, 0, sizeof(m_textureIds)); - - switch (format.pixelFormat()) { - case QVideoFrame::Format_NV12: - case QVideoFrame::Format_NV21: - m_planeCount = 2; - break; - case QVideoFrame::Format_YUV420P: - case QVideoFrame::Format_YV12: - case QVideoFrame::Format_YUV422P: - m_planeCount = 3; - break; - case QVideoFrame::Format_UYVY: - case QVideoFrame::Format_YUYV: - default: - m_planeCount = 2; - break; - } - switch (format.yCbCrColorSpace()) { case QVideoSurfaceFormat::YCbCr_JPEG: m_colorMatrix = QMatrix4x4( @@ -563,120 +368,6 @@ QSGVideoMaterial_YUV::QSGVideoMaterial_YUV(const QVideoSurfaceFormat &format) : setFlag(Blending, false); } -QSGVideoMaterial_YUV::~QSGVideoMaterial_YUV() -{ - if (!m_textureSize.isEmpty()) { - if (QOpenGLContext *current = QOpenGLContext::currentContext()) - current->functions()->glDeleteTextures(m_planeCount, m_textureIds); - else - qWarning() << "QSGVideoMaterial_YUV: Cannot obtain GL context, unable to delete textures"; - } -} - -void QSGVideoMaterial_YUV::bind() -{ - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - QSurfaceFormat::OpenGLContextProfile profile = QOpenGLContext::currentContext()->format().profile(); - - QMutexLocker lock(&m_frameMutex); - if (m_frame.isValid()) { - if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) { - int fw = m_frame.width(); - int fh = m_frame.height(); - - // Frame has changed size, recreate textures... - if (m_textureSize != m_frame.size()) { - if (!m_textureSize.isEmpty()) - functions->glDeleteTextures(m_planeCount, m_textureIds); - functions->glGenTextures(m_planeCount, m_textureIds); - m_textureSize = m_frame.size(); - } - - GLint previousAlignment; - const GLenum texFormat1 = (profile == QSurfaceFormat::CoreProfile) ? GL_RED : GL_LUMINANCE; - const GLenum texFormat2 = (profile == QSurfaceFormat::CoreProfile) ? GL_RG : GL_LUMINANCE_ALPHA; - - functions->glGetIntegerv(GL_UNPACK_ALIGNMENT, &previousAlignment); - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - if (m_format.pixelFormat() == QVideoFrame::Format_UYVY - || m_format.pixelFormat() == QVideoFrame::Format_YUYV) { - int fw = m_frame.width(); - - m_planeWidth[0] = fw; - // In YUYV texture the UV plane appears with the 1/2 of image and Y width. - m_planeWidth[1] = fw / 2; - functions->glActiveTexture(GL_TEXTURE1); - // Either r,b (YUYV) or g,a (UYVY) values are used as source of UV. - // Additionally U and V are set per 2 pixels hence only 1/2 of image width is used. - // Interpreting this properly in shaders allows to not copy or not make conditionals inside shaders, - // only interpretation of data changes. - bindTexture(m_textureIds[1], m_planeWidth[1], m_frame.height(), m_frame.bits(), GL_RGBA); - functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit - // Either red (YUYV) or alpha (UYVY) values are used as source of Y - bindTexture(m_textureIds[0], m_planeWidth[0], m_frame.height(), m_frame.bits(), texFormat2); - } else if (m_format.pixelFormat() == QVideoFrame::Format_NV12 - || m_format.pixelFormat() == QVideoFrame::Format_NV21) { - const int y = 0; - const int uv = 1; - - m_planeWidth[0] = m_planeWidth[1] = qreal(fw) / m_frame.bytesPerLine(y); - - functions->glActiveTexture(GL_TEXTURE1); - bindTexture(m_textureIds[1], m_frame.bytesPerLine(uv) / 2, fh / 2, m_frame.bits(uv), texFormat2); - functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit - bindTexture(m_textureIds[0], m_frame.bytesPerLine(y), fh, m_frame.bits(y), texFormat1); - - } else { // YUV420P || YV12 || YUV422P - const int y = 0; - const int u = m_frame.pixelFormat() == QVideoFrame::Format_YV12 ? 2 : 1; - const int v = m_frame.pixelFormat() == QVideoFrame::Format_YV12 ? 1 : 2; - - m_planeWidth[0] = qreal(fw) / m_frame.bytesPerLine(y); - m_planeWidth[1] = m_planeWidth[2] = qreal(fw) / (2 * m_frame.bytesPerLine(u)); - - const int uvHeight = m_frame.pixelFormat() == QVideoFrame::Format_YUV422P ? fh : fh / 2; - - functions->glActiveTexture(GL_TEXTURE1); - bindTexture(m_textureIds[1], m_frame.bytesPerLine(u), uvHeight, m_frame.bits(u), texFormat1); - functions->glActiveTexture(GL_TEXTURE2); - bindTexture(m_textureIds[2], m_frame.bytesPerLine(v), uvHeight, m_frame.bits(v), texFormat1); - functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit - bindTexture(m_textureIds[0], m_frame.bytesPerLine(y), fh, m_frame.bits(y), texFormat1); - } - - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, previousAlignment); - m_frame.unmap(); - } - - m_frame = QVideoFrame(); - } else { - // Go backwards to finish with GL_TEXTURE0 - for (int i = m_planeCount - 1; i >= 0; --i) { - functions->glActiveTexture(GL_TEXTURE0 + i); - functions->glBindTexture(GL_TEXTURE_2D, m_textureIds[i]); - } - } -} - -void QSGVideoMaterial_YUV::bindTexture(int id, int w, int h, const uchar *bits, GLenum format) -{ - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - functions->glBindTexture(GL_TEXTURE_2D, id); - functions->glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, format, GL_UNSIGNED_BYTE, bits); - // replacement for GL_LUMINANCE_ALPHA in core profile - if (format == GL_RG) { - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_RED); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_GREEN); - } - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); -} - QSGVideoNode_YUV::QSGVideoNode_YUV(const QVideoSurfaceFormat &format) : m_format(format) { @@ -695,61 +386,4 @@ void QSGVideoNode_YUV::setCurrentFrame(const QVideoFrame &frame, FrameFlags) markDirty(DirtyMaterial); } -void QSGVideoMaterialShader_YUV_BiPlanar::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - - QSGVideoMaterial_YUV *mat = static_cast<QSGVideoMaterial_YUV *>(newMaterial); - program()->setUniformValue(m_id_plane1Texture, 0); - program()->setUniformValue(m_id_plane2Texture, 1); - - mat->bind(); - - program()->setUniformValue(m_id_colorMatrix, mat->m_colorMatrix); - program()->setUniformValue(m_id_plane1Width, mat->m_planeWidth[0]); - program()->setUniformValue(m_id_plane2Width, mat->m_planeWidth[1]); - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - -void QSGVideoMaterialShader_YUV_TriPlanar::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - QSGVideoMaterialShader_YUV_BiPlanar::updateState(state, newMaterial, oldMaterial); - - QSGVideoMaterial_YUV *mat = static_cast<QSGVideoMaterial_YUV *>(newMaterial); - program()->setUniformValue(m_id_plane3Texture, 2); - program()->setUniformValue(m_id_plane3Width, mat->m_planeWidth[2]); -} - -void QSGVideoMaterialShader_UYVY::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - - QSGVideoMaterial_YUV *mat = static_cast<QSGVideoMaterial_YUV *>(newMaterial); - program()->setUniformValue(m_id_yTexture, 0); - program()->setUniformValue(m_id_uvTexture, 1); - - mat->bind(); - - program()->setUniformValue(m_id_colorMatrix, mat->m_colorMatrix); - - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - QT_END_NAMESPACE diff --git a/src/qtmultimediaquicktools/qsgvideotexture.cpp b/src/qtmultimediaquicktools/qsgvideotexture.cpp index dd31695ef..22f9fdbee 100644 --- a/src/qtmultimediaquicktools/qsgvideotexture.cpp +++ b/src/qtmultimediaquicktools/qsgvideotexture.cpp @@ -166,6 +166,9 @@ void QSGVideoTexturePrivate::updateRhiTexture(QRhi *rhi, QRhiResourceUpdateBatch QRhiTextureUploadDescription desc({ entry }); resourceUpdates->uploadTexture(m_texture.data(), desc); } + if (q->hasMipmaps()) + resourceUpdates->generateMips(m_texture.data()); + } void QSGVideoTexture::commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates) diff --git a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro index fefb8dec5..a2451e6e2 100644 --- a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro +++ b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro @@ -20,31 +20,16 @@ SOURCES += \ qdeclarativevideooutput.cpp \ qdeclarativevideooutput_window.cpp -qtConfig(opengl) { - SOURCES += qdeclarativevideooutput_render.cpp \ - qsgvideonode_rgb.cpp \ - qsgvideonode_yuv.cpp \ - qsgvideonode_texture.cpp - HEADERS += qdeclarativevideooutput_render_p.h \ - qsgvideonode_rgb_p.h \ - qsgvideonode_yuv_p.h \ - qsgvideonode_texture_p.h -} +SOURCES += qdeclarativevideooutput_render.cpp \ + qsgvideonode_rgb.cpp \ + qsgvideonode_yuv.cpp \ + qsgvideonode_texture.cpp +HEADERS += qdeclarativevideooutput_render_p.h \ + qsgvideonode_rgb_p.h \ + qsgvideonode_yuv_p.h \ + qsgvideonode_texture_p.h RESOURCES += \ qtmultimediaquicktools.qrc -OTHER_FILES += \ - shaders/monoplanarvideo.vert \ - shaders/rgbvideo_padded.vert \ - shaders/rgbvideo.frag \ - shaders/rgbvideo_swizzle.frag \ - shaders/biplanaryuvvideo.vert \ - shaders/biplanaryuvvideo.frag \ - shaders/biplanaryuvvideo_swizzle.frag \ - shaders/triplanaryuvvideo.vert \ - shaders/triplanaryuvvideo.frag \ - shaders/uyvyvideo.frag \ - shaders/yuyvvideo.frag - load(qt_module) diff --git a/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc b/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc index 1c0e29c04..ceac8cff4 100644 --- a/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc +++ b/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc @@ -1,37 +1,13 @@ <RCC> <qresource prefix="/qtmultimediaquicktools"> - <file>shaders/monoplanarvideo.vert</file> - <file>shaders/rgbvideo.frag</file> - <file>shaders/rgbvideo_swizzle.frag</file> - <file>shaders/rgbvideo_padded.vert</file> - <file>shaders/biplanaryuvvideo.frag</file> - <file>shaders/biplanaryuvvideo.vert</file> - <file>shaders/biplanaryuvvideo_swizzle.frag</file> - <file>shaders/triplanaryuvvideo.frag</file> - <file>shaders/triplanaryuvvideo.vert</file> - <file>shaders/uyvyvideo.frag</file> - <file>shaders/yuyvvideo.frag</file> - - <file>shaders/monoplanarvideo_core.vert</file> - <file>shaders/rgbvideo_core.frag</file> - <file>shaders/rgbvideo_swizzle_core.frag</file> - <file>shaders/rgbvideo_padded_core.vert</file> - <file>shaders/biplanaryuvvideo_core.frag</file> - <file>shaders/biplanaryuvvideo_core.vert</file> - <file>shaders/biplanaryuvvideo_swizzle_core.frag</file> - <file>shaders/triplanaryuvvideo_core.frag</file> - <file>shaders/triplanaryuvvideo_core.vert</file> - <file>shaders/uyvyvideo_core.frag</file> - <file>shaders/yuyvvideo_core.frag</file> - - <file>shaders_ng/rgba.vert.qsb</file> - <file>shaders_ng/rgba.frag.qsb</file> - <file>shaders_ng/bgra.frag.qsb</file> - <file>shaders_ng/yuv.vert.qsb</file> - <file>shaders_ng/yuv_yv.frag.qsb</file> - <file>shaders_ng/nv12.frag.qsb</file> - <file>shaders_ng/nv21.frag.qsb</file> - <file>shaders_ng/uyvy.frag.qsb</file> - <file>shaders_ng/yuyv.frag.qsb</file> + <file>shaders/rgba.vert.qsb</file> + <file>shaders/rgba.frag.qsb</file> + <file>shaders/bgra.frag.qsb</file> + <file>shaders/yuv.vert.qsb</file> + <file>shaders/yuv_yv.frag.qsb</file> + <file>shaders/nv12.frag.qsb</file> + <file>shaders/nv21.frag.qsb</file> + <file>shaders/uyvy.frag.qsb</file> + <file>shaders/yuyv.frag.qsb</file> </qresource> </RCC> diff --git a/src/qtmultimediaquicktools/shaders_ng/bgra.frag b/src/qtmultimediaquicktools/shaders/bgra.frag index f04e3e721..f04e3e721 100644 --- a/src/qtmultimediaquicktools/shaders_ng/bgra.frag +++ b/src/qtmultimediaquicktools/shaders/bgra.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb b/src/qtmultimediaquicktools/shaders/bgra.frag.qsb Binary files differindex 20c61e92f..20c61e92f 100644 --- a/src/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb +++ b/src/qtmultimediaquicktools/shaders/bgra.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag deleted file mode 100644 index 2ede9108b..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; - -void main() -{ - mediump float Y = texture2D(plane1Texture, plane1TexCoord).r; - mediump vec2 UV = texture2D(plane2Texture, plane2TexCoord).ra; - mediump vec4 color = vec4(Y, UV.x, UV.y, 1.); - gl_FragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert deleted file mode 100644 index d01b69078..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert +++ /dev/null @@ -1,13 +0,0 @@ -uniform highp mat4 qt_Matrix; -uniform highp float plane1Width; -uniform highp float plane2Width; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.frag deleted file mode 100644 index 1261782f8..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 150 core -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 plane1TexCoord; -in vec2 plane2TexCoord; -out vec4 fragColor; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - vec2 UV = texture(plane2Texture, plane2TexCoord).ra; - vec4 color = vec4(Y, UV.x, UV.y, 1.); - fragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.vert b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.vert deleted file mode 100644 index 1c162785e..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.vert +++ /dev/null @@ -1,14 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -uniform float plane1Width; -uniform float plane2Width; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 plane1TexCoord; -out vec2 plane2TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag deleted file mode 100644 index 560a0d150..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; - -void main() -{ - mediump float Y = texture2D(plane1Texture, plane1TexCoord).r; - mediump vec2 UV = texture2D(plane2Texture, plane2TexCoord).ar; - mediump vec4 color = vec4(Y, UV.x, UV.y, 1.); - gl_FragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle_core.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle_core.frag deleted file mode 100644 index 48ef3fa2c..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle_core.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 150 core -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 plane1TexCoord; -in vec2 plane2TexCoord; -out vec4 fragColor; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - vec2 UV = texture(plane2Texture, plane2TexCoord).ar; - vec4 color = vec4(Y, UV.x, UV.y, 1.); - fragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/compile.bat b/src/qtmultimediaquicktools/shaders/compile.bat index 682cc71b8..682cc71b8 100755 --- a/src/qtmultimediaquicktools/shaders_ng/compile.bat +++ b/src/qtmultimediaquicktools/shaders/compile.bat diff --git a/src/qtmultimediaquicktools/shaders/monoplanarvideo.vert b/src/qtmultimediaquicktools/shaders/monoplanarvideo.vert deleted file mode 100644 index 19915f2ff..000000000 --- a/src/qtmultimediaquicktools/shaders/monoplanarvideo.vert +++ /dev/null @@ -1,9 +0,0 @@ -uniform highp mat4 qt_Matrix; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord; - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/monoplanarvideo_core.vert b/src/qtmultimediaquicktools/shaders/monoplanarvideo_core.vert deleted file mode 100644 index 23b9bfae2..000000000 --- a/src/qtmultimediaquicktools/shaders/monoplanarvideo_core.vert +++ /dev/null @@ -1,10 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord; - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/nv12.frag b/src/qtmultimediaquicktools/shaders/nv12.frag index 9ef6bd648..9ef6bd648 100644 --- a/src/qtmultimediaquicktools/shaders_ng/nv12.frag +++ b/src/qtmultimediaquicktools/shaders/nv12.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb b/src/qtmultimediaquicktools/shaders/nv12.frag.qsb Binary files differindex f3402d460..f3402d460 100644 --- a/src/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb +++ b/src/qtmultimediaquicktools/shaders/nv12.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders_ng/nv21.frag b/src/qtmultimediaquicktools/shaders/nv21.frag index 636294048..636294048 100644 --- a/src/qtmultimediaquicktools/shaders_ng/nv21.frag +++ b/src/qtmultimediaquicktools/shaders/nv21.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb b/src/qtmultimediaquicktools/shaders/nv21.frag.qsb Binary files differindex b90af8c53..b90af8c53 100644 --- a/src/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb +++ b/src/qtmultimediaquicktools/shaders/nv21.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.frag b/src/qtmultimediaquicktools/shaders/rgba.frag index 1623c2cc7..1623c2cc7 100644 --- a/src/qtmultimediaquicktools/shaders_ng/rgba.frag +++ b/src/qtmultimediaquicktools/shaders/rgba.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb b/src/qtmultimediaquicktools/shaders/rgba.frag.qsb Binary files differindex c1ecaa7bf..c1ecaa7bf 100644 --- a/src/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb +++ b/src/qtmultimediaquicktools/shaders/rgba.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.vert b/src/qtmultimediaquicktools/shaders/rgba.vert index ebc53a65f..ebc53a65f 100644 --- a/src/qtmultimediaquicktools/shaders_ng/rgba.vert +++ b/src/qtmultimediaquicktools/shaders/rgba.vert diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb b/src/qtmultimediaquicktools/shaders/rgba.vert.qsb Binary files differindex f655df0db..f655df0db 100644 --- a/src/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb +++ b/src/qtmultimediaquicktools/shaders/rgba.vert.qsb diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo.frag b/src/qtmultimediaquicktools/shaders/rgbvideo.frag deleted file mode 100644 index 673eb4bf7..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo.frag +++ /dev/null @@ -1,8 +0,0 @@ -uniform sampler2D rgbTexture; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; - -void main() -{ - gl_FragColor = texture2D(rgbTexture, qt_TexCoord) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_core.frag b/src/qtmultimediaquicktools/shaders/rgbvideo_core.frag deleted file mode 100644 index ac41c108d..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_core.frag +++ /dev/null @@ -1,10 +0,0 @@ -#version 150 core -uniform sampler2D rgbTexture; -uniform float opacity; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - fragColor = texture(rgbTexture, qt_TexCoord) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_padded.vert b/src/qtmultimediaquicktools/shaders/rgbvideo_padded.vert deleted file mode 100644 index 5c7c41d13..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_padded.vert +++ /dev/null @@ -1,10 +0,0 @@ -uniform highp mat4 qt_Matrix; -uniform highp float width; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord * vec2(width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_padded_core.vert b/src/qtmultimediaquicktools/shaders/rgbvideo_padded_core.vert deleted file mode 100644 index d4fa8ad76..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_padded_core.vert +++ /dev/null @@ -1,11 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -uniform float width; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord * vec2(width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag b/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag deleted file mode 100644 index 99caa19fb..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag +++ /dev/null @@ -1,10 +0,0 @@ -uniform sampler2D rgbTexture; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; -uniform bool hasAlpha; - -void main() -{ - lowp vec4 v = texture2D(rgbTexture, qt_TexCoord); - gl_FragColor = vec4(v.bgr, hasAlpha ? v.a : 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle_core.frag b/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle_core.frag deleted file mode 100644 index e952124d1..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle_core.frag +++ /dev/null @@ -1,12 +0,0 @@ -#version 150 core -uniform sampler2D rgbTexture; -uniform float opacity; -uniform bool hasAlpha; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - vec4 v = texture(rgbTexture, qt_TexCoord); - fragColor = vec4(v.bgr, hasAlpha ? v.a : 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag deleted file mode 100644 index dad8bb5a9..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform sampler2D plane3Texture; -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; - -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; -varying highp vec2 plane3TexCoord; - -void main() -{ - mediump float Y = texture2D(plane1Texture, plane1TexCoord).r; - mediump float U = texture2D(plane2Texture, plane2TexCoord).r; - mediump float V = texture2D(plane3Texture, plane3TexCoord).r; - mediump vec4 color = vec4(Y, U, V, 1.); - gl_FragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert deleted file mode 100644 index d76b3f358..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert +++ /dev/null @@ -1,16 +0,0 @@ -uniform highp mat4 qt_Matrix; -uniform highp float plane1Width; -uniform highp float plane2Width; -uniform highp float plane3Width; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; -varying highp vec2 plane3TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - plane3TexCoord = qt_VertexTexCoord * vec2(plane3Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.frag b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.frag deleted file mode 100644 index ad81083f5..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.frag +++ /dev/null @@ -1,19 +0,0 @@ -#version 150 core -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform sampler2D plane3Texture; -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 plane1TexCoord; -in vec2 plane2TexCoord; -in vec2 plane3TexCoord; -out vec4 fragColor; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - float U = texture(plane2Texture, plane2TexCoord).r; - float V = texture(plane3Texture, plane3TexCoord).r; - vec4 color = vec4(Y, U, V, 1.); - fragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.vert b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.vert deleted file mode 100644 index ebf3604e1..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.vert +++ /dev/null @@ -1,17 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -uniform float plane1Width; -uniform float plane2Width; -uniform float plane3Width; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 plane1TexCoord; -out vec2 plane2TexCoord; -out vec2 plane3TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - plane3TexCoord = qt_VertexTexCoord * vec2(plane3Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag b/src/qtmultimediaquicktools/shaders/uyvy.frag index f1c7c1aec..f1c7c1aec 100644 --- a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag +++ b/src/qtmultimediaquicktools/shaders/uyvy.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb b/src/qtmultimediaquicktools/shaders/uyvy.frag.qsb Binary files differindex 902821fd3..902821fd3 100644 --- a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb +++ b/src/qtmultimediaquicktools/shaders/uyvy.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders/uyvyvideo.frag b/src/qtmultimediaquicktools/shaders/uyvyvideo.frag deleted file mode 100644 index 244464e73..000000000 --- a/src/qtmultimediaquicktools/shaders/uyvyvideo.frag +++ /dev/null @@ -1,13 +0,0 @@ -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_LUMINANCE_ALPHA, in uyvy Y = a -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in uyvy U = r, V = b -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; - -void main() -{ - mediump vec3 YUV = vec3(texture2D(yTexture, qt_TexCoord).a, texture2D(uvTexture, qt_TexCoord).rb); - - gl_FragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/uyvyvideo_core.frag b/src/qtmultimediaquicktools/shaders/uyvyvideo_core.frag deleted file mode 100644 index b151a7c7f..000000000 --- a/src/qtmultimediaquicktools/shaders/uyvyvideo_core.frag +++ /dev/null @@ -1,14 +0,0 @@ -#version 150 core -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_RG, in uyvy Y = a -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in uyvy U = r, V = b -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - vec3 YUV = vec3(texture(yTexture, qt_TexCoord).a, texture2D(uvTexture, qt_TexCoord).rb); - fragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv.vert b/src/qtmultimediaquicktools/shaders/yuv.vert index 6f103372f..6f103372f 100644 --- a/src/qtmultimediaquicktools/shaders_ng/yuv.vert +++ b/src/qtmultimediaquicktools/shaders/yuv.vert diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb b/src/qtmultimediaquicktools/shaders/yuv.vert.qsb Binary files differindex 0cde24cf6..0cde24cf6 100644 --- a/src/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb +++ b/src/qtmultimediaquicktools/shaders/yuv.vert.qsb diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag b/src/qtmultimediaquicktools/shaders/yuv_yv.frag index 07ea52aab..07ea52aab 100644 --- a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag +++ b/src/qtmultimediaquicktools/shaders/yuv_yv.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb b/src/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb Binary files differindex b6e3fe366..b6e3fe366 100644 --- a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb +++ b/src/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag b/src/qtmultimediaquicktools/shaders/yuyv.frag index 454fdc21e..454fdc21e 100644 --- a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag +++ b/src/qtmultimediaquicktools/shaders/yuyv.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb b/src/qtmultimediaquicktools/shaders/yuyv.frag.qsb Binary files differindex 543361af6..543361af6 100644 --- a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb +++ b/src/qtmultimediaquicktools/shaders/yuyv.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders/yuyvvideo.frag b/src/qtmultimediaquicktools/shaders/yuyvvideo.frag deleted file mode 100644 index c2ad65b78..000000000 --- a/src/qtmultimediaquicktools/shaders/yuyvvideo.frag +++ /dev/null @@ -1,13 +0,0 @@ -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_LUMINANCE_ALPHA, in yuyv Y = r -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in yuyv U = g, V = a -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; - -void main() -{ - mediump vec3 YUV = vec3(texture2D(yTexture, qt_TexCoord).r, texture2D(uvTexture, qt_TexCoord).ga); - - gl_FragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/yuyvvideo_core.frag b/src/qtmultimediaquicktools/shaders/yuyvvideo_core.frag deleted file mode 100644 index a30d7818a..000000000 --- a/src/qtmultimediaquicktools/shaders/yuyvvideo_core.frag +++ /dev/null @@ -1,14 +0,0 @@ -#version 150 core -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_RG, in yuyv Y = r -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in uyvy U = g, V = a -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - vec3 YUV = vec3(texture(yTexture, qt_TexCoord).r, texture2D(uvTexture, qt_TexCoord).ga); - fragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} |