[31/35] libcamera: shaders: Extend bayer shaders to support swapping R and B on output
diff mbox series

Message ID 20250611013245.133785-32-bryan.odonoghue@linaro.org
State New
Headers show
Series
  • Add GLES 2.0 GPUISP to libcamera
Related show

Commit Message

Bryan O'Donoghue June 11, 2025, 1:32 a.m. UTC
We can easily facilitate swapping R and B on output. Pivot on an
environment define for this purpose.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 include/libcamera/internal/shaders/bayer_1x_packed.frag | 4 ++++
 include/libcamera/internal/shaders/bayer_8.frag         | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

Comments

Milan Zamazal June 18, 2025, 12:35 p.m. UTC | #1
Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes:

> We can easily facilitate swapping R and B on output. Pivot on an
> environment define for this purpose.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>

Reviewed-by: Milan Zamazal <mzamazal@redhat.com>

(But see my related comment in
"libcamera: software_isp: debayer_egl: Add an eGL debayer class".)

> ---
>  include/libcamera/internal/shaders/bayer_1x_packed.frag | 4 ++++
>  include/libcamera/internal/shaders/bayer_8.frag         | 6 +++++-
>  2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/include/libcamera/internal/shaders/bayer_1x_packed.frag b/include/libcamera/internal/shaders/bayer_1x_packed.frag
> index 90bd6457..c0632eb1 100644
> --- a/include/libcamera/internal/shaders/bayer_1x_packed.frag
> +++ b/include/libcamera/internal/shaders/bayer_1x_packed.frag
> @@ -268,5 +268,9 @@ void main(void)
>  	rgb.b = texture2D(blue_param, vec2(rgb.b, 0.5)).b;
>  #endif
>  
> +#if defined (SWAP_BLUE)
> +	gl_FragColor = vec4(rgb.bgr, 1.0);
> +#else
>  	gl_FragColor = vec4(rgb, 1.0);
> +#endif
>  }
> diff --git a/include/libcamera/internal/shaders/bayer_8.frag b/include/libcamera/internal/shaders/bayer_8.frag
> index 5955c2ea..74ce1509 100644
> --- a/include/libcamera/internal/shaders/bayer_8.frag
> +++ b/include/libcamera/internal/shaders/bayer_8.frag
> @@ -163,5 +163,9 @@ void main(void) {
>  	rgb.b = texture2D(red_param, vec2(rgb.b, 0.5)).b;
>  #endif
>  
> -    gl_FragColor.rgb = rgb;
> +#if defined (SWAP_BLUE)
> +	gl_FragColor = vec4(rgb.bgr, 1.0);
> +#else
> +	gl_FragColor = vec4(rgb, 1.0);
> +#endif
>  }

Patch
diff mbox series

diff --git a/include/libcamera/internal/shaders/bayer_1x_packed.frag b/include/libcamera/internal/shaders/bayer_1x_packed.frag
index 90bd6457..c0632eb1 100644
--- a/include/libcamera/internal/shaders/bayer_1x_packed.frag
+++ b/include/libcamera/internal/shaders/bayer_1x_packed.frag
@@ -268,5 +268,9 @@  void main(void)
 	rgb.b = texture2D(blue_param, vec2(rgb.b, 0.5)).b;
 #endif
 
+#if defined (SWAP_BLUE)
+	gl_FragColor = vec4(rgb.bgr, 1.0);
+#else
 	gl_FragColor = vec4(rgb, 1.0);
+#endif
 }
diff --git a/include/libcamera/internal/shaders/bayer_8.frag b/include/libcamera/internal/shaders/bayer_8.frag
index 5955c2ea..74ce1509 100644
--- a/include/libcamera/internal/shaders/bayer_8.frag
+++ b/include/libcamera/internal/shaders/bayer_8.frag
@@ -163,5 +163,9 @@  void main(void) {
 	rgb.b = texture2D(red_param, vec2(rgb.b, 0.5)).b;
 #endif
 
-    gl_FragColor.rgb = rgb;
+#if defined (SWAP_BLUE)
+	gl_FragColor = vec4(rgb.bgr, 1.0);
+#else
+	gl_FragColor = vec4(rgb, 1.0);
+#endif
 }