[v3,0/7] Camera synchronisation
mbox series

Message ID 20250109143211.11939-1-david.plowman@raspberrypi.com
Headers show
Series
  • Camera synchronisation
Related show

Message

David Plowman Jan. 9, 2025, 2:32 p.m. UTC
Hi everyone

Here's what I think is version 3 (?) of this patch set. The main
change here is just that the Sync controls have been made Raspberry Pi
specific. Note also that the "FrameWallClock control" patch is still
here (doesn't appear to have been merged at the time of writing).

Those interested in how a timing offset could be supplied should look
at the 4th patch ("Add wallclock timestamp support"). A proposed
"SyncOffset" control value would get remembered in applyControls(),
and then in processStats() it could be used in place of the offset
value from the SyncStatus (that pops out of the sync algorithm). Hope
that's clear!

Thanks
David

David Plowman (6):
  controls: Add FrameWallClock control
  libcamera: Add ClockRecovery class to generate wallclock timestamps
  controls: Add camera synchronisation controls for Raspberry Pi
  pipeline: rpi:: Add wallclock timestamp support
  ipa: rpi: sync: Add an implementation of the camera sync algorithm
  ipa: rpi: vc4: Update all tuning files for sync algorithm

Naushir Patuck (1):
  ipa: rpi: Add base classes and plumbing for sync algorithm

 include/libcamera/internal/clock_recovery.h   |  68 ++++
 include/libcamera/internal/meson.build        |   1 +
 src/ipa/rpi/common/ipa_base.cpp               |  78 ++++-
 src/ipa/rpi/common/ipa_base.h                 |   4 +-
 src/ipa/rpi/controller/meson.build            |   1 +
 src/ipa/rpi/controller/rpi/sync.cpp           | 330 ++++++++++++++++++
 src/ipa/rpi/controller/rpi/sync.h             |  68 ++++
 src/ipa/rpi/controller/sync_algorithm.h       |  31 ++
 src/ipa/rpi/controller/sync_status.h          |  27 ++
 src/ipa/rpi/vc4/data/imx219.json              |   7 +-
 src/ipa/rpi/vc4/data/imx219_noir.json         |   7 +-
 src/ipa/rpi/vc4/data/imx283.json              |   7 +-
 src/ipa/rpi/vc4/data/imx290.json              |   7 +-
 src/ipa/rpi/vc4/data/imx296.json              |   7 +-
 src/ipa/rpi/vc4/data/imx296_mono.json         |   7 +-
 src/ipa/rpi/vc4/data/imx378.json              |   7 +-
 src/ipa/rpi/vc4/data/imx477.json              |   7 +-
 src/ipa/rpi/vc4/data/imx477_noir.json         |   7 +-
 src/ipa/rpi/vc4/data/imx477_scientific.json   |   7 +-
 src/ipa/rpi/vc4/data/imx519.json              |   7 +-
 src/ipa/rpi/vc4/data/imx708.json              |   7 +-
 src/ipa/rpi/vc4/data/imx708_noir.json         |   7 +-
 src/ipa/rpi/vc4/data/imx708_wide.json         |   7 +-
 src/ipa/rpi/vc4/data/imx708_wide_noir.json    |   7 +-
 src/ipa/rpi/vc4/data/ov5647.json              |   7 +-
 src/ipa/rpi/vc4/data/ov5647_noir.json         |   7 +-
 src/ipa/rpi/vc4/data/se327m12.json            |   7 +-
 src/libcamera/clock_recovery.cpp              | 230 ++++++++++++
 src/libcamera/control_ids_core.yaml           |  15 +
 src/libcamera/control_ids_rpi.yaml            | 113 ++++++
 src/libcamera/meson.build                     |   1 +
 .../pipeline/rpi/common/pipeline_base.cpp     |   5 +
 .../pipeline/rpi/common/pipeline_base.h       |   3 +
 src/libcamera/pipeline/rpi/vc4/vc4.cpp        |  10 +-
 34 files changed, 1086 insertions(+), 25 deletions(-)
 create mode 100644 include/libcamera/internal/clock_recovery.h
 create mode 100644 src/ipa/rpi/controller/rpi/sync.cpp
 create mode 100644 src/ipa/rpi/controller/rpi/sync.h
 create mode 100644 src/ipa/rpi/controller/sync_algorithm.h
 create mode 100644 src/ipa/rpi/controller/sync_status.h
 create mode 100644 src/libcamera/clock_recovery.cpp

Comments

Kieran Bingham Jan. 9, 2025, 4:12 p.m. UTC | #1
Quoting David Plowman (2025-01-09 14:32:04)
> Hi everyone
> 
> Here's what I think is version 3 (?) of this patch set. The main
> change here is just that the Sync controls have been made Raspberry Pi
> specific. Note also that the "FrameWallClock control" patch is still
> here (doesn't appear to have been merged at the time of writing).

Thanks I was just about to merge
https://patchwork.libcamera.org/patch/22399/ but realised there was
extraneous changes that needed to be removed. Now I've seen your update
here has the correct version that doesn't try to remove the SPDX header.

--
Kieran


> 
> Those interested in how a timing offset could be supplied should look
> at the 4th patch ("Add wallclock timestamp support"). A proposed
> "SyncOffset" control value would get remembered in applyControls(),
> and then in processStats() it could be used in place of the offset
> value from the SyncStatus (that pops out of the sync algorithm). Hope
> that's clear!
> 
> Thanks
> David
> 
> David Plowman (6):
>   controls: Add FrameWallClock control
>   libcamera: Add ClockRecovery class to generate wallclock timestamps
>   controls: Add camera synchronisation controls for Raspberry Pi
>   pipeline: rpi:: Add wallclock timestamp support
>   ipa: rpi: sync: Add an implementation of the camera sync algorithm
>   ipa: rpi: vc4: Update all tuning files for sync algorithm
> 
> Naushir Patuck (1):
>   ipa: rpi: Add base classes and plumbing for sync algorithm
> 
>  include/libcamera/internal/clock_recovery.h   |  68 ++++
>  include/libcamera/internal/meson.build        |   1 +
>  src/ipa/rpi/common/ipa_base.cpp               |  78 ++++-
>  src/ipa/rpi/common/ipa_base.h                 |   4 +-
>  src/ipa/rpi/controller/meson.build            |   1 +
>  src/ipa/rpi/controller/rpi/sync.cpp           | 330 ++++++++++++++++++
>  src/ipa/rpi/controller/rpi/sync.h             |  68 ++++
>  src/ipa/rpi/controller/sync_algorithm.h       |  31 ++
>  src/ipa/rpi/controller/sync_status.h          |  27 ++
>  src/ipa/rpi/vc4/data/imx219.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx219_noir.json         |   7 +-
>  src/ipa/rpi/vc4/data/imx283.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx290.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx296.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx296_mono.json         |   7 +-
>  src/ipa/rpi/vc4/data/imx378.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx477.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx477_noir.json         |   7 +-
>  src/ipa/rpi/vc4/data/imx477_scientific.json   |   7 +-
>  src/ipa/rpi/vc4/data/imx519.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx708.json              |   7 +-
>  src/ipa/rpi/vc4/data/imx708_noir.json         |   7 +-
>  src/ipa/rpi/vc4/data/imx708_wide.json         |   7 +-
>  src/ipa/rpi/vc4/data/imx708_wide_noir.json    |   7 +-
>  src/ipa/rpi/vc4/data/ov5647.json              |   7 +-
>  src/ipa/rpi/vc4/data/ov5647_noir.json         |   7 +-
>  src/ipa/rpi/vc4/data/se327m12.json            |   7 +-
>  src/libcamera/clock_recovery.cpp              | 230 ++++++++++++
>  src/libcamera/control_ids_core.yaml           |  15 +
>  src/libcamera/control_ids_rpi.yaml            | 113 ++++++
>  src/libcamera/meson.build                     |   1 +
>  .../pipeline/rpi/common/pipeline_base.cpp     |   5 +
>  .../pipeline/rpi/common/pipeline_base.h       |   3 +
>  src/libcamera/pipeline/rpi/vc4/vc4.cpp        |  10 +-
>  34 files changed, 1086 insertions(+), 25 deletions(-)
>  create mode 100644 include/libcamera/internal/clock_recovery.h
>  create mode 100644 src/ipa/rpi/controller/rpi/sync.cpp
>  create mode 100644 src/ipa/rpi/controller/rpi/sync.h
>  create mode 100644 src/ipa/rpi/controller/sync_algorithm.h
>  create mode 100644 src/ipa/rpi/controller/sync_status.h
>  create mode 100644 src/libcamera/clock_recovery.cpp
> 
> -- 
> 2.39.5
>