[libcamera-devel] [PATCH 1/5] pipeline: raspberrypi: Refactor stream configuration routine

David Plowman david.plowman at raspberrypi.com
Wed Jan 20 10:40:59 CET 2021


Hi Naush

Thanks for this patch. No issues with this from me!

On Wed, 20 Jan 2021 at 08:34, Naushir Patuck <naush at raspberrypi.com> wrote:
>
> Refactor the high/low resolution stream format and output selection
> routine. This change is in preparation of adding 1/4 resolution output
> for fast colour denoise.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>

Reviewed-by: David Plowman <david.plowman at raspberrypi.com>

Best regards
David

> ---
>  .../pipeline/raspberrypi/raspberrypi.cpp      | 57 ++++++-------------
>  1 file changed, 16 insertions(+), 41 deletions(-)
>
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index f121328ee9a9..e03bcb036f9f 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -624,52 +624,27 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
>                         continue;
>                 }
>
> -               if (i == maxIndex) {
> -                       /* ISP main output format. */
> -                       V4L2VideoDevice *dev = data->isp_[Isp::Output0].dev();
> -                       V4L2PixelFormat fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);
> -                       format.size = cfg.size;
> -                       format.fourcc = fourcc;
> -
> -                       ret = dev->setFormat(&format);
> -                       if (ret)
> -                               return -EINVAL;
> -
> -                       if (format.size != cfg.size || format.fourcc != fourcc) {
> -                               LOG(RPI, Error)
> -                                       << "Failed to set format on ISP capture0 device: "
> -                                       << format.toString();
> -                               return -EINVAL;
> -                       }
> -
> -                       cfg.setStream(&data->isp_[Isp::Output0]);
> -                       data->isp_[Isp::Output0].setExternal(true);
> -               }
> +               /* The largest resolution gets routed to the ISP Output 0 node. */
> +               RPi::Stream *stream = (i == maxIndex) ? &data->isp_[Isp::Output0] :
> +                                                       &data->isp_[Isp::Output1];
>
> -               /*
> -                * ISP second output format. This fallthrough means that if a
> -                * second output stream has not been configured, we simply use
> -                * the Output0 configuration.
> -                */
> -               V4L2VideoDevice *dev = data->isp_[Isp::Output1].dev();
> -               format.fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);
> +               V4L2PixelFormat fourcc = stream->dev()->toV4L2PixelFormat(cfg.pixelFormat);
>                 format.size = cfg.size;
> +               format.fourcc = fourcc;
>
> -               ret = dev->setFormat(&format);
> -               if (ret) {
> +               ret = stream->dev()->setFormat(&format);
> +               if (ret)
> +                       return -EINVAL;
> +
> +               if (format.size != cfg.size || format.fourcc != fourcc) {
>                         LOG(RPI, Error)
> -                               << "Failed to set format on ISP capture1 device: "
> -                               << format.toString();
> -                       return ret;
> -               }
> -               /*
> -                * If we have not yet provided a stream for this config, it
> -                * means this is to be routed from Output1.
> -                */
> -               if (!cfg.stream()) {
> -                       cfg.setStream(&data->isp_[Isp::Output1]);
> -                       data->isp_[Isp::Output1].setExternal(true);
> +                               << "Failed to set format on " << stream->name()
> +                               << " to " << format.toString();
> +                       return -EINVAL;
>                 }
> +
> +               cfg.setStream(stream);
> +               stream->setExternal(true);
>         }
>
>         /* ISP statistics output format. */
> --
> 2.25.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list