diff --git a/src/ipa/rkisp1/algorithms/ccm.cpp b/src/ipa/rkisp1/algorithms/ccm.cpp
index 4c4e3f5029a4..e9b1e78b7ec1 100644
--- a/src/ipa/rkisp1/algorithms/ccm.cpp
+++ b/src/ipa/rkisp1/algorithms/ccm.cpp
@@ -101,7 +101,7 @@ void Ccm::setParameters(rkisp1_params_cfg *params,
 /**
  * \copydoc libcamera::ipa::Algorithm::prepare
  */
-void Ccm::prepare(IPAContext &context, const uint32_t frame,
+void Ccm::prepare([[maybe_unused]] IPAContext &context, const uint32_t frame,
 		  IPAFrameContext &frameContext,
 		  rkisp1_params_cfg *params)
 {
@@ -111,13 +111,16 @@ void Ccm::prepare(IPAContext &context, const uint32_t frame,
 	 * \todo The colour temperature will likely be noisy, add filtering to
 	 * avoid updating the CCM matrix all the time.
 	 */
-	if (frame > 0 && ct == ct_)
+	if (frame > 0 && ct == ct_) {
+		frameContext.ccm.ccm = context.activeState.ccm.ccm;
 		return;
+	}
 
 	ct_ = ct;
 	Matrix<float, 3, 3> ccm = ccm_.get(ct);
 	Matrix<int16_t, 3, 1> offsets = offsets_.get(ct);
 
+	context.activeState.ccm.ccm = ccm;
 	frameContext.ccm.ccm = ccm;
 
 	setParameters(params, ccm, offsets);
diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
index 27a9bf62fc16..061efc0c578e 100644
--- a/src/ipa/rkisp1/ipa_context.h
+++ b/src/ipa/rkisp1/ipa_context.h
@@ -97,6 +97,10 @@ struct IPAActiveState {
 		bool autoEnabled;
 	} awb;
 
+	struct {
+		Matrix<float, 3, 3> ccm;
+	} ccm;
+
 	struct {
 		int8_t brightness;
 		uint8_t contrast;
