summaryrefslogtreecommitdiff
path: root/README.rst
diff options
context:
space:
mode:
Diffstat (limited to 'README.rst')
-rw-r--r--README.rst181
1 files changed, 155 insertions, 26 deletions
diff --git a/README.rst b/README.rst
index e60d7aec..4068c6cc 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,4 @@
-.. section-begin-libcamera
+.. SPDX-License-Identifier: CC-BY-SA-4.0
===========
libcamera
@@ -20,7 +20,6 @@ open-source-friendly while still protecting vendor core IP. libcamera was born
out of that collaboration and will offer modern camera support to Linux-based
systems, including traditional Linux distributions, ChromeOS and Android.
-.. section-end-libcamera
.. section-begin-getting-started
Getting Started
@@ -28,11 +27,11 @@ Getting Started
To fetch the sources, build and install:
-::
+.. code::
- git clone git://linuxtv.org/libcamera.git
+ git clone https://git.libcamera.org/libcamera/libcamera.git
cd libcamera
- meson build
+ meson setup build
ninja -C build install
Dependencies
@@ -42,45 +41,175 @@ The following Debian/Ubuntu packages are required for building libcamera.
Other distributions may have differing package names:
A C++ toolchain: [required]
- Either {g++, clang}
+ Either {g++, clang}
-for libcamera: [required]
- meson (>= 0.47) ninja-build python3-yaml
+Meson Build system: [required]
+ meson (>= 0.60) ninja-build pkg-config
- If your distribution doesn't provide a recent enough version of meson,
- you can install or upgrade it using pip3.
+for the libcamera core: [required]
+ libyaml-dev python3-yaml python3-ply python3-jinja2
- .. code::
+for IPA module signing: [recommended]
+ Either libgnutls28-dev or libssl-dev, openssl
- pip3 install --user meson
- pip3 install --user --upgrade meson
+ Without IPA module signing, all IPA modules will be isolated in a
+ separate process. This adds an unnecessary extra overhead at runtime.
-for device hotplug enumeration: [optional]
- pkg-config libudev-dev
+for improved debugging: [optional]
+ libdw-dev libunwind-dev
-for qcam: [optional]
- qtbase5-dev libqt5core5a libqt5gui5 libqt5widgets5
+ libdw and libunwind provide backtraces to help debugging assertion
+ failures. Their functions overlap, libdw provides the most detailed
+ information, and libunwind is not needed if both libdw and the glibc
+ backtrace() function are available.
+
+for device hotplug enumeration: [optional]
+ libudev-dev
for documentation: [optional]
- python3-sphinx doxygen
+ python3-sphinx doxygen graphviz texlive-latex-extra
for gstreamer: [optional]
- libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
+ libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
+
+for Python bindings: [optional]
+ libpython3-dev pybind11-dev
+
+for cam: [optional]
+ libevent-dev is required to support cam, however the following
+ optional dependencies bring more functionality to the cam test
+ tool:
+
+ - libdrm-dev: Enables the KMS sink
+ - libjpeg-dev: Enables MJPEG on the SDL sink
+ - libsdl2-dev: Enables the SDL sink
+
+for qcam: [optional]
+ libtiff-dev qt6-base-dev qt6-tools-dev-tools
+
+for tracing with lttng: [optional]
+ liblttng-ust-dev python3-jinja2 lttng-tools
+
+for android: [optional]
+ libexif-dev libjpeg-dev
+
+for Python bindings: [optional]
+ pybind11-dev
+
+for lc-compliance: [optional]
+ libevent-dev libgtest-dev
+
+for abi-compat.sh: [optional]
+ abi-compliance-checker
+
+Basic testing with cam utility
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``cam`` utility can be used for basic testing. You can list the cameras
+detected on the system with ``cam -l``, and capture ten frames from the first
+camera and save them to disk with ``cam -c 1 --capture=10 --file``. See
+``cam -h`` for more information about the ``cam`` tool.
+
+In case of problems, a detailed debug log can be obtained from libcamera by
+setting the ``LIBCAMERA_LOG_LEVELS`` environment variable:
+
+.. code::
+
+ :~$ LIBCAMERA_LOG_LEVELS=*:DEBUG cam -l
Using GStreamer plugin
~~~~~~~~~~~~~~~~~~~~~~
-To use GStreamer plugin from source tree, set the following environment so that
-GStreamer can find it.
+To use the GStreamer plugin from the source tree, use the meson ``devenv``
+command. This will create a new shell instance with the ``GST_PLUGIN_PATH``
+environment set accordingly.
+
+.. code::
+
+ meson devenv -C build
+
+The debugging tool ``gst-launch-1.0`` can be used to construct a pipeline and
+test it. The following pipeline will stream from the camera named "Camera 1"
+onto the OpenGL accelerated display element on your system.
+
+.. code::
+
+ gst-launch-1.0 libcamerasrc camera-name="Camera 1" ! queue ! glimagesink
+
+To show the first camera found you can omit the camera-name property, or you
+can list the cameras and their capabilities using:
+
+.. code::
+
+ gst-device-monitor-1.0 Video
+
+This will also show the supported stream sizes which can be manually selected
+if desired with a pipeline such as:
+
+.. code::
+
+ gst-launch-1.0 libcamerasrc ! 'video/x-raw,width=1280,height=720' ! \
+ queue ! glimagesink
+
+The libcamerasrc element has two log categories, named libcamera-provider (for
+the video device provider) and libcamerasrc (for the operation of the camera).
+All corresponding debug messages can be enabled by setting the ``GST_DEBUG``
+environment variable to ``libcamera*:7``.
+
+Presently, to prevent element negotiation failures it is required to specify
+the colorimetry and framerate as part of your pipeline construction. For
+instance, to capture and encode as a JPEG stream and receive on another device
+the following example could be used as a starting point:
+
+.. code::
- export GST_PLUGIN_PATH=$(pwd)/build/src/gstreamer
+ gst-launch-1.0 libcamerasrc ! \
+ video/x-raw,colorimetry=bt709,format=NV12,width=1280,height=720,framerate=30/1 ! \
+ queue ! jpegenc ! multipartmux ! \
+ tcpserversink host=0.0.0.0 port=5000
-The debugging tool `gst-launch-1.0` can be used to construct and pipeline and test
-it. The following pipeline will stream from the camera named "Camera 1" onto the
-default video display element on your system.
+Which can be received on another device over the network with:
.. code::
- gst-launch-1.0 libcamerasrc camera-name="Camera 1" ! videoconvert ! autovideosink
+ gst-launch-1.0 tcpclientsrc host=$DEVICE_IP port=5000 ! \
+ multipartdemux ! jpegdec ! autovideosink
+
+The GStreamer element also supports multiple streams. This is achieved by
+requesting additional source pads. Downstream caps filters can be used
+to choose specific parameters like resolution and pixel format. The pad
+property ``stream-role`` can be used to select a role.
+
+The following example displays a 640x480 view finder while streaming JPEG
+encoded 800x600 video. You can use the receiver pipeline above to view the
+remote stream from another device.
+
+.. code::
+
+ gst-launch-1.0 libcamerasrc name=cs src::stream-role=view-finder src_0::stream-role=video-recording \
+ cs.src ! queue ! video/x-raw,width=640,height=480 ! videoconvert ! autovideosink \
+ cs.src_0 ! queue ! video/x-raw,width=800,height=600 ! videoconvert ! \
+ jpegenc ! multipartmux ! tcpserversink host=0.0.0.0 port=5000
.. section-end-getting-started
+
+Troubleshooting
+~~~~~~~~~~~~~~~
+
+Several users have reported issues with meson installation, crux of the issue
+is a potential version mismatch between the version that root uses, and the
+version that the normal user uses. On calling `ninja -C build`, it can't find
+the build.ninja module. This is a snippet of the error message.
+
+::
+
+ ninja: Entering directory `build'
+ ninja: error: loading 'build.ninja': No such file or directory
+
+This can be solved in two ways:
+
+1. Don't install meson again if it is already installed system-wide.
+
+2. If a version of meson which is different from the system-wide version is
+ already installed, uninstall that meson using pip3, and install again without
+ the --user argument.