[libcamera-devel,0/6] libcamera: Raspberry Pi camera support
mbox series

Message ID 20200504092829.10099-1-laurent.pinchart@ideasonboard.com
Headers show
Series
  • libcamera: Raspberry Pi camera support
Related show

Message

Laurent Pinchart May 4, 2020, 9:28 a.m. UTC
Hello,

This patch series adds support for the Raspberry Pi cameras to
libcamera. It consists of

- A pipeline handler (patch 3/6)
- An IPA module (patch 4/6)
- A camera tuning tool (patch 5/6)

The code has been developed by Naushir Patuck, David Plowman and Dave
Stevenson from Raspberry Pi (Trading) Ltd., with help from Jacopo Mondi,
Kieran Bingham, Niklas Söderlund and myself. All the code is covered by
a BSD-2-Clause license (added in patch 1/6).

The implementation depends on kernel drivers for the Broadcom BCM283x
(and BCM2711) CSI-2 receiver and ISP that have been posted to the
linux-media mailing list ([1]). Patch 2/6 imports the kernel API header
changes from those drivers.

Extensive documentation related to camera usage and camera tuning with
libcamera for the Raspberry Pi platforms is available in [2].

In the name of the libcamera team, I would like to thank Naush, David,
Dave and all the other people from Raspberry Pi (Trading) Ltd. who made
this possible. I would also like to extend those thanks to Jacopo,
Kieran and Niklas for the countless hours they have spent grinding and
polishing libcamera to achieve this result.

[1] https://lore.kernel.org/linux-media/20200504092611.9798-1-laurent.pinchart@ideasonboard.com/
[2] https://github.com/raspberrypi/documentation/tree/master/linux/software/libcamera/README.md

Laurent Pinchart (1):
  LICENSES: Add BSD-2-Clause license

