diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 35c29ceca..27eb728f3 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -1183,6 +1183,13 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()
 		return Invalid;
 	}
 
+	unsigned int processedCount = config_.size() - rawCount;
+	if (data_->pipe()->swIspEnabled() && processedCount > 1) {
+		LOG(SimplePipeline, Error)
+			<< "Software ISP does not support multiple processed streams";
+		return Invalid;
+	}
+
 	/*
 	 * Find the best configuration for the pipeline using a heuristic.
 	 * First select the pixel format based on the raw streams followed by
@@ -1427,6 +1434,11 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, std::span<const Str
 			}
 			rawRequested = true;
 		} else {
+			if (swIspEnabled_ && processedRequested) {
+				LOG(SimplePipeline, Error)
+					<< "Software ISP can't capture multiple processed streams";
+				return nullptr;
+			}
 			processedRequested = true;
 		}
 
