[{"id":34984,"web_url":"https://patchwork.libcamera.org/comment/34984/","msgid":"<175312285571.50296.3960952293769777938@ping.linuxembedded.co.uk>","date":"2025-07-21T18:34:15","subject":"Re: [PATCH v1 2/2] libcamera: camera_sensor: getFormat(): Use span","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Barnabás Pőcze (2025-03-03 19:33:49)\n> Do not force the caller to construct a vector.\n> \n\nAs with Patch 1/2, a more comprehensive commit message might be nicer.\n\nBut I think these are reasonable, and CI is green.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n>  include/libcamera/internal/camera_sensor.h    |  2 +-\n>  src/libcamera/pipeline/rkisp1/rkisp1_path.cpp |  4 ++--\n>  src/libcamera/sensor/camera_sensor_legacy.cpp |  4 ++--\n>  src/libcamera/sensor/camera_sensor_raw.cpp    |  4 ++--\n>  test/camera-sensor.cpp                        | 11 +++++++----\n>  5 files changed, 14 insertions(+), 11 deletions(-)\n> \n> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\n> index 59a1604c5..f6ef4df17 100644\n> --- a/include/libcamera/internal/camera_sensor.h\n> +++ b/include/libcamera/internal/camera_sensor.h\n> @@ -54,7 +54,7 @@ public:\n>         virtual Size resolution() const = 0;\n>  \n>         virtual V4L2SubdeviceFormat\n> -       getFormat(const std::vector<unsigned int> &mbusCodes,\n> +       getFormat(Span<const unsigned int> mbusCodes,\n>                   const Size &size, const Size maxSize = Size()) const = 0;\n>         virtual int setFormat(V4L2SubdeviceFormat *format,\n>                               Transform transform = Transform::Identity) = 0;\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> index eee5b09e2..ba702b454 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> @@ -339,7 +339,7 @@ RkISP1Path::validate(const CameraSensor *sensor,\n>                                             : cfg->size;\n>  \n>                 V4L2SubdeviceFormat sensorFormat =\n> -                       sensor->getFormat({ mbusCode }, rawSize);\n> +                       sensor->getFormat(std::array{ mbusCode }, rawSize);\n>  \n>                 if (sensorConfig &&\n>                     sensorConfig->outputSize != sensorFormat.size)\n> @@ -360,7 +360,7 @@ RkISP1Path::validate(const CameraSensor *sensor,\n>  \n>                 uint32_t mbusCode = formatToMediaBus.at(rawFormat);\n>                 V4L2SubdeviceFormat sensorFormat =\n> -                       sensor->getFormat({ mbusCode }, sensorSize);\n> +                       sensor->getFormat(std::array{ mbusCode }, sensorSize);\n>  \n>                 if (sensorFormat.size != sensorSize)\n>                         return CameraConfiguration::Invalid;\n> diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp\n> index 1eccca519..1b9b5c9a0 100644\n> --- a/src/libcamera/sensor/camera_sensor_legacy.cpp\n> +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp\n> @@ -73,7 +73,7 @@ public:\n>         std::vector<Size> sizes(unsigned int mbusCode) const override;\n>         Size resolution() const override;\n>  \n> -       V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,\n> +       V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,\n>                                       const Size &size,\n>                                       const Size maxSize) const override;\n>         int setFormat(V4L2SubdeviceFormat *format,\n> @@ -699,7 +699,7 @@ Size CameraSensorLegacy::resolution() const\n>  }\n>  \n>  V4L2SubdeviceFormat\n> -CameraSensorLegacy::getFormat(const std::vector<unsigned int> &mbusCodes,\n> +CameraSensorLegacy::getFormat(Span<const unsigned int> mbusCodes,\n>                               const Size &size, Size maxSize) const\n>  {\n>         unsigned int desiredArea = size.width * size.height;\n> diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp\n> index c65ecbb86..7ac0f563d 100644\n> --- a/src/libcamera/sensor/camera_sensor_raw.cpp\n> +++ b/src/libcamera/sensor/camera_sensor_raw.cpp\n> @@ -74,7 +74,7 @@ public:\n>         std::vector<Size> sizes(unsigned int mbusCode) const override;\n>         Size resolution() const override;\n>  \n> -       V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,\n> +       V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,\n>                                       const Size &size,\n>                                       const Size maxSize) const override;\n>         int setFormat(V4L2SubdeviceFormat *format,\n> @@ -757,7 +757,7 @@ Size CameraSensorRaw::resolution() const\n>  }\n>  \n>  V4L2SubdeviceFormat\n> -CameraSensorRaw::getFormat(const std::vector<unsigned int> &mbusCodes,\n> +CameraSensorRaw::getFormat(Span<const unsigned int> mbusCodes,\n>                            const Size &size, Size maxSize) const\n>  {\n>         unsigned int desiredArea = size.width * size.height;\n> diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp\n> index 869c78896..c30a2212e 100644\n> --- a/test/camera-sensor.cpp\n> +++ b/test/camera-sensor.cpp\n> @@ -96,10 +96,13 @@ protected:\n>                 }\n>  \n>                 /* Use an invalid format and make sure it's not selected. */\n> -               V4L2SubdeviceFormat format = sensor_->getFormat({ 0xdeadbeef,\n> -                                                                 MEDIA_BUS_FMT_SBGGR10_1X10,\n> -                                                                 MEDIA_BUS_FMT_BGR888_1X24 },\n> -                                                               Size(1024, 768));\n> +               static constexpr uint32_t mbusCodes[] = {\n> +                       0xdeadbeef,\n> +                       MEDIA_BUS_FMT_SBGGR10_1X10,\n> +                       MEDIA_BUS_FMT_BGR888_1X24,\n> +               };\n> +\n> +               V4L2SubdeviceFormat format = sensor_->getFormat(mbusCodes, Size(1024, 768));\n>                 if (format.code != MEDIA_BUS_FMT_SBGGR10_1X10 ||\n>                     format.size != Size(4096, 2160)) {\n>                         cerr << \"Failed to get a suitable format, expected 4096x2160-0x\"\n> -- \n> 2.48.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 78370BDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 21 Jul 2025 18:34:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2BB9568FFD;\n\tMon, 21 Jul 2025 20:34:20 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EDBB668FB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 21 Jul 2025 20:34:18 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id EFF1E7917;\n\tMon, 21 Jul 2025 20:33:41 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ZCDm7gC0\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1753122822;\n\tbh=ekClRT7ePg5Jr2F+sG6nF9+/nE1GQ34WjBur6H3GeEQ=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=ZCDm7gC09GLXcA7CUrtfHpmbzDBwSUWAWnXZRmFKVFxutWkwpLFIOB3KyxjXd+kvO\n\tTxlJCfmFWySJprzKPMLtp1AkymyiZCyyTOsShFdexBAvTfWyEvFukEM7ESyf7dyi+c\n\tMJ1Fdemn4+uIZrMLn1HoLbVpGPQnes0gm1R6qxjc=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250303193349.785692-2-barnabas.pocze@ideasonboard.com>","References":"<20250303193349.785692-1-barnabas.pocze@ideasonboard.com>\n\t<20250303193349.785692-2-barnabas.pocze@ideasonboard.com>","Subject":"Re: [PATCH v1 2/2] libcamera: camera_sensor: getFormat(): Use span","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 21 Jul 2025 19:34:15 +0100","Message-ID":"<175312285571.50296.3960952293769777938@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":35101,"web_url":"https://patchwork.libcamera.org/comment/35101/","msgid":"<20250724121937.GN11202@pendragon.ideasonboard.com>","date":"2025-07-24T12:19:37","subject":"Re: [PATCH v1 2/2] libcamera: camera_sensor: getFormat(): Use span","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Jul 21, 2025 at 07:34:15PM +0100, Kieran Bingham wrote:\n> Quoting Barnabás Pőcze (2025-03-03 19:33:49)\n> > Do not force the caller to construct a vector.\n> \n> As with Patch 1/2, a more comprehensive commit message might be nicer.\n> \n> But I think these are reasonable, and CI is green.\n> \n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> > ---\n> >  include/libcamera/internal/camera_sensor.h    |  2 +-\n> >  src/libcamera/pipeline/rkisp1/rkisp1_path.cpp |  4 ++--\n> >  src/libcamera/sensor/camera_sensor_legacy.cpp |  4 ++--\n> >  src/libcamera/sensor/camera_sensor_raw.cpp    |  4 ++--\n> >  test/camera-sensor.cpp                        | 11 +++++++----\n> >  5 files changed, 14 insertions(+), 11 deletions(-)\n> > \n> > diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\n> > index 59a1604c5..f6ef4df17 100644\n> > --- a/include/libcamera/internal/camera_sensor.h\n> > +++ b/include/libcamera/internal/camera_sensor.h\n> > @@ -54,7 +54,7 @@ public:\n> >         virtual Size resolution() const = 0;\n> >  \n> >         virtual V4L2SubdeviceFormat\n> > -       getFormat(const std::vector<unsigned int> &mbusCodes,\n> > +       getFormat(Span<const unsigned int> mbusCodes,\n\nPlease include span.h.\n\n> >                   const Size &size, const Size maxSize = Size()) const = 0;\n> >         virtual int setFormat(V4L2SubdeviceFormat *format,\n> >                               Transform transform = Transform::Identity) = 0;\n> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> > index eee5b09e2..ba702b454 100644\n> > --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> > @@ -339,7 +339,7 @@ RkISP1Path::validate(const CameraSensor *sensor,\n> >                                             : cfg->size;\n> >  \n> >                 V4L2SubdeviceFormat sensorFormat =\n> > -                       sensor->getFormat({ mbusCode }, rawSize);\n> > +                       sensor->getFormat(std::array{ mbusCode }, rawSize);\n\nYou should then include <array>.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> >  \n> >                 if (sensorConfig &&\n> >                     sensorConfig->outputSize != sensorFormat.size)\n> > @@ -360,7 +360,7 @@ RkISP1Path::validate(const CameraSensor *sensor,\n> >  \n> >                 uint32_t mbusCode = formatToMediaBus.at(rawFormat);\n> >                 V4L2SubdeviceFormat sensorFormat =\n> > -                       sensor->getFormat({ mbusCode }, sensorSize);\n> > +                       sensor->getFormat(std::array{ mbusCode }, sensorSize);\n> >  \n> >                 if (sensorFormat.size != sensorSize)\n> >                         return CameraConfiguration::Invalid;\n> > diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp\n> > index 1eccca519..1b9b5c9a0 100644\n> > --- a/src/libcamera/sensor/camera_sensor_legacy.cpp\n> > +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp\n> > @@ -73,7 +73,7 @@ public:\n> >         std::vector<Size> sizes(unsigned int mbusCode) const override;\n> >         Size resolution() const override;\n> >  \n> > -       V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,\n> > +       V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,\n> >                                       const Size &size,\n> >                                       const Size maxSize) const override;\n> >         int setFormat(V4L2SubdeviceFormat *format,\n> > @@ -699,7 +699,7 @@ Size CameraSensorLegacy::resolution() const\n> >  }\n> >  \n> >  V4L2SubdeviceFormat\n> > -CameraSensorLegacy::getFormat(const std::vector<unsigned int> &mbusCodes,\n> > +CameraSensorLegacy::getFormat(Span<const unsigned int> mbusCodes,\n> >                               const Size &size, Size maxSize) const\n> >  {\n> >         unsigned int desiredArea = size.width * size.height;\n> > diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp\n> > index c65ecbb86..7ac0f563d 100644\n> > --- a/src/libcamera/sensor/camera_sensor_raw.cpp\n> > +++ b/src/libcamera/sensor/camera_sensor_raw.cpp\n> > @@ -74,7 +74,7 @@ public:\n> >         std::vector<Size> sizes(unsigned int mbusCode) const override;\n> >         Size resolution() const override;\n> >  \n> > -       V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,\n> > +       V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,\n> >                                       const Size &size,\n> >                                       const Size maxSize) const override;\n> >         int setFormat(V4L2SubdeviceFormat *format,\n> > @@ -757,7 +757,7 @@ Size CameraSensorRaw::resolution() const\n> >  }\n> >  \n> >  V4L2SubdeviceFormat\n> > -CameraSensorRaw::getFormat(const std::vector<unsigned int> &mbusCodes,\n> > +CameraSensorRaw::getFormat(Span<const unsigned int> mbusCodes,\n> >                            const Size &size, Size maxSize) const\n> >  {\n> >         unsigned int desiredArea = size.width * size.height;\n> > diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp\n> > index 869c78896..c30a2212e 100644\n> > --- a/test/camera-sensor.cpp\n> > +++ b/test/camera-sensor.cpp\n> > @@ -96,10 +96,13 @@ protected:\n> >                 }\n> >  \n> >                 /* Use an invalid format and make sure it's not selected. */\n> > -               V4L2SubdeviceFormat format = sensor_->getFormat({ 0xdeadbeef,\n> > -                                                                 MEDIA_BUS_FMT_SBGGR10_1X10,\n> > -                                                                 MEDIA_BUS_FMT_BGR888_1X24 },\n> > -                                                               Size(1024, 768));\n> > +               static constexpr uint32_t mbusCodes[] = {\n> > +                       0xdeadbeef,\n> > +                       MEDIA_BUS_FMT_SBGGR10_1X10,\n> > +                       MEDIA_BUS_FMT_BGR888_1X24,\n> > +               };\n> > +\n> > +               V4L2SubdeviceFormat format = sensor_->getFormat(mbusCodes, Size(1024, 768));\n> >                 if (format.code != MEDIA_BUS_FMT_SBGGR10_1X10 ||\n> >                     format.size != Size(4096, 2160)) {\n> >                         cerr << \"Failed to get a suitable format, expected 4096x2160-0x\"","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 9F9DAC3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 24 Jul 2025 12:19:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 12065690F6;\n\tThu, 24 Jul 2025 14:19:43 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0FC46690E2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 24 Jul 2025 14:19:41 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id A2EF2C74;\n\tThu, 24 Jul 2025 14:19:01 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"F2cGB8N6\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1753359541;\n\tbh=iroDTwdbpcr+UjY0rRcFD2MCdVHZPafO5OElNlRa31Q=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=F2cGB8N6t97TjoF1kp4RVkUejsgBAvIggauma5yr9jyk0GDY41MfEy/NtM0oQEKUJ\n\tE0VANy53X3u9AJ8liZRzVLzzriA2x3zffK0jIQ50sHA39Go1GQ0QsIbHr5YTRpPeyx\n\teZAr8PtNscDBn3yXwFZBkRmdHG+GpCLKzSqjysvE=","Date":"Thu, 24 Jul 2025 15:19:37 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v1 2/2] libcamera: camera_sensor: getFormat(): Use span","Message-ID":"<20250724121937.GN11202@pendragon.ideasonboard.com>","References":"<20250303193349.785692-1-barnabas.pocze@ideasonboard.com>\n\t<20250303193349.785692-2-barnabas.pocze@ideasonboard.com>\n\t<175312285571.50296.3960952293769777938@ping.linuxembedded.co.uk>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<175312285571.50296.3960952293769777938@ping.linuxembedded.co.uk>","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":35164,"web_url":"https://patchwork.libcamera.org/comment/35164/","msgid":"<876905ae-9d8c-49f4-880c-cbbff4150125@ideasonboard.com>","date":"2025-07-27T18:09:22","subject":"Re: [PATCH v1 2/2] libcamera: camera_sensor: getFormat(): Use span","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"Hi\n\n2025. 07. 24. 14:19 keltezéssel, Laurent Pinchart írta:\n> On Mon, Jul 21, 2025 at 07:34:15PM +0100, Kieran Bingham wrote:\n>> Quoting Barnabás Pőcze (2025-03-03 19:33:49)\n>>> Do not force the caller to construct a vector.\n>>\n>> As with Patch 1/2, a more comprehensive commit message might be nicer.\n>>\n>> But I think these are reasonable, and CI is green.\n>>\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n>>> ---\n>>>   include/libcamera/internal/camera_sensor.h    |  2 +-\n>>>   src/libcamera/pipeline/rkisp1/rkisp1_path.cpp |  4 ++--\n>>>   src/libcamera/sensor/camera_sensor_legacy.cpp |  4 ++--\n>>>   src/libcamera/sensor/camera_sensor_raw.cpp    |  4 ++--\n>>>   test/camera-sensor.cpp                        | 11 +++++++----\n>>>   5 files changed, 14 insertions(+), 11 deletions(-)\n>>>\n>>> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\n>>> index 59a1604c5..f6ef4df17 100644\n>>> --- a/include/libcamera/internal/camera_sensor.h\n>>> +++ b/include/libcamera/internal/camera_sensor.h\n>>> @@ -54,7 +54,7 @@ public:\n>>>          virtual Size resolution() const = 0;\n>>>   \n>>>          virtual V4L2SubdeviceFormat\n>>> -       getFormat(const std::vector<unsigned int> &mbusCodes,\n>>> +       getFormat(Span<const unsigned int> mbusCodes,\n> \n> Please include span.h.\n\nIt is included by the previous patch.\n\n> \n>>>                    const Size &size, const Size maxSize = Size()) const = 0;\n>>>          virtual int setFormat(V4L2SubdeviceFormat *format,\n>>>                                Transform transform = Transform::Identity) = 0;\n>>> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n>>> index eee5b09e2..ba702b454 100644\n>>> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n>>> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n>>> @@ -339,7 +339,7 @@ RkISP1Path::validate(const CameraSensor *sensor,\n>>>                                              : cfg->size;\n>>>   \n>>>                  V4L2SubdeviceFormat sensorFormat =\n>>> -                       sensor->getFormat({ mbusCode }, rawSize);\n>>> +                       sensor->getFormat(std::array{ mbusCode }, rawSize);\n> \n> You should then include <array>.\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n>>>   \n>>>                  if (sensorConfig &&\n>>>                      sensorConfig->outputSize != sensorFormat.size)\n>>> @@ -360,7 +360,7 @@ RkISP1Path::validate(const CameraSensor *sensor,\n>>>   \n>>>                  uint32_t mbusCode = formatToMediaBus.at(rawFormat);\n>>>                  V4L2SubdeviceFormat sensorFormat =\n>>> -                       sensor->getFormat({ mbusCode }, sensorSize);\n>>> +                       sensor->getFormat(std::array{ mbusCode }, sensorSize);\n>>>   \n>>>                  if (sensorFormat.size != sensorSize)\n>>>                          return CameraConfiguration::Invalid;\n>>> diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp\n>>> index 1eccca519..1b9b5c9a0 100644\n>>> --- a/src/libcamera/sensor/camera_sensor_legacy.cpp\n>>> +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp\n>>> @@ -73,7 +73,7 @@ public:\n>>>          std::vector<Size> sizes(unsigned int mbusCode) const override;\n>>>          Size resolution() const override;\n>>>   \n>>> -       V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,\n>>> +       V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,\n>>>                                        const Size &size,\n>>>                                        const Size maxSize) const override;\n>>>          int setFormat(V4L2SubdeviceFormat *format,\n>>> @@ -699,7 +699,7 @@ Size CameraSensorLegacy::resolution() const\n>>>   }\n>>>   \n>>>   V4L2SubdeviceFormat\n>>> -CameraSensorLegacy::getFormat(const std::vector<unsigned int> &mbusCodes,\n>>> +CameraSensorLegacy::getFormat(Span<const unsigned int> mbusCodes,\n>>>                                const Size &size, Size maxSize) const\n>>>   {\n>>>          unsigned int desiredArea = size.width * size.height;\n>>> diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp\n>>> index c65ecbb86..7ac0f563d 100644\n>>> --- a/src/libcamera/sensor/camera_sensor_raw.cpp\n>>> +++ b/src/libcamera/sensor/camera_sensor_raw.cpp\n>>> @@ -74,7 +74,7 @@ public:\n>>>          std::vector<Size> sizes(unsigned int mbusCode) const override;\n>>>          Size resolution() const override;\n>>>   \n>>> -       V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,\n>>> +       V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,\n>>>                                        const Size &size,\n>>>                                        const Size maxSize) const override;\n>>>          int setFormat(V4L2SubdeviceFormat *format,\n>>> @@ -757,7 +757,7 @@ Size CameraSensorRaw::resolution() const\n>>>   }\n>>>   \n>>>   V4L2SubdeviceFormat\n>>> -CameraSensorRaw::getFormat(const std::vector<unsigned int> &mbusCodes,\n>>> +CameraSensorRaw::getFormat(Span<const unsigned int> mbusCodes,\n>>>                             const Size &size, Size maxSize) const\n>>>   {\n>>>          unsigned int desiredArea = size.width * size.height;\n>>> diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp\n>>> index 869c78896..c30a2212e 100644\n>>> --- a/test/camera-sensor.cpp\n>>> +++ b/test/camera-sensor.cpp\n>>> @@ -96,10 +96,13 @@ protected:\n>>>                  }\n>>>   \n>>>                  /* Use an invalid format and make sure it's not selected. */\n>>> -               V4L2SubdeviceFormat format = sensor_->getFormat({ 0xdeadbeef,\n>>> -                                                                 MEDIA_BUS_FMT_SBGGR10_1X10,\n>>> -                                                                 MEDIA_BUS_FMT_BGR888_1X24 },\n>>> -                                                               Size(1024, 768));\n>>> +               static constexpr uint32_t mbusCodes[] = {\n>>> +                       0xdeadbeef,\n>>> +                       MEDIA_BUS_FMT_SBGGR10_1X10,\n>>> +                       MEDIA_BUS_FMT_BGR888_1X24,\n>>> +               };\n>>> +\n>>> +               V4L2SubdeviceFormat format = sensor_->getFormat(mbusCodes, Size(1024, 768));\n>>>                  if (format.code != MEDIA_BUS_FMT_SBGGR10_1X10 ||\n>>>                      format.size != Size(4096, 2160)) {\n>>>                          cerr << \"Failed to get a suitable format, expected 4096x2160-0x\"\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id D25FABDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 27 Jul 2025 18:09:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EECBC69128;\n\tSun, 27 Jul 2025 20:09:27 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4A9DA69080\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 27 Jul 2025 20:09:26 +0200 (CEST)","from [192.168.33.14] (185.221.140.39.nat.pool.zt.hu\n\t[185.221.140.39])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C15FA55A;\n\tSun, 27 Jul 2025 20:08:44 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"pisw5e5J\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1753639724;\n\tbh=WmEkGRbratPLOOU7zB2y8K+ztJ1iS+lwX1r+XpP8IXI=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=pisw5e5J1qquvf/LakdM1/cXRvZFXc4OjMsWC8J7QEsBw8efvB1I+zx6HpK2FhAHb\n\taczL1XM3/Juv5CnMQ1W7XBq/wAff8eiP7vRlTcSZh/9JxIsqBKvt6CYTr9F/b9lthW\n\tTkq2EueYBFEwxrWmifHcysRQ/1Ze9Qb9qIzHJs/4=","Message-ID":"<876905ae-9d8c-49f4-880c-cbbff4150125@ideasonboard.com>","Date":"Sun, 27 Jul 2025 20:09:22 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v1 2/2] libcamera: camera_sensor: getFormat(): Use span","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<20250303193349.785692-1-barnabas.pocze@ideasonboard.com>\n\t<20250303193349.785692-2-barnabas.pocze@ideasonboard.com>\n\t<175312285571.50296.3960952293769777938@ping.linuxembedded.co.uk>\n\t<20250724121937.GN11202@pendragon.ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20250724121937.GN11202@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]