Naushir Patuck (5):
  include: uapi: Add header definitions for BCM2835 Unicam and ISP
    blocks
  libcamera: pipeline: Raspberry Pi pipeline handler
  libcamera: ipa: Raspberry Pi IPA
  libcamera: utils: Raspberry Pi Camera Tuning Tool
  libcamera: raspberrypi: Add components to meson build

 LICENSES/BSD-2-Clause.txt                     |   22 +
 include/ipa/raspberrypi.h                     |   58 +
 include/linux/bcm2835-isp.h                   |  320 ++++
 include/linux/v4l2-controls.h                 |    4 +
 include/linux/vc_sm_cma_ioctl.h               |  135 ++
 include/linux/videodev2.h                     |    2 +
 meson_options.txt                             |    2 +-
 src/ipa/meson.build                           |    2 +-
 src/ipa/raspberrypi/README.md                 |   23 +
 src/ipa/raspberrypi/cam_helper.cpp            |  119 ++
 src/ipa/raspberrypi/cam_helper.hpp            |  102 ++
 src/ipa/raspberrypi/cam_helper_imx219.cpp     |  180 ++
 src/ipa/raspberrypi/cam_helper_imx477.cpp     |  162 ++
 src/ipa/raspberrypi/cam_helper_ov5647.cpp     |   89 +
 .../raspberrypi/controller/agc_algorithm.hpp  |   28 +
 src/ipa/raspberrypi/controller/agc_status.h   |   39 +
 src/ipa/raspberrypi/controller/algorithm.cpp  |   47 +
 src/ipa/raspberrypi/controller/algorithm.hpp  |   62 +
 src/ipa/raspberrypi/controller/alsc_status.h  |   27 +
 .../raspberrypi/controller/awb_algorithm.hpp  |   22 +
 src/ipa/raspberrypi/controller/awb_status.h   |   26 +
 .../controller/black_level_status.h           |   23 +
 src/ipa/raspberrypi/controller/camera_mode.h  |   40 +
 .../raspberrypi/controller/ccm_algorithm.hpp  |   21 +
 src/ipa/raspberrypi/controller/ccm_status.h   |   22 +
 .../controller/contrast_algorithm.hpp         |   22 +
 .../raspberrypi/controller/contrast_status.h  |   31 +
 src/ipa/raspberrypi/controller/controller.cpp |  109 ++
 src/ipa/raspberrypi/controller/controller.hpp |   54 +
 .../raspberrypi/controller/device_status.h    |   30 +
 src/ipa/raspberrypi/controller/dpc_status.h   |   21 +
 src/ipa/raspberrypi/controller/geq_status.h   |   22 +
 src/ipa/raspberrypi/controller/histogram.cpp  |   64 +
 src/ipa/raspberrypi/controller/histogram.hpp  |   44 +
 src/ipa/raspberrypi/controller/logging.hpp    |   30 +
 src/ipa/raspberrypi/controller/lux_status.h   |   29 +
 src/ipa/raspberrypi/controller/metadata.hpp   |   77 +
 src/ipa/raspberrypi/controller/noise_status.h |   22 +
 src/ipa/raspberrypi/controller/pwl.cpp        |  216 +++
 src/ipa/raspberrypi/controller/pwl.hpp        |  109 ++
 src/ipa/raspberrypi/controller/rpi/agc.cpp    |  642 +++++++
 src/ipa/raspberrypi/controller/rpi/agc.hpp    |  123 ++
 src/ipa/raspberrypi/controller/rpi/alsc.cpp   |  705 ++++++++
 src/ipa/raspberrypi/controller/rpi/alsc.hpp   |  104 ++
 src/ipa/raspberrypi/controller/rpi/awb.cpp    |  608 +++++++
 src/ipa/raspberrypi/controller/rpi/awb.hpp    |  178 ++
 .../controller/rpi/black_level.cpp            |   56 +
 .../controller/rpi/black_level.hpp            |   30 +
 src/ipa/raspberrypi/controller/rpi/ccm.cpp    |  163 ++
 src/ipa/raspberrypi/controller/rpi/ccm.hpp    |   76 +
 .../raspberrypi/controller/rpi/contrast.cpp   |  176 ++
 .../raspberrypi/controller/rpi/contrast.hpp   |   51 +
 src/ipa/raspberrypi/controller/rpi/dpc.cpp    |   49 +
 src/ipa/raspberrypi/controller/rpi/dpc.hpp    |   32 +
 src/ipa/raspberrypi/controller/rpi/geq.cpp    |   75 +
 src/ipa/raspberrypi/controller/rpi/geq.hpp    |   34 +
 src/ipa/raspberrypi/controller/rpi/lux.cpp    |  104 ++
 src/ipa/raspberrypi/controller/rpi/lux.hpp    |   42 +
 src/ipa/raspberrypi/controller/rpi/noise.cpp  |   71 +
 src/ipa/raspberrypi/controller/rpi/noise.hpp  |   32 +
 src/ipa/raspberrypi/controller/rpi/sdn.cpp    |   63 +
 src/ipa/raspberrypi/controller/rpi/sdn.hpp    |   29 +
 .../raspberrypi/controller/rpi/sharpen.cpp    |   60 +
 .../raspberrypi/controller/rpi/sharpen.hpp    |   32 +
 src/ipa/raspberrypi/controller/sdn_status.h   |   23 +
 .../raspberrypi/controller/sharpen_status.h   |   26 +
 src/ipa/raspberrypi/data/imx219.json          |  401 +++++
 src/ipa/raspberrypi/data/imx477.json          |  416 +++++
 src/ipa/raspberrypi/data/meson.build          |    9 +
 src/ipa/raspberrypi/data/ov5647.json          |  398 ++++
 src/ipa/raspberrypi/data/uncalibrated.json    |   82 +
 src/ipa/raspberrypi/md_parser.cpp             |  101 ++
 src/ipa/raspberrypi/md_parser.hpp             |  123 ++
 src/ipa/raspberrypi/md_parser_rpi.cpp         |   37 +
 src/ipa/raspberrypi/md_parser_rpi.hpp         |   32 +
 src/ipa/raspberrypi/meson.build               |   59 +
 src/ipa/raspberrypi/raspberrypi.cpp           | 1081 +++++++++++
 .../pipeline/raspberrypi/meson.build          |    3 +
 .../pipeline/raspberrypi/raspberrypi.cpp      | 1598 +++++++++++++++++
 .../pipeline/raspberrypi/staggered_ctrl.h     |  236 +++
 src/libcamera/pipeline/raspberrypi/vcsm.h     |  144 ++
 utils/raspberrypi/ctt/ctt.py                  |  823 +++++++++
 utils/raspberrypi/ctt/ctt_alsc.py             |  297 +++
 utils/raspberrypi/ctt/ctt_awb.py              |  374 ++++
 utils/raspberrypi/ctt/ctt_ccm.py              |  221 +++
 utils/raspberrypi/ctt/ctt_config_example.json |   16 +
 utils/raspberrypi/ctt/ctt_geq.py              |  179 ++
 utils/raspberrypi/ctt/ctt_image_load.py       |  428 +++++
 utils/raspberrypi/ctt/ctt_lux.py              |   58 +
 utils/raspberrypi/ctt/ctt_macbeth_locator.py  |  748 ++++++++
 utils/raspberrypi/ctt/ctt_noise.py            |  123 ++
 .../raspberrypi/ctt/ctt_pretty_print_json.py  |   70 +
 utils/raspberrypi/ctt/ctt_ransac.py           |   69 +
 utils/raspberrypi/ctt/ctt_ref.pgm             |    5 +
 utils/raspberrypi/ctt/ctt_tools.py            |  141 ++
 95 files changed, 14311 insertions(+), 2 deletions(-)
 create mode 100644 LICENSES/BSD-2-Clause.txt
 create mode 100644 include/ipa/raspberrypi.h
 create mode 100644 include/linux/bcm2835-isp.h
 create mode 100644 include/linux/vc_sm_cma_ioctl.h
 create mode 100644 src/ipa/raspberrypi/README.md
 create mode 100644 src/ipa/raspberrypi/cam_helper.cpp
 create mode 100644 src/ipa/raspberrypi/cam_helper.hpp
 create mode 100644 src/ipa/raspberrypi/cam_helper_imx219.cpp
 create mode 100644 src/ipa/raspberrypi/cam_helper_imx477.cpp
 create mode 100644 src/ipa/raspberrypi/cam_helper_ov5647.cpp
 create mode 100644 src/ipa/raspberrypi/controller/agc_algorithm.hpp
 create mode 100644 src/ipa/raspberrypi/controller/agc_status.h
 create mode 100644 src/ipa/raspberrypi/controller/algorithm.cpp
 create mode 100644 src/ipa/raspberrypi/controller/algorithm.hpp
 create mode 100644 src/ipa/raspberrypi/controller/alsc_status.h
 create mode 100644 src/ipa/raspberrypi/controller/awb_algorithm.hpp
 create mode 100644 src/ipa/raspberrypi/controller/awb_status.h
 create mode 100644 src/ipa/raspberrypi/controller/black_level_status.h
 create mode 100644 src/ipa/raspberrypi/controller/camera_mode.h
 create mode 100644 src/ipa/raspberrypi/controller/ccm_algorithm.hpp
 create mode 100644 src/ipa/raspberrypi/controller/ccm_status.h
 create mode 100644 src/ipa/raspberrypi/controller/contrast_algorithm.hpp
 create mode 100644 src/ipa/raspberrypi/controller/contrast_status.h
 create mode 100644 src/ipa/raspberrypi/controller/controller.cpp
 create mode 100644 src/ipa/raspberrypi/controller/controller.hpp
 create mode 100644 src/ipa/raspberrypi/controller/device_status.h
 create mode 100644 src/ipa/raspberrypi/controller/dpc_status.h
 create mode 100644 src/ipa/raspberrypi/controller/geq_status.h
 create mode 100644 src/ipa/raspberrypi/controller/histogram.cpp
 create mode 100644 src/ipa/raspberrypi/controller/histogram.hpp
 create mode 100644 src/ipa/raspberrypi/controller/logging.hpp
 create mode 100644 src/ipa/raspberrypi/controller/lux_status.h
 create mode 100644 src/ipa/raspberrypi/controller/metadata.hpp
 create mode 100644 src/ipa/raspberrypi/controller/noise_status.h
 create mode 100644 src/ipa/raspberrypi/controller/pwl.cpp
 create mode 100644 src/ipa/raspberrypi/controller/pwl.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/agc.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/agc.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/alsc.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/alsc.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/awb.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/awb.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/black_level.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/black_level.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/ccm.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/ccm.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/contrast.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/contrast.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/dpc.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/dpc.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/geq.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/geq.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/lux.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/lux.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/noise.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/noise.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/sdn.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/sdn.hpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/sharpen.cpp
 create mode 100644 src/ipa/raspberrypi/controller/rpi/sharpen.hpp
 create mode 100644 src/ipa/raspberrypi/controller/sdn_status.h
 create mode 100644 src/ipa/raspberrypi/controller/sharpen_status.h
 create mode 100644 src/ipa/raspberrypi/data/imx219.json
 create mode 100644 src/ipa/raspberrypi/data/imx477.json
 create mode 100644 src/ipa/raspberrypi/data/meson.build
 create mode 100644 src/ipa/raspberrypi/data/ov5647.json
 create mode 100644 src/ipa/raspberrypi/data/uncalibrated.json
 create mode 100644 src/ipa/raspberrypi/md_parser.cpp
 create mode 100644 src/ipa/raspberrypi/md_parser.hpp
 create mode 100644 src/ipa/raspberrypi/md_parser_rpi.cpp
 create mode 100644 src/ipa/raspberrypi/md_parser_rpi.hpp
 create mode 100644 src/ipa/raspberrypi/meson.build
 create mode 100644 src/ipa/raspberrypi/raspberrypi.cpp
 create mode 100644 src/libcamera/pipeline/raspberrypi/meson.build
 create mode 100644 src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
 create mode 100644 src/libcamera/pipeline/raspberrypi/staggered_ctrl.h
 create mode 100644 src/libcamera/pipeline/raspberrypi/vcsm.h
 create mode 100755 utils/raspberrypi/ctt/ctt.py
 create mode 100644 utils/raspberrypi/ctt/ctt_alsc.py
 create mode 100644 utils/raspberrypi/ctt/ctt_awb.py
 create mode 100644 utils/raspberrypi/ctt/ctt_ccm.py
 create mode 100644 utils/raspberrypi/ctt/ctt_config_example.json
 create mode 100644 utils/raspberrypi/ctt/ctt_geq.py
 create mode 100644 utils/raspberrypi/ctt/ctt_image_load.py
 create mode 100644 utils/raspberrypi/ctt/ctt_lux.py
 create mode 100644 utils/raspberrypi/ctt/ctt_macbeth_locator.py
 create mode 100644 utils/raspberrypi/ctt/ctt_noise.py
 create mode 100644 utils/raspberrypi/ctt/ctt_pretty_print_json.py
 create mode 100644 utils/raspberrypi/ctt/ctt_ransac.py
 create mode 100644 utils/raspberrypi/ctt/ctt_ref.pgm
 create mode 100644 utils/raspberrypi/ctt/ctt_tools.py

