diff --git a/src/ipa/libipa/agc.cpp b/src/ipa/libipa/agc.cpp
index 127b4893fd..f40f4b0947 100644
--- a/src/ipa/libipa/agc.cpp
+++ b/src/ipa/libipa/agc.cpp
@@ -1154,7 +1154,8 @@ void AgcAlgorithm::processFrameDuration(const agc::Session &session,
 	 * the minimum frame duration when we have short exposures.
 	 */
 	const auto frameLength = std::max<uint32_t>(
-		frameContext.minFrameDuration / lineDuration,
+		std::min(std::ceil(frameContext.minFrameDuration / lineDuration),
+			 frameContext.maxFrameDuration / lineDuration),
 		frameContext.exposure);
 
 	frameContext.vblank = frameLength - session.sensor.outputSize.height;
