diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index b04a9726efa5ade6..c5eea3a01b0e9446 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -274,8 +274,15 @@ int PipelineHandlerVimc::start(Camera *camera)
 	if (ret < 0)
 		return ret;
 
+	ret = data->ipa_->start();
+	if (ret) {
+		data->video_->releaseBuffers();
+		return ret;
+	}
+
 	ret = data->video_->streamOn();
 	if (ret < 0) {
+		data->ipa_->stop();
 		data->video_->releaseBuffers();
 		return ret;
 	}
@@ -287,6 +294,7 @@ void PipelineHandlerVimc::stop(Camera *camera)
 {
 	VimcCameraData *data = cameraData(camera);
 	data->video_->streamOff();
+	data->ipa_->stop();
 	data->video_->releaseBuffers();
 }
 