Comments

Laurent Pinchart May 11, 2020, 8:57 p.m. UTC | #1
Hello,

On Mon, May 04, 2020 at 12:28:23PM +0300, Laurent Pinchart wrote:
> Hello,
> 
> This patch series adds support for the Raspberry Pi cameras to
> libcamera. It consists of
> 
> - A pipeline handler (patch 3/6)
> - An IPA module (patch 4/6)
> - A camera tuning tool (patch 5/6)
> 
> The code has been developed by Naushir Patuck, David Plowman and Dave
> Stevenson from Raspberry Pi (Trading) Ltd., with help from Jacopo Mondi,
> Kieran Bingham, Niklas Söderlund and myself. All the code is covered by
> a BSD-2-Clause license (added in patch 1/6).
> 
> The implementation depends on kernel drivers for the Broadcom BCM283x
> (and BCM2711) CSI-2 receiver and ISP that have been posted to the
> linux-media mailing list ([1]). Patch 2/6 imports the kernel API header
> changes from those drivers.
> 
> Extensive documentation related to camera usage and camera tuning with
> libcamera for the Raspberry Pi platforms is available in [2].
> 
> In the name of the libcamera team, I would like to thank Naush, David,
> Dave and all the other people from Raspberry Pi (Trading) Ltd. who made
> this possible. I would also like to extend those thanks to Jacopo,
> Kieran and Niklas for the countless hours they have spent grinding and
> polishing libcamera to achieve this result.
> 
> [1] https://lore.kernel.org/linux-media/20200504092611.9798-1-laurent.pinchart@ideasonboard.com/
> [2] https://github.com/raspberrypi/documentation/tree/master/linux/software/libcamera/README.md

