From patchwork Mon May 4 09:28:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 3682 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id EADB6603F2 for ; Mon, 4 May 2020 11:28:37 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="wlssm1+H"; dkim-atps=neutral Received: from pendragon.bb.dnainternet.fi (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 49E95304; Mon, 4 May 2020 11:28:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1588584517; bh=Cv2hOkPIv9IR2CpAMqP3++GV+3nRJTfl2b7BfgdbJsw=; h=From:To:Cc:Subject:Date:From; b=wlssm1+HGLqo5st2OK6tBJJQlKNZfRNbTZE75xabqW96XI2P7cbcpTJ1YbIob/+xw 4H+sYrlVTycfi07uLvXLTG1Qn0nrT6QmtOfxuki+XqhcsJ+Tm4GX3hSCcqYgYz9Ydb fixdEbqUeJRjN+qV6hOPTGByXNS149K0rbprnWx0= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Mon, 4 May 2020 12:28:23 +0300 Message-Id: <20200504092829.10099-1-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 0/6] libcamera: Raspberry Pi camera support X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 May 2020 09:28:38 -0000 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