@@ -67,6 +67,7 @@ uniform vec2 tex_bayer_first_red;
uniform sampler2D tex_y;
uniform mat3 ccm;
uniform vec3 blacklevel;
+uniform float gamma;
void main(void)
{
@@ -260,6 +261,9 @@ void main(void)
rgb.g = (rin * ccm[1][0]) + (gin * ccm[1][1]) + (bin * ccm[1][2]);
rgb.b = (rin * ccm[2][0]) + (gin * ccm[2][1]) + (bin * ccm[2][2]);
+ /* Apply gamma after colour correction */
+ rgb = pow(rgb, vec3(gamma));
+
#if defined (SWAP_BLUE)
gl_FragColor = vec4(rgb.bgr, 1.0);
#else
@@ -26,6 +26,7 @@ varying vec4 yCoord;
varying vec4 xCoord;
uniform mat3 ccm;
uniform vec3 blacklevel;
+uniform float gamma;
void main(void) {
vec3 rgb;
@@ -155,6 +156,9 @@ void main(void) {
rgb.g = (rin * ccm[1][0]) + (gin * ccm[1][1]) + (bin * ccm[1][2]);
rgb.b = (rin * ccm[2][0]) + (gin * ccm[2][1]) + (bin * ccm[2][2]);
+ /* Apply gamma after colour correction */
+ rgb = pow(rgb, vec3(gamma));
+
#if defined (SWAP_BLUE)
gl_FragColor = vec4(rgb.bgr, 1.0);
#else
Add gamma compentation to the debayer shaders after colour correction is applied. Similarly only apply the calculated Gamma curve when using the CCM as the lookup tables already contain the data. Suggested-by: Milan Zamazal <mzamazal@redhat.com> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> --- src/libcamera/shaders/bayer_1x_packed.frag | 4 ++++ src/libcamera/shaders/bayer_unpacked.frag | 4 ++++ 2 files changed, 8 insertions(+)