hosts/skycam: working stream with go2rtc

This commit is contained in:
2025-06-21 23:41:13 +01:00
parent 265fbf1375
commit f6c0620f8e
8 changed files with 314 additions and 81 deletions

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCocmtyzPPjv+52
JiZrpZFfaZ0eeUgugc8gV+0+2Q9GEkl/xxqjiDVg31gBO3iwQov2NmGuPbXr+vwZ
QcUqNQakmmdi22tBaTtd6hMuhu9OfbP8sIFaf0dToZRHkPgf63+WCF6w0O9enEz4
zjW3kPa1eVRVekiYCXGML/VhN+h5WwWouNWgEOw5JH39ZuGmhsGN5XekkHtyMkwq
Vr+JodoSizhYs9VBYNA1J4PlyiS4BYr4pLiLffzPwRjcSS777x33g+nWNr1lsFxB
nDoVvVnq0E7fiXxlmCtAr/7dv0Ug5ixuNfZ9yoT0f+mfUiG/anmfodHujIm2Db37
jvmfxaq1AgMBAAECggEAFhJKBHSY92xod0g37A55fiZFTV8oZ1mgdXU386522yBd
y5Wf5rIcBmm1axHrFjNeCgClq3JQEk/kdP3Ccy2YBXzq04/7HYrHmd5oLYZGOINt
kExjYqN/SdTH7FmxPWN66AKIP8RcvQmfZ1GDxd4DiZNQitO3S96e53bIQPkVp8Lg
GfK6LQCdOGimD00wvRoeqbV0PWGGVMfx+KvD5hxKYolyi/hNUxToD28qCAoMlMTi
yL+17q3nIYZvUmL0k7d64U+lXF8ov3cVXNJzAzFi41MXZ2Xqk3Lj+IhNweUhlOyn
fTo8QntNlirNL/XmtJ+5mPbGufE/6zsSNOf2Cyz2aQKBgQDio/tA3tFBzOz31hox
gW6NKarhp7e5R3XHQjZPmQXKq2lGCTBN+LzwCLYDa+ZWkS+cel/xSbkUFl0dopCu
7uGrSvmVAv+l1k879WHsYmLlDjJSa8WmDtVQ0SJr70X9UJmD2BivWnTnzrpZFu2A
Nv57gvebJTI4tLfAAyIfbg8gOQKBgQC+RJRv8/jVha/4sPonQYvpH0scS0Xzwca6
xd23e+vULBpk7IVzMbVGJEDdfWXVJeAO++FSQcgTJA38nfYm2XRPZAProliLaW8o
XVhhhWbXP7Jc8BmL5zyfDaLOXNFBX2kfr/oKeOoQ+0dRDlWKlarw1SxC+RT6i2qQ
YETgXHKmXQKBgGk8mWsqy2HRZOtDqE/6eLnlciprtVy7+M14Sj21oUHVTAGwPJTH
/fs7IEEAdikWK1RuYmRoxh60r7IWDTadR35BRxjRFqILnCkMLNcVbDRN3kH1NwZ/
dr+bDG+v4ADazx2wVu39g7Erhc3eXpOddZcmXhDVObeo+nWXPt33PeDJAoGBAJ4v
+FVnuo8Tee1Cfogat87W5KSedIcnqSjpjt+Y2MXq8PrNplnSjwrE42UCd6KRvcnX
Ykr4Q/ad+D75uYgtLMVAuv2yWPl3bCJcETnrJkh5PbqFKEgntT/rn1sA0j0OrSDa
NwFz6+64a1+ZkkcJDjjykr0Px4BSXwOv9jOuyOdFAoGADZEADOLX5y4utxboe1M0
UnaFKGEDE6H8qdRJQ9bSvEwJI142al02CvnvqvP4cpd8rKOCRs9nSXFJFXCedTLy
ojSVfjTyJMTVJxab/c/Qugkxb/TqGfEnZF2yoTsfPYp2pXRd6DvyKlDQzlSOj933
FrqeSe1QKapuPRsujVwLZDU=
-----END PRIVATE KEY-----

View File

@ -0,0 +1,66 @@
{
lib,
fetchFromGitHub,
libcamera,
boost,
nlohmann_json,
python3Packages,
git,
cacert,
meson,
}:
libcamera.overrideAttrs (old: {
buildInputs = old.buildInputs ++ [
boost
nlohmann_json
];
nativeBuildInputs = old.nativeBuildInputs ++ [ python3Packages.pybind11 ];
BOOST_INCLUDEDIR = "${lib.getDev boost}/include";
BOOST_LIBRARYDIR = "${lib.getLib boost}/lib";
patches = [
./patches/libcamera-installed.patch
./patches/libcamera-no-timeout.patch
];
postPatch =
old.postPatch
+ ''
patchShebangs src/py/libcamera
'';
preBuild = ''
ninja src/ipa-priv-key.pem
install -D ${./libcamera-rpi-ipa-priv-key.pem} src/ipa-priv-key.pem
'';
mesonFlags = old.mesonFlags ++ [
"--buildtype=release"
"-Dcam=disabled"
"-Dgstreamer=disabled"
"-Dipas=rpi/vc4,rpi/pisp"
"-Dpipelines=rpi/vc4,rpi/pisp"
"-Dtest=false"
];
src = fetchFromGitHub {
owner = "raspberrypi";
repo = "libcamera";
rev = "d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b";
sha256 = "sha256-VP0s1jOON9J3gn81aiemsChvGeqx0PPivQF5rmSga6M=";
nativeBuildInputs = [ git ];
postFetch = ''
cd "$out"
export NIX_SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
${lib.getExe meson} subprojects download \
libpisp
find subprojects -type d -name .git -prune -execdir rm -r {} +
'';
};
})

