[libcamera-devel,v4,00/11] Simple pipeline handler
mbox series

Message ID 20200404004438.17992-1-laurent.pinchart@ideasonboard.com
Headers show
Series
  • Simple pipeline handler
Related show

Message

Laurent Pinchart April 4, 2020, 12:44 a.m. UTC
Hello,

This patch series builds on Martijn's work to implement a pipeline
handler for simpler pipelines. Additional information about the pipeline
handler itself can be found in patch 09/11.

Compared to v3, this version only incorporates the review comments and
has been rebased on top of master, without major changes.

Patch 01/11 adds a V4L2 API extension required for pipeline
auto-configuration, and patches 02/11 to 08/11 add a new utility
function and miscellaneous small extensions.

Patch 09/11 adds the new simple pipeline handler, patch 10/11 the
simpler converter, and patch 11/11 integrates converter support into the
simple pipeline handler. The converter API hasn't changed and should
still be improved, it's currently a proof of concept. Other options also
exist, such as making the simple pipeline handler a base class from
which more specialized pipeline handlers could derive from, and
implement support for converters in device-specific code.

The code has been tested on an i.MX7 platform with a greyscale sensor
and the i.MX PXP as format converter to produce RGB. I've kept sun6i-csi
from Martijn's work in the list of supported drivers, but supporting
that platform will require extending the corresponding driver to support
the VIDIOC_ENUM_FMT extension. Once done, if all goes well, the platform
should work out of the box.

As before, this is meant to be compatible with the stm32 and qcom-camss
that pipeline handlers have previously been submitted for, although for
qcom-camss the pipeline configuration is a bit more complex, and the
best strategy to move forward remains to be decided. The respective
drivers need be added to the drivers array in
SimplePipelineHandler::match(), and, as for sun6i-csi, support for the
VIDIOC_ENUM_FMT extension needs to be implemented in the drivers, which
should be fairly easy.

Laurent Pinchart (10):
  [DNI] include: linux: Extend VIDIOC_ENUM_FMT to support MC-centric
    devices
  libcamera: utils: Add string join function
  libcamera: v4l2_subdevice: Extend [gs]etFormat() to specify format
    type
  libcamera: v4l2_subdevice: Don't use doxygen \ref needlessly
  libcamera: v4l2_videodevice: Support filtering formats by media bus
    code
  libcamera: v4l2_videodevice: Expose the device capabilities
  libcamera: v4l2_videodevice: Downgrade 4CC conversion errors to
    warnings
  libcamera: v4l2_videodevice: Map V4L2_PIX_FMT_GREY to DRM FourCC
  libcamera: pipeline: simple: Add simple format converter
  libcamera: pipeline: simple: Integrate converter support

Martijn Braam (1):
  libcamera: pipeline: Add a simple pipeline handler

 include/linux/videodev2.h                   |   5 +-
 meson_options.txt                           |   2 +-
 src/libcamera/include/utils.h               |  44 +
 src/libcamera/include/v4l2_subdevice.h      |  11 +-
 src/libcamera/include/v4l2_videodevice.h    |   6 +-
 src/libcamera/pipeline/simple/converter.cpp | 213 +++++
 src/libcamera/pipeline/simple/converter.h   |  60 ++
 src/libcamera/pipeline/simple/meson.build   |   4 +
 src/libcamera/pipeline/simple/simple.cpp    | 877 ++++++++++++++++++++
 src/libcamera/utils.cpp                     |  16 +
 src/libcamera/v4l2_subdevice.cpp            |  28 +-
 src/libcamera/v4l2_videodevice.cpp          |  36 +-
 test/utils.cpp                              |  20 +-
 13 files changed, 1303 insertions(+), 19 deletions(-)
 create mode 100644 src/libcamera/pipeline/simple/converter.cpp
 create mode 100644 src/libcamera/pipeline/simple/converter.h
 create mode 100644 src/libcamera/pipeline/simple/meson.build
 create mode 100644 src/libcamera/pipeline/simple/simple.cpp