[libcamera-devel] [PATCH v4 1/3] qcam: add OpenGL shader code as QT resource

Show Liu show.liu at linaro.org
Fri Aug 21 18:16:00 CEST 2020


qcam: add OpenGL shader code as QT resource

Signed-off-by: Show Liu <show.liu at linaro.org>
---
 src/qcam/assets/shader/NV_2_planes_UV_f.glsl | 32 +++++++++++++++++++
 src/qcam/assets/shader/NV_2_planes_VU_f.glsl | 32 +++++++++++++++++++
 src/qcam/assets/shader/NV_3_planes_UV_f.glsl | 33 ++++++++++++++++++++
 src/qcam/assets/shader/NV_3_planes_VU_f.glsl | 33 ++++++++++++++++++++
 src/qcam/assets/shader/NV_vertex_shader.glsl | 16 ++++++++++
 src/qcam/assets/shader/shaders.qrc           | 10 ++++++
 src/qcam/meson.build                         |  1 +
 7 files changed, 157 insertions(+)
 create mode 100644 src/qcam/assets/shader/NV_2_planes_UV_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_2_planes_VU_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_3_planes_UV_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_3_planes_VU_f.glsl
 create mode 100644 src/qcam/assets/shader/NV_vertex_shader.glsl
 create mode 100644 src/qcam/assets/shader/shaders.qrc

