diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera/0001-ipa_data_serializer-Mark-vector-readPOD-overload-as-m.patch b/meta-multimedia/recipes-multimedia/libcamera/libcamera/0001-ipa_data_serializer-Mark-vector-readPOD-overload-as-m.patch new file mode 100644 index 0000000000..4cb8c47050 --- /dev/null +++ b/meta-multimedia/recipes-multimedia/libcamera/libcamera/0001-ipa_data_serializer-Mark-vector-readPOD-overload-as-m.patch @@ -0,0 +1,65 @@ +From: Khem Raj +Date: Sun, 6 Sep 2026 22:40:00 -0700 +Subject: [PATCH] ipa_data_serializer: Mark vector readPOD() overload as + maybe_unused + +clang 23 enables -Wunused-template as part of -Wall (via -Wmost -> +-Wunused; it was not enabled by -Wall or -Wextra before). Combined with +libcamera's -Werror this breaks the build: + + In file included from include/libcamera/ipa/core_ipa_serializer.h:18: + include/libcamera/internal/ipa_data_serializer.h:57:3: error: unused + function template 'readPOD' [-Werror,-Wunused-template] + 57 | T readPOD(std::vector &vec, size_t pos) + | ^~~~~~~ + +The POD helpers live in an anonymous namespace, so they have internal +linkage and clang diagnoses them per translation unit. appendPOD() and +the iterator overload of readPOD() are referenced by the IPADataSerializer +specialisations in this header, so they are seen as used everywhere. + +The std::vector overload of readPOD() is different: nothing in libcamera +itself calls it. Its only callers are the IPA proxies and proxy workers +generated at build time from the mojom templates, for example + + [[maybe_unused]] const size_t ipaControlsBufSize = + readPOD(_ipcOutputBuf.data(), 4); + +in src/libcamera/proxy/soft_ipa_proxy.cpp. It is therefore genuinely +unused in every translation unit that includes this header without being +generated proxy code, which is exactly what [[maybe_unused]] is for. + +Note the overload cannot simply be dropped: doing so breaks the generated +proxies with "no matching function for call to 'readPOD'". + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + include/libcamera/internal/ipa_data_serializer.h | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/include/libcamera/internal/ipa_data_serializer.h b/include/libcamera/internal/ipa_data_serializer.h +index 0dda76d..528527d 100644 +--- a/include/libcamera/internal/ipa_data_serializer.h ++++ b/include/libcamera/internal/ipa_data_serializer.h +@@ -52,9 +52,15 @@ T readPOD(std::vector::const_iterator it, size_t pos, + return ret; + } + ++/* ++ * This overload is only used by the generated IPA proxies and proxy workers, ++ * and thus is unused in translation units that include this header without ++ * being generated proxy code. Mark it as such to avoid -Wunused-template ++ * warnings, which clang enables as part of -Wall since version 23. ++ */ + template> * = nullptr> +-T readPOD(std::vector &vec, size_t pos) ++[[maybe_unused]] T readPOD(std::vector &vec, size_t pos) + { + return readPOD(vec.cbegin(), pos, vec.end()); + } +-- +2.51.0 + diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.7.2.bb b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.7.2.bb index 3199ad8a4f..955cf041ba 100644 --- a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.7.2.bb +++ b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.7.2.bb @@ -11,6 +11,7 @@ LIC_FILES_CHKSUM = "\ SRC_URI = " \ git://git.libcamera.org/libcamera/libcamera.git;protocol=https;branch=master;tag=v${PV} \ + file://0001-ipa_data_serializer-Mark-vector-readPOD-overload-as-m.patch \ " SRCREV = "191e202178f02430b5942397c70d215cdd2056fa"