[libcamera-devel] [PATCH 02/20] libcamera: pipeline: simple: Don't override stride at configure time

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Jan 31 23:46:44 CET 2021


The stride (and frame size) calculation has been moved from configure
time to configuration validate time by commit 89fb1efac240 ("libcamera: simple:
Fill stride and frameSize at config validation"). This change has
however left one stray setting of the stride when configuring the
converter. Fix it.

While at it, turn the SimpleConverter::configure() output configuration
argument to a const reference to emphasize it can't be null and isn't
modified by the function, and rename it from cfg to outputCfg to make
its purpose clearer.

Fixes: 89fb1efac240 ("libcamera: simple: Fill stride and frameSize at config validation")
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/libcamera/pipeline/simple/converter.cpp | 10 ++++------
 src/libcamera/pipeline/simple/converter.h   |  2 +-
 src/libcamera/pipeline/simple/simple.cpp    |  2 +-
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp
index a6a8e139cb3e..87d15c781ed8 100644
--- a/src/libcamera/pipeline/simple/converter.cpp
+++ b/src/libcamera/pipeline/simple/converter.cpp
@@ -134,7 +134,7 @@ SizeRange SimpleConverter::sizes(const Size &input)
 }
 
 int SimpleConverter::configure(PixelFormat inputFormat, const Size &inputSize,
-			       StreamConfiguration *cfg)
+			       const StreamConfiguration &outputCfg)
 {
 	V4L2DeviceFormat format;
 	int ret;
@@ -157,10 +157,10 @@ int SimpleConverter::configure(PixelFormat inputFormat, const Size &inputSize,
 	}
 
 	/* Set the pixel format and size on the output. */
-	videoFormat = m2m_->capture()->toV4L2PixelFormat(cfg->pixelFormat);
+	videoFormat = m2m_->capture()->toV4L2PixelFormat(outputCfg.pixelFormat);
 	format = {};
 	format.fourcc = videoFormat;
-	format.size = cfg->size;
+	format.size = outputCfg.size;
 
 	ret = m2m_->capture()->setFormat(&format);
 	if (ret < 0) {
@@ -169,14 +169,12 @@ int SimpleConverter::configure(PixelFormat inputFormat, const Size &inputSize,
 		return ret;
 	}
 
-	if (format.fourcc != videoFormat || format.size != cfg->size) {
+	if (format.fourcc != videoFormat || format.size != outputCfg.size) {
 		LOG(SimplePipeline, Error)
 			<< "Output format not supported";
 		return -EINVAL;
 	}
 
-	cfg->stride = format.planes[0].bpl;
-
 	return 0;
 }
 
diff --git a/src/libcamera/pipeline/simple/converter.h b/src/libcamera/pipeline/simple/converter.h
index a3c4d899cfc8..06d66f8caba7 100644
--- a/src/libcamera/pipeline/simple/converter.h
+++ b/src/libcamera/pipeline/simple/converter.h
@@ -37,7 +37,7 @@ public:
 	SizeRange sizes(const Size &input);
 
 	int configure(PixelFormat inputFormat, const Size &inputSize,
-		      StreamConfiguration *cfg);
+		      const StreamConfiguration &outputCfg);
 	int exportBuffers(unsigned int count,
 			  std::vector<std::unique_ptr<FrameBuffer>> *buffers);
 
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index b7aa3d034568..a97b8442d9a4 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -604,7 +604,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
 
 	if (useConverter_) {
 		ret = converter_->configure(pipeConfig.pixelFormat,
-					    pipeConfig.captureSize, &cfg);
+					    pipeConfig.captureSize, cfg);
 		if (ret < 0) {
 			LOG(SimplePipeline, Error)
 				<< "Unable to configure converter";
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list