From 440028d6c9a2e98234a71fee79c55791e1d2af2f Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Wed, 16 Sep 2020 16:23:27 +0300 Subject: qcam: viewfinder_gl: Rename shader files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename shader files to prepare for packed YUYV support: - The NV prefix isn't a good match for packed (or for 3-planar) formats, replace it with a YUV prefix - Use .frag and .vert extensions to differentiate between fragment and vertex shaders Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund --- 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_f.glsl | 33 ---------------------------- src/qcam/assets/shader/NV_vertex_shader.glsl | 16 -------------- src/qcam/assets/shader/YUV.vert | 16 ++++++++++++++ src/qcam/assets/shader/YUV_2_planes_UV.frag | 32 +++++++++++++++++++++++++++ src/qcam/assets/shader/YUV_2_planes_VU.frag | 32 +++++++++++++++++++++++++++ src/qcam/assets/shader/YUV_3_planes.frag | 33 ++++++++++++++++++++++++++++ src/qcam/assets/shader/shaders.qrc | 8 +++---- src/qcam/viewfinder_gl.cpp | 18 +++++++-------- 10 files changed, 126 insertions(+), 126 deletions(-) delete mode 100644 src/qcam/assets/shader/NV_2_planes_UV_f.glsl delete mode 100644 src/qcam/assets/shader/NV_2_planes_VU_f.glsl delete mode 100644 src/qcam/assets/shader/NV_3_planes_f.glsl delete mode 100644 src/qcam/assets/shader/NV_vertex_shader.glsl create mode 100644 src/qcam/assets/shader/YUV.vert create mode 100644 src/qcam/assets/shader/YUV_2_planes_UV.frag create mode 100644 src/qcam/assets/shader/YUV_2_planes_VU.frag create mode 100644 src/qcam/assets/shader/YUV_3_planes.frag (limited to 'src/qcam') diff --git a/src/qcam/assets/shader/NV_2_planes_UV_f.glsl b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl deleted file mode 100644 index 67633a11..00000000 --- a/src/qcam/assets/shader/NV_2_planes_UV_f.glsl +++ /dev/null @@ -1,32 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-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 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/NV_2_planes_VU_f.glsl b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl deleted file mode 100644 index 086c5b6d..00000000 --- a/src/qcam/assets/shader/NV_2_planes_VU_f.glsl +++ /dev/null @@ -1,32 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-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 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/NV_3_planes_f.glsl b/src/qcam/assets/shader/NV_3_planes_f.glsl deleted file mode 100644 index 4bc94184..00000000 --- a/src/qcam/assets/shader/NV_3_planes_f.glsl +++ /dev/null @@ -1,33 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2020, Linaro - * - * NV_3_planes_UV_f.glsl - Fragment shader code for YUV420 format - */ - -#ifdef GL_ES -precision mediump 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 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_v, textureOut).r - 0.500; - - rgb = yuv2rgb_bt601_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 deleted file mode 100644 index 12e791e3..00000000 --- a/src/qcam/assets/shader/NV_vertex_shader.glsl +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-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/YUV.vert b/src/qcam/assets/shader/YUV.vert new file mode 100644 index 00000000..f38e8045 --- /dev/null +++ b/src/qcam/assets/shader/YUV.vert @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2020, Linaro + * + * YUV.vert - Vertex shader for YUV to RGB conversion + */ + +attribute vec4 vertexIn; +attribute vec2 textureIn; +varying vec2 textureOut; + +void main(void) +{ + gl_Position = vertexIn; + textureOut = textureIn; +} diff --git a/src/qcam/assets/shader/YUV_2_planes_UV.frag b/src/qcam/assets/shader/YUV_2_planes_UV.frag new file mode 100644 index 00000000..081caea9 --- /dev/null +++ b/src/qcam/assets/shader/YUV_2_planes_UV.frag @@ -0,0 +1,32 @@ +/* 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 new file mode 100644 index 00000000..f4a5a5ac --- /dev/null +++ b/src/qcam/assets/shader/YUV_2_planes_VU.frag @@ -0,0 +1,32 @@ +/* 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/YUV_3_planes.frag b/src/qcam/assets/shader/YUV_3_planes.frag new file mode 100644 index 00000000..2be74b5d --- /dev/null +++ b/src/qcam/assets/shader/YUV_3_planes.frag @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2020, Linaro + * + * YUV_3_planes_UV.frag - Fragment shader code for YUV420 format + */ + +#ifdef GL_ES +precision mediump 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 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_v, 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 9ae35c9f..533396d1 100644 --- a/src/qcam/assets/shader/shaders.qrc +++ b/src/qcam/assets/shader/shaders.qrc @@ -1,9 +1,9 @@ - NV_vertex_shader.glsl - NV_2_planes_UV_f.glsl - NV_2_planes_VU_f.glsl - NV_3_planes_f.glsl + YUV.vert + YUV_2_planes_UV.frag + YUV_2_planes_VU.frag + YUV_3_planes.frag diff --git a/src/qcam/viewfinder_gl.cpp b/src/qcam/viewfinder_gl.cpp index 76e4a900..0fa06a29 100644 --- a/src/qcam/viewfinder_gl.cpp +++ b/src/qcam/viewfinder_gl.cpp @@ -101,42 +101,42 @@ bool ViewFinderGL::selectFormat(const libcamera::PixelFormat &format) case libcamera::formats::NV12: horzSubSample_ = 2; vertSubSample_ = 2; - fragmentShaderSrc_ = ":NV_2_planes_UV_f.glsl"; + fragmentShaderSrc_ = ":YUV_2_planes_UV.frag"; break; case libcamera::formats::NV21: horzSubSample_ = 2; vertSubSample_ = 2; - fragmentShaderSrc_ = ":NV_2_planes_VU_f.glsl"; + fragmentShaderSrc_ = ":YUV_2_planes_VU.frag"; break; case libcamera::formats::NV16: horzSubSample_ = 2; vertSubSample_ = 1; - fragmentShaderSrc_ = ":NV_2_planes_UV_f.glsl"; + fragmentShaderSrc_ = ":YUV_2_planes_UV.frag"; break; case libcamera::formats::NV61: horzSubSample_ = 2; vertSubSample_ = 1; - fragmentShaderSrc_ = ":NV_2_planes_VU_f.glsl"; + fragmentShaderSrc_ = ":YUV_2_planes_VU.frag"; break; case libcamera::formats::NV24: horzSubSample_ = 1; vertSubSample_ = 1; - fragmentShaderSrc_ = ":NV_2_planes_UV_f.glsl"; + fragmentShaderSrc_ = ":YUV_2_planes_UV.frag"; break; case libcamera::formats::NV42: horzSubSample_ = 1; vertSubSample_ = 1; - fragmentShaderSrc_ = ":NV_2_planes_VU_f.glsl"; + fragmentShaderSrc_ = ":YUV_2_planes_VU.frag"; break; case libcamera::formats::YUV420: horzSubSample_ = 2; vertSubSample_ = 2; - fragmentShaderSrc_ = ":NV_3_planes_f.glsl"; + fragmentShaderSrc_ = ":YUV_3_planes.frag"; break; case libcamera::formats::YVU420: horzSubSample_ = 2; vertSubSample_ = 2; - fragmentShaderSrc_ = ":NV_3_planes_f.glsl"; + fragmentShaderSrc_ = ":YUV_3_planes.frag"; break; default: ret = false; @@ -154,7 +154,7 @@ bool ViewFinderGL::createVertexShader() vertexShader_ = new QOpenGLShader(QOpenGLShader::Vertex, this); /* Compile the vertex shader */ - if (!vertexShader_->compileSourceFile(":NV_vertex_shader.glsl")) { + if (!vertexShader_->compileSourceFile(":YUV.vert")) { qWarning() << "[ViewFinderGL]:" << vertexShader_->log(); return false; } -- cgit v1.2.1