[0/4] MediaPipeline: Complex input device support
mbox series

Message ID 20240916140241.47845-1-kieran.bingham@ideasonboard.com
Headers show
Series
  • MediaPipeline: Complex input device support
Related show

Message

Kieran Bingham Sept. 16, 2024, 2:02 p.m. UTC
The input pipelines for cameras on small board platforms can be widely
varied and may incorporate video multiplexors feeding multiple cameras
into a single CSI2 receiver.

Such devices are already supported in the Simple Pipeline handler with
it's graph management code.

This series proposes a new class 'MediaPipeline' which takes the
implementation details of handling multiple cameras and the routing
involved in selecting and configuring the links and pads of those
routes.

The series then adds this helper to the RKISP1 pipeline handler to
facilitate multiple cameras connected to a single CSI2 receiver. One
example of this could be making use of the Arducam 4 camera multiplexor
[0] connected to the Debix Model A which we have used for testing this.

[0] https://www.arducam.com/product/multi-camera-v2-1-adapter-raspberry-pi/

This series converts only the RkISP1 for now, but I could anticipate
either an additional series, or a later iteration of this series would
also convert the Simple Pipeline Handler to make use of this new helper
class.


Kieran Bingham (4):
  libcamera: media_device: Add helper to return matching entities
  libcamera: pipeline: rkisp1: Fix typo in todo task
  libcamera: internal: Add MediaPipeline helper
  libcamera: pipeline: rkisp1: Convert to use MediaPipeline

 include/libcamera/internal/media_device.h   |   2 +
 include/libcamera/internal/media_pipeline.h |  60 ++++
 include/libcamera/internal/meson.build      |   1 +
 src/libcamera/media_device.cpp              |  24 +-
 src/libcamera/media_pipeline.cpp            | 301 ++++++++++++++++++++
 src/libcamera/meson.build                   |   1 +
 src/libcamera/pipeline/rkisp1/rkisp1.cpp    |  67 +++--
 7 files changed, 421 insertions(+), 35 deletions(-)
 create mode 100644 include/libcamera/internal/media_pipeline.h
 create mode 100644 src/libcamera/media_pipeline.cpp