diff --git a/src/qcam/assets/shader/NV_2_planes_UV_f.glsl b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl
new file mode 100644
index 0000000..32c6e90
--- /dev/null
+++ b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2020, Linaro
+ *
+ * NV_2_planes_UV_f.glsl - Fragment shader code for NV12, NV16 and NV24 formats
+ */
+
+#ifdef GL_ES
+precision highp float;
+#endif
+
+varying vec2 textureOut;
+uniform sampler2D tex_y;
+uniform sampler2D tex_u;
+
+void main(void)
+{
+	vec3 yuv;
+	vec3 rgb;
+	mat3 convert_mat = mat3(
+							vec3(1.1640625, 1.1640625, 1.1640625),
+							vec3(0.0, -0.390625, 2.015625),
+							vec3(1.5975625, -0.8125, 0.0)
+						   );
+
+	yuv.x = texture2D(tex_y, textureOut).r - 0.0625;
+	yuv.y = texture2D(tex_u, textureOut).r - 0.5;
+	yuv.z = texture2D(tex_u, textureOut).g - 0.5;
+
+	rgb = convert_mat * yuv;
+	gl_FragColor = vec4(rgb, 1.0);
+}
diff --git a/src/qcam/assets/shader/NV_2_planes_VU_f.glsl b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl
new file mode 100644
index 0000000..aae12de
--- /dev/null
+++ b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2020, Linaro
+ *
+ * NV_2_planes_VU_f.glsl - Fragment shader code for NV21, NV61 and NV42 formats
+ */
+
+#ifdef GL_ES
+precision highp float;
+#endif
+
+varying vec2 textureOut;
+uniform sampler2D tex_y;
+uniform sampler2D tex_u;
+
+void main(void)
+{
+	vec3 yuv;
+	vec3 rgb;
+	mat3 convert_mat = mat3(
+							vec3(1.1640625, 1.1640625, 1.1640625),
+							vec3(0.0, -0.390625, 2.015625),
+							vec3(1.5975625, -0.8125, 0.0)
+						   );
+
+	yuv.x = texture2D(tex_y, textureOut).r - 0.0625;
+	yuv.y = texture2D(tex_u, textureOut).g - 0.5;
+	yuv.z = texture2D(tex_u, textureOut).r - 0.5;
+	
+	rgb = convert_mat * yuv;
+	gl_FragColor = vec4(rgb, 1.0);
+}
diff --git a/src/qcam/assets/shader/NV_3_planes_UV_f.glsl b/src/qcam/assets/shader/NV_3_planes_UV_f.glsl
new file mode 100644
index 0000000..21fff3a
--- /dev/null
+++ b/src/qcam/assets/shader/NV_3_planes_UV_f.glsl
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2020, Linaro
+ *
+ * NV_3_planes_UV_f.glsl - Fragment shader code for YUV420 format
+ */
+
+#ifdef GL_ES
+precision highp float;
+#endif
+
+varying vec2 textureOut;
+uniform sampler2D tex_y;
+uniform sampler2D tex_u;
+uniform sampler2D tex_v;
+
+void main(void)
+{
+	vec3 yuv;
+	vec3 rgb;
+	mat3 convert_mat = mat3(
+							vec3(1.1640625, 1.1640625, 1.1640625),
+							vec3(0.0, -0.390625, 2.015625),
+							vec3(1.5975625, -0.8125, 0.0)
+						   );
+
+	yuv.x = texture2D(tex_y, textureOut).r - 0.0625;
+	yuv.y = texture2D(tex_u, textureOut).r - 0.5;
+	yuv.z = texture2D(tex_v, textureOut).g - 0.5;
+	
+	rgb = convert_mat * yuv;
+	gl_FragColor = vec4(rgb, 1.0);
+}
diff --git a/src/qcam/assets/shader/NV_3_planes_VU_f.glsl b/src/qcam/assets/shader/NV_3_planes_VU_f.glsl
new file mode 100644
index 0000000..df00170
--- /dev/null
+++ b/src/qcam/assets/shader/NV_3_planes_VU_f.glsl
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2020, Linaro
+ *
+ * NV_3_planes_VU_f.glsl - Fragment shader code for YVU420 format
+ */
+
+#ifdef GL_ES
+precision highp float;
+#endif
+
+varying vec2 textureOut;
+uniform sampler2D tex_y;
+uniform sampler2D tex_u;
+uniform sampler2D tex_v;
+
+void main(void)
+{
+	vec3 yuv;
+	vec3 rgb;
+	mat3 convert_mat = mat3(
+							vec3(1.1640625, 1.1640625, 1.1640625),
+							vec3(0.0, -0.390625, 2.015625),
+							vec3(1.5975625, -0.8125, 0.0)
+						   );
+
+	yuv.x = texture2D(tex_y, textureOut).r - 0.0625;
+	yuv.y = texture2D(tex_u, textureOut).g - 0.5;
+	yuv.z = texture2D(tex_v, textureOut).r - 0.5;
+	
+	rgb = convert_mat * yuv;
+	gl_FragColor = vec4(rgb, 1.0);
+}
diff --git a/src/qcam/assets/shader/NV_vertex_shader.glsl b/src/qcam/assets/shader/NV_vertex_shader.glsl
new file mode 100644
index 0000000..403b791
--- /dev/null
+++ b/src/qcam/assets/shader/NV_vertex_shader.glsl
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2020, Linaro
+ *
+ * NV_vertex_shader.glsl - Vertex shader code for NV family
+ */
+
+attribute vec4 vertexIn;
+attribute vec2 textureIn;
+varying vec2 textureOut;
+
+void main(void)
+{
+	gl_Position = vertexIn;
+	textureOut = textureIn;
+}
diff --git a/src/qcam/assets/shader/shaders.qrc b/src/qcam/assets/shader/shaders.qrc
new file mode 100644
index 0000000..6fe4c7f
--- /dev/null
+++ b/src/qcam/assets/shader/shaders.qrc
@@ -0,0 +1,10 @@
+<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+<file>./NV_vertex_shader.glsl</file>
+<file>./NV_2_planes_UV_f.glsl</file>
+<file>./NV_2_planes_VU_f.glsl</file>
+<file>./NV_3_planes_UV_f.glsl</file>
+<file>./NV_3_planes_VU_f.glsl</file>
+</qresource>
+</RCC>
diff --git a/src/qcam/meson.build b/src/qcam/meson.build
index 6ea886a..e0c6f26 100644
--- a/src/qcam/meson.build
+++ b/src/qcam/meson.build
@@ -16,6 +16,7 @@ qcam_moc_headers = files([
 
 qcam_resources = files([
     'assets/feathericons/feathericons.qrc',
+    'assets/shader/shaders.qrc'
 ])
 
 qt5 = import('qt5')
-- 
2.20.1



More information about the libcamera-devel mailing list