Introduction
This project is part 4 of a N part series of projects, where we will explore how to integrate Raspberry Pi cameras on Zynq-UltraScale+ boards.
- Part 1 : RPI Camera Fun with Zynq-UltraScale+ : RPI Cam V2
- Part 2 : RPI Camera Fun with Zynq-UltraScale+ : RPI Cam V3, HQ, AI
- Part 3 : RPI Camera Fun with Zynq-UltraScale+ : White Balance
- Part 4 : RPI Camera Fun with Zynq-UltraScale+ : LIBCAMERA
During this series, I will be targeting the following hardware setup:
- Tria UltraZed-7EV Starter Kit (SOM + Carrier Card)
- Opsero RPI Camera FMC
- Raspberry Pi cameras
The featured design will also support Hailo-8 AI acceleration with the following optional hardware:
- Opsero M.2 Stack FMC
- Hailo-8 AI Acceleration module
The motivation of this series of projects is to enable users to leverage Raspberry Pi’s wonderful portfolio of cameras and supporting software, on Zynq-UltraScale+ hardware.
Introduction — Part IV
This final project in the series attempts to port LibCamera to our specific use case. There are several reasons that motivate us to do this:
- possibility of improving our ISP
- access to the easy to use libcamera utilities
Without knowing if I will succeed, I will document the process regardless.
LIBCAMERA Overview
I will not attempt to provide an overview of this open-source framework, since it is already available on-line:
I also strongly encourage you to attend this excellent presentation where Laurent Pinchard, chief architect of the LIBCAMERA framework, gives a 40 minute overview:
Learn How to Support Your SoC and ISP in LibCamera (: Ideas on Board, Laurent Pinchart)
Building LIBCAMERA
Before modifying LIBCAMERA for our purposes, we need to validate that we can build the reference implementation.
Install the following packages and dependencies on our 2024.1 petalinux image:
dnf install python3-pip
dnf install openssl libtiff-dev
dnf install meson cmake ninja
dnf install python3-ply
dnf install python3-jinja2
dnf install python3-pyyaml
Clone and build libcamera repository:
git clone https://git.libcamera.org/libcamera/libcamera.git
cd libcamera
meson setup build
ninja -C build install
Output log for “git clone ...
":
root@uzev-hailo-2024-1:~# git clone https://git.libcamera.org/libcamera/libcamera.git
Cloning into 'libcamera'...
remote: Enumerating objects: 43835, done.
remote: Counting objects: 100% (43835/43835), done.
remote: Compressing objects: 100% (11600/11600), done.
remote: Total 43835 (delta 34149), reused 41168 (delta 32048)
Receiving objects: 100% (43835/43835), 8.11 MiB | 3.14 MiB/s, done.
Resolving deltas: 100% (34149/34149), done.
root@uzev-hailo-2024-1:~# cd libcamera/
Output log for “meson setup build
":
root@uzev-hailo-2024-1:~/libcamera# meson setup build
The Meson build system
Version: 0.63.3
Source dir: /home/root/libcamera
Build dir: /home/root/libcamera/build
Build type: native build
Project name: libcamera
Project version: 0.4.0
C compiler for the host machine: ccache cc (gcc 12.2.0 "cc (GCC) 12.2.0")
C linker for the host machine: cc ld.bfd 2.39.0.20220819
C++ compiler for the host machine: ccache c++ (gcc 12.2.0 "c++ (GCC) 12.2.0")
C++ linker for the host machine: c++ ld.bfd 2.39.0.20220819
Host machine cpu family: aarch64
Host machine cpu: aarch64
Header "fcntl.h" has symbol "F_ADD_SEALS" : YES
Header "unistd.h" has symbol "issetugid" : NO
Header "locale.h" has symbol "locale_t" : YES
Header "sys/mman.h" has symbol "memfd_create" : YES
Header "stdlib.h" has symbol "secure_getenv" : YES
Compiler for C supports arguments -Wno-c99-designator: NO
Found pkg-config: /usr/bin/pkg-config (0.29.2)
Found CMake: /usr/bin/cmake (3.24.2)
Run-time dependency lttng-ust found: NO (tried pkgconfig and cmake)
Program ./parser.py found: YES (/home/root/libcamera/utils/codegen/ipc/./parser.py)
Program ./generate.py found: YES (/home/root/libcamera/utils/codegen/ipc/./generate.py)
Program ./extract-docs.py found: YES (/home/root/libcamera/utils/codegen/ipc/./extract-docs.py)
Configuring version.h using configuration
Program openssl found: YES (/usr/bin/openssl)
Run-time dependency libyuv found: NO (tried pkgconfig and cmake)
Library atomic found: YES
Run-time dependency threads found: YES
Run-time dependency libdw found: YES 0.187
Run-time dependency libunwind found: YES 1.6.2
Header "execinfo.h" has symbol "backtrace" : YES
Checking for function "dlopen" : YES
Run-time dependency libudev found: YES 251
Run-time dependency yaml-0.1 found: NO (tried pkgconfig and cmake)
Run-time dependency gnutls found: YES 3.7.8
Executing subproject libyaml method cmake
libyaml| Found CMake: /usr/bin/cmake (3.24.2)
| Configuring the build directory with CMake version 3.24.2
| Running CMake with: -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_POSITION_INDEPENDENT_CODE=ON
| - build directory: /home/root/libcamera/build/subprojects/libyaml/__CMake_build
| - source directory: /home/root/libcamera/subprojects/libyaml
| - toolchain file: /home/root/libcamera/build/subprojects/libyaml/__CMake_build/CMakeMesonToolchainFile.cmake
| - preload file: /usr/lib/python3.10/site-packages/mesonbuild/cmake/data/preload.cmake
| - trace args: --trace-expand --trace-format=json-v1 --no-warn-unused-cli --trace-redirect=cmake_trace.txt
| - disabled policy warnings: [CMP0025, CMP0047, CMP0056, CMP0060, CMP0065, CMP0066, CMP0067, CMP0082, CMP0089, CMP0102]
| Running with expanded trace output on.
| Not searching for unused variables given on the command line.
| Trace will be written to cmake_trace.txt
| -- The C compiler identification is GNU 12.2.0
| -- Detecting C compiler ABI info
| -- Detecting C compiler ABI info - done
| -- Check for working C compiler: /usr/bin/cc - skipped
| -- Detecting C compile features
| -- Detecting C compile features - done
| -- Configuring done
| -- Generating done
| -- Build files have been written to: /home/root/libcamera/build/subprojects/libyaml/__CMake_build
libyaml| CMake configuration: SUCCEEDED
libyaml| CMake project yaml has 42 build targets.
cmake-ast| Processing generated meson AST
cmake-ast| Build file: /home/root/libcamera/build/subprojects/libyaml/meson.build
libyaml| Project name: yaml
libyaml| Project version: undefined
libyaml| C compiler for the host machine: ccache cc (gcc 12.2.0 "cc (GCC) 12.2.0")
libyaml| C linker for the host machine: cc ld.bfd 2.39.0.20220819
libyaml| Build targets in project: 82
libyaml| Subproject libyaml finished.
Dependency libexif skipped: feature android disabled
Dependency libjpeg skipped: feature android disabled
Run-time dependency libevent_pthreads found: NO (tried pkgconfig and cmake)
Run-time dependency libevent_pthreads found: NO (tried pkgconfig and cmake)
Run-time dependency libtiff-4 found: YES 4.4.0
Run-time dependency GTest found: NO (tried pkgconfig and system)
Looking for a fallback subproject for the dependency gtest
Executing subproject gtest
gtest| Project name: gtest
gtest| Project version: 1.11.0
gtest| C++ compiler for the host machine: ccache c++ (gcc 12.2.0 "c++ (GCC) 12.2.0")
gtest| C++ linker for the host machine: c++ ld.bfd 2.39.0.20220819
gtest| Dependency threads found: YES unknown (cached)
gtest| Dependency threads found: YES unknown (cached)
gtest| Dependency threads found: YES unknown (cached)
gtest| Dependency threads found: YES unknown (cached)
gtest| Build targets in project: 108
gtest| Subproject gtest finished.
Dependency gtest from subproject subprojects/googletest-release-1.11.0 found: YES 1.11.0
Run-time dependency qt6 (modules: Core, Gui, OpenGL, OpenGLWidgets, Widgets) found: NO (tried pkgconfig)
Run-time dependency glib-2.0 found: YES 2.72.3
Run-time dependency gstreamer-video-1.0 found: YES 1.20.5
Run-time dependency gstreamer-allocators-1.0 found: YES 1.20.5
Run-time dependency python3 found: YES 3.10
Run-time dependency pybind11 found: NO (tried pkgconfig and cmake)
Program doxygen found: NO
Program dot found: YES (/usr/bin/dot)
Program sphinx-build-3 found: NO
Program sphinx-build found: NO
Configuring config.h using configuration
Program python3 (jinja2, yaml, jinja2, ply) found: YES (/usr/bin/python3) modules: jinja2, yaml, jinja2, ply
Build targets in project: 111
libcamera 0.4.0
Versions
Sources : 0.4.0+18-5d444bbd
Paths
LIBCAMERA_DATA_DIR : "/usr/local/share/libcamera"
LIBCAMERA_SYSCONF_DIR : "/usr/local/etc/libcamera"
IPA_PROXY_DIR : "/usr/local/libexec/libcamera"
IPA_CONFIG_DIR : "/usr/local/etc/libcamera/ipa:/usr/local/share/libcamera/ipa"
IPA_MODULE_DIR : "/usr/local/lib/libcamera"
Configuration
SoftISP support : True
IPA modules signed with : gnutls
Enabled pipelines : imx8-isi
mali-c55
rkisp1
rpi/vc4
simple
uvcvideo
Enabled IPA modules : mali-c55
rkisp1
rpi/vc4
simple
Controls files : control_ids_core.yaml
control_ids_debug.yaml
control_ids_draft.yaml
control_ids_rpi.yaml
Properties files : property_ids_draft.yaml
property_ids_core.yaml
Hotplug support : YES
Tracing support : NO
Android support : NO
GStreamer support : YES
Python bindings : NO
V4L2 emulation support : NO
cam application : NO
qcam application : NO
lc-compliance application: NO
Unit tests : NO
Subprojects
gtest : YES
libyaml : YES
Found ninja-1.11.1 at /usr/bin/ninja
Output log for “ninja -C build install
":
root@uzev-hailo-2024-1:~/libcamera# ninja -C build install
ninja: Entering directory `build'
[1/272] Generating include/libcamera/internal/tp_header with a custom command
[2/272] Compiling C object utils/ipu3/ipu3-unpack.p/ipu3-unpack.c.o
[3/272] Compiling C object utils/ipu3/ipu3-pack.p/ipu3-pack.c.o
[4/272] Linking target utils/ipu3/ipu3-pack
[5/272] Linking target utils/ipu3/ipu3-unpack
[6/272] Generating include/libcamera/formats_h with a custom command
[7/272] Generating include/libcamera/ipa/core_mojom_module with a custom command (wrapped by meson to set env)
[8/272] Generating include/libcamera/property_ids_core.yaml_h with a custom command (wrapped by meson to set env)
[9/272] Generating include/libcamera/control_ids_rpi.yaml_h with a custom command (wrapped by meson to set env)
[10/272] Generating src/ipa-priv-key with a custom command
.......+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*....+...+.......+...+..+.+........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+....+......+...+...........+.............+.....+...+.......+...+..+.+.....................+...........+...+.......+.........+.....+.+........+.......+..............+...+......+............+...+.+.....+.+..+.+......+......+..+......+.+..................+...+...+..+.........+......+....+.....+...+...+..................+.+.....+...+.......+.....+.+............+..+.+..+..........+...............+...+..+.....................+....+........+............+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
...+...............+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.............+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.............+.+..+...................+...+........+..........+.....+....+...........+.......+.....+......+....+...+...+......+..............+....+...............+...+.....+.........+.+.........+........+...........................+.+...+......+.....+....+......+........+................+.....+....+.....+.+...........+..........+......+..+......+.+...+..+.+..+.............+.....+....+...+...+..+............+.+.................+.+..+.........+...+.+.........+......+..+....+.....+.........+.+..............+....+...+.....+....+.........+..............+.+...........+..........+........+......+......+.+...............+.....+...+.+......+..+.......+...+...+.....+............+...+....+........+.......+...........+....+...+.....+.+.....+............+...+.+......+........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[11/272] Generating utils/codegen/ipc/mojom_templates with a custom command (wrapped by meson to set env)
[12/272] Generating include/libcamera/ipa/mali-c55_mojom_module with a custom command (wrapped by meson to set env)
[13/272] Generating include/libcamera/ipa/rkisp1_mojom_module with a custom command (wrapped by meson to set env)
[14/272] Generating include/libcamera/ipa/raspberrypi_mojom_module with a custom command (wrapped by meson to set env)
[15/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/bound_method.cpp.o
[16/272] Generating include/libcamera/ipa/soft_mojom_module with a custom command (wrapped by meson to set env)
[17/272] Generating include/libcamera/ipa/core_ipa_interface_h with a custom command (wrapped by meson to set env)
[18/272] Generating include/libcamera/ipa/core_ipa_serializer_h with a custom command (wrapped by meson to set env)
[19/272] Generating include/libcamera/ipa/mali-c55_ipa_interface_h with a custom command (wrapped by meson to set env)
[20/272] Generating include/libcamera/ipa/mali-c55_ipa_serializer_h with a custom command (wrapped by meson to set env)
[21/272] Generating include/libcamera/ipa/mali-c55_proxy_h with a custom command (wrapped by meson to set env)
[22/272] Generating include/libcamera/ipa/rkisp1_ipa_interface_h with a custom command (wrapped by meson to set env)
[23/272] Generating include/libcamera/ipa/rkisp1_ipa_serializer_h with a custom command (wrapped by meson to set env)
[24/272] Generating include/libcamera/ipa/rkisp1_proxy_h with a custom command (wrapped by meson to set env)
[25/272] Generating include/libcamera/ipa/raspberrypi_ipa_interface_h with a custom command (wrapped by meson to set env)
[26/272] Generating include/libcamera/gen-header with a custom command
[27/272] Generating include/libcamera/ipa/raspberrypi_ipa_serializer_h with a custom command (wrapped by meson to set env)
[28/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/flags.cpp.o
[29/272] Generating include/libcamera/ipa/soft_ipa_interface_h with a custom command (wrapped by meson to set env)
[30/272] Generating include/libcamera/ipa/raspberrypi_proxy_h with a custom command (wrapped by meson to set env)
[31/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/class.cpp.o
[32/272] Generating include/libcamera/ipa/soft_ipa_serializer_h with a custom command (wrapped by meson to set env)
[33/272] Generating include/libcamera/ipa/soft_proxy_h with a custom command (wrapped by meson to set env)
[34/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/signal.cpp.o
[35/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/shared_fd.cpp.o
[36/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/unique_fd.cpp.o
[37/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/object.cpp.o
[38/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/backtrace.cpp.o
[39/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/event_dispatcher.cpp.o
[40/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/event_notifier.cpp.o
[41/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/file.cpp.o
[42/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/memfd.cpp.o
[43/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/message.cpp.o
[44/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/event_dispatcher_poll.cpp.o
[45/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/mutex.cpp.o
[46/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/log.cpp.o
[47/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/semaphore.cpp.o
[48/272] Generating src/libcamera/proxy/mali-c55_proxy_cpp with a custom command (wrapped by meson to set env)
[49/272] Generating src/libcamera/proxy/rkisp1_proxy_cpp with a custom command (wrapped by meson to set env)
[50/272] Generating src/libcamera/proxy/raspberrypi_proxy_cpp with a custom command (wrapped by meson to set env)
[51/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_dumper.c.o
[52/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/timer.cpp.o
[53/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/utils.cpp.o
[54/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_api.c.o
[55/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_loader.c.o
[56/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_reader.c.o
[57/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_parser.c.o
[58/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_writer.c.o
[59/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_emitter.c.o
[60/272] Compiling C++ object src/libcamera/base/libcamera-base.so.0.4.0.p/thread.cpp.o
[61/272] Generating src/libcamera/proxy/soft_proxy_cpp with a custom command (wrapped by meson to set env)
[62/272] Generating src/libcamera/ipa_pub_key_cpp with a custom command
writing RSA key
[63/272] Linking target src/libcamera/base/libcamera-base.so.0.4.0
[64/272] Generating src/libcamera/version.cpp with a custom command
[65/272] Compiling C object subprojects/libyaml/libyaml.a.p/src_scanner.c.o
[66/272] Linking static target subprojects/libyaml/libyaml.a
[67/272] Generating src/libcamera/properties_ids_cpp with a custom command (wrapped by meson to set env)
[68/272] Generating symbol file src/libcamera/base/libcamera-base.so.0.4.0.p/libcamera-base.so.0.4.0.symbols
[69/272] Generating src/libcamera/controls_ids_cpp with a custom command (wrapped by meson to set env)
[70/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._version.cpp.o
[71/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._property_ids.cpp.o
[72/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._control_ids.cpp.o
[73/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._ipa_pub_key.cpp.o
[74/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._proxy_mali-c55_ipa_proxy.cpp.o
[75/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._proxy_rkisp1_ipa_proxy.cpp.o
[76/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._proxy_soft_ipa_proxy.cpp.o
[77/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/meson-generated_.._proxy_raspberrypi_ipa_proxy.cpp.o
[78/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/fence.cpp.o
[79/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/color_space.cpp.o
[80/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/camera_manager.cpp.o
[81/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/camera.cpp.o
[82/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/framebuffer.cpp.o
[83/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/controls.cpp.o
[84/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/orientation.cpp.o
[85/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/framebuffer_allocator.cpp.o
[86/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/geometry.cpp.o
[87/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pixel_format.cpp.o
[88/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/transform.cpp.o
[89/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/byte_stream_buffer.cpp.o
[90/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/stream.cpp.o
[91/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/bayer_format.cpp.o
[92/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/control_validator.cpp.o
[93/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/camera_controls.cpp.o
[94/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/camera_lens.cpp.o
[95/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/request.cpp.o
[96/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/debug_controls.cpp.o
[97/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/converter.cpp.o
[98/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/device_enumerator_sysfs.cpp.o
[99/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipa_controls.cpp.o
[100/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/device_enumerator.cpp.o
[101/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipa_interface.cpp.o
[102/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/delayed_controls.cpp.o
[103/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/control_serializer.cpp.o
[104/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/dma_buf_allocator.cpp.o
[105/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/formats.cpp.o
[106/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipa_proxy.cpp.o
[107/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipa_module.cpp.o
[108/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipa_manager.cpp.o
[109/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipc_pipe.cpp.o
[110/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipa_data_serializer.cpp.o
[111/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipc_unixsocket.cpp.o
[112/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/ipc_pipe_unixsocket.cpp.o
[113/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/matrix.cpp.o
[114/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/mapped_framebuffer.cpp.o
[115/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/media_object.cpp.o
[116/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/media_device.cpp.o
[117/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pub_key.cpp.o
[118/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/shared_mem_object.cpp.o
[119/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/source_paths.cpp.o
[120/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/process.cpp.o
[121/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/sysfs.cpp.o
[122/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/v4l2_pixelformat.cpp.o
[123/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_handler.cpp.o
[124/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/v4l2_device.cpp.o
[125/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/v4l2_videodevice.cpp.o
[126/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/yaml_parser.cpp.o
[127/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/converter_converter_v4l2_m2m.cpp.o
[128/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_imx8-isi_imx8-isi.cpp.o
[129/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/v4l2_subdevice.cpp.o
[130/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_rpi_common_delayed_controls.cpp.o
[131/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_rkisp1_rkisp1_path.cpp.o
[132/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_rpi_common_rpi_stream.cpp.o
[133/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_mali-c55_mali-c55.cpp.o
[134/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_rkisp1_rkisp1.cpp.o
[135/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_rpi_vc4_vc4.cpp.o
[136/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_uvcvideo_uvcvideo.cpp.o
[137/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/sensor_camera_sensor.cpp.o
[138/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_rpi_common_pipeline_base.cpp.o
[139/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/software_isp_debayer.cpp.o
[140/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/sensor_camera_sensor_properties.cpp.o
[141/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/sensor_camera_sensor_legacy.cpp.o
[142/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/pipeline_simple_simple.cpp.o
[143/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/software_isp_debayer_cpu.cpp.o
[144/272] Generating src/libcamera/proxy/worker/mali-c55_proxy_worker with a custom command (wrapped by meson to set env)
[145/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/software_isp_swstats_cpu.cpp.o
[146/272] Generating src/libcamera/proxy/worker/rkisp1_proxy_worker with a custom command (wrapped by meson to set env)
[147/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/sensor_camera_sensor_raw.cpp.o
[148/272] Generating src/libcamera/proxy/worker/raspberrypi_proxy_worker with a custom command (wrapped by meson to set env)
[149/272] Generating src/libcamera/proxy/worker/soft_proxy_worker with a custom command (wrapped by meson to set env)
[150/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/device_enumerator_udev.cpp.o
[151/272] Compiling C++ object src/libcamera/libcamera.so.0.4.0.p/software_isp_software_isp.cpp.o
[152/272] Compiling C++ object src/libcamera/proxy/worker/mali-c55_ipa_proxy.p/meson-generated_.._mali-c55_ipa_proxy_worker.cpp.o
[153/272] Linking target src/libcamera/libcamera.so.0.4.0
[154/272] Compiling C++ object src/ipa/libipa/libipa.a.p/agc_mean_luminance.cpp.o
[155/272] Compiling C++ object src/libcamera/proxy/worker/rkisp1_ipa_proxy.p/meson-generated_.._rkisp1_ipa_proxy_worker.cpp.o
[156/272] Generating symbol file src/libcamera/libcamera.so.0.4.0.p/libcamera.so.0.4.0.symbols
[157/272] Compiling C++ object src/libcamera/proxy/worker/soft_ipa_proxy.p/meson-generated_.._soft_ipa_proxy_worker.cpp.o
[158/272] Linking target src/libcamera/proxy/worker/mali-c55_ipa_proxy
[159/272] Linking target src/libcamera/proxy/worker/rkisp1_ipa_proxy
[160/272] Compiling C++ object src/ipa/libipa/libipa.a.p/algorithm.cpp.o
[161/272] Linking target src/libcamera/proxy/worker/soft_ipa_proxy
[162/272] Compiling C++ object src/libcamera/proxy/worker/raspberrypi_ipa_proxy.p/meson-generated_.._raspberrypi_ipa_proxy_worker.cpp.o
[163/272] Compiling C++ object src/ipa/libipa/libipa.a.p/fixedpoint.cpp.o
[164/272] Linking target src/libcamera/proxy/worker/raspberrypi_ipa_proxy
[165/272] Compiling C++ object src/ipa/libipa/libipa.a.p/colours.cpp.o
[166/272] Compiling C++ object src/ipa/libipa/libipa.a.p/fc_queue.cpp.o
[167/272] Compiling C++ object src/ipa/libipa/libipa.a.p/exposure_mode_helper.cpp.o
[168/272] Compiling C++ object src/ipa/libipa/libipa.a.p/histogram.cpp.o
[169/272] Compiling C++ object src/ipa/libipa/libipa.a.p/interpolator.cpp.o
[170/272] Compiling C++ object src/ipa/libipa/libipa.a.p/lsc_polynomial.cpp.o
[171/272] Compiling C++ object src/ipa/libipa/libipa.a.p/camera_sensor_helper.cpp.o
[172/272] Compiling C++ object src/ipa/libipa/libipa.a.p/lux.cpp.o
[173/272] Compiling C++ object src/ipa/libipa/libipa.a.p/module.cpp.o
[174/272] Compiling C++ object src/ipa/libipa/libipa.a.p/vector.cpp.o
[175/272] Compiling C++ object src/ipa/mali-c55/ipa_mali_c55.so.p/ipa_context.cpp.o
[176/272] Compiling C++ object src/ipa/libipa/libipa.a.p/pwl.cpp.o
[177/272] Linking static target src/ipa/libipa/libipa.a
[178/272] Compiling C++ object src/ipa/mali-c55/ipa_mali_c55.so.p/algorithms_awb.cpp.o
[179/272] Compiling C++ object src/ipa/mali-c55/ipa_mali_c55.so.p/algorithms_agc.cpp.o
[180/272] Compiling C++ object src/ipa/mali-c55/ipa_mali_c55.so.p/mali-c55.cpp.o
[181/272] Compiling C++ object src/ipa/mali-c55/ipa_mali_c55.so.p/algorithms_blc.cpp.o
[182/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/ipa_context.cpp.o
[183/272] Compiling C++ object src/ipa/mali-c55/ipa_mali_c55.so.p/algorithms_lsc.cpp.o
[184/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/params.cpp.o
[185/272] Linking target src/ipa/mali-c55/ipa_mali_c55.so
[186/272] Generating src/ipa/mali-c55/ipa_mali_c55.so.sign with a custom command
[187/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_blc.cpp.o
[188/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_awb.cpp.o
[189/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_cproc.cpp.o
[190/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_agc.cpp.o
[191/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/rkisp1.cpp.o
[192/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_ccm.cpp.o
[193/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_dpcc.cpp.o
[194/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_dpf.cpp.o
[195/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_filter.cpp.o
[196/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_goc.cpp.o
[197/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_gsl.cpp.o
[198/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_lsc.cpp.o
[199/272] Compiling C++ object src/ipa/rkisp1/ipa_rkisp1.so.p/algorithms_lux.cpp.o
[200/272] Linking target src/ipa/rkisp1/ipa_rkisp1.so
[201/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_ov5647.cpp.o
[202/272] Generating src/ipa/rkisp1/ipa_rkisp1.so.sign with a custom command
[203/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper.cpp.o
[204/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx283.cpp.o
[205/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx219.cpp.o
[206/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx290.cpp.o
[207/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx415.cpp.o
[208/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx296.cpp.o
[209/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx477.cpp.o
[210/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx519.cpp.o
[211/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_ov64a40.cpp.o
[212/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_imx708.cpp.o
[213/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_ov7251.cpp.o
[214/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/cam_helper_ov9281.cpp.o
[215/272] Compiling C++ object src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a.p/md_parser_smia.cpp.o
[216/272] Linking static target src/ipa/rpi/cam_helper/librpi_ipa_cam_helper.a
[217/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/histogram.cpp.o
[218/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/algorithm.cpp.o
[219/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/device_status.cpp.o
[220/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/controller.cpp.o
[221/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_af.cpp.o
[222/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_agc.cpp.o
[223/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_alsc.cpp.o
[224/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_agc_channel.cpp.o
[225/272] Compiling C++ object src/ipa/rpi/common/librpi_ipa_common.a.p/ipa_base.cpp.o
[226/272] Linking static target src/ipa/rpi/common/librpi_ipa_common.a
[227/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_awb.cpp.o
[228/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_black_level.cpp.o
[229/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_cac.cpp.o
[230/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_ccm.cpp.o
[231/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_denoise.cpp.o
[232/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_contrast.cpp.o
[233/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_dpc.cpp.o
[234/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_geq.cpp.o
[235/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_lux.cpp.o
[236/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_saturation.cpp.o
[237/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_sdn.cpp.o
[238/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_noise.cpp.o
[239/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_hdr.cpp.o
[240/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_sharpen.cpp.o
[241/272] Compiling C++ object src/ipa/simple/ipa_soft_simple.so.p/ipa_context.cpp.o
[242/272] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_tonemap.cpp.o
[243/272] Linking static target src/ipa/rpi/controller/librpi_ipa_controller.a
[244/272] Compiling C++ object src/ipa/simple/ipa_soft_simple.so.p/algorithms_awb.cpp.o
[245/272] Compiling C++ object src/ipa/simple/ipa_soft_simple.so.p/algorithms_agc.cpp.o
[246/272] Compiling C++ object src/ipa/simple/ipa_soft_simple.so.p/soft_simple.cpp.o
[247/272] Compiling C++ object src/ipa/simple/ipa_soft_simple.so.p/algorithms_blc.cpp.o
[248/272] Compiling C++ object src/ipa/rpi/vc4/ipa_rpi_vc4.so.p/vc4.cpp.o
[249/272] Compiling C++ object src/apps/common/libapps.a.p/image.cpp.o
[250/272] Compiling C++ object src/apps/common/libapps.a.p/ppm_writer.cpp.o
[251/272] Compiling C++ object src/ipa/simple/ipa_soft_simple.so.p/algorithms_lut.cpp.o
[252/272] Linking target src/ipa/rpi/vc4/ipa_rpi_vc4.so
[253/272] Generating src/ipa/rpi/vc4/ipa_rpi_vc4.so.sign with a custom command
[254/272] Linking target src/ipa/simple/ipa_soft_simple.so
[255/272] Generating src/ipa/simple/ipa_soft_simple.so.sign with a custom command
[256/272] Compiling C++ object src/apps/common/libapps.a.p/options.cpp.o
[257/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/gstlibcamera.cpp.o
[258/272] Generating src/gstreamer/gstlibcamera-controls.cpp with a custom command (wrapped by meson to set env)
[259/272] Compiling C++ object src/apps/common/libapps.a.p/stream_options.cpp.o
[260/272] Compiling C++ object src/apps/common/libapps.a.p/dng_writer.cpp.o
[261/272] Linking static target src/apps/common/libapps.a
[262/272] Compiling C++ object src/apps/ipa-verify/ipa_verify.p/main.cpp.o
[263/272] Linking target src/apps/ipa-verify/ipa_verify
[264/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/gstlibcamera-utils.cpp.o
[265/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/gstlibcamerapad.cpp.o
[266/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/gstlibcameraallocator.cpp.o
[267/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/meson-generated_.._gstlibcamera-controls.cpp.o
[268/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/gstlibcamerapool.cpp.o
[269/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/gstlibcameraprovider.cpp.o
[270/272] Compiling C++ object src/gstreamer/libgstlibcamera.so.p/gstlibcamerasrc.cpp.o
[271/272] Linking target src/gstreamer/libgstlibcamera.so
[271/272] Installing files.
Installing include/libcamera/ipa/core_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/ipa/mali-c55_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/ipa/rkisp1_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/ipa/raspberrypi_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/ipa/soft_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/control_ids.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/property_ids.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/formats.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/libcamera.h to /usr/local/include/libcamera/libcamera
Installing src/libcamera/base/libcamera-base.so.0.4.0 to /usr/local/lib
Installing subprojects/libyaml/libyaml.a to /usr/local/lib
Installing src/libcamera/libcamera.so.0.4.0 to /usr/local/lib
Installing src/libcamera/proxy/worker/mali-c55_ipa_proxy to /usr/local/libexec/libcamera
Installing src/libcamera/proxy/worker/rkisp1_ipa_proxy to /usr/local/libexec/libcamera
Installing src/libcamera/proxy/worker/raspberrypi_ipa_proxy to /usr/local/libexec/libcamera
Installing src/libcamera/proxy/worker/soft_ipa_proxy to /usr/local/libexec/libcamera
Installing src/ipa/mali-c55/ipa_mali_c55.so to /usr/local/lib/libcamera
Installing src/ipa/rkisp1/ipa_rkisp1.so to /usr/local/lib/libcamera
Installing src/ipa/rpi/vc4/ipa_rpi_vc4.so to /usr/local/lib/libcamera
Installing src/ipa/simple/ipa_soft_simple.so to /usr/local/lib/libcamera
Installing src/gstreamer/libgstlibcamera.so to /usr/local/lib/gstreamer-1.0
Installing /home/root/libcamera/include/libcamera/base/bound_method.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/base/class.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/base/flags.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/base/object.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/base/shared_fd.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/base/signal.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/base/span.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/base/unique_fd.h to /usr/local/include/libcamera/libcamera/base/
Installing /home/root/libcamera/include/libcamera/ipa/ipa_controls.h to /usr/local/include/libcamera/libcamera/ipa/
Installing /home/root/libcamera/include/libcamera/ipa/ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa/
Installing /home/root/libcamera/include/libcamera/ipa/ipa_module_info.h to /usr/local/include/libcamera/libcamera/ipa/
Installing /home/root/libcamera/include/libcamera/camera.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/camera_manager.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/color_space.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/controls.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/fence.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/framebuffer.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/framebuffer_allocator.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/geometry.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/logging.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/orientation.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/pixel_format.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/request.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/stream.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/include/libcamera/transform.h to /usr/local/include/libcamera/libcamera/
Installing /home/root/libcamera/build/include/libcamera/version.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/build/meson-private/libcamera-base.pc to /usr/local/lib/pkgconfig
Installing /home/root/libcamera/src/libcamera/pipeline/rpi/vc4/data/example.yaml to /usr/local/share/libcamera/pipeline/rpi/vc4
Installing /home/root/libcamera/build/meson-private/libcamera.pc to /usr/local/lib/pkgconfig
Installing /home/root/libcamera/src/ipa/mali-c55/data/imx415.yaml to /usr/local/share/libcamera/ipa/mali-c55
Installing /home/root/libcamera/src/ipa/mali-c55/data/uncalibrated.yaml to /usr/local/share/libcamera/ipa/mali-c55
Installing /home/root/libcamera/src/ipa/rkisp1/data/imx219.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rkisp1/data/imx258.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rkisp1/data/ov2685.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rkisp1/data/ov4689.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rkisp1/data/ov5640.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rkisp1/data/ov5695.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rkisp1/data/ov8858.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rkisp1/data/uncalibrated.yaml to /usr/local/share/libcamera/ipa/rkisp1
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx219.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx219_noir.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx283.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx290.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx296.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx296_mono.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx327.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx378.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx415.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx462.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx477.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx477_noir.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx477_scientific.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx519.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx708.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx708_noir.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx708_wide.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/imx708_wide_noir.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/ov5647.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/ov5647_noir.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/ov64a40.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/ov7251_mono.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/ov9281_mono.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/se327m12.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/rpi/vc4/data/uncalibrated.json to /usr/local/share/libcamera/ipa/rpi/vc4
Installing /home/root/libcamera/src/ipa/simple/data/uncalibrated.yaml to /usr/local/share/libcamera/ipa/simple
Installing symlink pointing to libcamera-base.so.0.4.0 to /usr/local/lib/libcamera-base.so.0.4
Installing symlink pointing to libcamera-base.so.0.4 to /usr/local/lib/libcamera-base.so
Installing symlink pointing to libcamera.so.0.4.0 to /usr/local/lib/libcamera.so.0.4
Installing symlink pointing to libcamera.so.0.4 to /usr/local/lib/libcamera.so
Running custom install script '/home/root/libcamera/src/ipa/ipa-sign-install.sh /home/root/libcamera/build/src/ipa-priv-key.pem lib/libcamera/ipa_mali_c55.so lib/libcamera/ipa_rkisp1.so lib/libcamera/ipa_rpi_vc4.so lib/libcamera/ipa_soft_simple.so'
root@uzev-hailo-2024-1:~/libcamera#
We can also access the libcamera gstreamer plug-in as follows:
root@uzev-hailo-2024-1:~/libcamera# meson devenv -C build
root@uzev-hailo-2024-1:~/libcamera/build# gst-inspect-1.0 | grep libcamera
libcamera: libcameraprovider (GstDeviceProviderFactory)
libcamera: libcamerasrc: libcamera Source
At this point, however, no cameras are detected on the system:
root@uzev-hailo-2024-1:~/libcamera/build# gst-launch-1.0 libcamerasrc ! fakesink
Setting pipeline to PAUSED ...
[74:47:49.780974303] [75070] INFO IPAManager ipa_manager.cpp:137 libcamera is not installed. Adding '/home/root/libcamera/build/src/ipa' to the IPA search path
[74:47:49.809680914] [75070] INFO Camera camera_manager.cpp:327 libcamera v0.4.0+18-5d444bbd
ERROR: from element /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0: Could not find any supported camera on this system.
Additional debug info:
../src/gstreamer/gstlibcamerasrc.cpp(402): gst_libcamera_src_open (): /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0:
libcamera::CameraMananger::cameras() is empty
ERROR: pipeline doesn't want to preroll.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
root@uzev-hailo-2024-1:~/libcamera/build#
Adapting the LIBCAMERA build for our use case
In the previous build, you may have noticed that the “rpi/vc4” and “rpi/pisp” pipeline handlers were built. These are specific to the Raspberry Pi platforms, and not needed for our use case.
Also, the “cam” application and “pycamera” python bindings were not included in the build, which we want to include.
These settings can be specified with the following command:
meson setup build --buildtype=release -Dpipelines=simple -Dipas=simple -Dv4l2=true -Dgstreamer=enabled -Dtest=false -Dlc-compliance=disabled -Dcam=enabled -Dqcam=disabled -Ddocumentation=disabled -Dpycamera=enabled
A first build attempt will fail due to the following missing dependencies:
- cam : libevent_pthreads
- pycamera : pybind11
These dependencies can be installed as follows:
dnf install libevent
dnf install libevent-pthreads
dnf install libevent-dev
dnf install python3-pybind11
dnf install python3-pybind11-dev
If you are missing space in the root file system, it needs to be expanded to the full size of the SD card, as follows:
dnf install e2fsprogs-resize2fs
auto-resize
Next, re-run the “meson setup build ..” command:
root@uzev-hailo-2024-1:~/libcamera# meson setup build --buildtype=release -Dpipelines=simple -Dipas=simple -Dv4l2=true -Dgstreamer=enabled -Dtest=false -Dlc-compliance=disabled -Dcam=enabled -Dqcam=disabled -Ddocumentation=disabled -Dpycamera=enabled
The Meson build system
Version: 0.63.3
Source dir: /home/root/libcamera
Build dir: /home/root/libcamera/build
Build type: native build
Project name: libcamera
Project version: 0.4.0
C compiler for the host machine: ccache cc (gcc 12.2.0 "cc (GCC) 12.2.0")
C linker for the host machine: cc ld.bfd 2.39.0.20220819
C++ compiler for the host machine: ccache c++ (gcc 12.2.0 "c++ (GCC) 12.2.0")
C++ linker for the host machine: c++ ld.bfd 2.39.0.20220819
Host machine cpu family: aarch64
Host machine cpu: aarch64
Header "fcntl.h" has symbol "F_ADD_SEALS" : YES
Header "unistd.h" has symbol "issetugid" : NO
Header "locale.h" has symbol "locale_t" : YES
Header "sys/mman.h" has symbol "memfd_create" : YES
Header "stdlib.h" has symbol "secure_getenv" : YES
Compiler for C supports arguments -Wno-c99-designator: NO
Found pkg-config: /usr/bin/pkg-config (0.29.2)
Found CMake: /usr/bin/cmake (3.24.2)
Run-time dependency lttng-ust found: NO (tried pkgconfig and cmake)
Program ./parser.py found: YES (/home/root/libcamera/utils/codegen/ipc/./parser.py)
Program ./generate.py found: YES (/home/root/libcamera/utils/codegen/ipc/./generate.py)
Program ./extract-docs.py found: YES (/home/root/libcamera/utils/codegen/ipc/./extract-docs.py)
Configuring version.h using configuration
Program openssl found: YES (/usr/bin/openssl)
Run-time dependency libyuv found: NO (tried pkgconfig and cmake)
Library atomic found: YES
Run-time dependency threads found: YES
Run-time dependency libdw found: YES 0.187
Run-time dependency libunwind found: YES 1.6.2
Header "execinfo.h" has symbol "backtrace" : YES
Checking for function "dlopen" : YES
Run-time dependency libudev found: YES 251
Run-time dependency yaml-0.1 found: NO (tried pkgconfig and cmake)
Run-time dependency gnutls found: YES 3.7.8
Executing subproject libyaml method cmake
libyaml| Found CMake: /usr/bin/cmake (3.24.2)
| Configuring the build directory with CMake version 3.24.2
| Running CMake with: -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_POSITION_INDEPENDENT_CODE=ON
| - build directory: /home/root/libcamera/build/subprojects/libyaml/__CMake_build
| - source directory: /home/root/libcamera/subprojects/libyaml
| - toolchain file: /home/root/libcamera/build/subprojects/libyaml/__CMake_build/CMakeMesonToolchainFile.cmake
| - preload file: /usr/lib/python3.10/site-packages/mesonbuild/cmake/data/preload.cmake
| - trace args: --trace-expand --trace-format=json-v1 --no-warn-unused-cli --trace-redirect=cmake_trace.txt
| - disabled policy warnings: [CMP0025, CMP0047, CMP0056, CMP0060, CMP0065, CMP0066, CMP0067, CMP0082, CMP0089, CMP0102]
| Running with expanded trace output on.
| Not searching for unused variables given on the command line.
| Trace will be written to cmake_trace.txt
| -- The C compiler identification is GNU 12.2.0
| -- Detecting C compiler ABI info
| -- Detecting C compiler ABI info - done
| -- Check for working C compiler: /usr/bin/cc - skipped
| -- Detecting C compile features
| -- Detecting C compile features - done
| -- Configuring done
| -- Generating done
| -- Build files have been written to: /home/root/libcamera/build/subprojects/libyaml/__CMake_build
libyaml| CMake configuration: SUCCEEDED
libyaml| CMake project yaml has 42 build targets.
cmake-ast| Processing generated meson AST
cmake-ast| Build file: /home/root/libcamera/build/subprojects/libyaml/meson.build
libyaml| Project name: yaml
libyaml| Project version: undefined
libyaml| C compiler for the host machine: ccache cc (gcc 12.2.0 "cc (GCC) 12.2.0")
libyaml| C linker for the host machine: cc ld.bfd 2.39.0.20220819
libyaml| Build targets in project: 67
libyaml| Subproject libyaml finished.
Dependency libexif skipped: feature android disabled
Dependency libjpeg skipped: feature android disabled
Run-time dependency libevent_pthreads found: YES 2.1.12-stable
Run-time dependency libtiff-4 found: YES 4.4.0
Dependency gtest skipped: feature lc-compliance disabled
Run-time dependency libdrm found: YES 2.4.113
Run-time dependency libjpeg found: YES 2.1.5.1
sdl2-config found: NO
Run-time dependency sdl2 found: NO (tried pkgconfig and config-tool)
Dependency qt6 (modules: Core, Gui, OpenGL, OpenGLWidgets, Widgets) skipped: feature qcam disabled
Run-time dependency glib-2.0 found: YES 2.72.3
Run-time dependency gstreamer-video-1.0 found: YES 1.20.5
Run-time dependency gstreamer-allocators-1.0 found: YES 1.20.5
Run-time dependency python3 found: YES 3.10
Run-time dependency pybind11 found: YES 2.10.0
Configuring libcamerify using configuration
Program doxygen skipped: feature documentation disabled
Program dot skipped: feature documentation disabled
Program sphinx-build-3 found: NO
Program sphinx-build skipped: feature documentation disabled
Configuring config.h using configuration
Program python3 (jinja2, yaml, jinja2, ply) found: YES (/usr/bin/python3) modules: jinja2, yaml, jinja2, ply
Build targets in project: 87
libcamera 0.4.0
Versions
Sources : 0.4.0+19-91de5502
Paths
LIBCAMERA_DATA_DIR : "/usr/local/share/libcamera"
LIBCAMERA_SYSCONF_DIR : "/usr/local/etc/libcamera"
IPA_PROXY_DIR : "/usr/local/libexec/libcamera"
IPA_CONFIG_DIR : "/usr/local/etc/libcamera/ipa:/usr/local/share/libcamera/ipa"
IPA_MODULE_DIR : "/usr/local/lib/libcamera"
Configuration
SoftISP support : True
IPA modules signed with : gnutls
Enabled pipelines : simple
Enabled IPA modules : simple
Controls files : control_ids_core.yaml
control_ids_debug.yaml
control_ids_draft.yaml
Properties files : property_ids_draft.yaml
property_ids_core.yaml
Hotplug support : YES
Tracing support : NO
Android support : NO
GStreamer support : YES
Python bindings : YES
V4L2 emulation support : YES
cam application : YES
qcam application : NO
lc-compliance application: NO
Unit tests : NO
Subprojects
libyaml : YES
User defined options
buildtype : release
cam : enabled
documentation : disabled
gstreamer : enabled
ipas : simple
lc-compliance : disabled
pipelines : simple
pycamera : enabled
qcam : disabled
test : false
v4l2 : true
Found ninja-1.11.1 at /usr/bin/ninja
root@uzev-hailo-2024-1:~/libcamera#
Then, re-build libcamera as follows:
root@uzev-hailo-2024-1:~/libcamera# ninja -C build install
ninja: Entering directory `build'
...
[195/196] Installing files.
Installing include/libcamera/ipa/core_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/ipa/soft_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/control_ids.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/property_ids.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/formats.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/libcamera.h to /usr/local/include/libcamera/libcamera
Installing src/libcamera/base/libcamera-base.so.0.4.0 to /usr/local/lib
Installing subprojects/libyaml/libyaml.a to /usr/local/lib
Installing src/libcamera/libcamera.so.0.4.0 to /usr/local/lib
Installing src/libcamera/proxy/worker/soft_ipa_proxy to /usr/local/libexec/libcamera
Installing src/ipa/simple/ipa_soft_simple.so to /usr/local/lib/libcamera
Installing src/apps/cam/cam to /usr/local/bin
Installing src/gstreamer/libgstlibcamera.so to /usr/local/lib/gstreamer-1.0
Installing src/py/libcamera/_libcamera.so to /usr/local/lib/python3.10/site-packages/libcamera
Installing src/v4l2/v4l2-compat.so to /usr/local/libexec/libcamera
Installing /home/root/libcamera/include/libcamera/base/bound_method.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/base/class.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/base/flags.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/base/object.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/base/shared_fd.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/base/signal.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/base/span.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/base/unique_fd.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera/include/libcamera/ipa/ipa_controls.h to /usr/local/include/libcamera/libcamera/ipa
Installing /home/root/libcamera/include/libcamera/ipa/ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing /home/root/libcamera/include/libcamera/ipa/ipa_module_info.h to /usr/local/include/libcamera/libcamera/ipa
Installing /home/root/libcamera/include/libcamera/camera.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/camera_manager.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/color_space.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/controls.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/fence.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/framebuffer.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/framebuffer_allocator.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/geometry.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/logging.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/orientation.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/pixel_format.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/request.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/stream.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/include/libcamera/transform.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/build/include/libcamera/version.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera/build/meson-private/libcamera-base.pc to /usr/local/lib/pkgconfig
Installing /home/root/libcamera/build/meson-private/libcamera.pc to /usr/local/lib/pkgconfig
Installing /home/root/libcamera/src/ipa/simple/data/uncalibrated.yaml to /usr/local/share/libcamera/ipa/simple
Installing /home/root/libcamera/src/py/libcamera/__init__.py to /usr/local/lib/python3.10/site-packages/libcamera
Installing /home/root/libcamera/build/src/v4l2/libcamerify to /usr/local/bin
Installing symlink pointing to libcamera-base.so.0.4.0 to /usr/local/lib/libcamera-base.so.0.4
Installing symlink pointing to libcamera-base.so.0.4 to /usr/local/lib/libcamera-base.so
Installing symlink pointing to libcamera.so.0.4.0 to /usr/local/lib/libcamera.so.0.4
Installing symlink pointing to libcamera.so.0.4 to /usr/local/lib/libcamera.so
Running custom install script '/home/root/libcamera/src/ipa/ipa-sign-install.sh /home/root/libcamera/build/src/ipa-priv-key.pem lib/libcamera/ipa_soft_simple.so'
root@uzev-hailo-2024-1:~/libcamera#
We can now use the “cam” application:
root@uzev-hailo-2024-1:~/libcamera# meson devenv -C build
root@uzev-hailo-2024-1:~/libcamera/build#
root@uzev-hailo-2024-1:~/libcamera/build# cam -l
[1:16:52.993713375] [4005] INFO IPAManager ipa_manager.cpp:137 libcamera is not installed. Adding '/home/root/libcamera/build/src/ipa' to the IPA search path
[1:16:53.003276618] [4005] INFO Camera camera_manager.cpp:327 libcamera v0.4.0+19-91de5502
Available cameras:
root@uzev-hailo-2024-1:~/libcamera/build# gst-launch-1.0 libcamerasrc ! fakesink
Setting pipeline to PAUSED ...
[1:17:17.010973694] [4007] INFO IPAManager ipa_manager.cpp:137 libcamera is not installed. Adding '/home/root/libcamera/build/src/ipa' to the IPA search path
[1:17:17.018526112] [4007] INFO Camera camera_manager.cpp:327 libcamera v0.4.0+19-91de5502
ERROR: from element /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0: Could not find any supported camera on this system.
Additional debug info:
../src/gstreamer/gstlibcamerasrc.cpp(402): gst_libcamera_src_open (): /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0:
libcamera::CameraMananger::cameras() is empty
ERROR: pipeline doesn't want to preroll.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
As expected, we are not detecting any cameras.
Creating the XISP pipeline handler
I have a preliminary version implemented of a “xisp” pipeline handler for the HLS-based ISP, based on Laurent’s excellent presentation.
I had to add the “RBG888” format, which was done in the following files:
src/libcamera/formats.yaml
...
- RBG888:
fourcc: DRM_FORMAT_RGB888
...
src/libcamera/formats.cpp
...
{ formats::RBG888, {
.name = "RBG888",
.format = formats::RBG888,
.v4l2Formats = { V4L2PixelFormat(V4L2_PIX_FMT_BGR24), },
.bitsPerPixel = 24,
.colourEncoding = PixelFormatInfo::ColourEncodingRGB,
.packed = false,
.pixelsPerGroup = 1,
.planes = {{ { 3, 1 }, { 0, 0 }, { 0, 0 } }},
} },
...
Then I added the new xisp pipeline handler as follows:
meson.build
...
pipelines_support = {
'imx8-isi': arch_arm,
'ipu3': arch_x86,
'mali-c55': arch_arm,
'rkisp1': arch_arm,
'rpi/vc4': arch_arm,
'simple': ['any'],
'uvcvideo': ['any'],
'vimc': ['test'],
'virtual': ['test'],
'xisp': arch_arm,
}
...
meson_options.txt
...
option('pipelines',
type : 'array',
value : ['auto'],
choices : [
'all',
'auto',
'imx8-isi',
'ipu3',
'mali-c55',
'rkisp1',
'rpi/vc4',
'simple',
'uvcvideo',
'vimc',
'virtual',
'xisp'
],
description : 'Select which pipeline handlers to build. If this is set to "auto", all the pipelines applicable to the target architecture will be built. If this is set to "all", all the pipelines will be built. If both are selected then "all" will take precedence.')
...
Finally, I create the following new files for the xisp pipeline handler:
src/libcamera/pipeline/xisp/meson.build
libcamera_internal_sources += files([
'xisp.cpp'
])
src/libcamera/pipeline/xisp/xisp.cpp
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2025 - Mario Bergeron <Mario.Bergeron@avnet.com>
*
* Pipeline handler for AMD/Xilinx HSL-based ISP implemented on Zynq-UltraScale+
* and/or
* Pipeline handler for AMD/Xilinx AIE-ML-based ISP implemented on Versal AI Edge
*/
#include <algorithm>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <vector>
#include <libcamera/base/log.h>
#include <libcamera/base/utils.h>
#include <libcamera/camera_manager.h>
#include <libcamera/formats.h>
#include <libcamera/geometry.h>
#include <libcamera/stream.h>
#include "libcamera/internal/bayer_format.h"
#include "libcamera/internal/camera.h"
#include "libcamera/internal/camera_sensor.h"
#include "libcamera/internal/device_enumerator.h"
#include "libcamera/internal/media_device.h"
#include "libcamera/internal/pipeline_handler.h"
#include "libcamera/internal/v4l2_subdevice.h"
#include "libcamera/internal/v4l2_videodevice.h"
#include "linux/media-bus-format.h"
namespace libcamera {
LOG_DEFINE_CATEGORY(XISP)
class PipelineHandlerXISP;
class XISPCameraData : public Camera::Private
{
public:
XISPCameraData(PipelineHandler *ph)
: Camera::Private(ph)
{
/*
* \todo Assume 1 channel only for now, as that's the number of
* available channels our current implementation.
*/
streams_.resize(1);
}
PipelineHandlerXISP *pipe();
int init();
unsigned int pipeIndex(const Stream *stream)
{
return stream - &*streams_.begin();
}
std::unique_ptr<CameraSensor> camSensor_;
std::vector<Stream> streams_;
std::vector<Stream *> enabledStreams_;
};
class XISPCameraConfiguration : public CameraConfiguration
{
public:
XISPCameraConfiguration(XISPCameraData *data)
: data_(data)
{
}
Status validate() override;
static const std::map<PixelFormat, unsigned int> formatsMap_;
V4L2SubdeviceFormat sensorFormat_;
private:
const XISPCameraData *data_;
};
class PipelineHandlerXISP : public PipelineHandler
{
public:
PipelineHandlerXISP(CameraManager *manager);
bool match(DeviceEnumerator *enumerator) override;
std::unique_ptr<CameraConfiguration>
generateConfiguration(Camera *camera, Span<const StreamRole> roles) override;
int configure(Camera *camera, CameraConfiguration *config) override;
int exportFrameBuffers(Camera *camera, Stream *stream,
std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
int start(Camera *camera, const ControlList *controls) override;
protected:
void stopDevice(Camera *camera) override;
int queueRequestDevice(Camera *camera, Request *request) override;
private:
static constexpr Size kPreviewSize = { 1920, 1080 };
static constexpr Size kMinXISPSize = { 64, 64 };
static constexpr Size kMaxXISPSize = { 4096, 4096 };
struct Pipe {
std::unique_ptr<V4L2Subdevice> resizer;
std::unique_ptr<V4L2VideoDevice> capture;
};
XISPCameraData *cameraData(Camera *camera)
{
return static_cast<XISPCameraData *>(camera->_d());
}
Pipe *pipeFromStream(Camera *camera, const Stream *stream);
StreamConfiguration generateYUVConfiguration(Camera *camera,
const Size &size);
StreamConfiguration generateRawConfiguration(Camera *camera);
void bufferReady(FrameBuffer *buffer);
MediaDevice *mediaDev_;
Size sensorBestSize_;
unsigned int sensorBestFormatCode_;
//ColorSpace sensorBestColorSpace_;
std::unique_ptr<V4L2Subdevice> sensor_;
std::unique_ptr<V4L2Subdevice> vcm_;
std::unique_ptr<V4L2Subdevice> csi2rx_;
std::unique_ptr<V4L2Subdevice> xisp_;
std::vector<Pipe> pipes_;
};
/* -----------------------------------------------------------------------------
* Camera Data
*/
PipelineHandlerXISP *XISPCameraData::pipe()
{
return static_cast<PipelineHandlerXISP *>(Camera::Private::pipe());
}
/* Open and initialize pipe components. */
int XISPCameraData::init()
{
#if 0 // 0.3.2 implementation
int ret = camSensor_->init();
if (ret)
return ret;
#else // 0.4.0 implementation
if (!camSensor_)
return -ENODEV;
#endif
properties_ = camSensor_->properties();
return 0;
}
/* -----------------------------------------------------------------------------
* Camera Configuration
*/
/*
* XISPCameraConfiguration::formatsMap_ records the association between an output
* pixel format and the xisp source pixel format to be applied to the pipeline.
*/
const std::map<PixelFormat, unsigned int> XISPCameraConfiguration::formatsMap_ = {
{ formats::YUYV, MEDIA_BUS_FMT_YUV8_1X24 },
{ formats::RGB888, MEDIA_BUS_FMT_RGB888_1X24 },
{ formats::BGR888, MEDIA_BUS_FMT_BGR888_1X24 },
{ formats::RBG888, MEDIA_BUS_FMT_RBG888_1X24 },
};
CameraConfiguration::Status XISPCameraConfiguration::validate()
{
LOG(XISP, Debug) << "[PipelineHandlerXISP::validate] Validating Configuration";
Status status = Valid;
std::set<Stream *> availableStreams;
std::transform(data_->streams_.begin(), data_->streams_.end(),
std::inserter(availableStreams, availableStreams.end()),
[](const Stream &s) { return const_cast<Stream *>(&s); });
if (config_.empty())
return Invalid;
LOG(XISP, Debug) << " [data_->streams_.size()] " << data_->streams_.size();
LOG(XISP, Debug) << " [availableStreams.size()] " << availableStreams.size();
LOG(XISP, Debug) << " [config_.size()] " << config_.size();
/* Cap the number of streams to the number of available xisp pipes. */
if (config_.size() > availableStreams.size()) {
config_.resize(availableStreams.size());
status = Adjusted;
}
/* Cap the number of streams to the number of available xisp pipes. */
if (config_.size() > 1) {
config_.resize(1);
status = Adjusted;
}
LOG(XISP, Debug) << " [config_.size()] " << config_.size();
//CameraSensor *sensor = data_->camSensor_.get();
//Size maxResolution = sensor->resolution();
/* Validate streams according to the format of the first one. */
const PixelFormatInfo info = PixelFormatInfo::info(config_[0].pixelFormat);
for (const auto &[i, config] : utils::enumerate(config_)) {
/* Assign streams in the order they are presented. */
auto stream = availableStreams.extract(availableStreams.begin());
config.setStream(stream.value());
config.stride = info.stride(config.size.width, 0);
config.frameSize = info.frameSize(config.size, info.bitsPerPixel);
LOG(XISP, Debug) << " Stream " << i << ": " << config.toString();
//LOG(XISP, Debug) << " [config] : " << config;
LOG(XISP, Debug) << " [config.size] : " << config.size;
LOG(XISP, Debug) << " [config.pixelFormat] : " << config.pixelFormat;
LOG(XISP, Debug) << " [config.stride] : " << config.stride;
LOG(XISP, Debug) << " [config.frameSize] : " << config.frameSize;
}
/*
* Sensor format selection policy: the first stream selects the media
* bus code to use, the largest stream selects the size.
*
* \todo The sensor format selection policy could be changed to
* prefer operating the sensor at full resolution to prioritize
* image quality in exchange of a usually slower frame rate.
* Usage of the STILL_CAPTURE role could be consider for this.
*/
Size maxSize;
for (const auto &cfg : config_) {
if (cfg.size > maxSize)
maxSize = cfg.size;
}
//PixelFormat pixelFormat = config_[0].pixelFormat;
V4L2SubdeviceFormat sensorFormat{};
//sensorFormat.code = data_->getMediaBusFormat(&pixelFormat);
// MEDIA_BUS_FMT_UYVY8_1X16,
// MEDIA_BUS_FMT_YUV8_1X24,
// MEDIA_BUS_FMT_RGB565_1X16,
// MEDIA_BUS_FMT_RGB888_1X24,
//sensorFormat.code = MEDIA_BUS_FMT_UYVY8_1X16;
sensorFormat.code = MEDIA_BUS_FMT_RBG888_1X24;
//sensorFormat.code = MEDIA_BUS_FMT_RGB888_1X24;
sensorFormat.size = maxSize;
LOG(XISP, Debug) << "Computed sensor configuration: " << sensorFormat;
sensorFormat_.code = sensorFormat.code;
sensorFormat_.size = sensorFormat.size;
LOG(XISP, Debug) << "Selected sensor format: " << sensorFormat_;
return status;
}
/* -----------------------------------------------------------------------------
* Pipeline Handler
*/
PipelineHandlerXISP::PipelineHandlerXISP(CameraManager *manager)
: PipelineHandler(manager)
{
}
std::unique_ptr<CameraConfiguration>
PipelineHandlerXISP::generateConfiguration(Camera *camera,
Span<const StreamRole> roles)
{
XISPCameraData *data = cameraData(camera);
std::unique_ptr<XISPCameraConfiguration> config =
std::make_unique<XISPCameraConfiguration>(data);
LOG(XISP, Debug) << "[PipelineHandlerXISP::generateConfiguration] Generate Configuration";
if (roles.empty())
return config;
LOG(XISP, Debug) << " [roles.size()] " << roles.size();
LOG(XISP, Debug) << " [data->streams_.size()] " << data->streams_.size();
if (roles.size() > data->streams_.size()) {
LOG(XISP, Error) << "Only up to " << data->streams_.size()
<< " streams are supported";
return nullptr;
}
for (const auto &role : roles) {
switch (role) {
case StreamRole::StillCapture: {
LOG(XISP, Debug) << " [role] StilCapture";
break;
}
case StreamRole::Viewfinder: {
LOG(XISP, Debug) << " [role] Viewfinder";
break;
}
case StreamRole::VideoRecording: {
LOG(XISP, Debug) << " [role] VideoRecording";
break;
}
case StreamRole::Raw: {
LOG(XISP, Debug) << " [role] Raw";
break;
}
default: {
LOG(XISP, Error) << "Requested stream role not supported: " << role;
return nullptr;
}
}
}
/*
* Populate the StreamConfiguration.
*
* As the sensor supports at least one YUV/RGB media bus format all the
* processed ones in formatsMap_ can be generated from it.
*/
std::map<PixelFormat, std::vector<SizeRange>> streamFormats;
for (const auto &[pixFmt, pipeFmt] : XISPCameraConfiguration::formatsMap_) {
//const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);
streamFormats[pixFmt] = { { kMinXISPSize, kMaxXISPSize } };
}
for (auto const &streamFormat : streamFormats) {
LOG(XISP, Debug) << " [streamFormat] " << streamFormat.first;
for (auto const &sizeRange : streamFormat.second ) {
LOG(XISP, Debug) << " [sizeRange] " << sizeRange;
}
}
StreamFormats formats(streamFormats);
for (auto const &pixelFormat : formats.pixelformats()) {
LOG(XISP, Debug) << " [formats.pixelformats()] " << pixelFormat;
for (auto const &size : formats.sizes(pixelFormat)) {
LOG(XISP, Debug) << " [formats.sizes(" << pixelFormat << ")] " << size;
}
}
StreamConfiguration cfg(formats);
//LOG(XISP, Debug) << " [cfg] : " << cfg.toString();
//cfg.size = {1920,1080};
//cfg.size = {1280,720};
cfg.size = {640,480};
//cfg.pixelFormat = formats::YUYV;
//cfg.pixelFormat = formats::BGR888;
//cfg.pixelFormat = formats::RGB888;
cfg.pixelFormat = formats::RBG888;
const PixelFormatInfo info = PixelFormatInfo::info(cfg.pixelFormat);
cfg.stride = info.stride(cfg.size.width, 0);
cfg.frameSize = info.frameSize(cfg.size, info.bitsPerPixel);
cfg.bufferCount = 4;
LOG(XISP, Debug) << " [cfg] : " << cfg.toString();
LOG(XISP, Debug) << " [cfg.size] : " << cfg.size;
LOG(XISP, Debug) << " [cfg.pixelFormat] : " << cfg.pixelFormat;
LOG(XISP, Debug) << " [cfg.stride] : " << cfg.stride;
LOG(XISP, Debug) << " [cfg.frameSize] : " << cfg.frameSize;
config->addConfiguration(cfg);
config->validate();
return config;
}
int PipelineHandlerXISP::configure(Camera *camera, CameraConfiguration *c)
{
XISPCameraConfiguration *camConfig = static_cast<XISPCameraConfiguration *>(c);
XISPCameraData *data = cameraData(camera);
LOG(XISP, Debug) << "[PipelineHandlerXISP::configure] Configure Camera";
/* All links are immutable except the sensor -> csis link. */
const MediaPad *sensorSrc = data->camSensor_->entity()->getPadByIndex(0);
sensorSrc->links()[0]->setEnabled(true);
int ret;
// Defined a fixed format
V4L2SubdeviceFormat csi2rxFormat{};
V4L2SubdeviceFormat xispFormat{};
V4L2SubdeviceFormat vpssFormat{};
V4L2DeviceFormat captureFormat{};
csi2rxFormat.code = sensorBestFormatCode_;
csi2rxFormat.size.width = sensorBestSize_.width;
csi2rxFormat.size.height = sensorBestSize_.height;
//csi2rxFormat.colorSpace = ColorSpace::Srgb;
xispFormat.code = MEDIA_BUS_FMT_RBG888_1X24;
//xispFormat.code = MEDIA_BUS_FMT_RGB888_1X24;
xispFormat.size.width = sensorBestSize_.width;
xispFormat.size.height = sensorBestSize_.height;
//xispFormat.colorSpace = ColorSpace::Srgb;
vpssFormat = camConfig->sensorFormat_;
vpssFormat.code = MEDIA_BUS_FMT_RBG888_1X24;
//vpssFormat.code = MEDIA_BUS_FMT_RGB888_1X24;
//vpssFormat.colorSpace = ColorSpace::Srgb;
/* Apply format to the sensor and CSIS receiver. */
ret = data->camSensor_->setFormat(&csi2rxFormat);
if (ret)
return ret;
LOG(XISP, Debug) << " [CSI ] : " << csi2rxFormat;
//ret = data->csi2rx_->setFormat(0, &format);
ret = csi2rx_->setFormat(0, &csi2rxFormat);
if (ret)
return ret;
ret = csi2rx_->setFormat(1, &csi2rxFormat);
if (ret)
return ret;
LOG(XISP, Debug) << " [XISP] : " << xispFormat;
ret = xisp_->setFormat(0, &csi2rxFormat);
if (ret)
return ret;
ret = xisp_->setFormat(1, &xispFormat);
if (ret)
return ret;
/* Now configure the resizer and video node instances, one per stream. */
data->enabledStreams_.clear();
//for (const auto &config : *c) {
for (const auto &[i, config] : utils::enumerate(*c)) {
LOG(XISP, Debug) << " Stream " << i << ": " << config.toString();
//LOG(XISP, Debug) << " [config] : " << config;
LOG(XISP, Debug) << " [config.size] : " << config.size;
LOG(XISP, Debug) << " [config.pixelFormat] : " << config.pixelFormat;
LOG(XISP, Debug) << " [config.stride] : " << config.stride;
LOG(XISP, Debug) << " [config.frameSize] : " << config.frameSize;
//Pipe *pipe = pipeFromStream(camera, config.stream());
Pipe *pipe = &pipes_[0];
LOG(XISP, Debug) << " [VPSS] : " << vpssFormat;
//ret = pipe->xisp->setFormat(0, &format);
ret = pipe->resizer->setFormat(0, &xispFormat);
if (ret)
return ret;
ret = pipe->resizer->setFormat(1, &vpssFormat);
if (ret)
return ret;
const PixelFormatInfo &info = PixelFormatInfo::info(config.pixelFormat);
captureFormat.fourcc = pipe->capture->toV4L2PixelFormat(config.pixelFormat);
captureFormat.size = config.size;
captureFormat.planesCount = info.numPlanes();
captureFormat.planes[0].bpl = config.stride;
LOG(XISP, Debug) << " [VCAP] : " << captureFormat;
LOG(XISP, Debug) << " [captureFormat] : " << captureFormat.toString();
LOG(XISP, Debug) << " [captureFormat.planesCount] : " << captureFormat.planesCount;
//LOG(XISP, Debug) << " [captureFormat.planes[0].bpl] : " << captureFormat.planes[0].bpl;
/* \todo Set stride and format. */
ret = pipe->capture->setFormat(&captureFormat);
if (ret)
return ret;
//if (captureFormat.size != config.size)
// return -EINVAL;
/* Store the list of enabled streams for later use. */
data->enabledStreams_.push_back(config.stream());
}
return 0;
}
int PipelineHandlerXISP::exportFrameBuffers(Camera *camera, Stream *stream,
std::vector<std::unique_ptr<FrameBuffer>> *buffers)
{
unsigned int count = stream->configuration().bufferCount;
Pipe *pipe = pipeFromStream(camera, stream);
return pipe->capture->exportBuffers(count, buffers);
}
int PipelineHandlerXISP::start(Camera *camera,
[[maybe_unused]] const ControlList *controls)
{
XISPCameraData *data = cameraData(camera);
for (const auto &stream : data->enabledStreams_) {
Pipe *pipe = pipeFromStream(camera, stream);
const StreamConfiguration &config = stream->configuration();
int ret = pipe->capture->importBuffers(config.bufferCount);
if (ret)
return ret;
ret = pipe->capture->streamOn();
if (ret)
return ret;
}
return 0;
}
void PipelineHandlerXISP::stopDevice(Camera *camera)
{
XISPCameraData *data = cameraData(camera);
for (const auto &stream : data->enabledStreams_) {
Pipe *pipe = pipeFromStream(camera, stream);
pipe->capture->streamOff();
pipe->capture->releaseBuffers();
}
}
int PipelineHandlerXISP::queueRequestDevice(Camera *camera, Request *request)
{
for (auto &[stream, buffer] : request->buffers()) {
Pipe *pipe = pipeFromStream(camera, stream);
int ret = pipe->capture->queueBuffer(buffer);
if (ret)
return ret;
}
return 0;
}
bool PipelineHandlerXISP::match(DeviceEnumerator *enumerator)
{
// Additional context to what is being searched
// driver = "xilinx-video"
//
// Capture Pipeline 0
// V4l2VideoDevice = "vcap_mipi_0_v_proc output 0"
// V4l2Subdevice = "imx219 1-0010"
// V4l2Subdevice = "80050000.mipi_csi2_rx_subsystem"
// V4l2Subdevice = "a0010000.ISPPipeline_accel"
// V4l2Subdevice = "a0040000.v_proc_ss"
//
// Capture Pipeline 1
// V4l2VideoDevice = "vcap_mipi_1_v_proc output 0"
// V4l2Subdevice = "imx708"
// V4l2Subdevice = "dw9807 2-000c"
// V4l2Subdevice = "80051000.mipi_csi2_rx_subsystem"
// V4l2Subdevice = "a0030000.ISPPipeline_accel"
// V4l2Subdevice = "a00c0000.v_proc_ss"
//
// Capture Pipeline 2
// V4l2VideoDevice = "vcap_mipi_2_v_proc output 0"
// V4l2Subdevice = "imx500 3-001a"
// V4l2Subdevice = "80052000.mipi_csi2_rx_subsystem"
// V4l2Subdevice = "a0090000.ISPPipeline_accel"
// V4l2Subdevice = "a0100000.v_proc_ss"
//
// Capture Pipeline 3
// V4l2VideoDevice = "vcap_mipi_3_v_proc output 0"
// V4l2Subdevice = "imx477 4-001a"
// V4l2Subdevice = "80053000.mipi_csi2_rx_subsystem"
// V4l2Subdevice = "a00b0000.ISPPipeline_accel"
// V4l2Subdevice = "a0180000.v_proc_ss"
LOG(XISP, Debug) << "[PipelineHandlerXISP::match] Looking for capture pipeline";
for (unsigned int i = 0; i < 4; i++) {
std::string entityName = "vcap_mipi_" + std::to_string(i) + "_v_proc output 0";
DeviceMatch dm("xilinx-video"); // driver
dm.add(entityName); // entity
mediaDev_ = acquireMediaDevice(enumerator, dm);
if (mediaDev_) {
LOG(XISP, Debug) << " Found pipeline ... ";
break;
}
if (!mediaDev_) {
continue;
}
}
if (!mediaDev_) {
LOG(XISP, Debug) << " Done ...";
return false;
}
int ret;
MediaEntity *sensor_entity = NULL;
std::unique_ptr<V4L2Subdevice> resizer = NULL;
std::unique_ptr<V4L2VideoDevice> capture = NULL;
// Scan for entities in capture pipeline
//for (const MediaEntity *entity : mediaDev_->entities()) {
for ( MediaEntity *entity : mediaDev_->entities()) {
if ( entity->name().find("imx") != std::string::npos ) {
sensor_entity = entity;
LOG(XISP, Debug) << " [CAM ] : " << entity->name();
if ( entity->name().find("imx219") != std::string::npos ) {
sensorBestSize_.width = 1920;
sensorBestSize_.height = 1080;
sensorBestFormatCode_ = MEDIA_BUS_FMT_SRGGB10_1X10;
LOG(XISP, Debug) << " [IMX219] : " << sensorBestSize_.width << "x" << sensorBestSize_.height << "-SRGGB10_1X10";
//sensorBestColorSpace_ = ColorSpace::Srgb;
}
if ( entity->name().find("imx708") != std::string::npos ) {
sensorBestSize_.width = 1536;
sensorBestSize_.height = 864;
sensorBestFormatCode_ = MEDIA_BUS_FMT_SRGGB10_1X10;
LOG(XISP, Debug) << " [IMX708] : " << sensorBestSize_.width << "x" << sensorBestSize_.height << "-SRGGB10_1X10";
//sensorBestColorSpace_ = ColorSpace::Srgb;
}
if ( entity->name().find("imx477") != std::string::npos ) {
sensorBestSize_.width = 1332;
sensorBestSize_.height = 990;
sensorBestFormatCode_ = MEDIA_BUS_FMT_SRGGB10_1X10;
LOG(XISP, Debug) << " [IMX477] : " << sensorBestSize_.width << "x" << sensorBestSize_.height << "-SRGGB10_1X10";
//sensorBestColorSpace_ = ColorSpace::Srgb;
}
if ( entity->name().find("imx500") != std::string::npos ) {
sensorBestSize_.width = 2028;
sensorBestSize_.height = 1520;
sensorBestFormatCode_ = MEDIA_BUS_FMT_SRGGB10_1X10;
LOG(XISP, Debug) << " [IMX500] : " << sensorBestSize_.width << "x" << sensorBestSize_.height << "-SRGGB10_1X10";
//sensorBestColorSpace_ = ColorSpace::Srgb;
}
sensor_ = V4L2Subdevice::fromEntityName(mediaDev_, entity->name());
}
if ( entity->name().find("dw9807") != std::string::npos ) {
LOG(XISP, Debug) << " [VCM ] : " << entity->name();
vcm_ = V4L2Subdevice::fromEntityName(mediaDev_, entity->name());
}
if ( entity->name().find("mipi_csi2_rx_subsystem") != std::string::npos ) {
LOG(XISP, Debug) << " [CSI ] : " << entity->name();
csi2rx_ = V4L2Subdevice::fromEntityName(mediaDev_, entity->name());
//csi2rx_entity = entity;
}
if ( entity->name().find("ISPPipeline_accel") != std::string::npos ) {
LOG(XISP, Debug) << " [XISP] : " << entity->name();
xisp_ = V4L2Subdevice::fromEntityName(mediaDev_, entity->name());
}
if ( entity->name().find("v_proc_ss") != std::string::npos ) {
LOG(XISP, Debug) << " [VPSS] : " << entity->name();
resizer = V4L2Subdevice::fromEntityName(mediaDev_, entity->name());
}
if ( entity->name().find("vcap_mipi_") != std::string::npos ) {
LOG(XISP, Debug) << " [VCAP] : " << entity->name();
capture = V4L2VideoDevice::fromEntityName(mediaDev_, entity->name());
}
}
if (!csi2rx_)
return false;
ret = csi2rx_->open();
if (ret)
return false;
if (!xisp_)
return false;
ret = xisp_->open();
if (ret)
return false;
if (!resizer)
return false;
ret = resizer->open();
if (ret)
return false;
if (!capture)
return false;
capture->bufferReady.connect(this, &PipelineHandlerXISP::bufferReady);
ret = capture->open();
if (ret)
return ret;
pipes_.push_back({ std::move(resizer), std::move(capture) });
if (pipes_.empty()) {
LOG(XISP, Error) << "Unable to enumerate pipes";
return false;
}
if (sensor_entity->function() != MEDIA_ENT_F_CAM_SENSOR) {
LOG(XISP, Debug) << "Skip unsupported subdevice "
<< sensor_entity->name();
return false;
}
/* Create the camera data. */
std::unique_ptr<XISPCameraData> data =
std::make_unique<XISPCameraData>(this);
#if 0 // 0.3.2 implementation
data->camSensor_ = std::make_unique<CameraSensor>(sensor_entity);
#else // 0.4.0 implementation
data->camSensor_ = CameraSensorFactoryBase::create(sensor_entity);
#endif
//data->csi2rx_ = std::make_unique<V4L2Subdevice>(csi2rx_entity);
ret = data->init();
if (ret) {
LOG(XISP, Error) << "Failed to initialize camera data";
return false;
}
/* Register the camera. */
LOG(XISP, Debug) << "Register the camera ...";
const std::string &id = data->camSensor_->id();
LOG(XISP, Debug) << " [id] : " << id;
std::set<Stream *> streams;
std::transform(data->streams_.begin(), data->streams_.end(),
std::inserter(streams, streams.end()),
[](Stream &s) { return &s; });
LOG(XISP, Debug) << " [streams.size()] : " << streams.size();
std::shared_ptr<Camera> camera =
Camera::create(std::move(data), id, streams);
registerCamera(std::move(camera));
return true;
}
PipelineHandlerXISP::Pipe *PipelineHandlerXISP::pipeFromStream(Camera *camera,
const Stream *stream)
{
//LOG(XISP, Debug) << "[pipeFromStream]";
XISPCameraData *data = cameraData(camera);
unsigned int pipeIndex = data->pipeIndex(stream);
//LOG(XISP, Debug) << " [pipeIndex] : " << pipeIndex;
//ASSERT(pipeIndex < pipes_.size());
// always 0 ... correct ...
return &pipes_[pipeIndex];
}
void PipelineHandlerXISP::bufferReady(FrameBuffer *buffer)
{
Request *request = buffer->request();
/* Record the sensor's timestamp in the request metadata. */
ControlList &metadata = request->metadata();
if (!metadata.contains(controls::SensorTimestamp.id()))
metadata.set(controls::SensorTimestamp,
buffer->metadata().timestamp);
completeBuffer(request, buffer);
if (request->hasPendingBuffers())
return;
completeRequest(request);
}
REGISTER_PIPELINE_HANDLER(PipelineHandlerXISP, "xisp")
} /* namespace libcamera */
In my implementation, I used the same strategy as in the original scripts:
- fixed configuration for the image sensor, and ISP
- programmable configuration for output via VPSS
The following diagrams illustrate the fixed configuration that has been chosen for each of the four image sensors:




Although simple, this strategy is non-ideal and has undesirable effects in terms of aspect ratio for certain output resolutions. It may be worth looking at the RPI implementation, which has a scoring system that tries to match aspect ratios between image sensor resolution and output resolution.
In order to compile this version of libcamera, start by configuring the meson build environment, specifically to build the xisp pipeline handler:
root@uzev-hailo-2024-1:~/libcamera.xisp# meson setup build --buildtype=release -Dpipelines=xisp -Dv4l2=true -Dgstreamer=enabled -Dtest=false -Dlc-compliance=disabled -Dcam=enabled -Dqcam=disabled -Ddocumentation=disabled -Dpycamera=enabled
The Meson build system
Version: 0.63.3
Source dir: /home/root/libcamera.xisp
Build dir: /home/root/libcamera.xisp/build
Build type: native build
Project name: libcamera
Project version: 0.3.2
C compiler for the host machine: ccache cc (gcc 12.2.0 "cc (GCC) 12.2.0")
C linker for the host machine: cc ld.bfd 2.39.0.20220819
C++ compiler for the host machine: ccache c++ (gcc 12.2.0 "c++ (GCC) 12.2.0")
C++ linker for the host machine: c++ ld.bfd 2.39.0.20220819
Host machine cpu family: aarch64
Host machine cpu: aarch64
meson.build:38: WARNING: The sources and meson.build disagree about the version: 0.0.0 != 0.3.2
Header "fcntl.h" has symbol "F_ADD_SEALS" : YES
Header "unistd.h" has symbol "issetugid" : NO
Header "locale.h" has symbol "locale_t" : YES
Header "sys/mman.h" has symbol "memfd_create" : YES
Header "stdlib.h" has symbol "secure_getenv" : YES
Compiler for C supports arguments -Wno-c99-designator: NO
Found pkg-config: /usr/bin/pkg-config (0.29.2)
Found CMake: /usr/bin/cmake (3.24.2)
Run-time dependency lttng-ust found: NO (tried pkgconfig and cmake)
Program ./parser.py found: YES (/home/root/libcamera.xisp/utils/codegen/ipc/./parser.py)
Program ./generate.py found: YES (/home/root/libcamera.xisp/utils/codegen/ipc/./generate.py)
Program ./extract-docs.py found: YES (/home/root/libcamera.xisp/utils/codegen/ipc/./extract-docs.py)
Configuring version.h using configuration
Program openssl found: YES (/usr/bin/openssl)
Library atomic found: YES
Run-time dependency threads found: YES
Run-time dependency libdw found: YES 0.187
Run-time dependency libunwind found: YES 1.6.2
Header "execinfo.h" has symbol "backtrace" : YES
Checking for function "dlopen" : YES
Run-time dependency libudev found: YES 251
Run-time dependency yaml-0.1 found: NO (tried pkgconfig and cmake)
Run-time dependency gnutls found: YES 3.7.8
Cloning into 'libyaml'...
remote: Enumerating objects: 2231, done.
remote: Counting objects: 100% (37/37), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 2231 (delta 16), reused 13 (delta 13), pack-reused 2194 (from 2)
Receiving objects: 100% (2231/2231), 1.47 MiB | 2.52 MiB/s, done.
Resolving deltas: 100% (1305/1305), done.
HEAD is now at 2c891fc Changes for v0.2.5 release
Executing subproject libyaml method cmake
libyaml| Found CMake: /usr/bin/cmake (3.24.2)
| Configuring the build directory with CMake version 3.24.2
| Running CMake with: -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_POSITION_INDEPENDENT_CODE=ON
| - build directory: /home/root/libcamera.xisp/build/subprojects/libyaml/__CMake_build
| - source directory: /home/root/libcamera.xisp/subprojects/libyaml
| - toolchain file: /home/root/libcamera.xisp/build/subprojects/libyaml/__CMake_build/CMakeMesonToolchainFile.cmake
| - preload file: /usr/lib/python3.10/site-packages/mesonbuild/cmake/data/preload.cmake
| - trace args: --trace-expand --trace-format=json-v1 --no-warn-unused-cli --trace-redirect=cmake_trace.txt
| - disabled policy warnings: [CMP0025, CMP0047, CMP0056, CMP0060, CMP0065, CMP0066, CMP0067, CMP0082, CMP0089, CMP0102]
| Running with expanded trace output on.
| Not searching for unused variables given on the command line.
| Trace will be written to cmake_trace.txt
| -- The C compiler identification is GNU 12.2.0
| -- Detecting C compiler ABI info
| -- Detecting C compiler ABI info - done
| -- Check for working C compiler: /usr/bin/cc - skipped
| -- Detecting C compile features
| -- Detecting C compile features - done
| -- Configuring done
| -- Generating done
| -- Build files have been written to: /home/root/libcamera.xisp/build/subprojects/libyaml/__CMake_build
libyaml| CMake configuration: SUCCEEDED
libyaml| CMake project yaml has 42 build targets.
cmake-ast| Processing generated meson AST
cmake-ast| Build file: /home/root/libcamera.xisp/build/subprojects/libyaml/meson.build
libyaml| Project name: yaml
libyaml| Project version: undefined
libyaml| C compiler for the host machine: ccache cc (gcc 12.2.0 "cc (GCC) 12.2.0")
libyaml| C linker for the host machine: cc ld.bfd 2.39.0.20220819
libyaml| Build targets in project: 61
libyaml| Subproject libyaml finished.
Dependency libexif skipped: feature android disabled
Dependency libjpeg skipped: feature android disabled
Run-time dependency libevent_pthreads found: YES 2.1.12-stable
Run-time dependency libtiff-4 found: YES 4.4.0
Dependency gtest skipped: feature lc-compliance disabled
Run-time dependency libdrm found: YES 2.4.113
Run-time dependency libjpeg found: YES 2.1.5.1
sdl2-config found: NO
Run-time dependency sdl2 found: NO (tried pkgconfig and config-tool)
Dependency qt6 (modules: Core, Gui, OpenGL, OpenGLWidgets, Widgets) skipped: feature qcam disabled
Run-time dependency glib-2.0 found: YES 2.72.3
Run-time dependency gstreamer-video-1.0 found: YES 1.20.5
Run-time dependency gstreamer-allocators-1.0 found: YES 1.20.5
Run-time dependency python3 found: YES 3.10
Run-time dependency pybind11 found: YES 2.10.0
Configuring libcamerify using configuration
Program doxygen skipped: feature documentation disabled
Program dot skipped: feature documentation disabled
Program sphinx-build-3 found: NO
Program sphinx-build skipped: feature documentation disabled
Configuring config.h using configuration
Program python3 (jinja2, yaml, jinja2, ply) found: YES (/usr/bin/python3) modules: jinja2, yaml, jinja2, ply
Build targets in project: 76
libcamera 0.3.2
Versions
libcamera git version : 0.0.0+5109-1e08d66a
Source version match : NO
Sources : 0.3.2+5109-1e08d66a-nvm
Paths
LIBCAMERA_DATA_DIR : "/usr/local/share/libcamera"
LIBCAMERA_SYSCONF_DIR : "/usr/local/etc/libcamera"
IPA_PROXY_DIR : "/usr/local/libexec/libcamera"
IPA_CONFIG_DIR : "/usr/local/etc/libcamera/ipa:/usr/local/share/libcamera/ipa"
IPA_MODULE_DIR : "/usr/local/lib/libcamera"
Configuration
SoftISP support : False
IPA modules signed with : gnutls
Enabled pipelines : xisp
Enabled IPA modules :
Controls files : control_ids_draft.yaml
control_ids_core.yaml
Properties files : property_ids_draft.yaml
property_ids_core.yaml
Hotplug support : YES
Tracing support : NO
Android support : NO
GStreamer support : YES
Python bindings : YES
V4L2 emulation support : YES
cam application : YES
qcam application : NO
lc-compliance application: NO
Unit tests : NO
Subprojects
libyaml : YES
User defined options
buildtype : release
cam : enabled
documentation : disabled
gstreamer : enabled
lc-compliance : disabled
pipelines : xisp
pycamera : enabled
qcam : disabled
test : false
v4l2 : true
Found ninja-1.11.1 at /usr/bin/ninja
Finally, build and install libcamera as follows:
root@uzev-hailo-2024-1:~/libcamera.xisp# ninja -C build install
ninja: Entering directory `build'
...
[97/167] Compiling C++ object src/libcamera/libcamera.so.0.3.2.p/pipeline_xisp_xisp.cpp.o
...
[165/167] Linking target src/py/libcamera/_libcamera.so
[166/167] Installing files.
Installing include/libcamera/ipa/core_ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing include/libcamera/control_ids.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/property_ids.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/formats.h to /usr/local/include/libcamera/libcamera
Installing include/libcamera/libcamera.h to /usr/local/include/libcamera/libcamera
Installing src/libcamera/base/libcamera-base.so.0.3.2 to /usr/local/lib
Installing subprojects/libyaml/libyaml.a to /usr/local/lib
Installing src/libcamera/libcamera.so.0.3.2 to /usr/local/lib
Installing src/apps/cam/cam to /usr/local/bin
Installing src/gstreamer/libgstlibcamera.so to /usr/local/lib/gstreamer-1.0
Installing src/py/libcamera/_libcamera.so to /usr/local/lib/python3.10/site-packages/libcamera
Installing src/v4l2/v4l2-compat.so to /usr/local/libexec/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/base/bound_method.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/class.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/compiler.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/flags.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/object.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/shared_fd.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/signal.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/span.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/base/unique_fd.h to /usr/local/include/libcamera/libcamera/base
Installing /home/root/libcamera.xisp/include/libcamera/ipa/ipa_controls.h to /usr/local/include/libcamera/libcamera/ipa
Installing /home/root/libcamera.xisp/include/libcamera/ipa/ipa_interface.h to /usr/local/include/libcamera/libcamera/ipa
Installing /home/root/libcamera.xisp/include/libcamera/ipa/ipa_module_info.h to /usr/local/include/libcamera/libcamera/ipa
Installing /home/root/libcamera.xisp/include/libcamera/camera.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/camera_manager.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/color_space.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/controls.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/fence.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/framebuffer.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/framebuffer_allocator.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/geometry.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/logging.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/orientation.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/pixel_format.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/request.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/stream.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/include/libcamera/transform.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/build/include/libcamera/version.h to /usr/local/include/libcamera/libcamera
Installing /home/root/libcamera.xisp/build/meson-private/libcamera-base.pc to /usr/local/lib/pkgconfig
Installing /home/root/libcamera.xisp/build/meson-private/libcamera.pc to /usr/local/lib/pkgconfig
Installing /home/root/libcamera.xisp/src/py/libcamera/__init__.py to /usr/local/lib/python3.10/site-packages/libcamera
Installing /home/root/libcamera.xisp/build/src/v4l2/libcamerify to /usr/local/bin
Installing symlink pointing to libcamera-base.so.0.3.2 to /usr/local/lib/libcamera-base.so.0.3
Installing symlink pointing to libcamera-base.so.0.3 to /usr/local/lib/libcamera-base.so
Installing symlink pointing to libcamera.so.0.3.2 to /usr/local/lib/libcamera.so.0.3
Installing symlink pointing to libcamera.so.0.3 to /usr/local/lib/libcamera.so
Running custom install script '/home/root/libcamera.xisp/src/ipa/ipa-sign-install.sh /home/root/libcamera.xisp/build/src/ipa-priv-key.pem'
root@uzev-hailo-2024-1:~/libcamera.xisp#
Validating the XISP pipeline handler
This section describes how to validate the XISP-augmented libcamera stack.
In order to use the libcamera binaries, we can use the follwowing command:
root@uzev-hailo-2024-1:~/libcamera.xisp# meson devenv -C build
root@uzev-hailo-2024-1:~/libcamera.xisp/build#
Validating with “cam”
The “cam” test application can be used to query the cameras present on our platform:
root@uzev-hailo-2024-1:~/libcamera.xisp# meson devenv -C build
root@uzev-hailo-2024-1:~/libcamera.xisp/build# cam -l
[125:12:29.215490919] [11179] INFO IPAManager ipa_manager.cpp:137 libcamera is not installed. Adding '/home/root/libcamera.xisp/build/src/ipa' to the IPA search path
[125:12:29.216427288] [11179] WARN IPAManager ipa_manager.cpp:148 No IPA found in '/usr/local/lib/libcamera'
[125:12:29.216542818] [11179] INFO Camera camera_manager.cpp:325 libcamera v0.0.0+5109-1e08d66a
[125:12:29.316252886] [11180] WARN CameraSensorProperties camera_sensor_properties.cpp:305 No static properties available for 'imx500'
[125:12:29.316372536] [11180] WARN CameraSensorProperties camera_sensor_properties.cpp:307 Please consider updating the camera sensor properties database
Available cameras:
1: 'imx219' (/base/pl-bus/i2c@80040000/sensor@10)
2: 'imx708_wide' (/base/pl-bus/i2c@80070000/sensor@10)
3: 'imx500' (/base/pl-bus/i2c@80090000/sensor@1a)
4: 'imx477' (/base/pl-bus/i2c@800b0000/sensor@1a)
We can also query the supported formats for each camera:
root@uzev-hailo-2024-1:~/libcamera.xisp/build# cam -c1 -I
[125:13:19.352350535] [11190] INFO IPAManager ipa_manager.cpp:137 libcamera is not installed. Adding '/home/root/libcamera.xisp/build/src/ipa' to the IPA search path
[125:13:19.353115314] [11190] WARN IPAManager ipa_manager.cpp:148 No IPA found in '/usr/local/lib/libcamera'
[125:13:19.353215244] [11190] INFO Camera camera_manager.cpp:325 libcamera v0.0.0+5109-1e08d66a
[125:13:19.450765899] [11191] WARN CameraSensorProperties camera_sensor_properties.cpp:305 No static properties available for 'imx500'
[125:13:19.450925089] [11191] WARN CameraSensorProperties camera_sensor_properties.cpp:307 Please consider updating the camera sensor properties database
Using camera /base/pl-bus/i2c@80040000/sensor@10 as cam0
0: 640x480-RBG888
* Pixelformat: BGR888 (64x64)-(4096x4096)/(+1,+1)
- 160x120
- 240x160
- 320x240
- 400x240
- 480x320
- 640x360
- 640x480
- 720x480
- 768x480
- 854x480
- 720x576
- 800x600
- 960x540
- 1024x576
- 960x640
- 1024x600
- 1024x768
- 1280x720
- 1152x864
- 1280x800
- 1360x768
- 1366x768
- 1440x900
- 1280x1024
- 1536x864
- 1280x1080
- 1600x900
- 1400x1050
- 1680x1050
- 1600x1200
- 1920x1080
- 2048x1080
- 1920x1200
- 2160x1080
- 2048x1152
- 2560x1080
- 2048x1536
- 2560x1440
- 2560x1600
- 3840x1080
- 2960x1440
- 3440x1440
- 2560x2048
- 3200x1800
- 3840x1600
- 3200x2048
- 3200x2400
- 3840x2160
- 4096x2160
- 3840x2400
* Pixelformat: RBG888 (64x64)-(4096x4096)/(+1,+1)
- 160x120
- 240x160
- 320x240
- 400x240
- 480x320
- 640x360
- 640x480
- 720x480
- 768x480
- 854x480
- 720x576
- 800x600
- 960x540
- 1024x576
- 960x640
- 1024x600
- 1024x768
- 1280x720
- 1152x864
- 1280x800
- 1360x768
- 1366x768
- 1440x900
- 1280x1024
- 1536x864
- 1280x1080
- 1600x900
- 1400x1050
- 1680x1050
- 1600x1200
- 1920x1080
- 2048x1080
- 1920x1200
- 2160x1080
- 2048x1152
- 2560x1080
- 2048x1536
- 2560x1440
- 2560x1600
- 3840x1080
- 2960x1440
- 3440x1440
- 2560x2048
- 3200x1800
- 3840x1600
- 3200x2048
- 3200x2400
- 3840x2160
- 4096x2160
- 3840x2400
* Pixelformat: YUYV (64x64)-(4096x4096)/(+1,+1)
- 160x120
- 240x160
- 320x240
- 400x240
- 480x320
- 640x360
- 640x480
- 720x480
- 768x480
- 854x480
- 720x576
- 800x600
- 960x540
- 1024x576
- 960x640
- 1024x600
- 1024x768
- 1280x720
- 1152x864
- 1280x800
- 1360x768
- 1366x768
- 1440x900
- 1280x1024
- 1536x864
- 1280x1080
- 1600x900
- 1400x1050
- 1680x1050
- 1600x1200
- 1920x1080
- 2048x1080
- 1920x1200
- 2160x1080
- 2048x1152
- 2560x1080
- 2048x1536
- 2560x1440
- 2560x1600
- 3840x1080
- 2960x1440
- 3440x1440
- 2560x2048
- 3200x1800
- 3840x1600
- 3200x2048
- 3200x2400
- 3840x2160
- 4096x2160
- 3840x2400
Note that we can specify which camera to use by index (1–4) or by full name.
To capture an image from the first camera, IMX219, both are valid:
root@uzev-hailo-2024-1:~/libcamera.xisp/build# cam -c1 -C1
...
Using camera /base/pl-bus/i2c@80040000/sensor@10 as cam0
[125:16:14.727918499] [11202] INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-RBG888
cam0: Capture 1 frames
450974.888554 (0.00 fps) cam0-stream0 seq: 000000 bytesused: 921600
root@uzev-hailo-2024-1:~/libcamera.xisp/build# cam --camera /base/pl-bus/i2c@80040000/sensor@10 -C1
...
Using camera /base/pl-bus/i2c@80040000/sensor@10 as cam0
[125:16:32.679950870] [11207] INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-RBG888
cam0: Capture 1 frames
450992.805660 (0.00 fps) cam0-stream0 seq: 000000 bytesused: 921600
root@uzev-hailo-2024-1:~/libcamera.xisp/build#
We can also enable verbose using the LIBCAMERA_LOG_LEVELS environment variable:
root@uzev-hailo-2024-1:~/libcamera.xisp/build# LIBCAMERA_LOG_LEVELS=*:0 cam -l
[125:17:52.909023690] [11215] INFO IPAManager ipa_manager.cpp:137 libcamera is not installed. Adding '/home/root/libcamera.xisp/build/src/ipa' to the IPA search path
[125:17:52.909766690] [11215] WARN IPAManager ipa_manager.cpp:148 No IPA found in '/usr/local/lib/libcamera'
[125:17:52.909867980] [11215] INFO Camera camera_manager.cpp:325 libcamera v0.0.0+5109-1e08d66a
[125:17:52.910448090] [11216] DEBUG Camera camera_manager.cpp:73 Starting camera manager
[125:17:52.961343924] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:230 New media device "xilinx-video" created from /dev/media0
[125:17:52.963907163] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:96 Defer media device /dev/media0 due to 1 missing dependencies
[125:17:52.965100103] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:322 All dependencies for media device /dev/media0 found
[125:17:52.965193943] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:258 Added device /dev/media0: xilinx-video
[125:17:52.965788052] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:230 New media device "xilinx-video" created from /dev/media1
[125:17:52.968893461] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:96 Defer media device /dev/media1 due to 1 missing dependencies
[125:17:52.969929961] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:322 All dependencies for media device /dev/media1 found
[125:17:52.970041531] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:258 Added device /dev/media1: xilinx-video
[125:17:52.970636311] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:230 New media device "xilinx-video" created from /dev/media2
[125:17:52.973112270] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:96 Defer media device /dev/media2 due to 1 missing dependencies
[125:17:52.974156590] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:322 All dependencies for media device /dev/media2 found
[125:17:52.974267380] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:258 Added device /dev/media2: xilinx-video
[125:17:52.974861379] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:230 New media device "xilinx-video" created from /dev/media3
[125:17:52.977318929] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:96 Defer media device /dev/media3 due to 1 missing dependencies
[125:17:52.978360368] [11216] DEBUG DeviceEnumerator device_enumerator_udev.cpp:322 All dependencies for media device /dev/media3 found
[125:17:52.978471958] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:258 Added device /dev/media3: xilinx-video
[125:17:52.980300108] [11216] DEBUG Camera camera_manager.cpp:138 Found registered pipeline handler 'xisp'
[125:17:52.980484778] [11216] DEBUG XISP xisp.cpp:582 [PipelineHandlerXISP::match] Looking for capture pipeline
[125:17:52.980627278] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:318 Successful match for media device "xilinx-video"
[125:17:52.980759758] [11216] DEBUG XISP xisp.cpp:591 Found pipeline ...
[125:17:52.980864298] [11216] DEBUG XISP xisp.cpp:663 [VCAP] : vcap_mipi_0_v_proc output 0
[125:17:52.980986418] [11216] DEBUG XISP xisp.cpp:650 [CSI ] : 80050000.mipi_csi2_rx_subsystem
[125:17:52.981089687] [11216] DEBUG XISP xisp.cpp:614 [CAM ] : imx219 1-0010
[125:17:52.981178587] [11216] DEBUG XISP xisp.cpp:619 [IMX219] : 1920x1080-SRGGB10_1X10
[125:17:52.981273337] [11216] DEBUG XISP xisp.cpp:655 [XISP] : a0010000.ISPPipeline_accel
[125:17:52.981364307] [11216] DEBUG XISP xisp.cpp:659 [VPSS] : a0040000.v_proc_ss
[125:17:52.981584427] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Exposure (0x00980911)
[125:17:52.981807607] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Horizontal Flip (0x00980914)
[125:17:52.981938877] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Vertical Flip (0x00980915)
[125:17:52.982067917] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Low Latency Controls (0x0098ca21)
[125:17:52.982194277] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: red_gain (0x0098ca61)
[125:17:52.982319727] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: blue_gain (0x0098ca62)
[125:17:52.982448297] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: awb_en (0x0098ca63)
[125:17:52.982575317] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: threshold (0x0098ca64)
[125:17:52.982699497] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: red_gamma (0x0098ca65)
[125:17:52.982825387] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: green_gamma (0x0098ca66)
[125:17:52.982948657] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: blue_gamma (0x0098ca67)
[125:17:52.983079757] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Camera Orientation (0x009a0922)
[125:17:52.983250257] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Camera Sensor Rotation (0x009a0923)
[125:17:52.983387097] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Vertical Blanking (0x009e0901)
[125:17:52.983527597] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Horizontal Blanking (0x009e0902)
[125:17:52.983656497] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Analogue Gain (0x009e0903)
[125:17:52.983781197] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Red Pixel Value (0x009e0904)
[125:17:52.983908747] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:52.984056697] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Blue Pixel Value (0x009e0906)
[125:17:52.984184566] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:52.984318836] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Link Frequency (0x009f0901)
[125:17:52.984456976] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Pixel Rate (0x009f0902)
[125:17:52.984599106] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Test Pattern (0x009f0903)
[125:17:52.984763096] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80050000.mipi_csi2_rx_subsystem': Control: Digital Gain (0x009f0905)
[125:17:52.985047276] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0010000.ISPPipeline_accel': Control: red_gain (0x0098ca61)
[125:17:52.985185326] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0010000.ISPPipeline_accel': Control: blue_gain (0x0098ca62)
[125:17:52.985312846] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0010000.ISPPipeline_accel': Control: awb_en (0x0098ca63)
[125:17:52.985450906] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0010000.ISPPipeline_accel': Control: threshold (0x0098ca64)
[125:17:52.985582436] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0010000.ISPPipeline_accel': Control: red_gamma (0x0098ca65)
[125:17:52.985707176] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0010000.ISPPipeline_accel': Control: green_gamma (0x0098ca66)
[125:17:52.985830456] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0010000.ISPPipeline_accel': Control: blue_gamma (0x0098ca67)
[125:17:52.986027926] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Exposure (0x00980911)
[125:17:52.986164576] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Horizontal Flip (0x00980914)
[125:17:52.986291516] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Vertical Flip (0x00980915)
[125:17:52.986417306] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Low Latency Controls (0x0098ca21)
[125:17:52.986559976] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: red_gain (0x0098ca61)
[125:17:52.986687386] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: blue_gain (0x0098ca62)
[125:17:52.986814816] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: awb_en (0x0098ca63)
[125:17:52.986937396] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: threshold (0x0098ca64)
[125:17:52.987062726] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: red_gamma (0x0098ca65)
[125:17:52.987186646] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: green_gamma (0x0098ca66)
[125:17:52.987309755] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: blue_gamma (0x0098ca67)
[125:17:52.987438995] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Camera Orientation (0x009a0922)
[125:17:52.987601645] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Camera Sensor Rotation (0x009a0923)
[125:17:52.987738295] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Vertical Blanking (0x009e0901)
[125:17:52.987870935] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Horizontal Blanking (0x009e0902)
[125:17:52.987995915] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Analogue Gain (0x009e0903)
[125:17:52.988144835] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Red Pixel Value (0x009e0904)
[125:17:52.988270385] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:52.988397615] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Blue Pixel Value (0x009e0906)
[125:17:52.988523105] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:52.988668405] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Link Frequency (0x009f0901)
[125:17:52.988803835] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Pixel Rate (0x009f0902)
[125:17:52.988929425] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Test Pattern (0x009f0903)
[125:17:52.989089435] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0040000.v_proc_ss': Control: Digital Gain (0x009f0905)
[125:17:52.989484835] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Exposure (0x00980911)
[125:17:52.989678345] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Horizontal Flip (0x00980914)
[125:17:52.989864055] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Vertical Flip (0x00980915)
[125:17:52.990041405] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Low Latency Controls (0x0098ca21)
[125:17:52.990221865] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: red_gain (0x0098ca61)
[125:17:52.990400055] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: blue_gain (0x0098ca62)
[125:17:52.990589124] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: awb_en (0x0098ca63)
[125:17:52.990766314] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: threshold (0x0098ca64)
[125:17:52.990945194] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: red_gamma (0x0098ca65)
[125:17:52.991121724] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: green_gamma (0x0098ca66)
[125:17:52.991298314] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: blue_gamma (0x0098ca67)
[125:17:52.991521374] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Camera Orientation (0x009a0922)
[125:17:52.991805484] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Camera Sensor Rotation (0x009a0923)
[125:17:52.992344834] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Vertical Blanking (0x009e0901)
[125:17:52.992545794] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Horizontal Blanking (0x009e0902)
[125:17:52.992728584] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Analogue Gain (0x009e0903)
[125:17:52.992910234] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Red Pixel Value (0x009e0904)
[125:17:52.993089504] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Green (Red) Pixel Value (0x009e0905)
[125:17:52.993272394] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Blue Pixel Value (0x009e0906)
[125:17:52.993452414] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:52.993680173] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Link Frequency (0x009f0901)
[125:17:52.993896663] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Pixel Rate (0x009f0902)
[125:17:52.994078273] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Test Pattern (0x009f0903)
[125:17:52.994427063] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video0[16:cap]: Control: Digital Gain (0x009f0905)
[125:17:52.994759863] [11216] DEBUG V4L2 v4l2_videodevice.cpp:631 /dev/video0[16:cap]: Opened device platform:vcap_mipi_0_v_proc:0: xilinx-vipp: vcap_mipi_0_v_proc output 0
[125:17:52.995241003] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Exposure (0x00980911)
[125:17:52.995379073] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Horizontal Flip (0x00980914)
[125:17:52.995506733] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Vertical Flip (0x00980915)
[125:17:52.995639263] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Camera Orientation (0x009a0922)
[125:17:52.995790843] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Camera Sensor Rotation (0x009a0923)
[125:17:52.995924233] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Vertical Blanking (0x009e0901)
[125:17:52.996083693] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Horizontal Blanking (0x009e0902)
[125:17:52.996211793] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Analogue Gain (0x009e0903)
[125:17:52.996338183] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Red Pixel Value (0x009e0904)
[125:17:52.996464583] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:52.996589533] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Blue Pixel Value (0x009e0906)
[125:17:52.996716632] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:52.996850072] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Link Frequency (0x009f0901)
[125:17:52.996983922] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Pixel Rate (0x009f0902)
[125:17:52.997119582] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Test Pattern (0x009f0903)
[125:17:52.997280612] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx219 1-0010': Control: Digital Gain (0x009f0905)
[125:17:53.000567421] [11216] DEBUG CameraSensor camera_sensor.cpp:1185 'imx219 1-0010': Apply test pattern mode 0
[125:17:53.000747001] [11216] DEBUG XISP xisp.cpp:724 Register the camera ...
[125:17:53.000850521] [11216] DEBUG XISP xisp.cpp:726 [id] : /base/pl-bus/i2c@80040000/sensor@10
[125:17:53.000944011] [11216] DEBUG XISP xisp.cpp:731 [streams.size()] : 1
[125:17:53.001092551] [11216] DEBUG Camera camera_manager.cpp:159 Pipeline handler "xisp" matched
[125:17:53.001196211] [11216] DEBUG XISP xisp.cpp:582 [PipelineHandlerXISP::match] Looking for capture pipeline
[125:17:53.001307011] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:318 Successful match for media device "xilinx-video"
[125:17:53.001439181] [11216] DEBUG XISP xisp.cpp:591 Found pipeline ...
[125:17:53.001535541] [11216] DEBUG XISP xisp.cpp:663 [VCAP] : vcap_mipi_1_v_proc output 0
[125:17:53.001636861] [11216] DEBUG XISP xisp.cpp:650 [CSI ] : 80051000.mipi_csi2_rx_subsystem
[125:17:53.001731871] [11216] DEBUG XISP xisp.cpp:614 [CAM ] : imx708_wide
[125:17:53.001818461] [11216] DEBUG XISP xisp.cpp:626 [IMX708] : 1536x864-SRGGB10_1X10
[125:17:53.001911891] [11216] DEBUG XISP xisp.cpp:646 [VCM ] : dw9807 2-000c
[125:17:53.002004321] [11216] DEBUG XISP xisp.cpp:655 [XISP] : a0030000.ISPPipeline_accel
[125:17:53.002095021] [11216] DEBUG XISP xisp.cpp:659 [VPSS] : a00c0000.v_proc_ss
[125:17:53.002254781] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Exposure (0x00980911)
[125:17:53.002393341] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Horizontal Flip (0x00980914)
[125:17:53.002526601] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Vertical Flip (0x00980915)
[125:17:53.002655841] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Low Latency Controls (0x0098ca21)
[125:17:53.002785401] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: red_gain (0x0098ca61)
[125:17:53.002913201] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: blue_gain (0x0098ca62)
[125:17:53.003023650] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: awb_en (0x0098ca63)
[125:17:53.003121360] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: threshold (0x0098ca64)
[125:17:53.003220320] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: red_gamma (0x0098ca65)
[125:17:53.003315630] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: green_gamma (0x0098ca66)
[125:17:53.003410310] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: blue_gamma (0x0098ca67)
[125:17:53.003513070] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Focus, Absolute (0x009a090a)
[125:17:53.003609690] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Wide Dynamic Range (0x009a0915)
[125:17:53.003709220] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Camera Orientation (0x009a0922)
[125:17:53.003839080] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.003946100] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Vertical Blanking (0x009e0901)
[125:17:53.004083620] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Horizontal Blanking (0x009e0902)
[125:17:53.004201790] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Analogue Gain (0x009e0903)
[125:17:53.004301680] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Red Pixel Value (0x009e0904)
[125:17:53.004400160] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.004500670] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Blue Pixel Value (0x009e0906)
[125:17:53.004599310] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.004699030] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Notify Gains (0x009e0909)
[125:17:53.004802570] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Link Frequency (0x009f0901)
[125:17:53.004908480] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Pixel Rate (0x009f0902)
[125:17:53.005005570] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Test Pattern (0x009f0903)
[125:17:53.005137480] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80051000.mipi_csi2_rx_subsystem': Control: Digital Gain (0x009f0905)
[125:17:53.005379240] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0030000.ISPPipeline_accel': Control: red_gain (0x0098ca61)
[125:17:53.005482610] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0030000.ISPPipeline_accel': Control: blue_gain (0x0098ca62)
[125:17:53.005578350] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0030000.ISPPipeline_accel': Control: awb_en (0x0098ca63)
[125:17:53.005672350] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0030000.ISPPipeline_accel': Control: threshold (0x0098ca64)
[125:17:53.005765530] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0030000.ISPPipeline_accel': Control: red_gamma (0x0098ca65)
[125:17:53.005860210] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0030000.ISPPipeline_accel': Control: green_gamma (0x0098ca66)
[125:17:53.005953620] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0030000.ISPPipeline_accel': Control: blue_gamma (0x0098ca67)
[125:17:53.006125329] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Exposure (0x00980911)
[125:17:53.006227049] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Horizontal Flip (0x00980914)
[125:17:53.006322789] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Vertical Flip (0x00980915)
[125:17:53.006419629] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Low Latency Controls (0x0098ca21)
[125:17:53.006517169] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: red_gain (0x0098ca61)
[125:17:53.006610249] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: blue_gain (0x0098ca62)
[125:17:53.006706299] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: awb_en (0x0098ca63)
[125:17:53.006797909] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: threshold (0x0098ca64)
[125:17:53.006891679] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: red_gamma (0x0098ca65)
[125:17:53.006985609] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: green_gamma (0x0098ca66)
[125:17:53.007076769] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: blue_gamma (0x0098ca67)
[125:17:53.007175019] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Focus, Absolute (0x009a090a)
[125:17:53.007270069] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Wide Dynamic Range (0x009a0915)
[125:17:53.007366929] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Camera Orientation (0x009a0922)
[125:17:53.007490979] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.007593979] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Vertical Blanking (0x009e0901)
[125:17:53.007690649] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Horizontal Blanking (0x009e0902)
[125:17:53.007786729] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Analogue Gain (0x009e0903)
[125:17:53.007880729] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Red Pixel Value (0x009e0904)
[125:17:53.007972729] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.008140769] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Blue Pixel Value (0x009e0906)
[125:17:53.008242559] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.008629049] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Notify Gains (0x009e0909)
[125:17:53.008730459] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Link Frequency (0x009f0901)
[125:17:53.008831689] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Pixel Rate (0x009f0902)
[125:17:53.008923549] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Test Pattern (0x009f0903)
[125:17:53.009064899] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00c0000.v_proc_ss': Control: Digital Gain (0x009f0905)
[125:17:53.009307498] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Exposure (0x00980911)
[125:17:53.009410378] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Horizontal Flip (0x00980914)
[125:17:53.009507868] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Vertical Flip (0x00980915)
[125:17:53.009605318] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Low Latency Controls (0x0098ca21)
[125:17:53.009702118] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: red_gain (0x0098ca61)
[125:17:53.009796988] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: blue_gain (0x0098ca62)
[125:17:53.009892788] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: awb_en (0x0098ca63)
[125:17:53.009985768] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: threshold (0x0098ca64)
[125:17:53.010080748] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: red_gamma (0x0098ca65)
[125:17:53.010176428] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: green_gamma (0x0098ca66)
[125:17:53.010269978] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: blue_gamma (0x0098ca67)
[125:17:53.010371278] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Focus, Absolute (0x009a090a)
[125:17:53.010469128] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Wide Dynamic Range (0x009a0915)
[125:17:53.010566048] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Camera Orientation (0x009a0922)
[125:17:53.010691948] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.010798158] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Vertical Blanking (0x009e0901)
[125:17:53.010898278] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Horizontal Blanking (0x009e0902)
[125:17:53.010995778] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Analogue Gain (0x009e0903)
[125:17:53.011092288] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Red Pixel Value (0x009e0904)
[125:17:53.011186618] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.011283228] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Blue Pixel Value (0x009e0906)
[125:17:53.011381828] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.011476858] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Notify Gains (0x009e0909)
[125:17:53.011577268] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Link Frequency (0x009f0901)
[125:17:53.011686648] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Pixel Rate (0x009f0902)
[125:17:53.011781448] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Test Pattern (0x009f0903)
[125:17:53.011911268] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video1[22:cap]: Control: Digital Gain (0x009f0905)
[125:17:53.012203908] [11216] DEBUG V4L2 v4l2_videodevice.cpp:631 /dev/video1[22:cap]: Opened device platform:vcap_mipi_1_v_proc:0: xilinx-vipp: vcap_mipi_1_v_proc output 0
[125:17:53.012407657] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Exposure (0x00980911)
[125:17:53.012519777] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Horizontal Flip (0x00980914)
[125:17:53.012618327] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Vertical Flip (0x00980915)
[125:17:53.012719347] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Wide Dynamic Range (0x009a0915)
[125:17:53.012815867] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Camera Orientation (0x009a0922)
[125:17:53.012934687] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.013040817] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Vertical Blanking (0x009e0901)
[125:17:53.013171137] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Horizontal Blanking (0x009e0902)
[125:17:53.013302797] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Analogue Gain (0x009e0903)
[125:17:53.013429197] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Red Pixel Value (0x009e0904)
[125:17:53.013552937] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.013680437] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Blue Pixel Value (0x009e0906)
[125:17:53.013805337] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.013931487] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Notify Gains (0x009e0909)
[125:17:53.014068527] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Link Frequency (0x009f0901)
[125:17:53.014203447] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Pixel Rate (0x009f0902)
[125:17:53.014327997] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Test Pattern (0x009f0903)
[125:17:53.014489017] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx708_wide': Control: Digital Gain (0x009f0905)
[125:17:53.016769666] [11216] DEBUG CameraSensor camera_sensor.cpp:408 'imx708_wide': No static test pattern map for 'imx708_wide'
[125:17:53.016981466] [11216] DEBUG V4L2 v4l2_device.cpp:634 'dw9807 2-000c': Control: Focus, Absolute (0x009a090a)
[125:17:53.018501666] [11216] DEBUG XISP xisp.cpp:724 Register the camera ...
[125:17:53.018601016] [11216] DEBUG XISP xisp.cpp:726 [id] : /base/pl-bus/i2c@80070000/sensor@10
[125:17:53.018695675] [11216] DEBUG XISP xisp.cpp:731 [streams.size()] : 1
[125:17:53.018808375] [11216] DEBUG Camera camera_manager.cpp:159 Pipeline handler "xisp" matched
[125:17:53.018908295] [11216] DEBUG XISP xisp.cpp:582 [PipelineHandlerXISP::match] Looking for capture pipeline
[125:17:53.019019195] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:318 Successful match for media device "xilinx-video"
[125:17:53.019143755] [11216] DEBUG XISP xisp.cpp:591 Found pipeline ...
[125:17:53.019238175] [11216] DEBUG XISP xisp.cpp:663 [VCAP] : vcap_mipi_2_v_proc output 0
[125:17:53.019333625] [11216] DEBUG XISP xisp.cpp:614 [CAM ] : imx500 3-001a
[125:17:53.019422495] [11216] DEBUG XISP xisp.cpp:640 [IMX500] : 2028x1520-SRGGB10_1X10
[125:17:53.019515495] [11216] DEBUG XISP xisp.cpp:650 [CSI ] : 80052000.mipi_csi2_rx_subsystem
[125:17:53.019609895] [11216] DEBUG XISP xisp.cpp:655 [XISP] : a0090000.ISPPipeline_accel
[125:17:53.019701635] [11216] DEBUG XISP xisp.cpp:659 [VPSS] : a0100000.v_proc_ss
[125:17:53.019859045] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Exposure (0x00980911)
[125:17:53.019993895] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Horizontal Flip (0x00980914)
[125:17:53.020148805] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Vertical Flip (0x00980915)
[125:17:53.020276375] [11216] DEBUG V4L2 v4l2_device.cpp:628 '80052000.mipi_csi2_rx_subsystem': Control 0x00982900 has unsupported type 258
[125:17:53.020389215] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: IMX500 Network Firmware File FD (0x00982901)
[125:17:53.020557095] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Low Latency Controls (0x0098ca21)
[125:17:53.020704965] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: red_gain (0x0098ca61)
[125:17:53.020830255] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: blue_gain (0x0098ca62)
[125:17:53.020956035] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: awb_en (0x0098ca63)
[125:17:53.021079575] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: threshold (0x0098ca64)
[125:17:53.021204695] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: red_gamma (0x0098ca65)
[125:17:53.021327405] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: green_gamma (0x0098ca66)
[125:17:53.021451095] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: blue_gamma (0x0098ca67)
[125:17:53.021581175] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Camera Orientation (0x009a0922)
[125:17:53.021765905] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.021911784] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Vertical Blanking (0x009e0901)
[125:17:53.022041784] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Horizontal Blanking (0x009e0902)
[125:17:53.022169694] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Analogue Gain (0x009e0903)
[125:17:53.022296864] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Notify Gains (0x009e0909)
[125:17:53.022429284] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Link Frequency (0x009f0901)
[125:17:53.022566314] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80052000.mipi_csi2_rx_subsystem': Control: Pixel Rate (0x009f0902)
[125:17:53.022849604] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0090000.ISPPipeline_accel': Control: red_gain (0x0098ca61)
[125:17:53.022983344] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0090000.ISPPipeline_accel': Control: blue_gain (0x0098ca62)
[125:17:53.023109204] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0090000.ISPPipeline_accel': Control: awb_en (0x0098ca63)
[125:17:53.023232584] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0090000.ISPPipeline_accel': Control: threshold (0x0098ca64)
[125:17:53.023357144] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0090000.ISPPipeline_accel': Control: red_gamma (0x0098ca65)
[125:17:53.023480524] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0090000.ISPPipeline_accel': Control: green_gamma (0x0098ca66)
[125:17:53.023602664] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0090000.ISPPipeline_accel': Control: blue_gamma (0x0098ca67)
[125:17:53.023799614] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Exposure (0x00980911)
[125:17:53.023933164] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Horizontal Flip (0x00980914)
[125:17:53.024139194] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Vertical Flip (0x00980915)
[125:17:53.024269884] [11216] DEBUG V4L2 v4l2_device.cpp:628 'a0100000.v_proc_ss': Control 0x00982900 has unsupported type 258
[125:17:53.024384264] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: IMX500 Network Firmware File FD (0x00982901)
[125:17:53.024509424] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Low Latency Controls (0x0098ca21)
[125:17:53.024638914] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: red_gain (0x0098ca61)
[125:17:53.024761744] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: blue_gain (0x0098ca62)
[125:17:53.024883244] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: awb_en (0x0098ca63)
[125:17:53.025005643] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: threshold (0x0098ca64)
[125:17:53.025129523] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: red_gamma (0x0098ca65)
[125:17:53.025284893] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: green_gamma (0x0098ca66)
[125:17:53.025410903] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: blue_gamma (0x0098ca67)
[125:17:53.025541433] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Camera Orientation (0x009a0922)
[125:17:53.025692403] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.025833443] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Vertical Blanking (0x009e0901)
[125:17:53.025961603] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Horizontal Blanking (0x009e0902)
[125:17:53.026088273] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Analogue Gain (0x009e0903)
[125:17:53.026214943] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Notify Gains (0x009e0909)
[125:17:53.026377743] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Link Frequency (0x009f0901)
[125:17:53.026517373] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0100000.v_proc_ss': Control: Pixel Rate (0x009f0902)
[125:17:53.026764863] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Exposure (0x00980911)
[125:17:53.026936653] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Horizontal Flip (0x00980914)
[125:17:53.027068293] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Vertical Flip (0x00980915)
[125:17:53.027200583] [11216] DEBUG V4L2 v4l2_device.cpp:628 /dev/video2[29:cap]: Control 0x00982900 has unsupported type 258
[125:17:53.027313323] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: IMX500 Network Firmware File FD (0x00982901)
[125:17:53.027439143] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Low Latency Controls (0x0098ca21)
[125:17:53.027570003] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: red_gain (0x0098ca61)
[125:17:53.027695413] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: blue_gain (0x0098ca62)
[125:17:53.027820523] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: awb_en (0x0098ca63)
[125:17:53.027947143] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: threshold (0x0098ca64)
[125:17:53.028094162] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: red_gamma (0x0098ca65)
[125:17:53.028257842] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: green_gamma (0x0098ca66)
[125:17:53.028387052] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: blue_gamma (0x0098ca67)
[125:17:53.028522212] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Camera Orientation (0x009a0922)
[125:17:53.028673892] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.028817572] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Vertical Blanking (0x009e0901)
[125:17:53.028946612] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Horizontal Blanking (0x009e0902)
[125:17:53.029075602] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Analogue Gain (0x009e0903)
[125:17:53.029237302] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Notify Gains (0x009e0909)
[125:17:53.029372932] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Link Frequency (0x009f0901)
[125:17:53.029511092] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video2[29:cap]: Control: Pixel Rate (0x009f0902)
[125:17:53.029724542] [11216] DEBUG V4L2 v4l2_videodevice.cpp:631 /dev/video2[29:cap]: Opened device platform:vcap_mipi_2_v_proc:0: xilinx-vipp: vcap_mipi_2_v_proc output 0
[125:17:53.029973802] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Exposure (0x00980911)
[125:17:53.030107262] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Horizontal Flip (0x00980914)
[125:17:53.030236582] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Vertical Flip (0x00980915)
[125:17:53.030361282] [11216] DEBUG V4L2 v4l2_device.cpp:628 'imx500 3-001a': Control 0x00982900 has unsupported type 258
[125:17:53.030469662] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: IMX500 Network Firmware File FD (0x00982901)
[125:17:53.030600502] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Camera Orientation (0x009a0922)
[125:17:53.030749902] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.030881212] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Vertical Blanking (0x009e0901)
[125:17:53.031008602] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Horizontal Blanking (0x009e0902)
[125:17:53.031168212] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Analogue Gain (0x009e0903)
[125:17:53.031294881] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Notify Gains (0x009e0909)
[125:17:53.057592213] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Link Frequency (0x009f0901)
[125:17:53.057711283] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx500 3-001a': Control: Pixel Rate (0x009f0902)
[125:17:53.059812492] [11216] WARN CameraSensorProperties camera_sensor_properties.cpp:305 No static properties available for 'imx500'
[125:17:53.059904122] [11216] WARN CameraSensorProperties camera_sensor_properties.cpp:307 Please consider updating the camera sensor properties database
[125:17:53.060055422] [11216] DEBUG XISP xisp.cpp:724 Register the camera ...
[125:17:53.060135652] [11216] DEBUG XISP xisp.cpp:726 [id] : /base/pl-bus/i2c@80090000/sensor@1a
[125:17:53.060199412] [11216] DEBUG XISP xisp.cpp:731 [streams.size()] : 1
[125:17:53.060294022] [11216] DEBUG Camera camera_manager.cpp:159 Pipeline handler "xisp" matched
[125:17:53.060410262] [11216] DEBUG XISP xisp.cpp:582 [PipelineHandlerXISP::match] Looking for capture pipeline
[125:17:53.060507782] [11216] DEBUG DeviceEnumerator device_enumerator.cpp:318 Successful match for media device "xilinx-video"
[125:17:53.060622172] [11216] DEBUG XISP xisp.cpp:591 Found pipeline ...
[125:17:53.060699372] [11216] DEBUG XISP xisp.cpp:663 [VCAP] : vcap_mipi_3_v_proc output 0
[125:17:53.060770212] [11216] DEBUG XISP xisp.cpp:650 [CSI ] : 80053000.mipi_csi2_rx_subsystem
[125:17:53.060867812] [11216] DEBUG XISP xisp.cpp:614 [CAM ] : imx477 4-001a
[125:17:53.060958642] [11216] DEBUG XISP xisp.cpp:633 [IMX477] : 1332x990-SRGGB10_1X10
[125:17:53.061055672] [11216] DEBUG XISP xisp.cpp:655 [XISP] : a00b0000.ISPPipeline_accel
[125:17:53.061148092] [11216] DEBUG XISP xisp.cpp:659 [VPSS] : a0180000.v_proc_ss
[125:17:53.061302792] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Exposure (0x00980911)
[125:17:53.061441342] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Horizontal Flip (0x00980914)
[125:17:53.061604632] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Vertical Flip (0x00980915)
[125:17:53.061735312] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Low Latency Controls (0x0098ca21)
[125:17:53.061849132] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: red_gain (0x0098ca61)
[125:17:53.061986602] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: blue_gain (0x0098ca62)
[125:17:53.062113682] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: awb_en (0x0098ca63)
[125:17:53.062240282] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: threshold (0x0098ca64)
[125:17:53.062366052] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: red_gamma (0x0098ca65)
[125:17:53.062492712] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: green_gamma (0x0098ca66)
[125:17:53.062638151] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: blue_gamma (0x0098ca67)
[125:17:53.062786961] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Camera Orientation (0x009a0922)
[125:17:53.062926731] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.063033401] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Vertical Blanking (0x009e0901)
[125:17:53.063139921] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Horizontal Blanking (0x009e0902)
[125:17:53.063239281] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Analogue Gain (0x009e0903)
[125:17:53.063335811] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Red Pixel Value (0x009e0904)
[125:17:53.063464681] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.063566671] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Blue Pixel Value (0x009e0906)
[125:17:53.063664461] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.063768371] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Link Frequency (0x009f0901)
[125:17:53.063873611] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Pixel Rate (0x009f0902)
[125:17:53.063969531] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Test Pattern (0x009f0903)
[125:17:53.064125161] [11216] DEBUG V4L2 v4l2_device.cpp:634 '80053000.mipi_csi2_rx_subsystem': Control: Digital Gain (0x009f0905)
[125:17:53.064383421] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00b0000.ISPPipeline_accel': Control: red_gain (0x0098ca61)
[125:17:53.064485821] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00b0000.ISPPipeline_accel': Control: blue_gain (0x0098ca62)
[125:17:53.064618511] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00b0000.ISPPipeline_accel': Control: awb_en (0x0098ca63)
[125:17:53.064714811] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00b0000.ISPPipeline_accel': Control: threshold (0x0098ca64)
[125:17:53.064808811] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00b0000.ISPPipeline_accel': Control: red_gamma (0x0098ca65)
[125:17:53.064902741] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00b0000.ISPPipeline_accel': Control: green_gamma (0x0098ca66)
[125:17:53.064994231] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a00b0000.ISPPipeline_accel': Control: blue_gamma (0x0098ca67)
[125:17:53.065162621] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Exposure (0x00980911)
[125:17:53.065264011] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Horizontal Flip (0x00980914)
[125:17:53.065359671] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Vertical Flip (0x00980915)
[125:17:53.065453881] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Low Latency Controls (0x0098ca21)
[125:17:53.065582681] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: red_gain (0x0098ca61)
[125:17:53.065678641] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: blue_gain (0x0098ca62)
[125:17:53.065771220] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: awb_en (0x0098ca63)
[125:17:53.065862320] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: threshold (0x0098ca64)
[125:17:53.065953500] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: red_gamma (0x0098ca65)
[125:17:53.066046100] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: green_gamma (0x0098ca66)
[125:17:53.066136630] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: blue_gamma (0x0098ca67)
[125:17:53.066234820] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Camera Orientation (0x009a0922)
[125:17:53.066401450] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.066505890] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Vertical Blanking (0x009e0901)
[125:17:53.066607600] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Horizontal Blanking (0x009e0902)
[125:17:53.066704290] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Analogue Gain (0x009e0903)
[125:17:53.066796880] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Red Pixel Value (0x009e0904)
[125:17:53.066923070] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.067022080] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Blue Pixel Value (0x009e0906)
[125:17:53.067116600] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.067216530] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Link Frequency (0x009f0901)
[125:17:53.067318770] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Pixel Rate (0x009f0902)
[125:17:53.067411160] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Test Pattern (0x009f0903)
[125:17:53.067538910] [11216] DEBUG V4L2 v4l2_device.cpp:634 'a0180000.v_proc_ss': Control: Digital Gain (0x009f0905)
[125:17:53.067795110] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Exposure (0x00980911)
[125:17:53.067899320] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Horizontal Flip (0x00980914)
[125:17:53.068105670] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Vertical Flip (0x00980915)
[125:17:53.068219320] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Low Latency Controls (0x0098ca21)
[125:17:53.068350600] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: red_gain (0x0098ca61)
[125:17:53.068479290] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: blue_gain (0x0098ca62)
[125:17:53.068605400] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: awb_en (0x0098ca63)
[125:17:53.068730800] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: threshold (0x0098ca64)
[125:17:53.068856149] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: red_gamma (0x0098ca65)
[125:17:53.068984119] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: green_gamma (0x0098ca66)
[125:17:53.069140579] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: blue_gamma (0x0098ca67)
[125:17:53.069274119] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Camera Orientation (0x009a0922)
[125:17:53.069427709] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.069563159] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Vertical Blanking (0x009e0901)
[125:17:53.069698839] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Horizontal Blanking (0x009e0902)
[125:17:53.069827589] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Analogue Gain (0x009e0903)
[125:17:53.069953879] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Red Pixel Value (0x009e0904)
[125:17:53.070081489] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.070241139] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Blue Pixel Value (0x009e0906)
[125:17:53.070370929] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.070505079] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Link Frequency (0x009f0901)
[125:17:53.070641559] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Pixel Rate (0x009f0902)
[125:17:53.070767579] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Test Pattern (0x009f0903)
[125:17:53.070928819] [11216] DEBUG V4L2 v4l2_device.cpp:634 /dev/video3[35:cap]: Control: Digital Gain (0x009f0905)
[125:17:53.071184829] [11216] DEBUG V4L2 v4l2_videodevice.cpp:631 /dev/video3[35:cap]: Opened device platform:vcap_mipi_3_v_proc:0: xilinx-vipp: vcap_mipi_3_v_proc output 0
[125:17:53.071413299] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Exposure (0x00980911)
[125:17:53.071579979] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Horizontal Flip (0x00980914)
[125:17:53.071713019] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Vertical Flip (0x00980915)
[125:17:53.071843739] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Camera Orientation (0x009a0922)
[125:17:53.071993089] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Camera Sensor Rotation (0x009a0923)
[125:17:53.072152848] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Vertical Blanking (0x009e0901)
[125:17:53.072283398] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Horizontal Blanking (0x009e0902)
[125:17:53.072408328] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Analogue Gain (0x009e0903)
[125:17:53.072533068] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Red Pixel Value (0x009e0904)
[125:17:53.072689488] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Green (Red) Pixel Value (0x009e0905)
[125:17:53.072817798] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Blue Pixel Value (0x009e0906)
[125:17:53.072942488] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Green (Blue) Pixel Value (0x009e0907)
[125:17:53.073071848] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Link Frequency (0x009f0901)
[125:17:53.073205368] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Pixel Rate (0x009f0902)
[125:17:53.073335718] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Test Pattern (0x009f0903)
[125:17:53.073496458] [11216] DEBUG V4L2 v4l2_device.cpp:634 'imx477 4-001a': Control: Digital Gain (0x009f0905)
[125:17:53.075644687] [11216] DEBUG CameraSensor camera_sensor.cpp:408 'imx477 4-001a': No static test pattern map for 'imx477'
[125:17:53.075809437] [11216] DEBUG XISP xisp.cpp:724 Register the camera ...
[125:17:53.075905257] [11216] DEBUG XISP xisp.cpp:726 [id] : /base/pl-bus/i2c@800b0000/sensor@1a
[125:17:53.075996197] [11216] DEBUG XISP xisp.cpp:731 [streams.size()] : 1
[125:17:53.076127647] [11216] DEBUG Camera camera_manager.cpp:159 Pipeline handler "xisp" matched
[125:17:53.076268677] [11216] DEBUG XISP xisp.cpp:582 [PipelineHandlerXISP::match] Looking for capture pipeline
[125:17:53.076381687] [11216] DEBUG XISP xisp.cpp:599 Done ...
Available cameras:
1: 'imx219' (/base/pl-bus/i2c@80040000/sensor@10)
2: 'imx708_wide' (/base/pl-bus/i2c@80070000/sensor@10)
3: 'imx500' (/base/pl-bus/i2c@80090000/sensor@1a)
4: 'imx477' (/base/pl-bus/i2c@800b0000/sensor@1a)
root@uzev-hailo-2024-1:~/libcamera.xisp/build#
Validating with pycamera
The libcamera stack also provides a python wrapper, which can be tested as follows:
root@uzev-hailo-2024-1:~/libcamera.xisp/build# python3 ../src/py/examples/simple-cam.py
...
- External camera "imx219" (/base/pl-bus/i2c@80040000/sensor@10)
- External camera "imx708_wide" (/base/pl-bus/i2c@80070000/sensor@10)
- External camera "imx500" (/base/pl-bus/i2c@80090000/sensor@1a)
- External camera "imx477" (/base/pl-bus/i2c@800b0000/sensor@1a)
Default viewfinder configuration is: 640x480-RBG888
Validated viewfinder configuration is: 640x480-RBG888
[125:34:59.222585500] [11343] INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-RBG888
Allocated 4 buffers for stream
[125:34:59.229995766] [11343] ERROR Controls controls.cpp:1128 Control 0x0000000c is not valid for /base/pl-bus/i2c@80040000/sensor@10
[125:34:59.230221966] [11343] ERROR Controls controls.cpp:1128 Control 0x0000000c is not valid for /base/pl-bus/i2c@80040000/sensor@10
[125:34:59.230416407] [11343] ERROR Controls controls.cpp:1128 Control 0x0000000c is not valid for /base/pl-bus/i2c@80040000/sensor@10
[125:34:59.230609477] [11343] ERROR Controls controls.cpp:1128 Control 0x0000000c is not valid for /base/pl-bus/i2c@80040000/sensor@10
Request completed: Request(0:C:0/1:0)
SensorTimestamp = 452099383918000
seq: 000000 timestamp: 452099383918000 bytesused: 921600
Request completed: Request(1:C:0/1:0)
SensorTimestamp = 452099417247000
seq: 000001 timestamp: 452099417247000 bytesused: 921600
Request completed: Request(2:C:0/1:0)
SensorTimestamp = 452099450574000
seq: 000002 timestamp: 452099450574000 bytesused: 921600
Request completed: Request(3:C:0/1:0)
SensorTimestamp = 452099483900000
seq: 000003 timestamp: 452099483900000 bytesused: 921600
Request completed: Request(4:C:0/1:0)
SensorTimestamp = 452099517227000
seq: 000004 timestamp: 452099517227000 bytesused: 921600
Request completed: Request(5:C:0/1:0)
SensorTimestamp = 452099550553000
seq: 000005 timestamp: 452099550553000 bytesused: 921600
Request completed: Request(6:C:0/1:0)
SensorTimestamp = 452099583881000
seq: 000006 timestamp: 452099583881000 bytesused: 921600
Request completed: Request(7:C:0/1:0)
SensorTimestamp = 452099617207000
seq: 000007 timestamp: 452099617207000 bytesused: 921600
Request completed: Request(8:C:0/1:0)
SensorTimestamp = 452099650533000
seq: 000008 timestamp: 452099650533000 bytesused: 921600
Request completed: Request(9:C:0/1:0)
SensorTimestamp = 452099683861000
seq: 000009 timestamp: 452099683861000 bytesused: 921600
Request completed: Request(10:C:0/1:0)
SensorTimestamp = 452099717188000
seq: 000010 timestamp: 452099717188000 bytesused: 921600
Request completed: Request(11:C:0/1:0)
SensorTimestamp = 452099750514000
seq: 000011 timestamp: 452099750514000 bytesused: 921600
Request completed: Request(12:C:0/1:0)
SensorTimestamp = 452099783841000
seq: 000012 timestamp: 452099783841000 bytesused: 921600
Request completed: Request(13:C:0/1:0)
SensorTimestamp = 452099817168000
seq: 000013 timestamp: 452099817168000 bytesused: 921600
Request completed: Request(14:C:0/1:0)
SensorTimestamp = 452099850495000
seq: 000014 timestamp: 452099850495000 bytesused: 921600
Request completed: Request(15:C:0/1:0)
SensorTimestamp = 452099883822000
seq: 000015 timestamp: 452099883822000 bytesused: 921600
Request completed: Request(16:C:0/1:0)
SensorTimestamp = 452099917149000
seq: 000016 timestamp: 452099917149000 bytesused: 921600
Request completed: Request(17:C:0/1:0)
SensorTimestamp = 452099950476000
seq: 000017 timestamp: 452099950476000 bytesused: 921600
Request completed: Request(18:C:0/1:0)
SensorTimestamp = 452099983802000
seq: 000018 timestamp: 452099983802000 bytesused: 921600
Request completed: Request(19:C:0/1:0)
SensorTimestamp = 452100017129000
seq: 000019 timestamp: 452100017129000 bytesused: 921600
Request completed: Request(20:C:0/1:0)
SensorTimestamp = 452100050456000
seq: 000020 timestamp: 452100050456000 bytesused: 921600
Request completed: Request(21:C:0/1:0)
SensorTimestamp = 452100083783000
seq: 000021 timestamp: 452100083783000 bytesused: 921600
Request completed: Request(22:C:0/1:0)
SensorTimestamp = 452100117110000
seq: 000022 timestamp: 452100117110000 bytesused: 921600
Request completed: Request(23:C:0/1:0)
SensorTimestamp = 452100150436000
seq: 000023 timestamp: 452100150436000 bytesused: 921600
Request completed: Request(24:C:0/1:0)
SensorTimestamp = 452100183763000
seq: 000024 timestamp: 452100183763000 bytesused: 921600
Request completed: Request(25:C:0/1:0)
SensorTimestamp = 452100217090000
seq: 000025 timestamp: 452100217090000 bytesused: 921600
Request completed: Request(26:C:0/1:0)
SensorTimestamp = 452100250418000
seq: 000026 timestamp: 452100250418000 bytesused: 921600
Request completed: Request(27:C:0/1:0)
SensorTimestamp = 452100283744000
seq: 000027 timestamp: 452100283744000 bytesused: 921600
Request completed: Request(28:C:0/1:0)
SensorTimestamp = 452100317070000
seq: 000028 timestamp: 452100317070000 bytesused: 921600
Request completed: Request(29:C:0/1:0)
SensorTimestamp = 452100350397000
seq: 000029 timestamp: 452100350397000 bytesused: 921600
Request completed: Request(30:C:0/1:0)
SensorTimestamp = 452100383724000
seq: 000030 timestamp: 452100383724000 bytesused: 921600
Request completed: Request(31:C:0/1:0)
SensorTimestamp = 452100417051000
seq: 000031 timestamp: 452100417051000 bytesused: 921600
Request completed: Request(32:C:0/1:0)
SensorTimestamp = 452100450377000
seq: 000032 timestamp: 452100450377000 bytesused: 921600
Request completed: Request(33:C:0/1:0)
SensorTimestamp = 452100483704000
seq: 000033 timestamp: 452100483704000 bytesused: 921600
Request completed: Request(34:C:0/1:0)
SensorTimestamp = 452100517032000
seq: 000034 timestamp: 452100517032000 bytesused: 921600
Request completed: Request(35:C:0/1:0)
SensorTimestamp = 452100550358000
seq: 000035 timestamp: 452100550358000 bytesused: 921600
Request completed: Request(36:C:0/1:0)
SensorTimestamp = 452100583685000
seq: 000036 timestamp: 452100583685000 bytesused: 921600
Request completed: Request(37:C:0/1:0)
SensorTimestamp = 452100617012000
seq: 000037 timestamp: 452100617012000 bytesused: 921600
Request completed: Request(38:C:0/1:0)
SensorTimestamp = 452100650339000
seq: 000038 timestamp: 452100650339000 bytesused: 921600
Request completed: Request(39:C:0/1:0)
SensorTimestamp = 452100683666000
seq: 000039 timestamp: 452100683666000 bytesused: 921600
Request completed: Request(40:C:0/1:0)
SensorTimestamp = 452100716993000
seq: 000040 timestamp: 452100716993000 bytesused: 921600
Request completed: Request(41:C:0/1:0)
SensorTimestamp = 452100750319000
seq: 000041 timestamp: 452100750319000 bytesused: 921600
Request completed: Request(42:C:0/1:0)
SensorTimestamp = 452100783646000
seq: 000042 timestamp: 452100783646000 bytesused: 921600
Request completed: Request(43:C:0/1:0)
SensorTimestamp = 452100816973000
seq: 000043 timestamp: 452100816973000 bytesused: 921600
Request completed: Request(44:C:0/1:0)
SensorTimestamp = 452100850300000
seq: 000044 timestamp: 452100850300000 bytesused: 921600
Request completed: Request(45:C:0/1:0)
SensorTimestamp = 452100883627000
seq: 000045 timestamp: 452100883627000 bytesused: 921600
Request completed: Request(46:C:0/1:0)
SensorTimestamp = 452100916954000
seq: 000046 timestamp: 452100916954000 bytesused: 921600
Request completed: Request(47:C:0/1:0)
SensorTimestamp = 452100950281000
seq: 000047 timestamp: 452100950281000 bytesused: 921600
Request completed: Request(48:C:0/1:0)
SensorTimestamp = 452100983607000
seq: 000048 timestamp: 452100983607000 bytesused: 921600
Request completed: Request(49:C:0/1:0)
SensorTimestamp = 452101016934000
seq: 000049 timestamp: 452101016934000 bytesused: 921600
Request completed: Request(50:C:0/1:0)
SensorTimestamp = 452101050261000
seq: 000050 timestamp: 452101050261000 bytesused: 921600
Request completed: Request(51:C:0/1:0)
SensorTimestamp = 452101083588000
seq: 000051 timestamp: 452101083588000 bytesused: 921600
Request completed: Request(52:C:0/1:0)
SensorTimestamp = 452101116914000
seq: 000052 timestamp: 452101116914000 bytesused: 921600
Request completed: Request(53:C:0/1:0)
SensorTimestamp = 452101150242000
seq: 000053 timestamp: 452101150242000 bytesused: 921600
Request completed: Request(54:C:0/1:0)
SensorTimestamp = 452101183568000
seq: 000054 timestamp: 452101183568000 bytesused: 921600
Request completed: Request(55:C:0/1:0)
SensorTimestamp = 452101216894000
seq: 000055 timestamp: 452101216894000 bytesused: 921600
Request completed: Request(56:C:0/1:0)
SensorTimestamp = 452101250223000
seq: 000056 timestamp: 452101250223000 bytesused: 921600
Request completed: Request(57:C:0/1:0)
SensorTimestamp = 452101283549000
seq: 000057 timestamp: 452101283549000 bytesused: 921600
Request completed: Request(58:C:0/1:0)
SensorTimestamp = 452101316875000
seq: 000058 timestamp: 452101316875000 bytesused: 921600
Request completed: Request(59:C:0/1:0)
SensorTimestamp = 452101350202000
seq: 000059 timestamp: 452101350202000 bytesused: 921600
Request completed: Request(60:C:0/1:0)
SensorTimestamp = 452101383529000
seq: 000060 timestamp: 452101383529000 bytesused: 921600
Request completed: Request(61:C:0/1:0)
SensorTimestamp = 452101416855000
seq: 000061 timestamp: 452101416855000 bytesused: 921600
Request completed: Request(62:C:0/1:0)
SensorTimestamp = 452101450183000
seq: 000062 timestamp: 452101450183000 bytesused: 921600
Request completed: Request(63:C:0/1:0)
SensorTimestamp = 452101483510000
seq: 000063 timestamp: 452101483510000 bytesused: 921600
Request completed: Request(64:C:0/1:0)
SensorTimestamp = 452101516836000
seq: 000064 timestamp: 452101516836000 bytesused: 921600
Request completed: Request(65:C:0/1:0)
SensorTimestamp = 452101550163000
seq: 000065 timestamp: 452101550163000 bytesused: 921600
Request completed: Request(66:C:0/1:0)
SensorTimestamp = 452101583490000
seq: 000066 timestamp: 452101583490000 bytesused: 921600
Request completed: Request(67:C:0/1:0)
SensorTimestamp = 452101616817000
seq: 000067 timestamp: 452101616817000 bytesused: 921600
Request completed: Request(68:C:0/1:0)
SensorTimestamp = 452101650143000
seq: 000068 timestamp: 452101650143000 bytesused: 921600
Request completed: Request(69:C:0/1:0)
SensorTimestamp = 452101683470000
seq: 000069 timestamp: 452101683470000 bytesused: 921600
Request completed: Request(70:C:0/1:0)
SensorTimestamp = 452101716797000
seq: 000070 timestamp: 452101716797000 bytesused: 921600
Request completed: Request(71:C:0/1:0)
SensorTimestamp = 452101750124000
seq: 000071 timestamp: 452101750124000 bytesused: 921600
Request completed: Request(72:C:0/1:0)
SensorTimestamp = 452101783451000
seq: 000072 timestamp: 452101783451000 bytesused: 921600
Request completed: Request(73:C:0/1:0)
SensorTimestamp = 452101816777000
seq: 000073 timestamp: 452101816777000 bytesused: 921600
Request completed: Request(74:C:0/1:0)
SensorTimestamp = 452101850104000
seq: 000074 timestamp: 452101850104000 bytesused: 921600
Request completed: Request(75:C:0/1:0)
SensorTimestamp = 452101883431000
seq: 000075 timestamp: 452101883431000 bytesused: 921600
Request completed: Request(76:C:0/1:0)
SensorTimestamp = 452101916758000
seq: 000076 timestamp: 452101916758000 bytesused: 921600
Request completed: Request(77:C:0/1:0)
SensorTimestamp = 452101950085000
seq: 000077 timestamp: 452101950085000 bytesused: 921600
Request completed: Request(78:C:0/1:0)
SensorTimestamp = 452101983411000
seq: 000078 timestamp: 452101983411000 bytesused: 921600
Request completed: Request(79:C:0/1:0)
SensorTimestamp = 452102016738000
seq: 000079 timestamp: 452102016738000 bytesused: 921600
Request completed: Request(80:C:0/1:0)
SensorTimestamp = 452102050064000
seq: 000080 timestamp: 452102050064000 bytesused: 921600
Request completed: Request(81:C:0/1:0)
SensorTimestamp = 452102083392000
seq: 000081 timestamp: 452102083392000 bytesused: 921600
Request completed: Request(82:C:0/1:0)
SensorTimestamp = 452102116718000
seq: 000082 timestamp: 452102116718000 bytesused: 921600
Request completed: Request(83:C:0/1:0)
SensorTimestamp = 452102150045000
seq: 000083 timestamp: 452102150045000 bytesused: 921600
Request completed: Request(84:C:0/1:0)
SensorTimestamp = 452102183372000
seq: 000084 timestamp: 452102183372000 bytesused: 921600
Request completed: Request(85:C:0/1:0)
SensorTimestamp = 452102216699000
seq: 000085 timestamp: 452102216699000 bytesused: 921600
Request completed: Request(86:C:0/1:0)
SensorTimestamp = 452102250027000
seq: 000086 timestamp: 452102250027000 bytesused: 921600
Request completed: Request(87:C:0/1:0)
SensorTimestamp = 452102283353000
seq: 000087 timestamp: 452102283353000 bytesused: 921600
root@uzev-hailo-2024-1:~/libcamera.xisp/build#
Validating with gstreamer
In addition to the “cam” application, we also have a libcamerasrc gstreamer plug-in at our disposal.
We can test as follows:
root@uzev-hailo-2024-1:~# gst-launch-1.0 libcamerasrc camera-name=/base/pl-bus/i2c@80040000/sensor@10 ! video/x-raw,width=640,height=480,format=BGR ! videoconvert ! queue ! fakesink
Setting pipeline to PAUSED ...
...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[125:22:19.175741757] [11263] INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-RBG888
Redistribute latency...
0:00:03.2 / 99:99:99.
^C
handling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:03.623956575
Setting pipeline to NULL ...
Freeing pipeline ...
root@uzev-hailo-2024-1:~#
Validating with opencv
We can also use the gstreamer functionnality within OpenCV. This is accomplished by providing a gstreamer pipeline such as the following to the cv2.VideoCapture function:
import cv2
...
cap = cv2.VideoCapture("libcamerasrc camera-name=/base/pl-bus/i2c@80040000/sensor@10 ! video/x-raw,width=640,height=480,format=BGR ! videoconvert ! queue ! appsink",cv2.CAP_GSTREAMER)
...
NOTE : using this strategy, the width and height must be specified in the gstreamer pipeline, not using the cv2.CAP_PROP_FRAME_WIDTH and cv2.CAP_PROP_FRAME_HEIGHT properties.
An example of this can be found in the “gstmarkerdetect” repository’s test sub-directory:
root@uzev-hailo-2024-1:~/gstmarkerdetect/test# python3 libcamera_passthrough.py --input /base/pl-bus/i2c@80040000/sensor@10 --width 1280 --height 720
[INFO] input resolution = 1280 X 720
[INFO] fps overlay = False
[INFO] dev_video = /dev/video0
[INFO] gst_pipeline = libcamerasrc camera-name=/base/pl-bus/i2c@80040000/sensor@10 ! video/x-raw,width=1280,height=720,format=BGR ! videoconvert ! queue ! appsink
...
[125:27:17.308605458] [11296] INFO Camera camera.cpp:1197 configuring streams: (0) 1280x720-RBG888
[ WARN:0@0.646] global /usr/src/debug/opencv/4.6.0-r0/modules/videoio/src/cap_gstreamer.cpp (1374) open OpenCV | GStreamer warning: unable to query duration of stream
[ WARN:0@0.646] global /usr/src/debug/opencv/4.6.0-r0/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
root@uzev-hailo-2024-1:~/gstmarkerdetect/test#
You can press the “w” key to capture an image for reference:

Known Issues with Local Build
This section describes the known issues with the current implementation:
The build script installs the python implementation to the following location:
- /usr/local/lib/python3.10/site-packages/libcamera
But the system expects it to be in the following location:
- /usr/lib/python3.10/site-packages/
The following workaround resolves this issue:
root@uzev-hailo-2024-1:~/libcamera.xisp/build# cd /usr/lib/python3.10/site-packages/
root@uzev-hailo-2024-1:/usr/lib/python3.10/site-packages# ln -sf /usr/local/lib/python3.10/site-packages/libcamera libcamera
root@uzev-hailo-2024-1:/usr/lib/python3.10/site-packages# ls -la | grep libcamera
lrwxrwxrwx 1 root root 49 Jan 24 20:56 libcamera -> /usr/local/lib/python3.10/site-packages/libcamera
root@uzev-hailo-2024-1:/usr/lib/python3.10/site-packages# cd -
/home/root/libcamera.xisp/build
root@uzev-hailo-2024-1:~/libcamera.xisp/build#
Creating a Yocto Recipe for our Work
Building on an embedded platform is OK for exploration, but we ultimately want to integrate the results of our exploration into our embedded linux project. In our case, this is Petalinux, a Yocto-based environment.
By searching for existing yocto recipes for the libcamera project, I discovered that there exists a recipe in meta-openembedded. If fact, this recipe can be found in our petalinux project in the following location:
components/yocto/layers/meta-openembedded/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.0.1.bb
This recipe, however, fails to build, and seems out of date.
I started with the following recipe, corresponding to the latest libcamera version 0.4.0:
and placed it in the following location:
project-spec/meta-user/recipes-multimedia/libcamera/libcamera_0.4.0.bb
Using the same technique as we did for the linux kernel in part 2 of this series, we will use “devtool” to create a local sandbox to modify the libcamera source, and generate patches for the “xisp” modifications. The following is a quick overview of the commands that we will use to accomplish this:

We start by creating a local sandbox for the libcamera source:
petalinux-devtool modify libcamera
petalinux-devtool modify libcamera
This will created a local sandbox in the following directory:
components/yocto/workspace/sources/libcamera
We now apply the same modifications we made earlier, and verify our modifications as follows:
petalinux-build -c libcamera
Every time a modification is made, and verified with a petalinux-build, we want to perform a git add/commit, which will create the patch file we will be reusing in our final design.
For the modifications to the formats.cpp/yaml files, this this would be done as follows:
cd components/yocto/workspace/sources/libcamera
git add src/libcamera/formats.yaml
git add src/libcamera/formats.cpp
git commit -m "src/libcamera: add RBG888 to formats.yaml/formats.cpp."
cd -
Next we apply the modifications for the xisp pipeline handler, and create two
cd components/yocto/workspace/sources/libcamera
git add meson.build
git add meson_options.txt
git commit -m "meson: add xisp pipeline handler."
git add src/libcamera/pipeline/xisp
git commit -m "src/libcamera/pipeline/xisp: add xisp pipeline handler."
cd -
Once done with the modifications, we can finish our sandbox with the following command, which will generate our patches:
petalinux-devtool finish libcamera {full path to}/project-spec/meta-user
...
INFO: Adding new patch 0001-src-libcamera-add-RBG888-to-formats.yaml-formats.cpp.patch
INFO: Adding new patch 0002-meson-add-xisp-pipeline-handler.patch
INFO: Adding new patch 0003-src-libcamera-pipeline-xisp-add-xisp-pipeline-handle.patch
INFO: Updating recipe libcamera_0.4.0.bb
...
At the end of this process, I ended up with the following three (3) patches:
0001-src-libcamera-add-RBG888-to-formats.yaml-formats.cpp.patch
0002-meson-add-xisp-pipeline-handler.patch
0003-src-libcamera-pipeline-xisp-add-xisp-pipeline-handle.patch
The final results can be found here for reference:
We can once again build the “libcamera” package:
petalinux-build -c libcamera
This will create the following rpm packages that can be found in the following location on our build system:
build/work/tmp/cortexa72_cortexa53/libcamera-0.4.0-r0.*.cortexa72_cortexa53.rpm
build/work/tmp/cortexa72_cortexa53/libcamera-gst-0.4.0-r0.*.cortexa72_cortexa53.rpm
The main “libcamera” rpm contains the libcamera.so library and “cam” utility, while the “libcamera-gst” rpm contains the gstreamer plug-in.
These rpm packages can be copied on our embedded platform and installed as follows:
dnf install libcamera-0.4.0-r0.*.cortexa72_cortexa53.rpm
dnf install libcamera-gst-0.4.0-r0.*.cortexa72_cortexa53.rpm
This will install the following files on the embedded platform:
root@uzev-hailo-2024-1:~# ls -la /usr/*/*libcamera*
lrwxrwxrwx 1 root root 23 Dec 23 20:18 /usr/lib/libcamera-base.so.0.4 -> libcamera-base.so.0.4.0
-rwxr-xr-x 1 root root 198728 Dec 23 20:18 /usr/lib/libcamera-base.so.0.4.0
lrwxrwxrwx 1 root root 18 Dec 23 20:18 /usr/lib/libcamera.so.0.4 -> libcamera.so.0.4.0
-rwxr-xr-x 1 root root 1905712 Dec 23 20:18 /usr/lib/libcamera.so.0.4.0
/usr/lib/libcamera:
total 1312
drwxr-xr-x 2 root root 4096 Jan 30 18:11 .
drwxr-xr-x 74 root root 57344 Dec 23 20:18 ..
-rwxr-xr-x 1 root root 198640 Dec 23 20:18 ipa_mali_c55.so
-rw-r--r-- 1 root root 256 Dec 23 20:18 ipa_mali_c55.so.sign
-rwxr-xr-x 1 root root 329712 Dec 23 20:18 ipa_rkisp1.so
-rw-r--r-- 1 root root 256 Dec 23 20:18 ipa_rkisp1.so.sign
-rwxr-xr-x 1 root root 591856 Dec 23 20:18 ipa_rpi_vc4.so
-rw-r--r-- 1 root root 256 Dec 23 20:18 ipa_rpi_vc4.so.sign
-rwxr-xr-x 1 root root 133112 Dec 23 20:18 ipa_soft_simple.so
-rw-r--r-- 1 root root 256 Dec 23 20:18 ipa_soft_simple.so.sign
/usr/libexec/libcamera:
total 540
drwxr-xr-x 2 root root 4096 Jan 30 18:11 .
drwxr-xr-x 15 root root 4096 Jan 30 18:11 ..
-rwxr-xr-x 1 root root 133272 Dec 23 20:18 mali-c55_ipa_proxy
-rwxr-xr-x 1 root root 133272 Dec 23 20:18 raspberrypi_ipa_proxy
-rwxr-xr-x 1 root root 67736 Dec 23 20:18 rkisp1_ipa_proxy
-rwxr-xr-x 1 root root 67728 Dec 23 20:18 soft_ipa_proxy
-rwxr-xr-x 1 root root 133104 Dec 23 20:18 v4l2-compat.so
/usr/share/libcamera:
total 16
drwxr-xr-x 4 root root 4096 Jan 30 18:11 .
drwxr-xr-x 95 root root 4096 Jan 30 18:11 ..
drwxr-xr-x 6 root root 4096 Jan 30 18:11 ipa
drwxr-xr-x 3 root root 4096 Jan 30 18:11 pipeline
root@uzev-hailo-2024-1:~# ls -la /usr/bin/cam
-rwxr-xr-x 1 root root 264328 Dec 23 20:18 /usr/bin/cam
root@uzev-hailo-2024-1:~#
root@uzev-hailo-2024-1:~# ls -la /usr/lib/gstreamer-1.0/*libcamera*
-rwxr-xr-x 1 root root 199888 Dec 23 20:18 /usr/lib/gstreamer-1.0/libgstlibcamera.so
root@uzev-hailo-2024-1:~#
We can validate the presence of the gstreamer plug-in, and run a test using the same method above.
Known Issues with Yocto Build
I have not yet succeeded in building the “pycamera” part of libcamera, which currently results in a “pybind11” error:
Run-time dependency pybind11 found: NO (tried pkgconfig)
Apart from this limitation, the libcamera “cam” utility, and gstreamer plug-in “libcamerasrc” work as expected.
Next Steps
The next steps for this project is to test with other developer’s designs,
as well as adding the following additional layers:
- libcamera-apps (also known as / renamed to : rpicam-apps)
- picamera2
My first attempt to build the libcamera-apps failed due to a meson version dependency of 0.64 (petalinux 2024.1 has meson version 0.63.3).
Does this project motivate you ?
Are you interested in collaborating with me ? If yes, let me know in the comments …
Acknowledgements
Thank you IdeasOnBoard for providing the libcamera open-source stack for complex cameras. More specifically, thank you Laurent Pinchart for the great overview presentation:
- [Laurent Pinchart] Learn How to Support Your SoC and ISP in Libcamera
References
- [libcamera] Getting Started
- [ideasonboard] libcamera repository
- [AlbertaBeef] libcamera yocto recipe (with xisp pipeline handler)
Revision History
2025/02/03 — Initial Version