From ae9e7fbf3a8bf45b08951b650aec3f91997fafc3 Mon Sep 17 00:00:00 2001
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Sun, 13 Sep 2020 01:04:20 +0300
Subject: qcam: viewfinder_gl: Merge the semi-planar UV and VU shaders
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Use macros to select the U and V pattern, to avoid code duplication
between the two semi-planar shaders.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
---
 src/qcam/assets/shader/YUV_2_planes.frag    | 39 +++++++++++++++++++++++++++++
 src/qcam/assets/shader/YUV_2_planes_UV.frag | 32 -----------------------
 src/qcam/assets/shader/YUV_2_planes_VU.frag | 32 -----------------------
 src/qcam/assets/shader/shaders.qrc          |  3 +--
 4 files changed, 40 insertions(+), 66 deletions(-)
 create mode 100644 src/qcam/assets/shader/YUV_2_planes.frag
 delete mode 100644 src/qcam/assets/shader/YUV_2_planes_UV.frag
 delete mode 100644 src/qcam/assets/shader/YUV_2_planes_VU.frag

(limited to 'src/qcam/assets/shader')

diff --git a/src/qcam/assets/shader/YUV_2_planes.frag b/src/qcam/assets/shader/YUV_2_planes.frag
new file mode 100644
index 00000000..125f1c85
--- /dev/null
+++ b/src/qcam/assets/shader/YUV_2_planes.frag
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2020, Linaro
+ *
+ * YUV_2_planes.frag - Fragment shader code for NV12, NV16 and NV24 formats
+ */
+
+#ifdef GL_ES
+precision mediump float;
+#endif
+
+varying vec2 textureOut;
+uniform sampler2D tex_y;
+uniform sampler2D tex_u;
+
+void main(void)
+{
+	vec3 yuv;
+	vec3 rgb;
+	mat3 yuv2rgb_bt601_mat = mat3(
+		vec3(1.164,  1.164, 1.164),
+		vec3(0.000, -0.392, 2.017),
+		vec3(1.596, -0.813, 0.000)
+	);
+
+	yuv.x = texture2D(tex_y, textureOut).r - 0.063;
+#if defined(YUV_PATTERN_UV)
+	yuv.y = texture2D(tex_u, textureOut).r - 0.500;
+	yuv.z = texture2D(tex_u, textureOut).g - 0.500;
+#elif defined(YUV_PATTERN_VU)
+	yuv.y = texture2D(tex_u, textureOut).g - 0.500;
+	yuv.z = texture2D(tex_u, textureOut).r - 0.500;
+#else
+#error Invalid pattern
+#endif
+
+	rgb = yuv2rgb_bt601_mat * yuv;
+	gl_FragColor = vec4(rgb, 1.0);
+}
diff --git a/src/qcam/assets/shader/YUV_2_planes_UV.frag b/src/qcam/assets/shader/YUV_2_planes_UV.frag
deleted file mode 100644
index 081caea9..00000000
--- a/src/qcam/assets/shader/YUV_2_planes_UV.frag
+++ /dev/null
@@ -1,32 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2020, Linaro
- *
- * YUV_2_planes_UV.frag - Fragment shader code for NV12, NV16 and NV24 formats
- */
-
-#ifdef GL_ES
-precision mediump float;
-#endif
-
-varying vec2 textureOut;
-uniform sampler2D tex_y;
-uniform sampler2D tex_u;
-
-void main(void)
-{
-	vec3 yuv;
-	vec3 rgb;
-	mat3 yuv2rgb_bt601_mat = mat3(
-		vec3(1.164,  1.164, 1.164),
-		vec3(0.000, -0.392, 2.017),
-		vec3(1.596, -0.813, 0.000)
-	);
-
-	yuv.x = texture2D(tex_y, textureOut).r - 0.063;
-	yuv.y = texture2D(tex_u, textureOut).r - 0.500;
-	yuv.z = texture2D(tex_u, textureOut).g - 0.500;
-
-	rgb = yuv2rgb_bt601_mat * yuv;
-	gl_FragColor = vec4(rgb, 1.0);
-}
diff --git a/src/qcam/assets/shader/YUV_2_planes_VU.frag b/src/qcam/assets/shader/YUV_2_planes_VU.frag
deleted file mode 100644
index f4a5a5ac..00000000
--- a/src/qcam/assets/shader/YUV_2_planes_VU.frag
+++ /dev/null
@@ -1,32 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2020, Linaro
- *
- * YUV_2_planes_VU.frag - Fragment shader code for NV21, NV61 and NV42 formats
- */
-
-#ifdef GL_ES
-precision mediump float;
-#endif
-
-varying vec2 textureOut;
-uniform sampler2D tex_y;
-uniform sampler2D tex_u;
-
-void main(void)
-{
-	vec3 yuv;
-	vec3 rgb;
-	mat3 yuv2rgb_bt601_mat = mat3(
-		vec3(1.164,  1.164, 1.164),
-		vec3(0.000, -0.392, 2.017),
-		vec3(1.596, -0.813, 0.000)
-	);
-
-	yuv.x = texture2D(tex_y, textureOut).r - 0.063;
-	yuv.y = texture2D(tex_u, textureOut).g - 0.500;
-	yuv.z = texture2D(tex_u, textureOut).r - 0.500;
-
-	rgb = yuv2rgb_bt601_mat * yuv;
-	gl_FragColor = vec4(rgb, 1.0);
-}
diff --git a/src/qcam/assets/shader/shaders.qrc b/src/qcam/assets/shader/shaders.qrc
index 533396d1..7010d843 100644
--- a/src/qcam/assets/shader/shaders.qrc
+++ b/src/qcam/assets/shader/shaders.qrc
@@ -2,8 +2,7 @@
 <!DOCTYPE RCC><RCC version="1.0">
 <qresource>
 	<file>YUV.vert</file>
-	<file>YUV_2_planes_UV.frag</file>
-	<file>YUV_2_planes_VU.frag</file>
+	<file>YUV_2_planes.frag</file>
 	<file>YUV_3_planes.frag</file>
 </qresource>
 </RCC>
-- 
cgit v1.2.1