From f4b9dfa0c903bc94c344c657917a3fbb229c322f Mon Sep 17 00:00:00 2001 From: Gyorgy Sarvari Date: Tue, 16 Sep 2025 19:12:03 +0200 Subject: libcamera: upgrade 0.4.0 -> 0.5.2 Dropped 0001-media_device-Add-bool-return-type-to-unlock.patch, because the issue has been solved by upstream. Dropped 0002-libcamera-Add-missing-stdint.h-include-to-dma_buf_al.patch, because it is included in this release. Added a new PACKAGECONFIG called "raspberrypi" - this is taken from the meta-raspberrypi layer, however using it still requires that layer, as using it requires a dependency that is provided by that layer. The recipe until now built support for all platforms that matched the selected architecture (e.g. mali, rpi imx8 when the archi is arm). However rpi-specific options now require a an extra dependency that's not in meta-oe, so only build rpi-support when raspberrypi PACKAGECONFIG is enabled. Signed-off-by: Gyorgy Sarvari Signed-off-by: Khem Raj --- ...dia_device-Add-bool-return-type-to-unlock.patch | 59 --------------- ...dd-missing-stdint.h-include-to-dma_buf_al.patch | 38 ---------- .../libcamera/libcamera_0.4.0.bb | 78 -------------------- .../libcamera/libcamera_0.5.2.bb | 84 ++++++++++++++++++++++ 4 files changed, 84 insertions(+), 175 deletions(-) delete mode 100644 meta-multimedia/recipes-multimedia/libcamera/libcamera/0001-media_device-Add-bool-return-type-to-unlock.patch delete mode 100644 meta-multimedia/recipes-multimedia/libcamera/libcamera/0002-libcamera-Add-missing-stdint.h-include-to-dma_buf_al.patch delete mode 100644 meta-multimedia/recipes-multimedia/libcamera/libcamera_0.4.0.bb create mode 100644 meta-multimedia/recipes-multimedia/libcamera/libcamera_0.5.2.bb diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera/0001-media_device-Add-bool-return-type-to-unlock.patch b/meta-multimedia/recipes-multimedia/libcamera/libcamera/0001-media_device-Add-bool-return-type-to-unlock.patch deleted file mode 100644 index 12f034effd..0000000000 --- a/meta-multimedia/recipes-multimedia/libcamera/libcamera/0001-media_device-Add-bool-return-type-to-unlock.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 6914c4fd3d53c0c6ea304123bf57429bb64ec16f Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Wed, 31 Jan 2024 21:01:27 -0800 -Subject: [PATCH 1/2] media_device: Add bool return type to unlock() - -unlock uses lockf which is marked with __attribute__ -((warn_unused_result)) and compilers warn about it and some treat --Wunused-result as error with -Werror turned on, It would be good to -check if lockf failed or succeeded, however, that piece is not changed -with this, this fixes build with clang++ 18 - - ../git/src/libcamera/media_device.cpp:167:2: error: ignoring return value of function declared with 'warn_unused_result' attribute [-Werror,-Wunused-result] - 167 | lockf(fd_.get(), F_ULOCK, 0); - | ^~~~~ ~~~~~~~~~~~~~~~~~~~~~ - 1 error generated. - -Upstream-Status: Submitted [https://lists.libcamera.org/pipermail/libcamera-devel/2024-February/040380.html] -Signed-off-by: Khem Raj ---- - include/libcamera/internal/media_device.h | 2 +- - src/libcamera/media_device.cpp | 6 +++--- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/include/libcamera/internal/media_device.h b/include/libcamera/internal/media_device.h -index eb8cfde4..b09dfd16 100644 ---- a/include/libcamera/internal/media_device.h -+++ b/include/libcamera/internal/media_device.h -@@ -33,7 +33,7 @@ public: - bool busy() const { return acquired_; } - - bool lock(); -- void unlock(); -+ bool unlock(); - - int populate(); - bool isValid() const { return valid_; } -diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp -index 2949816b..eaa2fdb0 100644 ---- a/src/libcamera/media_device.cpp -+++ b/src/libcamera/media_device.cpp -@@ -159,12 +159,12 @@ bool MediaDevice::lock() - * - * \sa lock() - */ --void MediaDevice::unlock() -+bool MediaDevice::unlock() - { - if (!fd_.isValid()) -- return; -+ return false; - -- lockf(fd_.get(), F_ULOCK, 0); -+ return lockf(fd_.get(), F_ULOCK, 0) == 0; - } - - /** --- -2.43.0 - diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera/0002-libcamera-Add-missing-stdint.h-include-to-dma_buf_al.patch b/meta-multimedia/recipes-multimedia/libcamera/libcamera/0002-libcamera-Add-missing-stdint.h-include-to-dma_buf_al.patch deleted file mode 100644 index 18ba353de2..0000000000 --- a/meta-multimedia/recipes-multimedia/libcamera/libcamera/0002-libcamera-Add-missing-stdint.h-include-to-dma_buf_al.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 91de550243121056984e5b9b693b486860655d31 Mon Sep 17 00:00:00 2001 -From: Sergei Trofimovich -Date: Sat, 28 Dec 2024 19:11:19 +0000 -Subject: [PATCH] libcamera: Add missing include to - dma_buf_allocator.h - -Without the change the build fails on upcoming `gcc-15` as: - - In file included from ../src/libcamera/dma_buf_allocator.cpp:9: - ../include/libcamera/internal/dma_buf_allocator.h:66:19: error: 'uint64_t' has not been declared - 66 | void sync(uint64_t step); - | ^~~~~~~~ - -Signed-off-by: Sergei Trofimovich -Reviewed-by: Laurent Pinchart -Reviewed-by: Kieran Bingham -Signed-off-by: Laurent Pinchart - -Upstream-Status: Backport [https://git.libcamera.org/libcamera/libcamera.git/commit/?id=91de550243121056984e5b9b693b486860655d31] ---- - include/libcamera/internal/dma_buf_allocator.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/include/libcamera/internal/dma_buf_allocator.h b/include/libcamera/internal/dma_buf_allocator.h -index d26f8a74..13600915 100644 ---- a/include/libcamera/internal/dma_buf_allocator.h -+++ b/include/libcamera/internal/dma_buf_allocator.h -@@ -8,6 +8,7 @@ - #pragma once - - #include -+#include - #include - #include - --- -2.34.1 - diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.4.0.bb b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.4.0.bb deleted file mode 100644 index c7fe631a43..0000000000 --- a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.4.0.bb +++ /dev/null @@ -1,78 +0,0 @@ -SUMMARY = "Linux libcamera framework" -SECTION = "libs" - -LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later" - -LIC_FILES_CHKSUM = "\ - file://LICENSES/GPL-2.0-or-later.txt;md5=fed54355545ffd980b814dab4a3b312c \ - file://LICENSES/LGPL-2.1-or-later.txt;md5=2a4f4fd2128ea2f65047ee63fbca9f68 \ -" - -SRC_URI = " \ - git://git.libcamera.org/libcamera/libcamera.git;protocol=https;branch=master \ - file://0001-media_device-Add-bool-return-type-to-unlock.patch \ - file://0002-libcamera-Add-missing-stdint.h-include-to-dma_buf_al.patch \ -" - -SRCREV = "35ed4b91291d9f3d08e4b51acfb51163e65df8f8" - -PE = "1" - - -DEPENDS = "python3-pyyaml-native python3-jinja2-native python3-ply-native python3-jinja2-native udev gnutls chrpath-native libevent libyaml" -DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'qt', 'qtbase qtbase-native', '', d)}" - -PACKAGES =+ "${PN}-gst ${PN}-pycamera" - -PACKAGECONFIG ??= "" -PACKAGECONFIG[dng] = ",,tiff" -PACKAGECONFIG[gst] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base" -PACKAGECONFIG[pycamera] = "-Dpycamera=enabled,-Dpycamera=disabled,python3 python3-pybind11" - -LIBCAMERA_PIPELINES ??= "auto" - -EXTRA_OEMESON = " \ - -Dpipelines=${LIBCAMERA_PIPELINES} \ - -Dv4l2=true \ - -Dcam=enabled \ - -Dlc-compliance=disabled \ - -Dtest=false \ - -Ddocumentation=disabled \ -" - -RDEPENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland qt', 'qtwayland', '', d)}" - -inherit meson pkgconfig python3native - -do_configure:prepend() { - sed -i -e 's|py_compile=True,||' ${S}/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py -} - -do_install:append() { - chrpath -d ${D}${libdir}/libcamera.so - chrpath -d ${D}${libexecdir}/libcamera/v4l2-compat.so -} - -do_package:append() { - bb.build.exec_func("do_package_recalculate_ipa_signatures", d) -} - -do_package_recalculate_ipa_signatures() { - local modules - for module in $(find ${PKGD}/usr/lib/libcamera -name "*.so.sign"); do - module="${module%.sign}" - if [ -f "${module}" ] ; then - modules="${modules} ${module}" - fi - done - - ${S}/src/ipa/ipa-sign-install.sh ${B}/src/ipa-priv-key.pem "${modules}" -} - -FILES:${PN} += " ${libexecdir}/libcamera/v4l2-compat.so" -FILES:${PN}-gst = "${libdir}/gstreamer-1.0" -FILES:${PN}-pycamera = "${PYTHON_SITEPACKAGES_DIR}/libcamera" - -# libcamera-v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to -# both 32 and 64 bit file APIs. -GLIBC_64BIT_TIME_FLAGS = "" diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.5.2.bb b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.5.2.bb new file mode 100644 index 0000000000..88fe9cf39c --- /dev/null +++ b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.5.2.bb @@ -0,0 +1,84 @@ +SUMMARY = "Linux libcamera framework" +SECTION = "libs" + +LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later" + +LIC_FILES_CHKSUM = "\ + file://LICENSES/GPL-2.0-or-later.txt;md5=fed54355545ffd980b814dab4a3b312c \ + file://LICENSES/LGPL-2.1-or-later.txt;md5=2a4f4fd2128ea2f65047ee63fbca9f68 \ +" + +SRC_URI = " \ + git://git.libcamera.org/libcamera/libcamera.git;protocol=https;branch=master;tag=v${PV} \ +" + +SRCREV = "096c50ca881f72d858aca19757a5e73b4775a7cc" + +PE = "1" + +DEPENDS = "python3-pyyaml-native python3-jinja2-native python3-ply-native python3-jinja2-native udev gnutls chrpath-native libevent libyaml" +DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'qt', 'qtbase qtbase-native', '', d)}" + +PACKAGES =+ "${PN}-gst ${PN}-pycamera" + +PACKAGECONFIG ??= "" +PACKAGECONFIG[dng] = ",,tiff" +PACKAGECONFIG[gst] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base" +PACKAGECONFIG[pycamera] = "-Dpycamera=enabled,-Dpycamera=disabled,python3 python3-pybind11" +PACKAGECONFIG[raspberrypi] = ",,libpisp" + +# Raspberry Pi requires the meta-raspberrypi layer +# These values are coming from the project's meson.build file, +# which lists the supported values by arch. +ARM_PIPELINES = "${@bb.utils.contains('PACKAGECONFIG', 'raspberrypi', 'rpi/pisp,rpi/vc4,', '', d)}" +ARM_PIPELINES .= "imx8-isi,mali-c55,simple,uvcvideo" + +LIBCAMERA_PIPELINES ??= "auto" +LIBCAMERA_PIPELINES:arm ??= "${ARM_PIPELINES}" +LIBCAMERA_PIPELINES:aarch64 ??= "${ARM_PIPELINES}" + +EXTRA_OEMESON = " \ + -Dpipelines=${LIBCAMERA_PIPELINES} \ + -Dv4l2=true \ + -Dcam=enabled \ + -Dlc-compliance=disabled \ + -Dtest=false \ + -Ddocumentation=disabled \ +" + +RDEPENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland qt', 'qtwayland', '', d)}" + +inherit meson pkgconfig python3native + +do_configure:prepend() { + sed -i -e 's|py_compile=True,||' ${S}/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py +} + +do_install:append() { + chrpath -d ${D}${libdir}/libcamera.so + chrpath -d ${D}${libexecdir}/libcamera/v4l2-compat.so +} + +do_package:append() { + bb.build.exec_func("do_package_recalculate_ipa_signatures", d) +} + +do_package_recalculate_ipa_signatures() { + local modules + for module in $(find ${PKGD}/usr/lib/libcamera -name "*.so.sign"); do + module="${module%.sign}" + if [ -f "${module}" ] ; then + modules="${modules} ${module}" + fi + done + + ${S}/src/ipa/ipa-sign-install.sh ${B}/src/ipa-priv-key.pem "${modules}" +} + +FILES:${PN} += " ${libexecdir}/libcamera/v4l2-compat.so" +FILES:${PN}-gst = "${libdir}/gstreamer-1.0" +FILES:${PN}-pycamera = "${PYTHON_SITEPACKAGES_DIR}/libcamera" + +# libcamera-v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to +# both 32 and 64 bit file APIs. +GLIBC_64BIT_TIME_FLAGS = "" -- cgit v1.2.3-54-g00ecf