[{"id":34398,"web_url":"https://patchwork.libcamera.org/comment/34398/","msgid":"<20250603114124.GE27361@pendragon.ideasonboard.com>","date":"2025-06-03T11:41:24","subject":"Re: [PATCH v1] treewide: Remove top-level `const` from return types","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Barnabás,\n\nThank you for the patch.\n\nOn Tue, Jun 03, 2025 at 01:14:34PM +0200, Barnabás Pőcze wrote:\n> Top-level `const` qualifiers are not useful, so avoid them. This is done\n> either by simply removing the top-level `const`, or making the function\n> return a reference to const where that is appropriate.\n> \n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  include/libcamera/base/log.h                  | 2 +-\n>  include/libcamera/geometry.h                  | 6 +++---\n>  include/libcamera/internal/matrix.h           | 2 +-\n>  include/libcamera/internal/v4l2_subdevice.h   | 2 +-\n>  include/libcamera/internal/v4l2_videodevice.h | 2 +-\n>  src/apps/cam/drm.h                            | 4 ++--\n>  src/ipa/libipa/histogram.h                    | 2 +-\n>  src/libcamera/geometry.cpp                    | 6 +++---\n>  src/libcamera/pipeline/ipu3/ipu3.cpp          | 2 +-\n>  src/libcamera/pipeline/mali-c55/mali-c55.cpp  | 8 ++++----\n>  src/libcamera/v4l2_subdevice.cpp              | 2 +-\n>  src/libcamera/v4l2_videodevice.cpp            | 2 +-\n>  12 files changed, 20 insertions(+), 20 deletions(-)\n> \n> diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h\n> index 8af74b59d..5a232a650 100644\n> --- a/include/libcamera/base/log.h\n> +++ b/include/libcamera/base/log.h\n> @@ -75,7 +75,7 @@ public:\n>  \tconst LogCategory &category() const { return category_; }\n>  \tconst std::string &fileInfo() const { return fileInfo_; }\n>  \tconst std::string &prefix() const { return prefix_; }\n> -\tconst std::string msg() const { return msgStream_.str(); }\n> +\tstd::string msg() const { return msgStream_.str(); }\n>  \n>  private:\n>  \tLIBCAMERA_DISABLE_COPY_AND_MOVE(LogMessage)\n> diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h\n> index f322e3d5b..d9378efec 100644\n> --- a/include/libcamera/geometry.h\n> +++ b/include/libcamera/geometry.h\n> @@ -31,7 +31,7 @@ public:\n>  \tint x;\n>  \tint y;\n>  \n> -\tconst std::string toString() const;\n> +\tstd::string toString() const;\n>  \n>  \tconstexpr Point operator-() const\n>  \t{\n> @@ -64,7 +64,7 @@ public:\n>  \tunsigned int height;\n>  \n>  \tbool isNull() const { return !width && !height; }\n> -\tconst std::string toString() const;\n> +\tstd::string toString() const;\n>  \n>  \tSize &alignDownTo(unsigned int hAlignment, unsigned int vAlignment)\n>  \t{\n> @@ -275,7 +275,7 @@ public:\n>  \tunsigned int height;\n>  \n>  \tbool isNull() const { return !width && !height; }\n> -\tconst std::string toString() const;\n> +\tstd::string toString() const;\n>  \n>  \tPoint center() const;\n>  \n> diff --git a/include/libcamera/internal/matrix.h b/include/libcamera/internal/matrix.h\n> index 47513b995..1842389f2 100644\n> --- a/include/libcamera/internal/matrix.h\n> +++ b/include/libcamera/internal/matrix.h\n> @@ -56,7 +56,7 @@ public:\n>  \n>  \t~Matrix() = default;\n>  \n> -\tconst std::string toString() const\n> +\tstd::string toString() const\n>  \t{\n>  \t\tstd::stringstream out;\n>  \n> diff --git a/include/libcamera/internal/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h\n> index fa2a4a21e..c1cde1df2 100644\n> --- a/include/libcamera/internal/v4l2_subdevice.h\n> +++ b/include/libcamera/internal/v4l2_subdevice.h\n> @@ -66,7 +66,7 @@ struct V4L2SubdeviceFormat {\n>  \tSize size;\n>  \tstd::optional<ColorSpace> colorSpace;\n>  \n> -\tconst std::string toString() const;\n> +\tstd::string toString() const;\n>  };\n>  \n>  std::ostream &operator<<(std::ostream &out, const V4L2SubdeviceFormat &f);\n> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\n> index ae6a76cb0..6caafc4dc 100644\n> --- a/include/libcamera/internal/v4l2_videodevice.h\n> +++ b/include/libcamera/internal/v4l2_videodevice.h\n> @@ -178,7 +178,7 @@ public:\n>  \tstd::array<Plane, 3> planes;\n>  \tunsigned int planesCount = 0;\n>  \n> -\tconst std::string toString() const;\n> +\tstd::string toString() const;\n>  };\n>  \n>  std::ostream &operator<<(std::ostream &out, const V4L2DeviceFormat &f);\n> diff --git a/src/apps/cam/drm.h b/src/apps/cam/drm.h\n> index 1ba83b6eb..30a916d7e 100644\n> --- a/src/apps/cam/drm.h\n> +++ b/src/apps/cam/drm.h\n> @@ -97,9 +97,9 @@ public:\n>  \n>  \tbool isImmutable() const { return flags_ & DRM_MODE_PROP_IMMUTABLE; }\n>  \n> -\tconst std::vector<uint64_t> values() const { return values_; }\n> +\tconst std::vector<uint64_t> &values() const { return values_; }\n>  \tconst std::map<uint32_t, std::string> &enums() const { return enums_; }\n> -\tconst std::vector<uint32_t> blobs() const { return blobs_; }\n> +\tconst std::vector<uint32_t> &blobs() const { return blobs_; }\n>  \n>  private:\n>  \tType type_;\n> diff --git a/src/ipa/libipa/histogram.h b/src/ipa/libipa/histogram.h\n> index a926002c8..8cf8bb6d1 100644\n> --- a/src/ipa/libipa/histogram.h\n> +++ b/src/ipa/libipa/histogram.h\n> @@ -36,7 +36,7 @@ public:\n>  \t}\n>  \n>  \tsize_t bins() const { return cumulative_.size() - 1; }\n> -\tconst Span<const uint64_t> data() const { return cumulative_; }\n> +\tSpan<const uint64_t> data() const { return cumulative_; }\n>  \tuint64_t total() const { return cumulative_[cumulative_.size() - 1]; }\n>  \tuint64_t cumulativeFrequency(double bin) const;\n>  \tdouble quantile(double q, uint32_t first = 0, uint32_t last = UINT_MAX) const;\n> diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp\n> index 81cc8cd53..de76d0c12 100644\n> --- a/src/libcamera/geometry.cpp\n> +++ b/src/libcamera/geometry.cpp\n> @@ -53,7 +53,7 @@ namespace libcamera {\n>   * \\brief Assemble and return a string describing the point\n>   * \\return A string describing the point\n>   */\n> -const std::string Point::toString() const\n> +std::string Point::toString() const\n>  {\n>  \tstd::stringstream ss;\n>  \tss << *this;\n> @@ -133,7 +133,7 @@ std::ostream &operator<<(std::ostream &out, const Point &p)\n>   * \\brief Assemble and return a string describing the size\n>   * \\return A string describing the size\n>   */\n> -const std::string Size::toString() const\n> +std::string Size::toString() const\n>  {\n>  \tstd::stringstream ss;\n>  \tss << *this;\n> @@ -676,7 +676,7 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr)\n>   * \\brief Assemble and return a string describing the rectangle\n>   * \\return A string describing the Rectangle\n>   */\n> -const std::string Rectangle::toString() const\n> +std::string Rectangle::toString() const\n>  {\n>  \tstd::stringstream ss;\n>  \tss << *this;\n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index e31e3879d..ad20810e6 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -105,7 +105,7 @@ public:\n>  \tStatus validate() override;\n>  \n>  \tconst StreamConfiguration &cio2Format() const { return cio2Configuration_; }\n> -\tconst ImgUDevice::PipeConfig imguConfig() const { return pipeConfig_; }\n> +\tconst ImgUDevice::PipeConfig &imguConfig() const { return pipeConfig_; }\n>  \n>  \t/* Cache the combinedTransform_ that will be applied to the sensor */\n>  \tTransform combinedTransform_;\n> diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n> index 4acc091bd..28d5da3c8 100644\n> --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n> +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n> @@ -101,8 +101,8 @@ public:\n>  \tint loadIPA();\n>  \n>  \t/* Deflect these functionalities to either TPG or CameraSensor. */\n> -\tconst std::vector<Size> sizes(unsigned int mbusCode) const;\n> -\tconst Size resolution() const;\n> +\tstd::vector<Size> sizes(unsigned int mbusCode) const;\n> +\tSize resolution() const;\n>  \n>  \tint pixfmtToMbusCode(const PixelFormat &pixFmt) const;\n>  \tconst PixelFormat &bestRawFormat() const;\n> @@ -195,7 +195,7 @@ void MaliC55CameraData::setSensorControls(const ControlList &sensorControls)\n>  \tdelayedCtrls_->push(sensorControls);\n>  }\n>  \n> -const std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n> +std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n>  {\n>  \tif (sensor_)\n>  \t\treturn sensor_->sizes(mbusCode);\n> @@ -218,7 +218,7 @@ const std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n>  \treturn sizes;\n>  }\n>  \n> -const Size MaliC55CameraData::resolution() const\n> +Size MaliC55CameraData::resolution() const\n>  {\n>  \tif (sensor_)\n>  \t\treturn sensor_->resolution();\n> diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp\n> index 33279654d..e9c849ac5 100644\n> --- a/src/libcamera/v4l2_subdevice.cpp\n> +++ b/src/libcamera/v4l2_subdevice.cpp\n> @@ -923,7 +923,7 @@ const MediaBusFormatInfo &MediaBusFormatInfo::info(uint32_t code)\n>   * \\brief Assemble and return a string describing the format\n>   * \\return A string describing the V4L2SubdeviceFormat\n>   */\n> -const std::string V4L2SubdeviceFormat::toString() const\n> +std::string V4L2SubdeviceFormat::toString() const\n>  {\n>  \tstd::stringstream ss;\n>  \tss << *this;\n> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\n> index d53aa2d3c..58a6704ef 100644\n> --- a/src/libcamera/v4l2_videodevice.cpp\n> +++ b/src/libcamera/v4l2_videodevice.cpp\n> @@ -429,7 +429,7 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const\n>   * \\brief Assemble and return a string describing the format\n>   * \\return A string describing the V4L2DeviceFormat\n>   */\n> -const std::string V4L2DeviceFormat::toString() const\n> +std::string V4L2DeviceFormat::toString() const\n>  {\n>  \tstd::stringstream ss;\n>  \tss << *this;","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 1EFA0C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  3 Jun 2025 11:41:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E3D9D68D94;\n\tTue,  3 Jun 2025 13:41:34 +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 754F6614D5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  3 Jun 2025 13:41:33 +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 ESMTPSA id 1466B496;\n\tTue,  3 Jun 2025 13:41:31 +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=\"qCZirrlL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1748950891;\n\tbh=aDqPESdvAfmSs6U42LDKrFyEVASOPb/2SUf6SRf96wY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=qCZirrlLYO7N2Phel/1gsVN9X7LzR407hX+Fet5FAMK6svg/0IN3mNHFECksvN4Rd\n\t8sfpE9H1xNUhCI0dhjEYXjSVbfVIJjOEOWPnggQB347P/JbcXHN7Guzb90sRpU8spS\n\tONOe6X+SZkraVg3JCZG0f/Q6PelHR5AyaY3+BTYo=","Date":"Tue, 3 Jun 2025 14:41:24 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v1] treewide: Remove top-level `const` from return types","Message-ID":"<20250603114124.GE27361@pendragon.ideasonboard.com>","References":"<20250603111434.751188-1-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20250603111434.751188-1-barnabas.pocze@ideasonboard.com>","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":34399,"web_url":"https://patchwork.libcamera.org/comment/34399/","msgid":"<08733c29-bd03-4892-a133-a11fd2b4e8eb@ideasonboard.com>","date":"2025-06-03T12:51:33","subject":"Re: [PATCH v1] treewide: Remove top-level `const` from return types","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. 06. 03. 14:36 keltezéssel, Stefan Klug írta:\n> Hi Barnabás,\n> \n> Thank you for the patch.\n> \n> Quoting Barnabás Pőcze (2025-06-03 13:14:34)\n>> Top-level `const` qualifiers are not useful, so avoid them. This is done\n>> either by simply removing the top-level `const`, or making the function\n>> return a reference to const where that is appropriate.\n>>\n>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> \n> Do we need to note somewhere that this breaks the ABI?\n\nI don't know, I can't recall any specific mechanism that was agreed upon.\n\nI believe the itanium abi does not encode the return type of non-template\nfunctions, and as I would expect abi-compliance-checker reports 100% binary\ncompatibility; am I missing something? It is definitely an API change but I\nconsider it highly unlikely that anyone's code is affected by this change.\n\n\nRegards,\nBarnabás Pőcze\n\n> \n> Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> \n> Best regards,\n> Stefan\n> \n>> ---\n>>   include/libcamera/base/log.h                  | 2 +-\n>>   include/libcamera/geometry.h                  | 6 +++---\n>>   include/libcamera/internal/matrix.h           | 2 +-\n>>   include/libcamera/internal/v4l2_subdevice.h   | 2 +-\n>>   include/libcamera/internal/v4l2_videodevice.h | 2 +-\n>>   src/apps/cam/drm.h                            | 4 ++--\n>>   src/ipa/libipa/histogram.h                    | 2 +-\n>>   src/libcamera/geometry.cpp                    | 6 +++---\n>>   src/libcamera/pipeline/ipu3/ipu3.cpp          | 2 +-\n>>   src/libcamera/pipeline/mali-c55/mali-c55.cpp  | 8 ++++----\n>>   src/libcamera/v4l2_subdevice.cpp              | 2 +-\n>>   src/libcamera/v4l2_videodevice.cpp            | 2 +-\n>>   12 files changed, 20 insertions(+), 20 deletions(-)\n>>\n>> diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h\n>> index 8af74b59d..5a232a650 100644\n>> --- a/include/libcamera/base/log.h\n>> +++ b/include/libcamera/base/log.h\n>> @@ -75,7 +75,7 @@ public:\n>>          const LogCategory &category() const { return category_; }\n>>          const std::string &fileInfo() const { return fileInfo_; }\n>>          const std::string &prefix() const { return prefix_; }\n>> -       const std::string msg() const { return msgStream_.str(); }\n>> +       std::string msg() const { return msgStream_.str(); }\n>>   \n>>   private:\n>>          LIBCAMERA_DISABLE_COPY_AND_MOVE(LogMessage)\n>> diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h\n>> index f322e3d5b..d9378efec 100644\n>> --- a/include/libcamera/geometry.h\n>> +++ b/include/libcamera/geometry.h\n>> @@ -31,7 +31,7 @@ public:\n>>          int x;\n>>          int y;\n>>   \n>> -       const std::string toString() const;\n>> +       std::string toString() const;\n>>   \n>>          constexpr Point operator-() const\n>>          {\n>> @@ -64,7 +64,7 @@ public:\n>>          unsigned int height;\n>>   \n>>          bool isNull() const { return !width && !height; }\n>> -       const std::string toString() const;\n>> +       std::string toString() const;\n>>   \n>>          Size &alignDownTo(unsigned int hAlignment, unsigned int vAlignment)\n>>          {\n>> @@ -275,7 +275,7 @@ public:\n>>          unsigned int height;\n>>   \n>>          bool isNull() const { return !width && !height; }\n>> -       const std::string toString() const;\n>> +       std::string toString() const;\n>>   \n>>          Point center() const;\n>>   \n>> diff --git a/include/libcamera/internal/matrix.h b/include/libcamera/internal/matrix.h\n>> index 47513b995..1842389f2 100644\n>> --- a/include/libcamera/internal/matrix.h\n>> +++ b/include/libcamera/internal/matrix.h\n>> @@ -56,7 +56,7 @@ public:\n>>   \n>>          ~Matrix() = default;\n>>   \n>> -       const std::string toString() const\n>> +       std::string toString() const\n>>          {\n>>                  std::stringstream out;\n>>   \n>> diff --git a/include/libcamera/internal/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h\n>> index fa2a4a21e..c1cde1df2 100644\n>> --- a/include/libcamera/internal/v4l2_subdevice.h\n>> +++ b/include/libcamera/internal/v4l2_subdevice.h\n>> @@ -66,7 +66,7 @@ struct V4L2SubdeviceFormat {\n>>          Size size;\n>>          std::optional<ColorSpace> colorSpace;\n>>   \n>> -       const std::string toString() const;\n>> +       std::string toString() const;\n>>   };\n>>   \n>>   std::ostream &operator<<(std::ostream &out, const V4L2SubdeviceFormat &f);\n>> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\n>> index ae6a76cb0..6caafc4dc 100644\n>> --- a/include/libcamera/internal/v4l2_videodevice.h\n>> +++ b/include/libcamera/internal/v4l2_videodevice.h\n>> @@ -178,7 +178,7 @@ public:\n>>          std::array<Plane, 3> planes;\n>>          unsigned int planesCount = 0;\n>>   \n>> -       const std::string toString() const;\n>> +       std::string toString() const;\n>>   };\n>>   \n>>   std::ostream &operator<<(std::ostream &out, const V4L2DeviceFormat &f);\n>> diff --git a/src/apps/cam/drm.h b/src/apps/cam/drm.h\n>> index 1ba83b6eb..30a916d7e 100644\n>> --- a/src/apps/cam/drm.h\n>> +++ b/src/apps/cam/drm.h\n>> @@ -97,9 +97,9 @@ public:\n>>   \n>>          bool isImmutable() const { return flags_ & DRM_MODE_PROP_IMMUTABLE; }\n>>   \n>> -       const std::vector<uint64_t> values() const { return values_; }\n>> +       const std::vector<uint64_t> &values() const { return values_; }\n>>          const std::map<uint32_t, std::string> &enums() const { return enums_; }\n>> -       const std::vector<uint32_t> blobs() const { return blobs_; }\n>> +       const std::vector<uint32_t> &blobs() const { return blobs_; }\n>>   \n>>   private:\n>>          Type type_;\n>> diff --git a/src/ipa/libipa/histogram.h b/src/ipa/libipa/histogram.h\n>> index a926002c8..8cf8bb6d1 100644\n>> --- a/src/ipa/libipa/histogram.h\n>> +++ b/src/ipa/libipa/histogram.h\n>> @@ -36,7 +36,7 @@ public:\n>>          }\n>>   \n>>          size_t bins() const { return cumulative_.size() - 1; }\n>> -       const Span<const uint64_t> data() const { return cumulative_; }\n>> +       Span<const uint64_t> data() const { return cumulative_; }\n>>          uint64_t total() const { return cumulative_[cumulative_.size() - 1]; }\n>>          uint64_t cumulativeFrequency(double bin) const;\n>>          double quantile(double q, uint32_t first = 0, uint32_t last = UINT_MAX) const;\n>> diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp\n>> index 81cc8cd53..de76d0c12 100644\n>> --- a/src/libcamera/geometry.cpp\n>> +++ b/src/libcamera/geometry.cpp\n>> @@ -53,7 +53,7 @@ namespace libcamera {\n>>    * \\brief Assemble and return a string describing the point\n>>    * \\return A string describing the point\n>>    */\n>> -const std::string Point::toString() const\n>> +std::string Point::toString() const\n>>   {\n>>          std::stringstream ss;\n>>          ss << *this;\n>> @@ -133,7 +133,7 @@ std::ostream &operator<<(std::ostream &out, const Point &p)\n>>    * \\brief Assemble and return a string describing the size\n>>    * \\return A string describing the size\n>>    */\n>> -const std::string Size::toString() const\n>> +std::string Size::toString() const\n>>   {\n>>          std::stringstream ss;\n>>          ss << *this;\n>> @@ -676,7 +676,7 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr)\n>>    * \\brief Assemble and return a string describing the rectangle\n>>    * \\return A string describing the Rectangle\n>>    */\n>> -const std::string Rectangle::toString() const\n>> +std::string Rectangle::toString() const\n>>   {\n>>          std::stringstream ss;\n>>          ss << *this;\n>> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n>> index e31e3879d..ad20810e6 100644\n>> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n>> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n>> @@ -105,7 +105,7 @@ public:\n>>          Status validate() override;\n>>   \n>>          const StreamConfiguration &cio2Format() const { return cio2Configuration_; }\n>> -       const ImgUDevice::PipeConfig imguConfig() const { return pipeConfig_; }\n>> +       const ImgUDevice::PipeConfig &imguConfig() const { return pipeConfig_; }\n>>   \n>>          /* Cache the combinedTransform_ that will be applied to the sensor */\n>>          Transform combinedTransform_;\n>> diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n>> index 4acc091bd..28d5da3c8 100644\n>> --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n>> +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n>> @@ -101,8 +101,8 @@ public:\n>>          int loadIPA();\n>>   \n>>          /* Deflect these functionalities to either TPG or CameraSensor. */\n>> -       const std::vector<Size> sizes(unsigned int mbusCode) const;\n>> -       const Size resolution() const;\n>> +       std::vector<Size> sizes(unsigned int mbusCode) const;\n>> +       Size resolution() const;\n>>   \n>>          int pixfmtToMbusCode(const PixelFormat &pixFmt) const;\n>>          const PixelFormat &bestRawFormat() const;\n>> @@ -195,7 +195,7 @@ void MaliC55CameraData::setSensorControls(const ControlList &sensorControls)\n>>          delayedCtrls_->push(sensorControls);\n>>   }\n>>   \n>> -const std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n>> +std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n>>   {\n>>          if (sensor_)\n>>                  return sensor_->sizes(mbusCode);\n>> @@ -218,7 +218,7 @@ const std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n>>          return sizes;\n>>   }\n>>   \n>> -const Size MaliC55CameraData::resolution() const\n>> +Size MaliC55CameraData::resolution() const\n>>   {\n>>          if (sensor_)\n>>                  return sensor_->resolution();\n>> diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp\n>> index 33279654d..e9c849ac5 100644\n>> --- a/src/libcamera/v4l2_subdevice.cpp\n>> +++ b/src/libcamera/v4l2_subdevice.cpp\n>> @@ -923,7 +923,7 @@ const MediaBusFormatInfo &MediaBusFormatInfo::info(uint32_t code)\n>>    * \\brief Assemble and return a string describing the format\n>>    * \\return A string describing the V4L2SubdeviceFormat\n>>    */\n>> -const std::string V4L2SubdeviceFormat::toString() const\n>> +std::string V4L2SubdeviceFormat::toString() const\n>>   {\n>>          std::stringstream ss;\n>>          ss << *this;\n>> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\n>> index d53aa2d3c..58a6704ef 100644\n>> --- a/src/libcamera/v4l2_videodevice.cpp\n>> +++ b/src/libcamera/v4l2_videodevice.cpp\n>> @@ -429,7 +429,7 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const\n>>    * \\brief Assemble and return a string describing the format\n>>    * \\return A string describing the V4L2DeviceFormat\n>>    */\n>> -const std::string V4L2DeviceFormat::toString() const\n>> +std::string V4L2DeviceFormat::toString() const\n>>   {\n>>          std::stringstream ss;\n>>          ss << *this;\n>> -- \n>> 2.49.0\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 C63AFC3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  3 Jun 2025 12:51:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 00A2268D94;\n\tTue,  3 Jun 2025 14:51:38 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9ED7D614D5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  3 Jun 2025 14:51:36 +0200 (CEST)","from [192.168.33.9] (185.182.214.140.nat.pool.zt.hu\n\t[185.182.214.140])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 60C58D7;\n\tTue,  3 Jun 2025 14:51:34 +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=\"Nwgni4at\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1748955094;\n\tbh=8tRGpbTtoSynx/I/2ui9+iVGScxZ38fxUyzzf28ZP3k=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=Nwgni4at+JdFAu9Q5Oob4bgnZSwy5jy3FbZuN4NGY+kA3N2azu3PMDUj0xFFwQbgR\n\tfhcNbXT4TsUuH3PxSOy9VJW/HzM7dNCVSz1d4u8BUnH42JWpjy3iVZDj0LxwjvI2bg\n\tm35yDVLVk9zw/R0hrmXrZG1zLWs/O+eNBq8qecMw=","Message-ID":"<08733c29-bd03-4892-a133-a11fd2b4e8eb@ideasonboard.com>","Date":"Tue, 3 Jun 2025 14:51:33 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v1] treewide: Remove top-level `const` from return types","To":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20250603111434.751188-1-barnabas.pocze@ideasonboard.com>\n\t<174895417382.115597.3352652148996658542@localhost>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<174895417382.115597.3352652148996658542@localhost>","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>"}},{"id":34427,"web_url":"https://patchwork.libcamera.org/comment/34427/","msgid":"<174911394079.896144.15006851586557148653@ping.linuxembedded.co.uk>","date":"2025-06-05T08:59:00","subject":"Re: [PATCH v1] treewide: Remove top-level `const` from return types","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-06-03 13:51:33)\n> Hi\n> \n> 2025. 06. 03. 14:36 keltezéssel, Stefan Klug írta:\n> > Hi Barnabás,\n> > \n> > Thank you for the patch.\n> > \n> > Quoting Barnabás Pőcze (2025-06-03 13:14:34)\n> >> Top-level `const` qualifiers are not useful, so avoid them. This is done\n> >> either by simply removing the top-level `const`, or making the function\n> >> return a reference to const where that is appropriate.\n> >>\n> >> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> > \n> > Do we need to note somewhere that this breaks the ABI?\n> \n> I don't know, I can't recall any specific mechanism that was agreed upon.\n> \n> I believe the itanium abi does not encode the return type of non-template\n> functions, and as I would expect abi-compliance-checker reports 100% binary\n> compatibility; am I missing something? It is definitely an API change but I\n> consider it highly unlikely that anyone's code is affected by this change.\n\nAny proposal is helpful here! But I think we should definitely get the\nabi checker in CI too - perhaps based on the above - even potentially\nchecking both ARM and x86 ?\n\nPerhaps:\n\nChanged-Interface: ABI\nChanged-Interface: API\nChanged-Interface: ABI+API\n\nChanged-Interface:/Interface-Change:/Interface/Changed:/\n\nor something like that ?\n\n\nIf we formalise on something then it will be easy to highlight in the\nrelease notes when impacting changes are made and reference the commits\ntoo.\n\nI could then imagine that the ABI checker test would use the tag to fail\nCI if the tag doesn't match it's results...\n\n--\nKieran\n\n\n> Regards,\n> Barnabás Pőcze\n> \n> > \n> > Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > \n> > Best regards,\n> > Stefan\n> > \n> >> ---\n> >>   include/libcamera/base/log.h                  | 2 +-\n> >>   include/libcamera/geometry.h                  | 6 +++---\n> >>   include/libcamera/internal/matrix.h           | 2 +-\n> >>   include/libcamera/internal/v4l2_subdevice.h   | 2 +-\n> >>   include/libcamera/internal/v4l2_videodevice.h | 2 +-\n> >>   src/apps/cam/drm.h                            | 4 ++--\n> >>   src/ipa/libipa/histogram.h                    | 2 +-\n> >>   src/libcamera/geometry.cpp                    | 6 +++---\n> >>   src/libcamera/pipeline/ipu3/ipu3.cpp          | 2 +-\n> >>   src/libcamera/pipeline/mali-c55/mali-c55.cpp  | 8 ++++----\n> >>   src/libcamera/v4l2_subdevice.cpp              | 2 +-\n> >>   src/libcamera/v4l2_videodevice.cpp            | 2 +-\n> >>   12 files changed, 20 insertions(+), 20 deletions(-)\n> >>\n> >> diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h\n> >> index 8af74b59d..5a232a650 100644\n> >> --- a/include/libcamera/base/log.h\n> >> +++ b/include/libcamera/base/log.h\n> >> @@ -75,7 +75,7 @@ public:\n> >>          const LogCategory &category() const { return category_; }\n> >>          const std::string &fileInfo() const { return fileInfo_; }\n> >>          const std::string &prefix() const { return prefix_; }\n> >> -       const std::string msg() const { return msgStream_.str(); }\n> >> +       std::string msg() const { return msgStream_.str(); }\n> >>   \n> >>   private:\n> >>          LIBCAMERA_DISABLE_COPY_AND_MOVE(LogMessage)\n> >> diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h\n> >> index f322e3d5b..d9378efec 100644\n> >> --- a/include/libcamera/geometry.h\n> >> +++ b/include/libcamera/geometry.h\n> >> @@ -31,7 +31,7 @@ public:\n> >>          int x;\n> >>          int y;\n> >>   \n> >> -       const std::string toString() const;\n> >> +       std::string toString() const;\n> >>   \n> >>          constexpr Point operator-() const\n> >>          {\n> >> @@ -64,7 +64,7 @@ public:\n> >>          unsigned int height;\n> >>   \n> >>          bool isNull() const { return !width && !height; }\n> >> -       const std::string toString() const;\n> >> +       std::string toString() const;\n> >>   \n> >>          Size &alignDownTo(unsigned int hAlignment, unsigned int vAlignment)\n> >>          {\n> >> @@ -275,7 +275,7 @@ public:\n> >>          unsigned int height;\n> >>   \n> >>          bool isNull() const { return !width && !height; }\n> >> -       const std::string toString() const;\n> >> +       std::string toString() const;\n> >>   \n> >>          Point center() const;\n> >>   \n> >> diff --git a/include/libcamera/internal/matrix.h b/include/libcamera/internal/matrix.h\n> >> index 47513b995..1842389f2 100644\n> >> --- a/include/libcamera/internal/matrix.h\n> >> +++ b/include/libcamera/internal/matrix.h\n> >> @@ -56,7 +56,7 @@ public:\n> >>   \n> >>          ~Matrix() = default;\n> >>   \n> >> -       const std::string toString() const\n> >> +       std::string toString() const\n> >>          {\n> >>                  std::stringstream out;\n> >>   \n> >> diff --git a/include/libcamera/internal/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h\n> >> index fa2a4a21e..c1cde1df2 100644\n> >> --- a/include/libcamera/internal/v4l2_subdevice.h\n> >> +++ b/include/libcamera/internal/v4l2_subdevice.h\n> >> @@ -66,7 +66,7 @@ struct V4L2SubdeviceFormat {\n> >>          Size size;\n> >>          std::optional<ColorSpace> colorSpace;\n> >>   \n> >> -       const std::string toString() const;\n> >> +       std::string toString() const;\n> >>   };\n> >>   \n> >>   std::ostream &operator<<(std::ostream &out, const V4L2SubdeviceFormat &f);\n> >> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\n> >> index ae6a76cb0..6caafc4dc 100644\n> >> --- a/include/libcamera/internal/v4l2_videodevice.h\n> >> +++ b/include/libcamera/internal/v4l2_videodevice.h\n> >> @@ -178,7 +178,7 @@ public:\n> >>          std::array<Plane, 3> planes;\n> >>          unsigned int planesCount = 0;\n> >>   \n> >> -       const std::string toString() const;\n> >> +       std::string toString() const;\n> >>   };\n> >>   \n> >>   std::ostream &operator<<(std::ostream &out, const V4L2DeviceFormat &f);\n> >> diff --git a/src/apps/cam/drm.h b/src/apps/cam/drm.h\n> >> index 1ba83b6eb..30a916d7e 100644\n> >> --- a/src/apps/cam/drm.h\n> >> +++ b/src/apps/cam/drm.h\n> >> @@ -97,9 +97,9 @@ public:\n> >>   \n> >>          bool isImmutable() const { return flags_ & DRM_MODE_PROP_IMMUTABLE; }\n> >>   \n> >> -       const std::vector<uint64_t> values() const { return values_; }\n> >> +       const std::vector<uint64_t> &values() const { return values_; }\n> >>          const std::map<uint32_t, std::string> &enums() const { return enums_; }\n> >> -       const std::vector<uint32_t> blobs() const { return blobs_; }\n> >> +       const std::vector<uint32_t> &blobs() const { return blobs_; }\n> >>   \n> >>   private:\n> >>          Type type_;\n> >> diff --git a/src/ipa/libipa/histogram.h b/src/ipa/libipa/histogram.h\n> >> index a926002c8..8cf8bb6d1 100644\n> >> --- a/src/ipa/libipa/histogram.h\n> >> +++ b/src/ipa/libipa/histogram.h\n> >> @@ -36,7 +36,7 @@ public:\n> >>          }\n> >>   \n> >>          size_t bins() const { return cumulative_.size() - 1; }\n> >> -       const Span<const uint64_t> data() const { return cumulative_; }\n> >> +       Span<const uint64_t> data() const { return cumulative_; }\n> >>          uint64_t total() const { return cumulative_[cumulative_.size() - 1]; }\n> >>          uint64_t cumulativeFrequency(double bin) const;\n> >>          double quantile(double q, uint32_t first = 0, uint32_t last = UINT_MAX) const;\n> >> diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp\n> >> index 81cc8cd53..de76d0c12 100644\n> >> --- a/src/libcamera/geometry.cpp\n> >> +++ b/src/libcamera/geometry.cpp\n> >> @@ -53,7 +53,7 @@ namespace libcamera {\n> >>    * \\brief Assemble and return a string describing the point\n> >>    * \\return A string describing the point\n> >>    */\n> >> -const std::string Point::toString() const\n> >> +std::string Point::toString() const\n> >>   {\n> >>          std::stringstream ss;\n> >>          ss << *this;\n> >> @@ -133,7 +133,7 @@ std::ostream &operator<<(std::ostream &out, const Point &p)\n> >>    * \\brief Assemble and return a string describing the size\n> >>    * \\return A string describing the size\n> >>    */\n> >> -const std::string Size::toString() const\n> >> +std::string Size::toString() const\n> >>   {\n> >>          std::stringstream ss;\n> >>          ss << *this;\n> >> @@ -676,7 +676,7 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr)\n> >>    * \\brief Assemble and return a string describing the rectangle\n> >>    * \\return A string describing the Rectangle\n> >>    */\n> >> -const std::string Rectangle::toString() const\n> >> +std::string Rectangle::toString() const\n> >>   {\n> >>          std::stringstream ss;\n> >>          ss << *this;\n> >> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> index e31e3879d..ad20810e6 100644\n> >> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> >> @@ -105,7 +105,7 @@ public:\n> >>          Status validate() override;\n> >>   \n> >>          const StreamConfiguration &cio2Format() const { return cio2Configuration_; }\n> >> -       const ImgUDevice::PipeConfig imguConfig() const { return pipeConfig_; }\n> >> +       const ImgUDevice::PipeConfig &imguConfig() const { return pipeConfig_; }\n> >>   \n> >>          /* Cache the combinedTransform_ that will be applied to the sensor */\n> >>          Transform combinedTransform_;\n> >> diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n> >> index 4acc091bd..28d5da3c8 100644\n> >> --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n> >> +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp\n> >> @@ -101,8 +101,8 @@ public:\n> >>          int loadIPA();\n> >>   \n> >>          /* Deflect these functionalities to either TPG or CameraSensor. */\n> >> -       const std::vector<Size> sizes(unsigned int mbusCode) const;\n> >> -       const Size resolution() const;\n> >> +       std::vector<Size> sizes(unsigned int mbusCode) const;\n> >> +       Size resolution() const;\n> >>   \n> >>          int pixfmtToMbusCode(const PixelFormat &pixFmt) const;\n> >>          const PixelFormat &bestRawFormat() const;\n> >> @@ -195,7 +195,7 @@ void MaliC55CameraData::setSensorControls(const ControlList &sensorControls)\n> >>          delayedCtrls_->push(sensorControls);\n> >>   }\n> >>   \n> >> -const std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n> >> +std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n> >>   {\n> >>          if (sensor_)\n> >>                  return sensor_->sizes(mbusCode);\n> >> @@ -218,7 +218,7 @@ const std::vector<Size> MaliC55CameraData::sizes(unsigned int mbusCode) const\n> >>          return sizes;\n> >>   }\n> >>   \n> >> -const Size MaliC55CameraData::resolution() const\n> >> +Size MaliC55CameraData::resolution() const\n> >>   {\n> >>          if (sensor_)\n> >>                  return sensor_->resolution();\n> >> diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp\n> >> index 33279654d..e9c849ac5 100644\n> >> --- a/src/libcamera/v4l2_subdevice.cpp\n> >> +++ b/src/libcamera/v4l2_subdevice.cpp\n> >> @@ -923,7 +923,7 @@ const MediaBusFormatInfo &MediaBusFormatInfo::info(uint32_t code)\n> >>    * \\brief Assemble and return a string describing the format\n> >>    * \\return A string describing the V4L2SubdeviceFormat\n> >>    */\n> >> -const std::string V4L2SubdeviceFormat::toString() const\n> >> +std::string V4L2SubdeviceFormat::toString() const\n> >>   {\n> >>          std::stringstream ss;\n> >>          ss << *this;\n> >> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\n> >> index d53aa2d3c..58a6704ef 100644\n> >> --- a/src/libcamera/v4l2_videodevice.cpp\n> >> +++ b/src/libcamera/v4l2_videodevice.cpp\n> >> @@ -429,7 +429,7 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const\n> >>    * \\brief Assemble and return a string describing the format\n> >>    * \\return A string describing the V4L2DeviceFormat\n> >>    */\n> >> -const std::string V4L2DeviceFormat::toString() const\n> >> +std::string V4L2DeviceFormat::toString() const\n> >>   {\n> >>          std::stringstream ss;\n> >>          ss << *this;\n> >> -- \n> >> 2.49.0\n> >>\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 8B5D9C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  5 Jun 2025 08:59:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5C12568DBD;\n\tThu,  5 Jun 2025 10:59:05 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1D66D68DB2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  5 Jun 2025 10:59:04 +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 721FD593;\n\tThu,  5 Jun 2025 10:59:00 +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=\"PzEXdV/F\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1749113940;\n\tbh=Ns4w305HgddyWNZxWPii9Z+qe7x7WpgL5l9+NSYGQfo=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=PzEXdV/FXHPGQcJlbElTE4xi7f+j4H0iEVRmBveaulNXBAdcm7G77GQHqU3GqM3B1\n\tVUEuXifot9/74tAFuf9dAIWco84Cw6ssSkkSClnbj71uROJk65bX1lLcyu7ObDJef5\n\taYCrbgGa+jVTya6Lz0lcA4ProWptBoANkC+vEuu8=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<08733c29-bd03-4892-a133-a11fd2b4e8eb@ideasonboard.com>","References":"<20250603111434.751188-1-barnabas.pocze@ideasonboard.com>\n\t<174895417382.115597.3352652148996658542@localhost>\n\t<08733c29-bd03-4892-a133-a11fd2b4e8eb@ideasonboard.com>","Subject":"Re: [PATCH v1] treewide: Remove top-level `const` from return types","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tStefan Klug <stefan.klug@ideasonboard.com>, \n\tlibcamera-devel@lists.libcamera.org","Date":"Thu, 05 Jun 2025 09:59:00 +0100","Message-ID":"<174911394079.896144.15006851586557148653@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>"}}]