[libcamera-devel,v2,05/20] libcamera: ipu3: Do not overwrite StreamConfiguration

Message ID 20200709084128.5316-6-jacopo@jmondi.org
State Accepted
Headers show
Series
  • libcamera: ipu3: Rework configuration
Related show

Commit Message

Jacopo Mondi July 9, 2020, 8:41 a.m. UTC
The validate function overwrites the generated StreamConfiguration with
the one reported by the CIO2 unit when inspecting the RAW stream
configuration.

As we prepare to add StreamFormats to the IPU3 StreamConfiguration,
assigning to the CIO2 generated configuration would delete the
StreamFormats.

Fix this by updating relevant fields only in order to keep the
assigned StreamFormats.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 src/libcamera/pipeline/ipu3/ipu3.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Laurent Pinchart July 10, 2020, 8:34 a.m. UTC | #1
Hi Jacopo,

Thank you for the patch.

On Thu, Jul 09, 2020 at 10:41:13AM +0200, Jacopo Mondi wrote:
> The validate function overwrites the generated StreamConfiguration with
> the one reported by the CIO2 unit when inspecting the RAW stream
> configuration.
> 
> As we prepare to add StreamFormats to the IPU3 StreamConfiguration,
> assigning to the CIO2 generated configuration would delete the
> StreamFormats.
> 
> Fix this by updating relevant fields only in order to keep the
> assigned StreamFormats.
> 
> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

The fact that it's too easy to make this mistake calls for a better API,
but that's not for this patch series.

> ---
>  src/libcamera/pipeline/ipu3/ipu3.cpp | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index e62a5d5b3517..978a6e58c72f 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -269,7 +269,9 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
>  		const Stream *stream = streams_[i];
>  
>  		if (stream == &data_->rawStream_) {
> -			cfg = cio2Configuration_;
> +			cfg.size = cio2Configuration_.size;
> +			cfg.pixelFormat = cio2Configuration_.pixelFormat;
> +			cfg.bufferCount = cio2Configuration_.bufferCount;
>  		} else {
>  			bool scale = stream == &data_->vfStream_;
>  			adjustStream(config_[i], scale);

Patch

diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index e62a5d5b3517..978a6e58c72f 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -269,7 +269,9 @@  CameraConfiguration::Status IPU3CameraConfiguration::validate()
 		const Stream *stream = streams_[i];
 
 		if (stream == &data_->rawStream_) {
-			cfg = cio2Configuration_;
+			cfg.size = cio2Configuration_.size;
+			cfg.pixelFormat = cio2Configuration_.pixelFormat;
+			cfg.bufferCount = cio2Configuration_.bufferCount;
 		} else {
 			bool scale = stream == &data_->vfStream_;
 			adjustStream(config_[i], scale);