Tomi Valkeinen
3c82ae3821
py: Re-implement controls geneneration
...
The Python bindings controls generation was not very good. It only
covered the enums and they were in the main namespace.
This adds the controls somewhat similarly to the C++ side. We will have
e.g.:
libcamera.controls.Brightness
libcamera.controls.AeMeteringModeEnum.CentreWeighted
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:03:34 +03:00
Tomi Valkeinen
6eb1143e27
py: cam: Convert ctx and state to classes
...
Convert ctx and state dicts to classes. No functional changes.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:03:30 +03:00
Tomi Valkeinen
bb1cbd53d2
py: cam: Drop WA_ShowWithoutActivating
...
Drop WA_ShowWithoutActivating from the Qt renderers. I added the flag
during development phase as I didn't want the window to take the focus,
but it should be removed now.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:47 +03:00
Tomi Valkeinen
19d870d6d8
py: MappedFrameBuffer: Add type hints & docs
...
Add a few type hints and (minimal) docs to MappedFrameBuffer.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:44 +03:00
Tomi Valkeinen
9e4388cca5
py: Move MappedFrameBuffer to libcamera.utils
...
Move MappedFrameBuffer to libcamera.utils, instead of extending
FrameBuffer class with a new mmap() method. This keeps us more aligned
to the C++ API.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:41 +03:00
Tomi Valkeinen
210ce547a4
py: Add CameraManager.read_event()
...
Add CameraManager.read_event() so that the user does not need to call
os.read().
We use eventfd, and we must always read 8 bytes. Hiding that inside
read_event() makes sense.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:31 +03:00
Tomi Valkeinen
ccfcf5f235
py: Fix None value in ControlType enum
...
"None" is not a valid name for an enum value, so change it to "Null".
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:29 +03:00
Tomi Valkeinen
0381b09f89
py: Fix SceneFlicker enum values
...
Stripping 'SceneFlicker' prefix from the enum value names leads to
'50Hz' and '60Hz', which are not valid names. So add another heuristics
to keep the prefix for SceneFlicker.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:27 +03:00
Tomi Valkeinen
ed0d3a9d71
py: cam: Cleanups
...
No functional changes. Drop unused variables, reduce typechecker
warnings.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:25 +03:00
Tomi Valkeinen
56f9de149f
py: cam_qt: Use libcamera.formats
...
Use the new libcamera.formats in cam_qt.py.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:22 +03:00
Tomi Valkeinen
9ecf311375
py: Generate pixel formats list
...
Generate a list of pixel formats under 'libcamera.formats'.
The 'formats' is a "dummy" container class, the only purpose of which is
to contain the read-only pixel format properties.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-27 22:02:16 +03:00
Tomi Valkeinen
dc03440cb5
py: Clean up control enums generation
...
Try to be more consistent with the names, and include "control" in all
the names.
Also drop a useless "using namespace libcamera" and only include
"control_ids.h".
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:32 +03:00
Tomi Valkeinen
b2ada6f3ec
py: Rename pyxyz to py_xyz
...
Having the underscore makes the names more readable, especially when
there are multiple words in the name.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:31 +03:00
Tomi Valkeinen
2bb6c9fbd2
py: Use geometry classes
...
Now that we have proper geometry classes in the Python bindings, change
the existing bindings and the .py files accordingly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:31 +03:00
Tomi Valkeinen
e0a8517b27
py: Add geometry classes
...
Add libcamera's geometry classes to the Python bindings.
Note that this commit only adds the classes, but they are not used
anywhere yet.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:31 +03:00
Tomi Valkeinen
fa7bda46f8
py: Implement PixelFormat class
...
Implement PixelFormat bindings properly with a PixelFormat class. Change
the bindings to use the new class instead of a string.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:30 +03:00
Tomi Valkeinen
11a271b292
py: cam_qt: Cosmetic cleanups
...
Drop irrelevant or wrong comments, merge separate_components() into
demosaic(), and add mfb_to_rgb().
No functional changes.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:29 +03:00
Tomi Valkeinen
b7c78879cc
py: cam_kms: Fix multistream display
...
Instead of doing an atomic commit for each stream, do a single commit
for the two planes. This fixes the issue that only the first plane was
actually shown.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:29 +03:00
Tomi Valkeinen
a4964c5df1
py: cam_kms: Support multiplanar formats
...
Support multiplanar formats in the kms renderer. Tested with RPi and
NV12.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:29 +03:00
Tomi Valkeinen
1384cedf50
py: cam.py: Exit on exception
...
Catch exceptions in the event_handler, as they would get ignored
otherwise. Print the exception and return False so that the main loop
exits.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:29 +03:00
Tomi Valkeinen
e40fbdf855
py: pymain: Fix indent
...
Fix two minor mis-indents.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:28 +03:00
Tomi Valkeinen
4de9539f51
py: Add comment about the symlinks
...
Add comment about the symlinks to clarify the purpose.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:28 +03:00
Tomi Valkeinen
1d72eca347
py: meson: Fix comment about stubs
...
At least pyright seems to be able to use the stubs from the
libcamera-stubs directory, so no need to copy the generated files.
Adjust the comment accordingly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:27 +03:00
Tomi Valkeinen
ed3a440177
py: meson: Use files() for custom_target input files
...
Use files() for the input files for the custom_target(). I believe the
current code works, but perhaps it is safer to use files() here.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
2022-05-18 17:52:27 +03:00
Laurent Pinchart
9f00e78bf5
py: Fix link generation to __init__.py
...
The command to create a symlink to the __init__.py file in the source
directory uses a relative path from the build directory, which hardcodes
the assumption that the build directory is a direct child of the source
directory. This isn't always true. Fix it by using the files() function.
Fixes: 8aa02271fd ("Add Python bindings")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
2022-05-17 20:30:30 +03:00
Kieran Bingham
226563607e
py: Fix gen-py-control-enums.py reference
...
Scripts should be referenced using the meson files() directive to ensure
the location is correctly identified with the relevant paths. This
prevents compilation failures if the working directory does not match
the source tree.
Fixes: 6e92cb9dc4 ("py: Generate control enums from yaml")
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com >
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
2022-05-10 21:15:22 +02:00
Tomi Valkeinen
74ba01121a
py: Add cam.py
...
Add cam.py, which mimics the 'cam' tool. Four rendering backends are
added:
* null - Do nothing
* kms - Use KMS with dmabufs
* qt - SW render on a Qt window
* qtgl - OpenGL render on a Qt window
All the renderers handle only a few pixel formats, and especially the GL
renderer is just a prototype.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
2022-05-10 13:53:43 +02:00
Tomi Valkeinen
6e92cb9dc4
py: Generate control enums from yaml
...
Generate enums for controls from control_ids.yaml. The generator script
has some heuristics to generate nicer enum names. E.g. instead of having
"LensShadingMapMode.LensShadingMapModeOff" we get
"LensShadingMapMode.Off". This heuristics may need to be updated when
the yaml file is changed or new controls are added.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
2022-05-10 13:53:43 +02:00
Tomi Valkeinen
8aa02271fd
Add Python bindings
...
Add libcamera Python bindings. pybind11 is used to generate the C++ <->
Python layer.
We use pybind11 'smart_holder' version to avoid issues with private
destructors and shared_ptr. There is also an alternative solution here:
https://github.com/pybind/pybind11/pull/2067
Only a subset of libcamera classes are exposed. Implementing and testing
the wrapper classes is challenging, and as such only classes that I have
needed have been added so far.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com >
2022-05-10 13:53:43 +02:00