summaryrefslogtreecommitdiff
path: root/src/qcam/assets
diff options
context:
space:
mode:
authorAndrey Konovalov <andrey.konovalov@linaro.org>2021-06-22 16:46:51 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-06-30 04:09:10 +0300
commit43fd7d0fc84035793639d6f432f621dba3c64ef8 (patch)
tree0082cba2630cff93f8de534335d6e07b37c42868 /src/qcam/assets
parente4be72d0ca1099173869e4aa1b9604773dcae7b8 (diff)
qcam: viewfinder_gl: Add support for RAW8 Bayer formats
This integrates the vertex and the fragment shaders by Morgan McGuire into qcam. Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/qcam/assets')
-rw-r--r--src/qcam/assets/shader/bayer_8.frag9
-rw-r--r--src/qcam/assets/shader/bayer_8.vert26
-rw-r--r--src/qcam/assets/shader/shaders.qrc2
3 files changed, 23 insertions, 14 deletions
diff --git a/src/qcam/assets/shader/bayer_8.frag b/src/qcam/assets/shader/bayer_8.frag
index a7d65e1d..4ece44ab 100644
--- a/src/qcam/assets/shader/bayer_8.frag
+++ b/src/qcam/assets/shader/bayer_8.frag
@@ -9,20 +9,23 @@ Morgan McGuire
This paper appears in issue Volume 13, Number 4.
---------------------------------------------------------
Copyright (c) 2008, Morgan McGuire. All rights reserved.
+
+Modified by Linaro Ltd to integrate it into libcamera.
+Copyright (C) 2021, Linaro
*/
//Pixel Shader
/** Monochrome RGBA or GL_LUMINANCE Bayer encoded texture.*/
-uniform sampler2D source;
+uniform sampler2D tex_y;
varying vec4 center;
varying vec4 yCoord;
varying vec4 xCoord;
void main(void) {
- #define fetch(x, y) texture2D(source, vec2(x, y)).r
+ #define fetch(x, y) texture2D(tex_y, vec2(x, y)).r
- float C = texture2D(source, center.xy).r; // ( 0, 0)
+ float C = texture2D(tex_y, center.xy).r; // ( 0, 0)
const vec4 kC = vec4( 4.0, 6.0, 5.0, 5.0) / 8.0;
// Determine which of four types of pixels we are on.
diff --git a/src/qcam/assets/shader/bayer_8.vert b/src/qcam/assets/shader/bayer_8.vert
index 347c15f7..3695a5e9 100644
--- a/src/qcam/assets/shader/bayer_8.vert
+++ b/src/qcam/assets/shader/bayer_8.vert
@@ -9,17 +9,22 @@ Morgan McGuire
This paper appears in issue Volume 13, Number 4.
---------------------------------------------------------
Copyright (c) 2008, Morgan McGuire. All rights reserved.
+
+Modified by Linaro Ltd to integrate it into libcamera.
+Copyright (C) 2021, Linaro
*/
//Vertex Shader
+attribute vec4 vertexIn;
+attribute vec2 textureIn;
-/** (w,h,1/w,1/h) */
-uniform vec4 sourceSize;
+uniform vec2 tex_size; /* The texture size in pixels */
+uniform vec2 tex_step;
/** Pixel position of the first red pixel in the */
/** Bayer pattern. [{0,1}, {0, 1}]*/
-uniform vec2 firstRed;
+uniform vec2 tex_bayer_first_red;
/** .xy = Pixel being sampled in the fragment shader on the range [0, 1]
.zw = ...on the range [0, sourceSize], offset by firstRed */
@@ -34,14 +39,13 @@ varying vec4 xCoord;
varying vec4 yCoord;
void main(void) {
- center.xy = gl_MultiTexCoord0.xy;
- center.zw = gl_MultiTexCoord0.xy * sourceSize.xy + firstRed;
+ center.xy = textureIn;
+ center.zw = textureIn * tex_size + tex_bayer_first_red;
- vec2 invSize = sourceSize.zw;
- xCoord = center.x + vec4(-2.0 * invSize.x,
- -invSize.x, invSize.x, 2.0 * invSize.x);
- yCoord = center.y + vec4(-2.0 * invSize.y,
- -invSize.y, invSize.y, 2.0 * invSize.y);
+ xCoord = center.x + vec4(-2.0 * tex_step.x,
+ -tex_step.x, tex_step.x, 2.0 * tex_step.x);
+ yCoord = center.y + vec4(-2.0 * tex_step.y,
+ -tex_step.y, tex_step.y, 2.0 * tex_step.y);
- gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_Position = vertexIn;
}
diff --git a/src/qcam/assets/shader/shaders.qrc b/src/qcam/assets/shader/shaders.qrc
index d76d65c5..96c709f9 100644
--- a/src/qcam/assets/shader/shaders.qrc
+++ b/src/qcam/assets/shader/shaders.qrc
@@ -6,6 +6,8 @@
<file>YUV_3_planes.frag</file>
<file>YUV_packed.frag</file>
<file>bayer_1x_packed.frag</file>
+ <file>bayer_8.frag</file>
+ <file>bayer_8.vert</file>
<file>identity.vert</file>
</qresource>
</RCC>