summaryrefslogtreecommitdiffstats
path: root/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0007-glplugin-gleffects-fix-little-rectangel-appears-at-t.patch
blob: 90bfba990cbc057bd54090a89f0d083564bf80d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
From 43549773608b4f58dc664b7115a1ef0dcb32f251 Mon Sep 17 00:00:00 2001
From: Haihua Hu <jared.hu@nxp.com>
Date: Tue, 14 Jun 2016 13:48:09 +0800
Subject: [PATCH 1/2] [glplugin]gleffects: fix little rectangel appears at the
 center when use squeeze and tunnel effects

These two shader will calculate the verctor length and use it as denominator.
But length could be zero which will cause undefine behaviour. Add protection for
this condition

Upstream-Status: Backport [1.8.3]

https://bugzilla.gnome.org/show_bug.cgi?id=767635

Signed-off-by: Haihua Hu <jared.hu@nxp.com>
---
 ext/gl/effects/gstgleffectssources.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/ext/gl/effects/gstgleffectssources.c b/ext/gl/effects/gstgleffectssources.c
index 6bdc155..3e87b8b 100644
--- a/ext/gl/effects/gstgleffectssources.c
+++ b/ext/gl/effects/gstgleffectssources.c
@@ -100,7 +100,8 @@ const gchar *squeeze_fragment_source_gles2 =
   "void main () {"
   "  vec2 texturecoord = v_texcoord.xy;"
   "  vec2 normcoord = texturecoord - 0.5;"
-  "  float r = length (normcoord);"
+  /* Add a very small value to length otherwise it could be 0 */
+  "  float r = length (normcoord)+0.01;"
   "  r = pow(r, 0.40)*1.3;"
   "  normcoord = normcoord / r;"
   "  texturecoord = (normcoord + 0.5);"
@@ -136,7 +137,8 @@ const gchar *tunnel_fragment_source_gles2 =
    * rect textures */
   "  normcoord = (texturecoord - 0.5);"
   "  float r = length(normcoord);"
-  "  normcoord *= clamp (r, 0.0, 0.275) / r;"
+  "  if (r > 0.0)"
+  "    normcoord *= clamp (r, 0.0, 0.275) / r;"
   "  texturecoord = normcoord + 0.5;"
   "  gl_FragColor = texture2D (tex, texturecoord);"
   "}";
-- 
1.9.1