diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag
index c0632eb1f..6bca07b6e 100644
--- a/src/libcamera/shaders/bayer_1x_packed.frag
+++ b/src/libcamera/shaders/bayer_1x_packed.frag
@@ -69,6 +69,7 @@ uniform sampler2D red_param;
 uniform sampler2D green_param;
 uniform sampler2D blue_param;
 uniform mat3 ccm;
+uniform vec3 blacklevel;
 
 void main(void)
 {
@@ -217,6 +218,9 @@ void main(void)
 			vec3(patterns.wz, C));
 
 #if defined(APPLY_CCM_PARAMETERS)
+
+	rgb = rgb - blacklevel;
+
 	/*
 	 *   CCM is a 3x3 in the format
 	 *
diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag
index a9996b94e..66cece56b 100644
--- a/src/libcamera/shaders/bayer_unpacked.frag
+++ b/src/libcamera/shaders/bayer_unpacked.frag
@@ -28,6 +28,7 @@ varying vec4            center;
 varying vec4            yCoord;
 varying vec4            xCoord;
 uniform mat3            ccm;
+uniform vec3            blacklevel;
 
 void main(void) {
     vec3 rgb;
@@ -112,6 +113,9 @@ void main(void) {
             vec3(PATTERN.yx, C));
 
 #if defined(APPLY_CCM_PARAMETERS)
+
+        rgb = rgb - blacklevel;
+
         /*
          *   CCM is a 3x3 in the format
          *
