diff --git a/src/ipa/mali-c55/algorithms/agc.cpp b/src/ipa/mali-c55/algorithms/agc.cpp
index 2c747da891..d665ba5244 100644
--- a/src/ipa/mali-c55/algorithms/agc.cpp
+++ b/src/ipa/mali-c55/algorithms/agc.cpp
@@ -257,16 +257,22 @@ void Agc::process(IPAContext &context,
 	}

 	statistics_.parseStatistics(stats);
-	context.activeState.agc.temperatureK = estimateCCT({ { statistics_.rHist.interQuantileMean(0, 1),
-							       statistics_.gHist.interQuantileMean(0, 1),
-							       statistics_.bHist.interQuantileMean(0, 1) } });
-
-	agc_.process(context.configuration.agc, context.activeState.agc, frameContext.agc, {{
-		.traits = AgcTraits(statistics_),
-		.yHist = statistics_.yHist,
-		.exposure = frameContext.sensor.exposure,
-		.gain = frameContext.sensor.gain,
-	}}, metadata);
+	if (statistics_.isValid()) {
+		context.activeState.agc.temperatureK = estimateCCT(
+			{ { statistics_.rHist.interQuantileMean(0, 1),
+			    statistics_.gHist.interQuantileMean(0, 1),
+			    statistics_.bHist.interQuantileMean(0, 1) } });
+
+		agc_.process(context.configuration.agc, context.activeState.agc, frameContext.agc, {{
+			.traits = AgcTraits(statistics_),
+			.yHist = statistics_.yHist,
+			.exposure = frameContext.sensor.exposure,
+			.gain = frameContext.sensor.gain,
+		}}, metadata);
+	} else {
+		LOG(MaliC55Agc, Debug) << "ignoring invalid statistics";
+		agc_.process(context.configuration.agc, context.activeState.agc, frameContext.agc, {}, metadata);
+	}

 	metadata.set(controls::ColourTemperature, context.activeState.agc.temperatureK);
 }
diff --git a/src/ipa/mali-c55/algorithms/agc.h b/src/ipa/mali-c55/algorithms/agc.h
index 809a57c53a..998ef57210 100644
--- a/src/ipa/mali-c55/algorithms/agc.h
+++ b/src/ipa/mali-c55/algorithms/agc.h
@@ -32,6 +32,11 @@ public:
 	uint32_t decodeBinValue(uint16_t binVal);
 	void parseStatistics(const mali_c55_stats_buffer *stats);

+	bool isValid() const
+	{
+		return !rHist.empty() && !gHist.empty() && !bHist.empty();
+	}
+
 	Histogram rHist;
 	Histogram gHist;
 	Histogram bHist;
