[v13,7/8] libcamera: simple: Require metadata only when software ISP is used
diff mbox series

Message ID 20251021182716.29274-8-mzamazal@redhat.com
State New
Headers show
Series
  • Enable raw streams with software ISP
Related show

Commit Message

Milan Zamazal Oct. 21, 2025, 6:27 p.m. UTC
If software ISP is enabled then metadata is required in the simple
pipeline.  But this doesn't apply if the software ISP is not actually
used, for example when only a raw stream is produced.  Then the pipeline
waits for metadata that never comes.

This patch fixes the problem by requiring metadata only when software
ISP is used.

Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
---
 src/libcamera/pipeline/simple/simple.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Umang Jain Oct. 24, 2025, 12:01 p.m. UTC | #1
On Tue, Oct 21, 2025 at 08:27:14PM +0200, Milan Zamazal wrote:
> If software ISP is enabled then metadata is required in the simple
> pipeline.  But this doesn't apply if the software ISP is not actually
> used, for example when only a raw stream is produced.  Then the pipeline
> waits for metadata that never comes.
> 
> This patch fixes the problem by requiring metadata only when software
> ISP is used.
> 
> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>

Reviewed-by: Umang Jain <uajain@igalia.com>

> ---
>  src/libcamera/pipeline/simple/simple.cpp | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index 59252dac2..0c3284feb 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -1670,6 +1670,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
>  	int ret;
>  
>  	std::map<const Stream *, FrameBuffer *> buffers;
> +	bool metadataRequired = false;
>  
>  	for (auto &[stream, buffer] : request->buffers()) {
>  		/*
> @@ -1679,6 +1680,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
>  		 */
>  		if (data->useConversion_) {
>  			buffers.emplace(stream, buffer);
> +			metadataRequired = !!data->swIsp_;
>  		} else {
>  			ret = data->video_->queueBuffer(buffer);
>  			if (ret < 0)
> @@ -1686,7 +1688,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
>  		}
>  	}
>  
> -	data->frameInfo_.create(request, !!data->swIsp_);
> +	data->frameInfo_.create(request, metadataRequired);
>  	if (data->useConversion_) {
>  		data->conversionQueue_.push({ request, std::move(buffers) });
>  		if (data->swIsp_)
> -- 
> 2.51.0
>

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 59252dac2..0c3284feb 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -1670,6 +1670,7 @@  int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
 	int ret;
 
 	std::map<const Stream *, FrameBuffer *> buffers;
+	bool metadataRequired = false;
 
 	for (auto &[stream, buffer] : request->buffers()) {
 		/*
@@ -1679,6 +1680,7 @@  int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
 		 */
 		if (data->useConversion_) {
 			buffers.emplace(stream, buffer);
+			metadataRequired = !!data->swIsp_;
 		} else {
 			ret = data->video_->queueBuffer(buffer);
 			if (ret < 0)
@@ -1686,7 +1688,7 @@  int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
 		}
 	}
 
-	data->frameInfo_.create(request, !!data->swIsp_);
+	data->frameInfo_.create(request, metadataRequired);
 	if (data->useConversion_) {
 		data->conversionQueue_.push({ request, std::move(buffers) });
 		if (data->swIsp_)