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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon May 11 22:57:34 CEST 2020


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

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list