[libcamera-devel,02/20] libcamera: pipeline: simple: Don't override stride at configure time
diff mbox series

Message ID 20210131224702.8838-3-laurent.pinchart@ideasonboard.com
State Accepted
Delegated to: Laurent Pinchart
Headers show
Series
  • [libcamera-devel,01/20] libcamera: pipeline: simple: Manage converter with std::unique_ptr<>
Related show

Commit Message

Laurent Pinchart Jan. 31, 2021, 10:46 p.m. UTC
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@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(-)

Comments

Paul Elder Feb. 17, 2021, 9:55 a.m. UTC | #1
Hi Laurent,

On Mon, Feb 01, 2021 at 12:46:44AM +0200, Laurent Pinchart wrote:
> 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@ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder@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
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
Kieran Bingham Feb. 19, 2021, 5:10 p.m. UTC | #2
On 31/01/2021 22:46, Laurent Pinchart wrote:
> 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@ideasonboard.com>

Reviewed-by: Kieran Bingham <kieran.bingham@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";
>

Patch
diff mbox series

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";