diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index e810fb725d81350d..6b1b3fb64f8b2c0b 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -856,15 +856,23 @@ int Camera::queueRequest(Request *request)
  */
 int Camera::start()
 {
+	int ret;
+
 	if (disconnected_)
 		return -ENODEV;
 
 	if (!stateIs(CameraPrepared))
 		return -EACCES;
 
+	for (Stream *stream : activeStreams_) {
+		ret = stream->start();
+		if (ret < 0)
+			return ret;
+	}
+
 	LOG(Camera, Debug) << "Starting capture";
 
-	int ret = pipe_->start(this);
+	ret = pipe_->start(this);
 	if (ret)
 		return ret;
 
@@ -899,6 +907,9 @@ int Camera::stop()
 
 	pipe_->stop(this);
 
+	for (Stream *stream : activeStreams_)
+		stream->stop();
+
 	return 0;
 }
 
