[libcamera-devel,v2,00/10] Simple pipeline handler
mbox series

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

Message

Laurent Pinchart March 16, 2020, 9:43 p.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 08/10.

Compared to v1, this version has been rebased on top of the buffer
management simplification ([1]). It also includes support for simple
converters, V4L2 mem2mem device that perform format conversion, to
extend the number of supported pixel formats.

[1] https://lists.libcamera.org/pipermail/libcamera-devel/2020-March/007224.html

Patches 01/10 to 07/10 haven't been changed compare to v1. They add a
V4L2 API extension required for pipeline auto-configuration (01/10), as
well aw new utility functions and miscellaneous small extensions (02/10
to 07/10).

Patch 08/10 adds the new simple pipeline handler, patch 09/10 the
simpler converter, and patch 10/10 integrates converter support into the
simple pipeline handler. The converter API should probably be improved,
I've implemented it as 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. 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 (9):
  [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_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                   |   4 +-
 src/libcamera/include/utils.h               |  44 +
 src/libcamera/include/v4l2_subdevice.h      |  11 +-
 src/libcamera/include/v4l2_videodevice.h    |   6 +-
 src/libcamera/pipeline/meson.build          |   1 +
 src/libcamera/pipeline/simple/converter.cpp | 210 +++++
 src/libcamera/pipeline/simple/converter.h   |  60 ++
 src/libcamera/pipeline/simple/meson.build   |   4 +
 src/libcamera/pipeline/simple/simple.cpp    | 855 ++++++++++++++++++++
 src/libcamera/utils.cpp                     |  16 +
 src/libcamera/v4l2_subdevice.cpp            |  23 +-
 src/libcamera/v4l2_videodevice.cpp          |  36 +-
 test/utils.cpp                              |   7 +-
 13 files changed, 1261 insertions(+), 16 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

Comments

Benjamin GAIGNARD March 17, 2020, 8:15 a.m. UTC | #1
On 3/16/20 10:43 PM, Laurent Pinchart wrote:
> 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 08/10.
>
> Compared to v1, this version has been rebased on top of the buffer
> management simplification ([1]). It also includes support for simple
> converters, V4L2 mem2mem device that perform format conversion, to
> extend the number of supported pixel formats.
>
> [1] https://lists.libcamera.org/pipermail/libcamera-devel/2020-March/007224.html
>
> Patches 01/10 to 07/10 haven't been changed compare to v1. They add a
> V4L2 API extension required for pipeline auto-configuration (01/10), as
> well aw new utility functions and miscellaneous small extensions (02/10
> to 07/10).
Hi Laurent,

Could you give a link to this new V4L2 API extension ?
I will try to find time to test it with this series on stm32.

Thanks.
Benjamin

>
> Patch 08/10 adds the new simple pipeline handler, patch 09/10 the
> simpler converter, and patch 10/10 integrates converter support into the
> simple pipeline handler. The converter API should probably be improved,
> I've implemented it as 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. 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 (9):
>    [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_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                   |   4 +-
>   src/libcamera/include/utils.h               |  44 +
>   src/libcamera/include/v4l2_subdevice.h      |  11 +-
>   src/libcamera/include/v4l2_videodevice.h    |   6 +-
>   src/libcamera/pipeline/meson.build          |   1 +
>   src/libcamera/pipeline/simple/converter.cpp | 210 +++++
>   src/libcamera/pipeline/simple/converter.h   |  60 ++
>   src/libcamera/pipeline/simple/meson.build   |   4 +
>   src/libcamera/pipeline/simple/simple.cpp    | 855 ++++++++++++++++++++
>   src/libcamera/utils.cpp                     |  16 +
>   src/libcamera/v4l2_subdevice.cpp            |  23 +-
>   src/libcamera/v4l2_videodevice.cpp          |  36 +-
>   test/utils.cpp                              |   7 +-
>   13 files changed, 1261 insertions(+), 16 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
>
Laurent Pinchart March 17, 2020, 9 a.m. UTC | #2
Hi Benjamin,

On Tue, Mar 17, 2020 at 08:15:38AM +0000, Benjamin GAIGNARD wrote:
> On 3/16/20 10:43 PM, Laurent Pinchart wrote:
> > 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 08/10.
> >
> > Compared to v1, this version has been rebased on top of the buffer
> > management simplification ([1]). It also includes support for simple
> > converters, V4L2 mem2mem device that perform format conversion, to
> > extend the number of supported pixel formats.
> >
> > [1] https://lists.libcamera.org/pipermail/libcamera-devel/2020-March/007224.html
> >
> > Patches 01/10 to 07/10 haven't been changed compare to v1. They add a
> > V4L2 API extension required for pipeline auto-configuration (01/10), as
> > well aw new utility functions and miscellaneous small extensions (02/10
> > to 07/10).
>
> Hi Laurent,
> 
> Could you give a link to this new V4L2 API extension ?

https://lore.kernel.org/linux-media/20200314114410.GA5320@pendragon.ideasonboard.com/T/#m770b852445c2aa61388e8bc2f9ec4b3d7cc0ebc0

Reviews are appreciated :-)

> I will try to find time to test it with this series on stm32.

Thank you.

> > Patch 08/10 adds the new simple pipeline handler, patch 09/10 the
> > simpler converter, and patch 10/10 integrates converter support into the
> > simple pipeline handler. The converter API should probably be improved,
> > I've implemented it as 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. 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 (9):
> >    [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_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                   |   4 +-
> >   src/libcamera/include/utils.h               |  44 +
> >   src/libcamera/include/v4l2_subdevice.h      |  11 +-
> >   src/libcamera/include/v4l2_videodevice.h    |   6 +-
> >   src/libcamera/pipeline/meson.build          |   1 +
> >   src/libcamera/pipeline/simple/converter.cpp | 210 +++++
> >   src/libcamera/pipeline/simple/converter.h   |  60 ++
> >   src/libcamera/pipeline/simple/meson.build   |   4 +
> >   src/libcamera/pipeline/simple/simple.cpp    | 855 ++++++++++++++++++++
> >   src/libcamera/utils.cpp                     |  16 +
> >   src/libcamera/v4l2_subdevice.cpp            |  23 +-
> >   src/libcamera/v4l2_videodevice.cpp          |  36 +-
> >   test/utils.cpp                              |   7 +-
> >   13 files changed, 1261 insertions(+), 16 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