Fix some of the effects in qmlvideofx
authorMichael Goddard <michael.goddard@nokia.com>
Thu, 22 Dec 2011 03:08:25 +0000 (13:08 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 22 Dec 2011 06:23:32 +0000 (07:23 +0100)
* TiltShift was sometimes applying the effect in the wrong place.
* Blur had some QML properties duplicated
* Blur kernel wasn't quite summing to 1, and was applying opacity twice
* The target width for the second pass was incorrect, so it was blending
darkness, resulting in a dreary image.

Change-Id: Ib8ba93d979c597cf4d225b3d24d26a22d0cdffc2
Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
examples/video/qmlvideofx/qml/qmlvideofx/EffectGaussianBlur.qml
examples/video/qmlvideofx/shaders/gaussianblur_h.fsh
examples/video/qmlvideofx/shaders/gaussianblur_v.fsh
examples/video/qmlvideofx/shaders/tiltshift.fsh

index 2e76de3..a4cfc52 100644 (file)
@@ -61,7 +61,7 @@ Item {
     Effect {
         id: verticalShader
         anchors.fill:  parent
-        property real dividerValue: parent.dividerValue
+        dividerValue: parent.dividerValue
         property real blurSize: 4.0 * parent.parameters.get(0).value / targetHeight
         fragmentShaderFilename: "shaders/gaussianblur_v.fsh"
     }
@@ -69,8 +69,8 @@ Item {
     Effect {
         id: horizontalShader
         anchors.fill: parent
-        property real dividerValue: parent.dividerValue
-        property real blurSize: 4.0 * parent.parameters.get(0).value / targetWidth
+        dividerValue: parent.dividerValue
+        property real blurSize: 4.0 * parent.parameters.get(0).value / parent.targetWidth
         fragmentShaderFilename: "shaders/gaussianblur_h.fsh"
         source: horizontalShaderSource
 
index 249ee30..e2d4e7d 100644 (file)
@@ -55,7 +55,7 @@ void main()
         c += texture2D(source, uv - vec2(3.0*blurSize, 0.0)) * 0.09;
         c += texture2D(source, uv - vec2(2.0*blurSize, 0.0)) * 0.12;
         c += texture2D(source, uv - vec2(1.0*blurSize, 0.0)) * 0.15;
-        c += texture2D(source, uv) * 0.16;
+        c += texture2D(source, uv) * 0.18;
         c += texture2D(source, uv + vec2(1.0*blurSize, 0.0)) * 0.15;
         c += texture2D(source, uv + vec2(2.0*blurSize, 0.0)) * 0.12;
         c += texture2D(source, uv + vec2(3.0*blurSize, 0.0)) * 0.09;
index 249052c..9aaddf0 100644 (file)
@@ -55,7 +55,7 @@ void main()
         c += texture2D(source, uv - vec2(0.0, 3.0*blurSize)) * 0.09;
         c += texture2D(source, uv - vec2(0.0, 2.0*blurSize)) * 0.12;
         c += texture2D(source, uv - vec2(0.0, 1.0*blurSize)) * 0.15;
-        c += texture2D(source, uv) * 0.16;
+        c += texture2D(source, uv) * 0.18;
         c += texture2D(source, uv + vec2(0.0, 1.0*blurSize)) * 0.15;
         c += texture2D(source, uv + vec2(0.0, 2.0*blurSize)) * 0.12;
         c += texture2D(source, uv + vec2(0.0, 3.0*blurSize)) * 0.09;
@@ -63,5 +63,6 @@ void main()
     } else {
         c = texture2D(source, qt_TexCoord0);
     }
-    gl_FragColor = qt_Opacity * c;
+    // First pass we don't apply opacity
+    gl_FragColor = c;
 }
index 4323e7f..5f52d42 100644 (file)
@@ -67,7 +67,7 @@ void main()
 {
     vec2 uv = qt_TexCoord0.xy;
     vec3 col;
-    if (uv.x < dividerValue && uv.y >= 0.4 && uv.y <= 0.6)
+    if (uv.x > dividerValue || (uv.y >= 0.4 && uv.y <= 0.6))
         col = texture2D(source, uv).rgb;
     else
         col = blur();