[libcamera-devel] [PATCH 0/6] libcamera: Raspberry Pi camera support

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon May 4 11:28:23 CEST 2020


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

-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list