Files
omarchy-pkgs/pkgbuilds/edge/intel-ipu7-camera/intel-ipu7-camera.install
T
Gaggery Tsai cc1508c75c intel-ipu7-camera: use v4l2-relayd for on-demand camera feed
Replace camera-feed-watch and camera-session with v4l2-relayd, a
single-process daemon that manages the icamerasrc -> v4l2loopback feed.
v4l2-relayd uses V4L2_EVENT_PRI_CLIENT_USAGE kernel events to detect
when an app starts/stops streaming, providing zero-polling on-demand
camera activation with LED control.

This is a generic solution that works with all PipeWire apps (Snapshot,
Chromium, Firefox, etc.) without per-app wrappers or .desktop patching.

The key advantage over the previous camera-feed-watch approach: v4l2-relayd
keeps a single persistent v4l2sink writer, switching only the data source
(splash vs icamerasrc) via appsrc. This avoids the PipeWire stale mmap
buffer issue that caused degraded framerate on subsequent camera sessions
when the writer process changed.

Changes:
- Add v4l2-relayd as package dependency
- Add /etc/v4l2-relayd.d/ipu7.conf with icamerasrc pipeline config
- Add systemd service override for GST_PLUGIN_PATH and device access
- Remove camera-feed-watch, camera-feed-watch.service, camera-session,
  camera-feed.service, and Snapshot .desktop patching
- Restore PipeWireCamera feature flag for Chromium/Brave/Chrome
- Enable v4l2-relayd@ipu7.service at install time
2026-03-24 22:14:08 -07:00

68 lines
2.4 KiB
Plaintext

_add_pipewire_camera() {
local conf="$1"
if [ -f "$conf" ] && grep -q 'enable-features=' "$conf" && ! grep -q 'PipeWireCamera' "$conf"; then
sed -i 's/--enable-features=\([^ ]*\)/--enable-features=\1,PipeWireCamera/' "$conf"
fi
}
_remove_pipewire_camera() {
local conf="$1"
[ -f "$conf" ] && sed -i 's/,PipeWireCamera//g' "$conf"
}
_install_sleep_hook() {
cp /usr/share/intel-ipu7-camera/camera-sleep-hook /usr/lib/systemd/system-sleep/camera-sleep-hook
chmod 755 /usr/lib/systemd/system-sleep/camera-sleep-hook
}
post_install() {
_install_sleep_hook
systemctl daemon-reload
systemctl enable camera-init.service
systemctl enable v4l2-relayd@ipu7.service
udevadm control --reload-rules 2>/dev/null || true
if [ -n "$SUDO_USER" ]; then
usermod -aG video "$SUDO_USER" 2>/dev/null || true
_add_pipewire_camera "/home/$SUDO_USER/.config/chromium-flags.conf"
_add_pipewire_camera "/home/$SUDO_USER/.config/brave-flags.conf"
_add_pipewire_camera "/home/$SUDO_USER/.config/chrome-flags.conf"
fi
}
post_upgrade() {
_install_sleep_hook
systemctl daemon-reload
systemctl enable v4l2-relayd@ipu7.service
# Disable old camera-feed-watch (replaced by v4l2-relayd)
systemctl --global disable camera-feed-watch.service 2>/dev/null || true
udevadm control --reload-rules 2>/dev/null || true
if [ -n "$SUDO_USER" ]; then
_add_pipewire_camera "/home/$SUDO_USER/.config/chromium-flags.conf"
_add_pipewire_camera "/home/$SUDO_USER/.config/brave-flags.conf"
_add_pipewire_camera "/home/$SUDO_USER/.config/chrome-flags.conf"
fi
}
pre_remove() {
systemctl disable v4l2-relayd@ipu7.service 2>/dev/null || true
systemctl stop v4l2-relayd@ipu7.service 2>/dev/null || true
systemctl --global disable camera-feed-watch.service 2>/dev/null || true
systemctl disable camera-init.service 2>/dev/null || true
systemctl stop camera-init.service 2>/dev/null || true
if [ -n "$SUDO_USER" ]; then
_remove_pipewire_camera "/home/$SUDO_USER/.config/chromium-flags.conf"
_remove_pipewire_camera "/home/$SUDO_USER/.config/brave-flags.conf"
_remove_pipewire_camera "/home/$SUDO_USER/.config/chrome-flags.conf"
fi
}
post_remove() {
rm -f /usr/lib/systemd/system-sleep/camera-sleep-hook
systemctl daemon-reload
udevadm control --reload-rules 2>/dev/null || true
}