diff --git a/src/ipa/libipa/agc.cpp b/src/ipa/libipa/agc.cpp
index b969118063..34379c0d61 100644
--- a/src/ipa/libipa/agc.cpp
+++ b/src/ipa/libipa/agc.cpp
@@ -754,24 +754,22 @@ void AgcAlgorithm::process(const agc::Session &session, agc::ActiveState &state,
 	double minAnalogueGain;
 	double maxAnalogueGain;
 
-	/* \todo This uses the configuration from an already completed frame. */
-
-	if (frameContext.autoExposureEnabled) {
+	if (state.autoExposureEnabled) {
 		minExposureTime = session.minExposureTime;
-		maxExposureTime = std::clamp(frameContext.maxFrameDuration,
+		maxExposureTime = std::clamp(state.maxFrameDuration,
 					     session.minExposureTime,
 					     session.maxExposureTime);
 	} else {
-		minExposureTime = lineDuration * frameContext.exposure;
+		minExposureTime = lineDuration * state.manual.exposure;
 		maxExposureTime = minExposureTime;
 	}
 
-	if (frameContext.autoGainEnabled) {
+	if (state.autoGainEnabled) {
 		minAnalogueGain = session.minAnalogueGain;
 		maxAnalogueGain = session.maxAnalogueGain;
 	} else {
-		minAnalogueGain = frameContext.gain;
-		maxAnalogueGain = frameContext.gain;
+		minAnalogueGain = state.manual.gain;
+		maxAnalogueGain = state.manual.gain;
 	}
 
 	std::visit(utils::overloaded{
@@ -817,10 +815,10 @@ void AgcAlgorithm::process(const agc::Session &session, agc::ActiveState &state,
 				.traits = params->traits,
 				.yHist = params->yHist,
 				.effectiveExposureValue = effectiveExposureValue,
-				.constraintModeIndex = frameContext.constraintMode,
-				.exposureModeIndex = frameContext.exposureMode,
+				.constraintModeIndex = state.constraintMode,
+				.exposureModeIndex = state.exposureMode,
 				.lux = params->lux,
-				.exposureCompensation = std::pow(2.0, frameContext.exposureValue),
+				.exposureCompensation = std::pow(2.0, state.exposureValue),
 			});
 
 			/* Update the estimated exposure and gain. */