View File

@ -0,0 +1,53 @@
From e65bbb6e263d99212cd29a32d89e4c45d0c05353 Mon Sep 17 00:00:00 2001
From: Jordan Holt <jordan@vimium.com>
Date: Sat, 21 Jun 2025 18:38:38 +0100
Subject: [PATCH] libcamera installed
---
src/libcamera/source_paths.cpp | 9 ---------
src/py/libcamera/meson.build | 4 ++--
2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/src/libcamera/source_paths.cpp b/src/libcamera/source_paths.cpp
index 1af5386a..3fc7d044 100644
--- a/src/libcamera/source_paths.cpp
+++ b/src/libcamera/source_paths.cpp
@@ -39,15 +39,6 @@ namespace {
*/
bool isLibcameraInstalled()
{
- /*
- * DT_RUNPATH (DT_RPATH when the linker uses old dtags) is removed on
- * install.
- */
- for (const ElfW(Dyn) *dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn) {
- if (dyn->d_tag == DT_RUNPATH || dyn->d_tag == DT_RPATH)
- return false;
- }
-
return true;
}
diff --git a/src/py/libcamera/meson.build b/src/py/libcamera/meson.build
index 596a203c..c0b1db59 100644
--- a/src/py/libcamera/meson.build
+++ b/src/py/libcamera/meson.build
@@ -34,14 +34,14 @@ gen_py_controls = files('gen-py-controls.py')
pycamera_sources += custom_target('py_gen_controls',
input : controls_files,
output : ['py_controls_generated.cpp'],
- command : [gen_py_controls, '--mode', 'controls', '-o', '@OUTPUT@',
+ command : ['python3', gen_py_controls, '--mode', 'controls', '-o', '@OUTPUT@',
'-t', gen_py_controls_template, '@INPUT@'],
env : py_build_env)
pycamera_sources += custom_target('py_gen_properties',
input : properties_files,
output : ['py_properties_generated.cpp'],
- command : [gen_py_controls, '--mode', 'properties', '-o', '@OUTPUT@',
+ command : ['python3', gen_py_controls, '--mode', 'properties', '-o', '@OUTPUT@',
'-t', gen_py_controls_template, '@INPUT@'],
env : py_build_env)
--
2.49.0

View File

@ -0,0 +1,29 @@
From 98918c4efdcf03701908bb756f252ba11b59490b Mon Sep 17 00:00:00 2001
From: Jordan Holt <jordan@vimium.com>
Date: Sat, 21 Jun 2025 18:41:54 +0100
Subject: [PATCH] libcamera no timeout
---
src/libcamera/ipc_pipe_unixsocket.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/libcamera/ipc_pipe_unixsocket.cpp b/src/libcamera/ipc_pipe_unixsocket.cpp
index 668ec73b..faf7e2a5 100644
--- a/src/libcamera/ipc_pipe_unixsocket.cpp
+++ b/src/libcamera/ipc_pipe_unixsocket.cpp
@@ -130,11 +130,13 @@ int IPCPipeUnixSocket::call(const IPCUnixSocket::Payload &message,
/* \todo Make this less dangerous, see IPCPipe::sendSync() */
timeout.start(2000ms);
while (!iter->second.done) {
+ #if 0
if (!timeout.isRunning()) {
LOG(IPCPipe, Error) << "Call timeout!";
callData_.erase(iter);
return -ETIMEDOUT;
}
+ #endif
Thread::current()->eventDispatcher()->processEvents();
}
--
2.49.0

View File

@ -0,0 +1,68 @@
{
stdenv,
callPackage,
fetchFromGitHub,
makeWrapper,
meson,
ninja,
pkg-config,
boost,
ffmpeg-headless,
libdrm,
libepoxy,
libexif,
libjpeg,
libpng,
libtiff,
libX11,
}:
let
libcamera-rpi = callPackage (import ../libcamera-rpi/package.nix) { };
in
stdenv.mkDerivation (finalAttrs: {
pname = "rpicam-apps";
version = "1.7.0";
src = fetchFromGitHub {
owner = "raspberrypi";
repo = "rpicam-apps";
rev = "v${finalAttrs.version}";
hash = "sha256-79qpAfY83YOZdM5ZPyIOkg3s7x75hvjG6Cc96UAIdb0=";
};
buildInputs = [
boost
ffmpeg-headless
libcamera-rpi
libdrm
libepoxy # GLES/EGL preview window
libexif
libjpeg
libpng
libtiff
libX11
];
nativeBuildInputs = [
makeWrapper
meson
ninja
pkg-config
];
# See all options here: https://github.com/raspberrypi/rpicam-apps/blob/main/meson_options.txt
mesonFlags = [
"-Denable_drm=disabled"
"-Denable_egl=disabled"
"-Denable_hailo=disabled"
"-Denable_qt=disabled"
"-Denable_libav=disabled"
];
postInstall = ''
for f in rpicam-hello rpicam-jpeg rpicam-raw rpicam-still rpicam-vid
do
wrapProgram $out/bin/$f --set-default LIBCAMERA_IPA_PROXY_PATH ${libcamera-rpi}/libexec/libcamera
done
'';
})