Skip to content

Commit a75c3f9

Browse files
committed
next try
1 parent 6f83432 commit a75c3f9

3 files changed

Lines changed: 116 additions & 5 deletions

File tree

io.github.saeugetier.photobooth.json

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,7 @@
8484
},
8585
{
8686
"type": "patch",
87-
"path": "patches/disable-ipa-signing.patch"
88-
},
89-
{
90-
"type": "patch",
91-
"path": "patches/fix-cfe-entity-names.patch"
87+
"path": "patches/flatpak-patch.patch"
9288
}
9389
],
9490
"modules": [
@@ -337,6 +333,19 @@
337333
"path": "test_libcamera.cpp"
338334
}
339335
]
336+
},
337+
{
338+
"name": "test-libcamera2",
339+
"buildsystem": "simple",
340+
"build-commands": [
341+
"g++ -std=c++17 -Wall -o ${FLATPAK_DEST}/bin/test_libcamera2 test_libcamera2.cpp $(pkg-config --cflags --libs libcamera)"
342+
],
343+
"sources": [
344+
{
345+
"type": "file",
346+
"path": "test_libcamera2.cpp"
347+
}
348+
]
340349
}
341350
]
342351
}

patches/flatpak-patch.patch

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
diff --git a/src/libcamera/pipeline/rpi/pisp/pisp.cpp b/src/libcamera/pipeline/rpi/pisp/pisp.cpp
2+
index 77acd2f6..cce0cc2b 100644
3+
--- a/src/libcamera/pipeline/rpi/pisp/pisp.cpp
4+
+++ b/src/libcamera/pipeline/rpi/pisp/pisp.cpp
5+
@@ -882,9 +882,9 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator)
6+
*/
7+
for (unsigned int i = 0; i < numCfeDevices; i++) {
8+
DeviceMatch cfe("rp1-cfe");
9+
- cfe.add("rp1-cfe-fe-image0");
10+
- cfe.add("rp1-cfe-fe-stats");
11+
- cfe.add("rp1-cfe-fe-config");
12+
+ cfe.add("rp1-cfe-fe_image0");
13+
+ cfe.add("rp1-cfe-fe_stats");
14+
+ cfe.add("rp1-cfe-fe_config");
15+
std::shared_ptr<MediaDevice> cfeDevice = acquireMediaDevice(enumerator, cfe);
16+
17+
if (!cfeDevice) {
18+
@@ -1072,10 +1072,10 @@ int PipelineHandlerPiSP::platformRegister(std::unique_ptr<RPi::CameraData> &came
19+
PiSPCameraData *data = static_cast<PiSPCameraData *>(cameraData.get());
20+
int ret;
21+
22+
- MediaEntity *cfeImage = cfe->getEntityByName("rp1-cfe-fe-image0");
23+
+ MediaEntity *cfeImage = cfe->getEntityByName("rp1-cfe-fe_image0");
24+
MediaEntity *cfeEmbedded = cfe->getEntityByName("rp1-cfe-csi2-ch1");
25+
- MediaEntity *cfeStats = cfe->getEntityByName("rp1-cfe-fe-stats");
26+
- MediaEntity *cfeConfig = cfe->getEntityByName("rp1-cfe-fe-config");
27+
+ MediaEntity *cfeStats = cfe->getEntityByName("rp1-cfe-fe_stats");
28+
+ MediaEntity *cfeConfig = cfe->getEntityByName("rp1-cfe-fe_config");
29+
MediaEntity *ispInput = isp->getEntityByName("pispbe-input");
30+
MediaEntity *IpaPrepare = isp->getEntityByName("pispbe-config");
31+
MediaEntity *ispOutput0 = isp->getEntityByName("pispbe-output0");

test_libcamera2.cpp

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#include <iostream>
2+
#include <memory>
3+
#include <thread>
4+
#include <chrono>
5+
#include <csignal>
6+
7+
#include <libcamera/libcamera.h>
8+
9+
using namespace libcamera;
10+
11+
volatile sig_atomic_t got_signal = 0;
12+
13+
void signalHandler(int sig) {
14+
got_signal = sig;
15+
}
16+
17+
int main()
18+
{
19+
signal(SIGSEGV, signalHandler);
20+
signal(SIGBUS, signalHandler);
21+
22+
std::cerr << "Step 1: Creating CameraManager" << std::endl;
23+
24+
auto cm = std::make_unique<CameraManager>();
25+
26+
std::cerr << "Step 2: Starting CameraManager" << std::endl;
27+
28+
int ret = cm->start();
29+
if (ret) {
30+
std::cerr << "Failed to start: " << ret << std::endl;
31+
return 1;
32+
}
33+
34+
std::cerr << "Step 3: CameraManager started, version: " << cm->version() << std::endl;
35+
36+
// Small delay to let background initialization complete
37+
std::this_thread::sleep_for(std::chrono::seconds(1));
38+
39+
std::cerr << "Step 4: Getting cameras" << std::endl;
40+
41+
if (got_signal) {
42+
std::cerr << "Signal caught: " << got_signal << std::endl;
43+
return 1;
44+
}
45+
46+
auto cameras = cm->cameras();
47+
48+
std::cerr << "Step 5: Got " << cameras.size() << " cameras" << std::endl;
49+
50+
if (got_signal) {
51+
std::cerr << "Signal caught: " << got_signal << std::endl;
52+
return 1;
53+
}
54+
55+
for (size_t i = 0; i < cameras.size(); i++) {
56+
std::cerr << "Step 6." << i << ": Camera " << cameras[i]->id() << std::endl;
57+
}
58+
59+
std::cerr << "Step 7: Sleeping before stop" << std::endl;
60+
std::this_thread::sleep_for(std::chrono::seconds(1));
61+
62+
std::cerr << "Step 8: Stopping CameraManager" << std::endl;
63+
cm->stop();
64+
65+
std::cerr << "Step 9: Releasing CameraManager" << std::endl;
66+
cm.reset();
67+
68+
std::cerr << "Step 10: Done!" << std::endl;
69+
70+
return cameras.empty() ? 1 : 0;
71+
}

0 commit comments

Comments
 (0)