[RFC,0/3] camss: Add CAMSS pipeline handler
mbox series

Message ID 20260408115645.12487-1-johannes.goede@oss.qualcomm.com
Headers show
Series
  • camss: Add CAMSS pipeline handler
Related show

Message

Hans de Goede April 8, 2026, 11:56 a.m. UTC
Hi All,

Add a CAMSS pipeline handler. This initial version basically replaces
the simple pipeline handler camss support.

This has been modelled after the IPU3 pipeline handler since that also
supports an offline ISP.

This uses a CamssIsp virtual base class with the default/fallback
implementation of that class using the software ISP.

The 3th patch in the series adds a second CamssIsp implementation
for the RFC OPE M2M kernel driver posted upstream recently. This uses
the M2M Convertor class and the moment is purely a convertor without
any 3A support. The current OPE support will likely be completely
rewritten to match the next version of the OPE kernel patch which is
expected to implement a more typical V4L2 HWISP driver with parameter
buffer support.

This has been tested on A ThinkPad T14s Gen 6 with Snapdragon X1E
processor and on a Arduino UNO Q board with the media-carrier with
2 imx219 camera modules attached.

Since this will replace the simple pipeline handler support more
testing on other platforms with different camera setups, e.g. various
phones would be appreciated to avoid e.g. postmarketOS camera support
regressing when this lands.

Regards,

Hans


Hans de Goede (3):
  camss: Add CAMSS pipeline handler
  camss: Use finer grained locking / disableLinks()
  camss: Add Offline Processing Engine ISP support

 meson.build                                   |   1 +
 meson_options.txt                             |   1 +
 src/ipa/meson.build                           |   1 +
 .../converter/converter_v4l2_m2m.cpp          |   1 +
 src/libcamera/pipeline/camss/camss.cpp        | 724 ++++++++++++++++++
 src/libcamera/pipeline/camss/camss_csi.cpp    | 553 +++++++++++++
 src/libcamera/pipeline/camss/camss_csi.h      | 128 ++++
 src/libcamera/pipeline/camss/camss_frames.cpp | 106 +++
 src/libcamera/pipeline/camss/camss_frames.h   |  59 ++
 src/libcamera/pipeline/camss/camss_isp.cpp    |  26 +
 src/libcamera/pipeline/camss/camss_isp.h      |  59 ++
 .../pipeline/camss/camss_isp_ope.cpp          | 229 ++++++
 src/libcamera/pipeline/camss/camss_isp_ope.h  |  59 ++
 .../pipeline/camss/camss_isp_soft.cpp         | 203 +++++
 src/libcamera/pipeline/camss/camss_isp_soft.h |  50 ++
 src/libcamera/pipeline/camss/meson.build      |  10 +
 src/libcamera/pipeline/simple/simple.cpp      |   2 +-
 17 files changed, 2211 insertions(+), 1 deletion(-)
 create mode 100644 src/libcamera/pipeline/camss/camss.cpp
 create mode 100644 src/libcamera/pipeline/camss/camss_csi.cpp
 create mode 100644 src/libcamera/pipeline/camss/camss_csi.h
 create mode 100644 src/libcamera/pipeline/camss/camss_frames.cpp
 create mode 100644 src/libcamera/pipeline/camss/camss_frames.h
 create mode 100644 src/libcamera/pipeline/camss/camss_isp.cpp
 create mode 100644 src/libcamera/pipeline/camss/camss_isp.h
 create mode 100644 src/libcamera/pipeline/camss/camss_isp_ope.cpp
 create mode 100644 src/libcamera/pipeline/camss/camss_isp_ope.h
 create mode 100644 src/libcamera/pipeline/camss/camss_isp_soft.cpp
 create mode 100644 src/libcamera/pipeline/camss/camss_isp_soft.h
 create mode 100644 src/libcamera/pipeline/camss/meson.build