[libcamera-devel] [PATCH v3 0/9] Virtual pipeline handler
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Jan 5 22:49:39 CET 2023
Hi Harvey,
Quoting Harvey Yang via libcamera-devel (2023-01-05 04:37:17)
> Hi all,
>
> This is the third version of POC patches of the virtual/fake pipeline
> handler. Thanks to Kieran's comments, I split the patches and added a
> base class MediaDeviceBase. Still need to work on the buffer allocation,
> virtual config file, and virtual video for testing.
>
> Please take a look and let me know if the design makes sense.
>
> BR,
> Harvey
>
> Harvey Yang (9):
> libcamera: pipeline: Introduce skeleton Virtual Pipeline
> libcamera: Add MediaDeviceBase
> libcamera: Use MediaDeviceBase in base classes
> libcamera: Add MediaDeviceVirtual
> libcamera: pipeline: virtual: Add MediaDeviceVirtual
> libcamera: pipeline: virtual: Create a Camera
> libcamera: pipeline: virtual: Generate and validate
> StreamConfigurations
> libcamera: pipeline: virtual: Queue requests
> libcamera: pipeline: virtual: Set camera properties & controls
Aha, I see you took the patches from the vivid series quite literally.
Those are broken down into a distinct series to help guide the developer
creating a new pipeline handler from scratch.
I'd be interested to know how you found going through the development in
that way, but for posting of a virtual pipeline handler, I think
squashing patches 1, 5, 6, 7, 8 and 9 would be appropriate.
I'm much happier seeing this development start from a clean base, than
the IPU3 handler, so I no longer have comments regarding stripping out
of various IPU3 specific items.
I'm weary of the need to interact with MediaDeviceBase and
MediaDeviceVirtual though. Those are quite intrusive, however I
understand the desire to be able to instantiate the pipeline handler
without having a real underlying device.
What issues block this implementation without creating a new base class?
I'm aware of the issue in PipelineHandler::registerCamera() where the
base PipelineHandler expects to have a list of mediaDevices_.
Is this just for handling PipelineHandler::acquire()?
>
> .../libcamera/internal/device_enumerator.h | 12 +-
> .../internal/device_enumerator_sysfs.h | 4 +-
> .../internal/device_enumerator_udev.h | 8 +-
> include/libcamera/internal/media_device.h | 35 +-
> .../libcamera/internal/media_device_base.h | 68 ++++
> .../libcamera/internal/media_device_virtual.h | 21 ++
> include/libcamera/internal/meson.build | 2 +
> include/libcamera/internal/pipeline_handler.h | 12 +-
> meson_options.txt | 2 +-
> src/libcamera/device_enumerator.cpp | 30 +-
> src/libcamera/device_enumerator_sysfs.cpp | 4 +-
> src/libcamera/device_enumerator_udev.cpp | 4 +-
> src/libcamera/media_device.cpp | 97 +-----
> src/libcamera/media_device_base.cpp | 140 ++++++++
> src/libcamera/media_device_virtual.cpp | 22 ++
> src/libcamera/meson.build | 2 +
> src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 2 +-
> src/libcamera/pipeline/ipu3/ipu3.cpp | 4 +-
> .../pipeline/raspberrypi/raspberrypi.cpp | 4 +-
> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 2 +-
> src/libcamera/pipeline/simple/simple.cpp | 4 +-
> src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 2 +-
> src/libcamera/pipeline/vimc/vimc.cpp | 2 +-
> src/libcamera/pipeline/virtual/meson.build | 5 +
> src/libcamera/pipeline/virtual/virtual.cpp | 301 ++++++++++++++++++
> src/libcamera/pipeline_handler.cpp | 18 +-
> 26 files changed, 629 insertions(+), 178 deletions(-)
> create mode 100644 include/libcamera/internal/media_device_base.h
> create mode 100644 include/libcamera/internal/media_device_virtual.h
> create mode 100644 src/libcamera/media_device_base.cpp
> create mode 100644 src/libcamera/media_device_virtual.cpp
> create mode 100644 src/libcamera/pipeline/virtual/meson.build
> create mode 100644 src/libcamera/pipeline/virtual/virtual.cpp
>
> --
> 2.39.0.314.g84b9a713c41-goog
>
More information about the libcamera-devel
mailing list