[libcamera-devel] [PATCH v3 6/9] pipeline: raspberrypi: Set packing formats for the Unicam image node

Kieran Bingham kieran.bingham at ideasonboard.com
Wed Oct 27 14:17:49 CEST 2021


Quoting Naushir Patuck (2021-10-27 10:28:00)
> Default to using CSI2 packed formats when setting up the Unicam image format,
> but use an unpacked format if the user requests one through StreamConfiguration.
> 
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
> ---
>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 48f561d31a31..1b78b5e74a63 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -96,14 +96,14 @@ BayerFormat mbusCodeToBayerFormat(unsigned int mbusCode)
>         return BayerFormat{};
>  }
>  
> -V4L2DeviceFormat toV4L2DeviceFormat(V4L2SubdeviceFormat &format)
> +V4L2DeviceFormat toV4L2DeviceFormat(V4L2SubdeviceFormat &format, BayerFormat::Packing packing)
>  {
>         V4L2DeviceFormat deviceFormat;
>         BayerFormat bayer = mbusCodeToBayerFormat(format.mbus_code);
>  
>         ASSERT(bayer.isValid());
>  
> -       bayer.packing = BayerFormat::Packing::CSI2Packed;
> +       bayer.packing = packing;

Ok, that really solidifies the answer to my earlier question ;-)


>         deviceFormat.fourcc = bayer.toV4L2PixelFormat();
>         deviceFormat.size = format.size;
>         return deviceFormat;
> @@ -413,7 +413,8 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()
>                          * the user request.
>                          */
>                         V4L2SubdeviceFormat sensorFormat = findBestFormat(data_->sensorFormats_, cfg.size);
> -                       V4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat);
> +                       V4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat,
> +                                                                          BayerFormat::Packing::CSI2Packed);

I believe ::Packing is optional if you want to reduce line length. But
can also stay, it won't make a big difference to the line formatting.


>                         int ret = data_->unicam_[Unicam::Image].dev()->tryFormat(&unicamFormat);
>                         if (ret)
>                                 return Invalid;
> @@ -631,6 +632,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
>         for (auto const stream : data->streams_)
>                 stream->reset();
>  
> +       BayerFormat::Packing packing = BayerFormat::Packing::CSI2Packed;

Same.


Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

>         Size maxSize, sensorSize;
>         unsigned int maxIndex = 0;
>         bool rawStream = false;
> @@ -649,6 +651,8 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
>                          */
>                         sensorSize = cfg.size;
>                         rawStream = true;
> +                       /* Check if the user has explicitly set an unpacked format. */
> +                       packing = BayerFormat::fromPixelFormat(cfg.pixelFormat).packing;
>                 } else {
>                         if (cfg.size > maxSize) {
>                                 maxSize = config->at(i).size;
> @@ -667,7 +671,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
>          * Unicam image output format. The ISP input format gets set at start,
>          * just in case we have swapped bayer orders due to flips.
>          */
> -       V4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat);
> +       V4L2DeviceFormat unicamFormat = toV4L2DeviceFormat(sensorFormat, packing);
>         ret = data->unicam_[Unicam::Image].dev()->setFormat(&unicamFormat);
>         if (ret)
>                 return ret;
> -- 
> 2.25.1
>


More information about the libcamera-devel mailing list