[libcamera-devel] [PATCH 0/9] libcamera: Add helper for controls that take effect with a delay

Niklas Söderlund niklas.soderlund at ragnatech.se
Wed Oct 28 02:00:42 CET 2020


Hello,

This series adds a new helper class to libcamera-core based on the 
StaggerdCtrl principle from the Raspberry Pi pipeline handler. The new 
helper matches perfectly the RPi implementation and can therefore 
replace the pipeline specific implementation. There are slight changes 
in the API of the two but noting preventing it to be a drop in 
replacement.

The major new addition to the DelayedControls implementation is the 
ability to queue controls a hard of time. This allows the concept of 
pipeline depth we already have for buffers to be extended to controls.

Patch 1/9 and 2/9 adds the new core helper and its unit test. Patch 3/9 
and 4/9 replaces StaggerdCtrl with DelayedControls in the Raspberry Pi 
pipeline handler. Patch 5/9 adds an interface based on DelayedControls 
to CameraSensor. And last 6/9 - 9/9 make use of the new helper in the 
RkISP1 pipeline to completely remove another local helper (Timeline).

The RkISP1 IPA feels much snappier after this change but this is 
anecdotal and no real measurements have been done as the RkISP1 IPA at 
this stage is neither advanced nor tuned.

Niklas Söderlund (9):
  libcamera: v4l2_device: Move start of frame detection to V4L2Device
  libcamera: delayed_controls: Add helper for controls that applies with
    a delay
  test: delayed_controls: Add test case for DelayedControls
  libcamera: raspberrypi: Switch to DelayedControls
  libcamera: raspberrypi: Remove StaggeredCtrl
  libcamera: camera_sensor: Expose a DelayedControls interface
  libcamera: pipeline: rkisp1: Use CameraSensor and delayed controls
  libcamera: pipeline: rkisp1: Use SOF event to warn about late
    parameters
  libcamera: pipeline: rkisp1: Remove Timeline

 include/libcamera/internal/camera_sensor.h    |   5 +
 include/libcamera/internal/delayed_controls.h |  87 +++++
 include/libcamera/internal/v4l2_device.h      |  13 +-
 include/libcamera/internal/v4l2_videodevice.h |   8 -
 src/libcamera/camera_sensor.cpp               |  31 ++
 src/libcamera/delayed_controls.cpp            | 282 ++++++++++++++++
 src/libcamera/meson.build                     |   1 +
 .../pipeline/raspberrypi/meson.build          |   1 -
 .../pipeline/raspberrypi/raspberrypi.cpp      |  44 ++-
 .../pipeline/raspberrypi/staggered_ctrl.cpp   | 174 ----------
 .../pipeline/raspberrypi/staggered_ctrl.h     |  96 ------
 src/libcamera/pipeline/rkisp1/meson.build     |   1 -
 src/libcamera/pipeline/rkisp1/rkisp1.cpp      | 158 +++------
 src/libcamera/pipeline/rkisp1/timeline.cpp    | 227 -------------
 src/libcamera/pipeline/rkisp1/timeline.h      |  72 ----
 src/libcamera/v4l2_device.cpp                 |  76 ++++-
 src/libcamera/v4l2_videodevice.cpp            |  75 +----
 test/delayed_contols.cpp                      | 307 ++++++++++++++++++
 test/meson.build                              |   1 +
 19 files changed, 858 insertions(+), 801 deletions(-)
 create mode 100644 include/libcamera/internal/delayed_controls.h
 create mode 100644 src/libcamera/delayed_controls.cpp
 delete mode 100644 src/libcamera/pipeline/raspberrypi/staggered_ctrl.cpp
 delete mode 100644 src/libcamera/pipeline/raspberrypi/staggered_ctrl.h
 delete mode 100644 src/libcamera/pipeline/rkisp1/timeline.cpp
 delete mode 100644 src/libcamera/pipeline/rkisp1/timeline.h
 create mode 100644 test/delayed_contols.cpp

-- 
2.29.1



More information about the libcamera-devel mailing list