qml image shader working but video with shader effects not working



  • Hello guys Im not sure whats is wrong with my code.
    This code works on image it.

    import QtQuick 2.9
    import QtQuick.Window 2.2
    
    Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
    
        Rectangle {
            width: 200; height: 100
            Row {
                Image { id: img;
                        sourceSize { width: 100; height: 100 } source: "images/batman.jpg" }
    
    
                ShaderEffect {
                    width: 100; height: 100
                    property variant src: img
    
                    vertexShader: "
                        uniform highp mat4 qt_Matrix;
                        attribute highp vec4 qt_Vertex;
                        attribute highp vec2 qt_MultiTexCoord0;
                        varying highp vec2 coord;
                        void main() {
                            coord = qt_MultiTexCoord0;
                            gl_Position = qt_Matrix * qt_Vertex;
                        }"
    
                    fragmentShader: "
                        varying highp vec2 coord;
                        uniform sampler2D src;
                        uniform lowp float qt_Opacity;
                        void main() {
                            lowp vec4 tex = texture2D(src, coord);
                            tex.r = 0;
                            gl_FragColor = tex;
                        }"
                }
            }
        }
    }
    

    Then here is my code to apply shader for video but unfortunately it doest not works.

    import QtQuick 2.9
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.3
    import QtMultimedia 5.8
    
    Window {
        visible: true
        width: 800
        height: 600
    
        Rectangle {
            id: myrec
            width: 800
            height: 600
            color: "black"
    
            MediaPlayer {
                id: player
                source:  "videos/FilmCountDown.mp4"
                autoPlay: true
            }
    
            VideoOutput {
                id: videoOutput
                source: player
                anchors.fill: parent
            }
    
            ShaderEffect {
                width: 100; height: 100
                property variant src: player
                vertexShader: "
                    uniform highp mat4 qt_Matrix;
                    attribute highp vec4 qt_Vertex;
                    attribute highp vec2 qt_MultiTexCoord0;
                    varying highp vec2 coord;
                    void main() {
                        coord = qt_MultiTexCoord0;
                        gl_Position = qt_Matrix * qt_Vertex;
                    }"
    
                fragmentShader: "
                    varying highp vec2 coord;
                    uniform sampler2D src;
                    uniform lowp float qt_Opacity;
                    void main() {
                        lowp vec4 tex = texture2D(src, coord);
                        gl_FragColor = vec4(vec3(dot(tex.rgb,
                                 vec3(0.344, 0.5, 0.156))),
                                 tex.a) * qt_Opacity;
                    }"
            }
        }
    }
    
    

    Any help?



  • @jhovarie

    I will answer my own reply again..

    Here is the working code for video with shader. I just copy it from the samples.

    import QtQuick 2.0
      import QtMultimedia 5.0
    
      Rectangle {
          width: 300
          height: 300
          color: "black"
    
          MediaPlayer {
              id: mediaPlayer
              source: "test.mp4"
              playing: true
          }
    
          VideoOutput {
              id: video
              anchors.fill: parent
              source: mediaPlayer
          }
    
          ShaderEffect {
              property variant source: ShaderEffectSource { sourceItem: video; hideSource: true }
              property real wiggleAmount: 0.005
              anchors.fill: video
    
              fragmentShader: "
                  varying highp vec2 qt_TexCoord0;
                  uniform sampler2D source;
                  uniform highp float wiggleAmount;
                  void main(void)
                  {
                      highp vec2 wiggledTexCoord = qt_TexCoord0;
                      wiggledTexCoord.s += sin(4.0 * 3.141592653589 * wiggledTexCoord.t) * wiggleAmount;
                      gl_FragColor = texture2D(source, wiggledTexCoord.st);
                  }
              "
          }
      }
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.