[libcamera-devel] [PATCH v3 11/30] py: Add README.md
Tomi Valkeinen
tomi.valkeinen at ideasonboard.com
Fri May 27 16:44:28 CEST 2022
Add a basic README for the Python bindings. While not a proper doc, the
README and the examples should give enough guidance for users who are
somewhat familiar with libcamera.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/py/README.md | 60 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
create mode 100644 src/py/README.md
diff --git a/src/py/README.md b/src/py/README.md
new file mode 100644
index 00000000..74a8cd9f
--- /dev/null
+++ b/src/py/README.md
@@ -0,0 +1,60 @@
+# Python Bindings for libcamera
+
+*WARNING* The bindings are under work, and the API will change.
+
+## Differences to the C++ API
+
+As a rule of thumb the bindings try to follow the C++ API when possible. This
+chapter lists the differences.
+
+Mostly these differences fall under two categories:
+
+1. Differences caused by the inherent differences between C++ and Python.
+These differences are usually caused by the use of threads or differences in
+C++ vs Python memory management.
+
+2. Differences caused by the code being work-in-progress. It's not always
+trivial to create a binding in a satisfying way, and the current bindings
+contain simplified versions of the C++ API just to get forward. These
+differences are expected to eventually go away.
+
+### Coding Style
+
+The C++ code for the bindings follows the libcamera coding style as much as
+possible. Note that the indentation does not quite follow the clang-format
+style, as clang-format makes a mess of the style used.
+
+The API visible to the Python side follows the Python style as much as possible.
+
+This means that e.g. `Camera::generateConfiguration` maps to
+`Camera.generate_configuration`.
+
+### CameraManager
+
+The Python API provides a singleton CameraManager via `CameraManager.singleton()`.
+There is no need to start or stop the CameraManager.
+
+### Handling Completed Requests
+
+The Python bindings do not expose the Camera::requestCompleted signal
+directly as the signal is invoked from another thread and it has real-time
+constraints. Instead the bindings will internally queue the completed
+requests and use an eventfd to inform the user that there are completed
+requests.
+
+The user can wait on the eventfd, and upon getting an event, use
+CameraManager.read_event() to clear the eventfd event and
+CameraManager.get_ready_requests() to get the completed requests.
+
+### Controls & Properties
+
+The classes related to controls and properties are rather complex to implement
+directly in the Python bindings. There are some simplifications on the Python
+bindings:
+
+- There is no ControlValue class. Python objects are automatically converted
+ to ControlValues and vice versa.
+- There is no ControlList class. A python dict with ControlId keys and python
+ object values is used instead.
+- There is no ControlInfoMap class. A python dict with ControlId keys and
+ ControlInfo values is used instead.
--
2.34.1
More information about the libcamera-devel
mailing list