[libcamera-devel] [PATCH v3 00/14] libcamera: Replace CameraData with Camera::Private
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Aug 12 01:26:11 CEST 2021
Hello,
This patch series reworks the libcamera core and pipeline handlers to
drop the CameraData class, replacing it with Camera::Private.
The Camera::Private class implements the d-pointer design pattern for
the Camera class, and stores internal camera data that shouldn't be
visible through the public API. The CameraData class is a container used
by pipeline handlers to store per-camera private data. The two classes
thus overlap in their purpose.
This series cleans up this situation by merging CameraData into
Camera::Private. Pipeline handlers then subclass Camera::Private instead
of CameraData, and pass the private data directly to the Camera
constructor.
The first 7 patches from the first RFC version, preparing for this
change, have been merged. Compared to v2, this version starts in 01/14
with a new patch that replaces with the Extensible::Private pointer
passed to the Extensible constructor with a std::unique_ptr<>, better
reflecting the lifetime management of the private data. Patch 04/14 is
also new and addresses minor documentation issues.
In 02/14, the pointer to the private data is now passed explicitly to
the Camera constructor, to allow subclassing Camera::Private in pipeline
handlers. After that, changes are fairly straightforward. Patch 03/14
moves the members of the existing CameraData class to Camera::Private.
Patches 05/14 to 10/14 update pipeline handlers individually to migrate
to Camera::Private. Patch 11/14 then cleans up by dropping the
CameraData class, and patch 12/14 updates the pipeline handler guide
accordingly.
Finally, patches 13/14 and 14/14 are follow-up improvements, both
suggested by Jacopo. 13/14 drops the indirection in the implementation
of Camera::controls() and Camera::properties(). It looks quite neat in
my opinion, and worth the effort. 14/14 introduces helper functions in
two pipeline handlers that need cast the PipelineHandler base class to
the derived class. It seems to bring a slight simplification, but I
don't have a strong preference there.
I've tested the ipu3, raspberrypi, simple, uvcvideo and vimc pipeline
handlers. If someone could test rkisp1, that would be appreciated.
Laurent Pinchart (14):
libcamera: base: extensible: Pass private pointer as unique_ptr<>
libcamera: camera: Pass Private pointer to Camera constructor
libcamera: pipeline_handler: Move CameraData members to
Camera::Private
libcamera: camera: Fix minor issues in Camera::Private documentation
libcamera: pipeline: simple: Migrate to Camera::Private
libcamera: pipeline: uvcvideo: Migrate to Camera::Private
libcamera: pipeline: vimc: Migrate to Camera::Private
libcamera: pipeline: rkisp1: Migrate to Camera::Private
libcamera: pipeline: raspberrypi: Migrate to Camera::Private
libcamera: pipeline: ipu3: Migrate to Camera::Private
libcamera: pipeline_handler: Drop CameraData class
Documentation: guides: pipeline-handler: Migrate to Camera::Private
libcamera: pipeline_handler: Drop controls() and properties()
functions
libcamera: pipeline: Cast to derived pipeline handler with helpers
Documentation/Doxyfile.in | 1 -
Documentation/guides/pipeline-handler.rst | 67 ++++-----
include/libcamera/base/class.h | 2 +-
include/libcamera/camera.h | 4 +-
include/libcamera/internal/camera.h | 12 +-
include/libcamera/internal/pipeline_handler.h | 33 +----
src/android/camera_buffer.h | 2 +-
src/android/camera_hal_config.cpp | 2 +-
src/libcamera/base/class.cpp | 11 +-
src/libcamera/camera.cpp | 89 +++++++++--
src/libcamera/camera_manager.cpp | 2 +-
src/libcamera/framebuffer.cpp | 3 +-
src/libcamera/pipeline/ipu3/ipu3.cpp | 38 ++---
.../pipeline/raspberrypi/raspberrypi.cpp | 24 +--
src/libcamera/pipeline/rkisp1/rkisp1.cpp | 34 +++--
src/libcamera/pipeline/simple/simple.cpp | 31 ++--
src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 19 +--
src/libcamera/pipeline/vimc/vimc.cpp | 19 +--
src/libcamera/pipeline_handler.cpp | 138 +-----------------
19 files changed, 235 insertions(+), 296 deletions(-)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list