diff --git a/conf/machine/include/rpi-default-providers.inc b/conf/machine/include/rpi-default-providers.inc index c02d24879..d06b88cf4 100644 --- a/conf/machine/include/rpi-default-providers.inc +++ b/conf/machine/include/rpi-default-providers.inc @@ -9,6 +9,9 @@ PREFERRED_PROVIDER_virtual/mesa ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc PREFERRED_PROVIDER_virtual/libgbm ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "mesa", "mesa-gl", d)}" PREFERRED_PROVIDER_jpeg ?= "jpeg" +PACKAGE_EXCLUDE:append = " libcamera" +PREFERRED_PROVIDER_libcamera ?= "rpi-libcamera" + PREFERRED_PROVIDER_virtual/libomxil ?= "userland" VIRTUAL-RUNTIME_libomxil = "userland" diff --git a/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps/0001-utils-version.py-use-usr-bin-env-in-shebang.patch b/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps/0001-utils-version.py-use-usr-bin-env-in-shebang.patch deleted file mode 100644 index 15f6bf4c7..000000000 --- a/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps/0001-utils-version.py-use-usr-bin-env-in-shebang.patch +++ /dev/null @@ -1,42 +0,0 @@ -From bbc1ea3e4119c665723cfd1c5a364bc8c7cbb464 Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Thu, 4 May 2023 18:07:16 +0000 -Subject: [PATCH] utils/version.py: use /usr/bin/env in shebang - -* it uses subprocess text=True which is available only since python-3.7 - when running on host with python-3.6 it fails with: -Traceback (most recent call last): - File "TOPDIR/BUILD/work/raspberrypi4_64-oe-linux/rpi-libcamera-apps/git-r0/git/utils/version.py", line 19, in generate_version - stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, text=True) - File "/usr/lib/python3.6/subprocess.py", line 423, in run - with Popen(*popenargs, **kwargs) as process: -TypeError: __init__() got an unexpected keyword argument 'text' - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "TOPDIR/BUILD/work/raspberrypi4_64-oe-linux/rpi-libcamera-apps/git-r0/git/utils/version.py", line 52, in - generate_version() - File "TOPDIR/BUILD/work/raspberrypi4_64-oe-linux/rpi-libcamera-apps/git-r0/git/utils/version.py", line 48, in generate_version - print(f'{commit} {datetime.now().strftime("%d-%m-%Y (%H:%M:%S)")}', end="") -UnboundLocalError: local variable 'commit' referenced before assignment -Generating version string: - - even when newer python3 is in PATH (either from buildtools or from python3native) - -Signed-off-by: Martin Jansa -Upstream-Status: Pending ---- - utils/version.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/utils/version.py b/utils/version.py -index 48d7e05..4a5e35c 100755 ---- a/utils/version.py -+++ b/utils/version.py -@@ -1,4 +1,4 @@ --#!/usr/bin/python3 -+#!/usr/bin/env python3 - - # Copyright (C) 2021, Raspberry Pi (Trading) Limited - # Generate version information for rpicam-apps diff --git a/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps/add-missing-header.patch b/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps/add-missing-header.patch deleted file mode 100644 index 7d41e36d8..000000000 --- a/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps/add-missing-header.patch +++ /dev/null @@ -1,24 +0,0 @@ -add missing header - -When compiling with gcc15, compiliation fails with the following error: - -| In file included from ../sources/libcamera-apps-1.9.0/post_processing_stages/segmentation_tf_stage.cpp:8: -| ../sources/libcamera-apps-1.9.0/post_processing_stages/segmentation.hpp:15:82: error: 'uint8_t' was not declared in this scope -| 15 | Segmentation(int w, int h, std::vector l, const std::vector &s) - -To avoid it, add the cstdint header to the offending file. - -Upstream-Status: Submitted [https://github.com/raspberrypi/rpicam-apps/pull/861] -Signed-off-by: Gyorgy Sarvari -diff --git a/post_processing_stages/segmentation.hpp b/post_processing_stages/segmentation.hpp -index ac87228..82d7939 100644 ---- a/post_processing_stages/segmentation.hpp -+++ b/post_processing_stages/segmentation.hpp -@@ -7,6 +7,7 @@ - - #pragma once - -+#include - #include - #include - diff --git a/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera/libcamera_%.bbappend b/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera/libcamera_%.bbappend deleted file mode 100644 index 37a3e3b0a..000000000 --- a/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera/libcamera_%.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -EXTRA_OEMESON:append:rpi = " -Dipas=rpi/vc4,rpi/pisp" -PACKAGECONFIG:append:rpi = " raspberrypi" -CXXFLAGS:append:rpi = " -Wno-unaligned-access " diff --git a/dynamic-layers/multimedia-layer/recipes-multimedia/libpisp/files/0001-ignore-lockf-return-value.patch b/dynamic-layers/multimedia-layer/recipes-multimedia/libpisp/files/0001-ignore-lockf-return-value.patch deleted file mode 100644 index b358bcaf5..000000000 --- a/dynamic-layers/multimedia-layer/recipes-multimedia/libpisp/files/0001-ignore-lockf-return-value.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 230d9c127d45af11739214e78488a93255b832bb Mon Sep 17 00:00:00 2001 -From: Gyorgy Sarvari -Date: Tue, 16 Sep 2025 16:28:34 +0200 -Subject: [PATCH] ignore lockf() return value - -gcc15 returns an error otherwise: - -| ../sources/libpisp-1.2.1/src/helpers/media_device.cpp: In member function 'std::map, libpisp::helpers::DeviceFd>::iterator libpisp::helpers::MediaDevice::unlock(const std::string&)': -| ../sources/libpisp-1.2.1/src/helpers/media_device.cpp:251:14: error: ignoring return value of 'int lockf(int, int, __off64_t)' declared with attribute 'warn_unused_result' [-Werror=unused-result] -| 251 | lockf(it->second.Get(), F_ULOCK, 0); -| | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Upstream-Status: Submitted [https://github.com/raspberrypi/libpisp/pull/53] - -Signed-off-by: Gyorgy Sarvari ---- - src/helpers/media_device.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/helpers/media_device.cpp b/src/helpers/media_device.cpp -index 0dd64d6..121ce79 100644 ---- a/src/helpers/media_device.cpp -+++ b/src/helpers/media_device.cpp -@@ -248,6 +248,6 @@ std::map::iterator MediaDevice::unlock(const std::string - if (it == lock_map_.end()) - return lock_map_.end(); - -- lockf(it->second.Get(), F_ULOCK, 0); -+ std::ignore = lockf(it->second.Get(), F_ULOCK, 0); - return lock_map_.erase(it); - } --- -2.51.0 - diff --git a/dynamic-layers/multimedia-layer/recipes-multimedia/libpisp/libpisp_1.2.1.bb b/dynamic-layers/multimedia-layer/recipes-multimedia/libpisp/libpisp_1.2.1.bb deleted file mode 100644 index fb8839c0c..000000000 --- a/dynamic-layers/multimedia-layer/recipes-multimedia/libpisp/libpisp_1.2.1.bb +++ /dev/null @@ -1,16 +0,0 @@ -DESCRIPTION = "A helper library to generate run-time configuration for the Raspberry Pi \ -ISP (PiSP), consisting of the Frontend and Backend hardware components." -HOMEPAGE = "https://github.com/raspberrypi/libpisp" -LICENSE = "BSD-2-Clause & GPL-2.0-only & GPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://LICENSE;md5=3417a46e992fdf62e5759fba9baef7a7 \ - file://LICENSES/GPL-2.0-only.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ - file://LICENSES/GPL-2.0-or-later.txt;md5=fed54355545ffd980b814dab4a3b312c" - -SRC_URI = "git://github.com/raspberrypi/libpisp.git;protocol=https;branch=main \ - file://0001-ignore-lockf-return-value.patch" - -SRCREV = "981977ff21f32c8a97d2a0ecbdff3e39d42ccce3" - -DEPENDS = "nlohmann-json" - -inherit meson pkgconfig diff --git a/recipes-multimedia/rpi-libcamera/libpisp_1.3.0.bb b/recipes-multimedia/rpi-libcamera/libpisp_1.3.0.bb new file mode 100644 index 000000000..f3dbe927a --- /dev/null +++ b/recipes-multimedia/rpi-libcamera/libpisp_1.3.0.bb @@ -0,0 +1,22 @@ +SUMMARY = "libpisp - PISP library" +DESCRIPTION = "Library for PISP pipeline handler" + +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3417a46e992fdf62e5759fba9baef7a7" + +SRC_URI = "git://github.com/raspberrypi/libpisp.git;protocol=https;branch=main" +PV = "1.3.0+git${SRCPV}" +SRCREV = "9ba67e6680f03f31f2b1741a53e8fd549be82cbe" + +inherit meson pkgconfig + +DEPENDS = "\ + boost \ + nlohmann-json \ +" + +CXXFLAGS:append = " -Wno-unused-result " + +INSANE_SKIP:${PN} = "buildpaths" +INSANE_SKIP:${PN}-dev = "buildpaths" + diff --git a/recipes-multimedia/rpi-libcamera/rpi-libcamera_0.5.2+rpt20250903.bb b/recipes-multimedia/rpi-libcamera/rpi-libcamera_0.5.2+rpt20250903.bb new file mode 100644 index 000000000..8d7aa2793 --- /dev/null +++ b/recipes-multimedia/rpi-libcamera/rpi-libcamera_0.5.2+rpt20250903.bb @@ -0,0 +1,91 @@ +SUMMARY = "Raspberry PI libcamera fork" +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://github.com/raspberrypi/libcamera.git;protocol=https;branch=main" + +PV = "0.5.2+rpt20250903+git${SRCPV}" +SRCREV = "bfd68f786964636b09f8122e6c09c230367390e7" + +PE = "1" + +DEPENDS = "\ + python3-pyyaml-native \ + python3-jinja2-native \ + python3-ply-native \ + python3-jinja2-native \ + udev \ + gnutls \ + chrpath-native \ + libevent \ + libyaml \ + \ + ${@bb.utils.contains('DISTRO_FEATURES', 'qt', 'qtbase qtbase-native', '', d)} \ +" + +PACKAGES =+ "${PN}-gst ${PN}-pycamera" + +PACKAGECONFIG ??= "dng gst pycamera" +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[pisp] = "-Dpipelines=rpi/pisp -Dipas=rpi/pisp, -Dpipelines=rpi/vc4 -Dipas=rpi/vc4, libpisp" + +# machines which uses pisp +PACKAGECONFIG:append:raspberrypi5 = " pisp" + +EXTRA_OEMESON = " \ + -Dv4l2=enabled \ + -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 \ + ${libdir}/libcamera/ipa/* \ + ${datadir}/libcamera/pipeline/rpi/* \ + ${datadir}/libcamera/ipa/rpi* \ +" +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/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps_1.9.0.bb b/recipes-multimedia/rpicam-apps/rpicam-apps_1.9.1.bb similarity index 61% rename from dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps_1.9.0.bb rename to recipes-multimedia/rpicam-apps/rpicam-apps_1.9.1.bb index ce94975da..9fa2e2194 100644 --- a/dynamic-layers/multimedia-layer/recipes-multimedia/libcamera-apps/libcamera-apps_1.9.0.bb +++ b/recipes-multimedia/rpicam-apps/rpicam-apps_1.9.1.bb @@ -1,6 +1,6 @@ -SUMMARY = "A suite of libcamera-based apps" -DESCRIPTION = "This is a small suite of libcamera-based apps that aim to \ -copy the functionality of the existing \"raspicam\" apps." +SUMMARY = "suite of libcamera-based applications" +DESCRIPTION = "This is a small suite of libcamera-based applications to \ +drive the cameras on a Raspberry Pi platform." HOMEPAGE = "https://github.com/raspberrypi/rpicam-apps" SECTION = "console/utils" @@ -9,15 +9,11 @@ LIC_FILES_CHKSUM = "file://license.txt;md5=a0013d1b383d72ba4bdc5b750e7d1d77" SRC_URI = "\ git://github.com/raspberrypi/rpicam-apps.git;protocol=https;branch=main \ - file://0001-utils-version.py-use-usr-bin-env-in-shebang.patch \ - file://add-missing-header.patch \ " +PV = "1.9.1+git${SRCPV}" +SRCREV = "6782818adcb8b5559c2657bb144e78d69607681f" -SRCREV = "eca9928b76c106141667288f1cef935d02ba59b3" - -PROVIDES += "rpicam-apps" - -DEPENDS = "libcamera libexif jpeg tiff libpng boost" +DEPENDS = "rpi-libcamera libexif jpeg tiff libpng boost" PACKAGECONFIG ??= "drm" PACKAGECONFIG[libav] = "-Denable_libav=enabled, -Denable_libav=disabled, libav" @@ -36,12 +32,17 @@ NEON_FLAGS:arm:raspberrypi4 = "-Dneon_flags=armv8-neon" EXTRA_OEMESON += "${NEON_FLAGS}" # QA Issue: /usr/bin/camera-bug-report contained in package libcamera-apps requires /usr/bin/python3 -# QA Issue: File /usr/lib/pkgconfig/rpicam_app.pc in package libcamera-apps-dev contains reference to TMPDIR do_install:append() { rm -v ${D}/${bindir}/camera-bug-report - sed -i "s,${RECIPE_SYSROOT}${libdir},$\{libdir},g" ${D}${libdir}/pkgconfig/rpicam_app.pc } -FILES:${PN} += "${libdir}/rpicam-apps-postproc \ - ${libdir}/rpicam-apps-preview \ - ${datadir}/rpi-camera-assets" +# not picked automatically, because it's missing common 'lib' prefix +FILES:${PN}-dev += "${libdir}/rpicam_app.so" + +FILES:${PN} += "\ + ${libdir}/rpicam_app.so.${@d.getVar("PV", False).__str__().split('+')[0]} \ + ${libdir}/rpicam-apps* \ + ${datadir}/rpi-camera-assets/* \ +" + +INSANE_SKIP:${PN}-dev = "buildpaths"