From 896b1beeeefd8f8558afa453ba1c942929b05b57 Mon Sep 17 00:00:00 2001 From: Ingar Date: Sat, 20 Dec 2025 16:56:31 +0100 Subject: Updated to v1.11.0. --- 99-raspberrypi-dmaheap.rules | 3 ++ PKGBUILD | 80 ++++++++++++++------------------- rpicam-apps-1.11.0-outputfilename.patch | 53 ++++++++++++++++++++++ rpicam-apps-1.4.3-outputfilename.patch | 57 ----------------------- rpicam-apps.rules | 3 -- 5 files changed, 90 insertions(+), 106 deletions(-) create mode 100644 99-raspberrypi-dmaheap.rules create mode 100644 rpicam-apps-1.11.0-outputfilename.patch delete mode 100644 rpicam-apps-1.4.3-outputfilename.patch delete mode 100644 rpicam-apps.rules diff --git a/99-raspberrypi-dmaheap.rules b/99-raspberrypi-dmaheap.rules new file mode 100644 index 0000000..41fb331 --- /dev/null +++ b/99-raspberrypi-dmaheap.rules @@ -0,0 +1,3 @@ +# give users in the video group access to the rpi camera +# see https://github.com/raspberrypi/rpicam-apps/issues/218 +SUBSYSTEM=="dma_heap", GROUP="video", MODE="0660" diff --git a/PKGBUILD b/PKGBUILD index c125c13..6a8f6ad 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,58 +1,46 @@ +# Maintainer: Mattia Procopio (astro.matto) pkgname=rpicam-apps -pkgver=1.5.2 +pkgver=1.11.0 pkgrel=1 -pkgdesc="Camera utilities for the Raspberry Pi" -arch=('aarch64') -url='https://github.com/raspberrypi/rpicam-apps' +pkgdesc="This is a small suite of libcamera-based applications to drive the cameras on a Raspberry Pi platform." +arch=(aarch64) +url="https://github.com/raspberrypi/rpicam-apps" +license=(LGPLv2 + MIT + GPLv3 + BSD2 + BSD3) +depends=(boost + libpisp + python-piexif + python-prctl) +makedepends=(meson + python-jinja + python-sphinx) source=( - "https://github.com/raspberrypi/rpicam-apps/archive/refs/tags/v${pkgver}.tar.gz" - "rpicam-apps.rules" - "rpicam-apps-1.4.3-outputfilename.patch" -) + "https://github.com/raspberrypi/rpicam-apps/archive/refs/tags/v${pkgver}.tar.gz" + "rpicam-apps-1.11.0-outputfilename.patch" + "99-raspberrypi-dmaheap.rules" + ) sha256sums=( - "7af81158e04f16af379d0804b939c817fee01e1510c1e11249f998a4f4600c8d" - "4045e41e24d8c3e247b667a66bc9eee13918f599f464003dde25ca55ed7bb995" - "1e53aa6ea95ded5b6e6d28bac35f53b5725c06a99ab4664e37e88869dfe2e698" -) -depends=( - boost - libdrm - libexif - ffmpeg - libcamera-rpi - qt6-base - qt6-tools + "342c0acf6bee07485bce76cb8a9774ef8a86dc2f5923d62601321a91a7b80baf" + "318590af9883d92408a687a34c69d01454c019703c1d0f49ef2ab2837ae90271" + "4045e41e24d8c3e247b667a66bc9eee13918f599f464003dde25ca55ed7bb995" ) -makedepends=(meson ninja) -optdepends=() -prepare() -{ +prepare() { cd rpicam-apps-${pkgver} - patch -Np1 -i "${srcdir}/rpicam-apps-1.4.3-outputfilename.patch" - mkdir build - arch-meson build \ - --buildtype=release \ - --wrap-mode default \ - -Denable_libav=enabled \ - -Denable_drm=enabled \ - -Denable_egl=enabled \ - -Denable_qt=enabled \ - -Denable_opencv=disabled \ - -Denable_tflite=disabled \ - -Denable_hailo=disabled \ - -Denable_imx500=false + patch -Np1 -i "${srcdir}/rpicam-apps-1.11.0-outputfilename.patch" } -build() -{ - cd rpicam-apps-${pkgver} - meson compile -C build +build() { + cd $srcdir/rpicam-apps-$pkgver + meson setup build -Dprefix=/usr -Dwerror=false } -package() -{ - install --mode=644 -D rpicam-apps.rules "${pkgdir}/etc/udev/rules.d/rpicam-apps.rules" - cd rpicam-apps-${pkgver} - DESTDIR="${pkgdir}" ninja -C build install +package() { + mkdir -p $pkgdir/usr/lib/udev/rules.d/ + cd $srcdir/rpicam-apps-$pkgver + DESTDIR="$pkgdir" ninja -C build install + install -m 755 $srcdir/../99-raspberrypi-dmaheap.rules $pkgdir/usr/lib/udev/rules.d/ } diff --git a/rpicam-apps-1.11.0-outputfilename.patch b/rpicam-apps-1.11.0-outputfilename.patch new file mode 100644 index 0000000..540c6d9 --- /dev/null +++ b/rpicam-apps-1.11.0-outputfilename.patch @@ -0,0 +1,53 @@ +--- rpicam-apps-original-1.11.0/core/still_options.hpp 2025-12-20 16:32:28.223308449 +0100 ++++ rpicam-apps-1.11.0/core/still_options.hpp 2025-12-20 16:48:50.052707336 +0100 +@@ -27,9 +27,9 @@ + ("framestart", value(&v_->framestart)->default_value(0), + "Initial frame counter value for timelapse captures") + ("datetime", value(&v_->datetime)->default_value(false)->implicit_value(true), +- "Use date format for output file names") ++ "Replace %s with date and time in output file names") + ("timestamp", value(&v_->timestamp)->default_value(false)->implicit_value(true), +- "Use system timestamps for output file names") ++ "Replace %u with timestamp in output file names") + ("restart", value(&v_->restart)->default_value(0), + "Set JPEG restart interval") + ("keypress,k", value(&v_->keypress)->default_value(false)->implicit_value(true), +--- rpicam-apps-original-1.11.0/apps/rpicam_still.cpp 2025-12-20 16:32:28.221836546 +0100 ++++ rpicam-apps-1.11.0/apps/rpicam_still.cpp 2025-12-20 16:47:29.557173395 +0100 +@@ -37,24 +37,28 @@ + + static std::string generate_filename(StillOptions const *options) + { +- char filename[128]; +- std::string folder = options->Get().output; // sometimes "output" is used as a folder name +- if (!folder.empty() && folder.back() != '/') +- folder += "/"; ++ // treat the output file name as a mask ++ char filename[2048]; + if (options->Get().datetime) + { ++ // expects "%s" in the filename + std::time_t raw_time; + std::time(&raw_time); + char time_string[32]; + std::tm *time_info = std::localtime(&raw_time); +- std::strftime(time_string, sizeof(time_string), "%m%d%H%M%S", time_info); +- snprintf(filename, sizeof(filename), "%s%s.%s", folder.c_str(), time_string, options->Get().encoding.c_str()); ++ std::strftime(time_string, sizeof(time_string), "%Y%m%d%H%M%S", time_info); ++ snprintf(filename, sizeof(filename), options->Get().output.c_str(), time_string); + } + else if (options->Get().timestamp) +- snprintf(filename, sizeof(filename), "%s%u.%s", folder.c_str(), (unsigned)time(NULL), +- options->Get().encoding.c_str()); ++ { ++ // expects "%u" in the filename ++ snprintf(filename, sizeof(filename), options->Get().output.c_str(), (unsigned)time(NULL)); ++ } + else ++ { ++ // expects "%d" in the filename + snprintf(filename, sizeof(filename), options->Get().output.c_str(), options->Get().framestart); ++ } + filename[sizeof(filename) - 1] = 0; + return std::string(filename); + } diff --git a/rpicam-apps-1.4.3-outputfilename.patch b/rpicam-apps-1.4.3-outputfilename.patch deleted file mode 100644 index fc748ff..0000000 --- a/rpicam-apps-1.4.3-outputfilename.patch +++ /dev/null @@ -1,57 +0,0 @@ -diff --git a/apps/rpicam_still.cpp b/apps/rpicam_still.cpp -index 5721edc..5ce78ea 100644 ---- a/apps/rpicam_still.cpp -+++ b/apps/rpicam_still.cpp -@@ -34,24 +34,28 @@ public: - - static std::string generate_filename(StillOptions const *options) - { -- char filename[128]; -- std::string folder = options->output; // sometimes "output" is used as a folder name -- if (!folder.empty() && folder.back() != '/') -- folder += "/"; -+ // treat the output file name as a mask -+ char filename[2048]; - if (options->datetime) - { - std::time_t raw_time; - std::time(&raw_time); - char time_string[32]; - std::tm *time_info = std::localtime(&raw_time); -- std::strftime(time_string, sizeof(time_string), "%m%d%H%M%S", time_info); -- snprintf(filename, sizeof(filename), "%s%s.%s", folder.c_str(), time_string, options->encoding.c_str()); -+ std::strftime(time_string, sizeof(time_string), "%Y%m%d%H%M%S", time_info); -+ // expects "%s" in the filename -+ snprintf(filename, sizeof(filename), options->output.c_str(), time_string); - } - else if (options->timestamp) -- snprintf(filename, sizeof(filename), "%s%u.%s", folder.c_str(), (unsigned)time(NULL), -- options->encoding.c_str()); -+ { -+ // expects "%u" in the filename -+ snprintf(filename, sizeof(filename), options->output.c_str(), (unsigned)time(NULL)); -+ } - else -+ { -+ // expects "%d" in the filename - snprintf(filename, sizeof(filename), options->output.c_str(), options->framestart); -+ } - filename[sizeof(filename) - 1] = 0; - return std::string(filename); - } -diff --git a/core/still_options.hpp b/core/still_options.hpp -index 1d1fbe7..3338767 100644 ---- a/core/still_options.hpp -+++ b/core/still_options.hpp -@@ -27,9 +27,9 @@ struct StillOptions : public Options - ("framestart", value(&framestart)->default_value(0), - "Initial frame counter value for timelapse captures") - ("datetime", value(&datetime)->default_value(false)->implicit_value(true), -- "Use date format for output file names") -+ "Replace %s with date and time in output file names") - ("timestamp", value(×tamp)->default_value(false)->implicit_value(true), -- "Use system timestamps for output file names") -+ "Replace %u with timestamp in output file names") - ("restart", value(&restart)->default_value(0), - "Set JPEG restart interval") - ("keypress,k", value(&keypress)->default_value(false)->implicit_value(true), diff --git a/rpicam-apps.rules b/rpicam-apps.rules deleted file mode 100644 index 41fb331..0000000 --- a/rpicam-apps.rules +++ /dev/null @@ -1,3 +0,0 @@ -# give users in the video group access to the rpi camera -# see https://github.com/raspberrypi/rpicam-apps/issues/218 -SUBSYSTEM=="dma_heap", GROUP="video", MODE="0660" -- cgit v1.2.3