| Message ID | 20260126104256.119697-5-rick.w.ten.wolde@gmail.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
Hi 2026. 01. 26. 11:42 keltezéssel, Rick ten Wolde írta: > From: Xander Pronk <xander.c.pronk@gmail.com> > > Apply LSC after black-level and before CCM operations. > > Co-authored-by: Rick ten Wolde <rick_libcamera@wolde.info> > Signed-off-by: Rick ten Wolde <rick_libcamera@wolde.info> > Signed-off-by: Xander Pronk <xander.c.pronk@gmail.com> > --- > src/libcamera/shaders/bayer_1x_packed.frag | 10 ++++++++++ > src/libcamera/shaders/bayer_unpacked.frag | 10 ++++++++++ > 2 files changed, 20 insertions(+) > > diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag > index 23747f78..7993ea1d 100644 > --- a/src/libcamera/shaders/bayer_1x_packed.frag > +++ b/src/libcamera/shaders/bayer_1x_packed.frag > @@ -70,6 +70,10 @@ uniform vec3 blacklevel; > uniform float gamma; > uniform float contrastExp; > > +uniform sampler2D lsc_tex_red; > +uniform sampler2D lsc_tex_blue; > +uniform sampler2D lsc_tex_green; > + > float apply_contrast(float value) > { > // Apply simple S-curve > @@ -227,6 +231,12 @@ void main(void) > > rgb = rgb - blacklevel; > > + #if defined(DO_LSC) > + rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, textureOut).x; > + rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, textureOut).x; > + rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, textureOut).x; > + #endif Any reason for not using a single texture? Feels to me that would be more efficient? Am I missing why three separate ones are needed? Regards, Barnabás Pőcze > + > /* > * CCM is a 3x3 in the format > * > diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag > index 1b85196a..f0b9a6cc 100644 > --- a/src/libcamera/shaders/bayer_unpacked.frag > +++ b/src/libcamera/shaders/bayer_unpacked.frag > @@ -29,6 +29,10 @@ uniform vec3 blacklevel; > uniform float gamma; > uniform float contrastExp; > > +uniform sampler2D lsc_tex_red; > +uniform sampler2D lsc_tex_blue; > +uniform sampler2D lsc_tex_green; > + > float apply_contrast(float value) > { > // Apply simple S-curve > @@ -130,6 +134,12 @@ void main(void) { > > rgb = rgb - blacklevel; > > + #if defined(DO_LSC) > + rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, center.xy).x; > + rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, center.xy).x; > + rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, center.xy).x; > + #endif > + > /* > * CCM is a 3x3 in the format > *
diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag index 23747f78..7993ea1d 100644 --- a/src/libcamera/shaders/bayer_1x_packed.frag +++ b/src/libcamera/shaders/bayer_1x_packed.frag @@ -70,6 +70,10 @@ uniform vec3 blacklevel; uniform float gamma; uniform float contrastExp; +uniform sampler2D lsc_tex_red; +uniform sampler2D lsc_tex_blue; +uniform sampler2D lsc_tex_green; + float apply_contrast(float value) { // Apply simple S-curve @@ -227,6 +231,12 @@ void main(void) rgb = rgb - blacklevel; + #if defined(DO_LSC) + rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, textureOut).x; + rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, textureOut).x; + rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, textureOut).x; + #endif + /* * CCM is a 3x3 in the format * diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag index 1b85196a..f0b9a6cc 100644 --- a/src/libcamera/shaders/bayer_unpacked.frag +++ b/src/libcamera/shaders/bayer_unpacked.frag @@ -29,6 +29,10 @@ uniform vec3 blacklevel; uniform float gamma; uniform float contrastExp; +uniform sampler2D lsc_tex_red; +uniform sampler2D lsc_tex_blue; +uniform sampler2D lsc_tex_green; + float apply_contrast(float value) { // Apply simple S-curve @@ -130,6 +134,12 @@ void main(void) { rgb = rgb - blacklevel; + #if defined(DO_LSC) + rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, center.xy).x; + rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, center.xy).x; + rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, center.xy).x; + #endif + /* * CCM is a 3x3 in the format *