I've now merged this patch series, with a few very minor cosmetic
modifications related to the review comments. I've left anything that
requires review (that is any real code change) to be addressed on top,
as small changes are reviewed more easily than a large v2.

Thanks again to all the people who were involved in making this happen !

> Laurent Pinchart (1):
>   LICENSES: Add BSD-2-Clause license
> 
> Naushir Patuck (5):
>   include: uapi: Add header definitions for BCM2835 Unicam and ISP
>     blocks
>   libcamera: pipeline: Raspberry Pi pipeline handler
>   libcamera: ipa: Raspberry Pi IPA
>   libcamera: utils: Raspberry Pi Camera Tuning Tool
>   libcamera: raspberrypi: Add components to meson build
> 
>  LICENSES/BSD-2-Clause.txt                     |   22 +
>  include/ipa/raspberrypi.h                     |   58 +
>  include/linux/bcm2835-isp.h                   |  320 ++++
>  include/linux/v4l2-controls.h                 |    4 +
>  include/linux/vc_sm_cma_ioctl.h               |  135 ++
>  include/linux/videodev2.h                     |    2 +
>  meson_options.txt                             |    2 +-
>  src/ipa/meson.build                           |    2 +-
>  src/ipa/raspberrypi/README.md                 |   23 +
>  src/ipa/raspberrypi/cam_helper.cpp            |  119 ++
>  src/ipa/raspberrypi/cam_helper.hpp            |  102 ++
>  src/ipa/raspberrypi/cam_helper_imx219.cpp     |  180 ++
>  src/ipa/raspberrypi/cam_helper_imx477.cpp     |  162 ++
>  src/ipa/raspberrypi/cam_helper_ov5647.cpp     |   89 +
>  .../raspberrypi/controller/agc_algorithm.hpp  |   28 +
>  src/ipa/raspberrypi/controller/agc_status.h   |   39 +
>  src/ipa/raspberrypi/controller/algorithm.cpp  |   47 +
>  src/ipa/raspberrypi/controller/algorithm.hpp  |   62 +
>  src/ipa/raspberrypi/controller/alsc_status.h  |   27 +
>  .../raspberrypi/controller/awb_algorithm.hpp  |   22 +
>  src/ipa/raspberrypi/controller/awb_status.h   |   26 +
>  .../controller/black_level_status.h           |   23 +
>  src/ipa/raspberrypi/controller/camera_mode.h  |   40 +
>  .../raspberrypi/controller/ccm_algorithm.hpp  |   21 +
>  src/ipa/raspberrypi/controller/ccm_status.h   |   22 +
>  .../controller/contrast_algorithm.hpp         |   22 +
>  .../raspberrypi/controller/contrast_status.h  |   31 +
>  src/ipa/raspberrypi/controller/controller.cpp |  109 ++
>  src/ipa/raspberrypi/controller/controller.hpp |   54 +
>  .../raspberrypi/controller/device_status.h    |   30 +
>  src/ipa/raspberrypi/controller/dpc_status.h   |   21 +
>  src/ipa/raspberrypi/controller/geq_status.h   |   22 +
>  src/ipa/raspberrypi/controller/histogram.cpp  |   64 +
>  src/ipa/raspberrypi/controller/histogram.hpp  |   44 +
>  src/ipa/raspberrypi/controller/logging.hpp    |   30 +
>  src/ipa/raspberrypi/controller/lux_status.h   |   29 +
>  src/ipa/raspberrypi/controller/metadata.hpp   |   77 +
>  src/ipa/raspberrypi/controller/noise_status.h |   22 +
>  src/ipa/raspberrypi/controller/pwl.cpp        |  216 +++
>  src/ipa/raspberrypi/controller/pwl.hpp        |  109 ++
>  src/ipa/raspberrypi/controller/rpi/agc.cpp    |  642 +++++++
>  src/ipa/raspberrypi/controller/rpi/agc.hpp    |  123 ++
>  src/ipa/raspberrypi/controller/rpi/alsc.cpp   |  705 ++++++++
>  src/ipa/raspberrypi/controller/rpi/alsc.hpp   |  104 ++
>  src/ipa/raspberrypi/controller/rpi/awb.cpp    |  608 +++++++
>  src/ipa/raspberrypi/controller/rpi/awb.hpp    |  178 ++
>  .../controller/rpi/black_level.cpp            |   56 +
>  .../controller/rpi/black_level.hpp            |   30 +
>  src/ipa/raspberrypi/controller/rpi/ccm.cpp    |  163 ++
>  src/ipa/raspberrypi/controller/rpi/ccm.hpp    |   76 +
>  .../raspberrypi/controller/rpi/contrast.cpp   |  176 ++
>  .../raspberrypi/controller/rpi/contrast.hpp   |   51 +
>  src/ipa/raspberrypi/controller/rpi/dpc.cpp    |   49 +
>  src/ipa/raspberrypi/controller/rpi/dpc.hpp    |   32 +
>  src/ipa/raspberrypi/controller/rpi/geq.cpp    |   75 +
>  src/ipa/raspberrypi/controller/rpi/geq.hpp    |   34 +
>  src/ipa/raspberrypi/controller/rpi/lux.cpp    |  104 ++
>  src/ipa/raspberrypi/controller/rpi/lux.hpp    |   42 +
>  src/ipa/raspberrypi/controller/rpi/noise.cpp  |   71 +
>  src/ipa/raspberrypi/controller/rpi/noise.hpp  |   32 +
>  src/ipa/raspberrypi/controller/rpi/sdn.cpp    |   63 +
>  src/ipa/raspberrypi/controller/rpi/sdn.hpp    |   29 +
>  .../raspberrypi/controller/rpi/sharpen.cpp    |   60 +
>  .../raspberrypi/controller/rpi/sharpen.hpp    |   32 +
>  src/ipa/raspberrypi/controller/sdn_status.h   |   23 +
>  .../raspberrypi/controller/sharpen_status.h   |   26 +
>  src/ipa/raspberrypi/data/imx219.json          |  401 +++++
>  src/ipa/raspberrypi/data/imx477.json          |  416 +++++
>  src/ipa/raspberrypi/data/meson.build          |    9 +
>  src/ipa/raspberrypi/data/ov5647.json          |  398 ++++
>  src/ipa/raspberrypi/data/uncalibrated.json    |   82 +
>  src/ipa/raspberrypi/md_parser.cpp             |  101 ++
>  src/ipa/raspberrypi/md_parser.hpp             |  123 ++
>  src/ipa/raspberrypi/md_parser_rpi.cpp         |   37 +
>  src/ipa/raspberrypi/md_parser_rpi.hpp         |   32 +
>  src/ipa/raspberrypi/meson.build               |   59 +
>  src/ipa/raspberrypi/raspberrypi.cpp           | 1081 +++++++++++
>  .../pipeline/raspberrypi/meson.build          |    3 +
>  .../pipeline/raspberrypi/raspberrypi.cpp      | 1598 +++++++++++++++++
>  .../pipeline/raspberrypi/staggered_ctrl.h     |  236 +++
>  src/libcamera/pipeline/raspberrypi/vcsm.h     |  144 ++
>  utils/raspberrypi/ctt/ctt.py                  |  823 +++++++++
>  utils/raspberrypi/ctt/ctt_alsc.py             |  297 +++
>  utils/raspberrypi/ctt/ctt_awb.py              |  374 ++++
>  utils/raspberrypi/ctt/ctt_ccm.py              |  221 +++
>  utils/raspberrypi/ctt/ctt_config_example.json |   16 +
>  utils/raspberrypi/ctt/ctt_geq.py              |  179 ++
>  utils/raspberrypi/ctt/ctt_image_load.py       |  428 +++++
>  utils/raspberrypi/ctt/ctt_lux.py              |   58 +
>  utils/raspberrypi/ctt/ctt_macbeth_locator.py  |  748 ++++++++
>  utils/raspberrypi/ctt/ctt_noise.py            |  123 ++
>  .../raspberrypi/ctt/ctt_pretty_print_json.py  |   70 +
>  utils/raspberrypi/ctt/ctt_ransac.py           |   69 +
>  utils/raspberrypi/ctt/ctt_ref.pgm             |    5 +
>  utils/raspberrypi/ctt/ctt_tools.py            |  141 ++
>  95 files changed, 14311 insertions(+), 2 deletions(-)
>  create mode 100644 LICENSES/BSD-2-Clause.txt
>  create mode 100644 include/ipa/raspberrypi.h
>  create mode 100644 include/linux/bcm2835-isp.h
>  create mode 100644 include/linux/vc_sm_cma_ioctl.h
>  create mode 100644 src/ipa/raspberrypi/README.md
>  create mode 100644 src/ipa/raspberrypi/cam_helper.cpp
>  create mode 100644 src/ipa/raspberrypi/cam_helper.hpp
>  create mode 100644 src/ipa/raspberrypi/cam_helper_imx219.cpp
>  create mode 100644 src/ipa/raspberrypi/cam_helper_imx477.cpp
>  create mode 100644 src/ipa/raspberrypi/cam_helper_ov5647.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/agc_algorithm.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/agc_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/algorithm.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/algorithm.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/alsc_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/awb_algorithm.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/awb_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/black_level_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/camera_mode.h
>  create mode 100644 src/ipa/raspberrypi/controller/ccm_algorithm.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/ccm_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/contrast_algorithm.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/contrast_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/controller.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/controller.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/device_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/dpc_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/geq_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/histogram.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/histogram.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/logging.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/lux_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/metadata.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/noise_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/pwl.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/pwl.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/agc.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/agc.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/alsc.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/alsc.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/awb.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/awb.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/black_level.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/black_level.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/ccm.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/ccm.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/contrast.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/contrast.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/dpc.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/dpc.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/geq.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/geq.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/lux.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/lux.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/noise.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/noise.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/sdn.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/sdn.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/sharpen.cpp
>  create mode 100644 src/ipa/raspberrypi/controller/rpi/sharpen.hpp
>  create mode 100644 src/ipa/raspberrypi/controller/sdn_status.h
>  create mode 100644 src/ipa/raspberrypi/controller/sharpen_status.h
>  create mode 100644 src/ipa/raspberrypi/data/imx219.json
>  create mode 100644 src/ipa/raspberrypi/data/imx477.json
>  create mode 100644 src/ipa/raspberrypi/data/meson.build
>  create mode 100644 src/ipa/raspberrypi/data/ov5647.json
>  create mode 100644 src/ipa/raspberrypi/data/uncalibrated.json
>  create mode 100644 src/ipa/raspberrypi/md_parser.cpp
>  create mode 100644 src/ipa/raspberrypi/md_parser.hpp
>  create mode 100644 src/ipa/raspberrypi/md_parser_rpi.cpp
>  create mode 100644 src/ipa/raspberrypi/md_parser_rpi.hpp
>  create mode 100644 src/ipa/raspberrypi/meson.build
>  create mode 100644 src/ipa/raspberrypi/raspberrypi.cpp
>  create mode 100644 src/libcamera/pipeline/raspberrypi/meson.build
>  create mode 100644 src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
>  create mode 100644 src/libcamera/pipeline/raspberrypi/staggered_ctrl.h
>  create mode 100644 src/libcamera/pipeline/raspberrypi/vcsm.h
>  create mode 100755 utils/raspberrypi/ctt/ctt.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_alsc.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_awb.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_ccm.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_config_example.json
>  create mode 100644 utils/raspberrypi/ctt/ctt_geq.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_image_load.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_lux.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_macbeth_locator.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_noise.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_pretty_print_json.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_ransac.py
>  create mode 100644 utils/raspberrypi/ctt/ctt_ref.pgm
>  create mode 100644 utils/raspberrypi/ctt/ctt_tools.py