summaryrefslogtreecommitdiff
path: root/src/ipa/rkisp1/meson.build
AgeCommit message (Collapse)Author
2020-05-13licenses: License all meson files under CC0-1.0Laurent Pinchart
In an attempt to clarify the license terms of all files in the libcamera project, the build system files deserve particular attention. While they describe how the binaries are created, they are not themselves transformed into any part of binary distributions of the software, and thus don't influence the copyright on the binary packages. They are however subject to copyright, and thus influence the distribution terms of the source packages. Most of the meson.build files would not meet the threshold of originality criteria required for copyright protection. Some of the more complex meson.build files may be eligible for copyright protection. To avoid any ambiguity and uncertainty, state our intent to not assert copyrights on the build system files by putting them in the public domain with the CC0-1.0 license. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Acked-by: Giulio Benetti <giulio.benetti@micronovasrl.com> Acked-by: Jacopo Mondi <jacopo@jmondi.org> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Acked-by: Naushir Patuck <naush@raspberrypi.com> Acked-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Acked-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Acked-by: Paul Elder <paul.elder@ideasonboard.com> Acked-by: Show Liu <show.liu@linaro.org>
2020-04-30libcamera: Build IPA module signatures by defaultLaurent Pinchart
Commit 7206035ee609 ("libcamera: Regenerate IPA module signatures at install time") replaced installation of the IPA module signatures with an install script that signs all modules. While doing so, it inadvertently also disabled generation of the signature at build time by default. This breaks running libcamera binaries from the build directory. Fix it. Fixes: 7206035ee609 ("libcamera: Regenerate IPA module signatures at install time") Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2020-04-29libcamera: Regenerate IPA module signatures at install timeLaurent Pinchart
When the IPA modules are installed, meson strips the DT_RPATH and DT_RUNPATH from the binaries. This invalidates the signatures. Disable installation of the .sign files and add an installation script to regenerate them directly in the target directory. The .sign files still need to be created at build time to support running IPA modules from the build tree. Two alternative approaches have been considered: - meson could be taught a new target argument to preserve binary compatibility by skipping any operation that modifies files. This has been proposed in the #mesonbuild IRC channel. While this could be interesting in the longer term, we need to fix the issue now. - The module signatures could be computed on selected sections only. While skipping the .dynamic section when signing may not cause security issues, it would make signature generation and verification more complex, and wasn't deemed worth it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-04-16libcamera: Make IPA module signing optionalLaurent Pinchart
The IPA module signing mechanism relies on openssl to generate keys and sign the module. If openssl is not found on the system, the build will fail. Make the dependency optional by detecting openssl, and skip generation of signatures if openssl isn't found. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-04-14libcamera: Add IPA module signing infrastructureLaurent Pinchart
Add infrastructure to generate an RSA private key and sign IPA modules. The signatures are stored in separate files with a .sign suffix. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-11-20ipa: Switch to the plain C APIJacopo Mondi
Switch IPA communication to the plain C API. As the IPAInterface class is easier to use for pipeline handlers than a plain C API, retain it and add an IPAContextWrapper that translate between the C++ and the C APIs. On the IPA module side usage of IPAInterface may be desired for IPAs implemented in C++ that want to link to libcamera. For those IPAs, a new IPAInterfaceWrapper helper class is introduced to wrap the IPAInterface implemented internally by the IPA module into an ipa_context, ipa_context_ops and ipa_callback_ops. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-10-11libcamera: ipa: rkisp1: Add basic control of auto exposureNiklas Söderlund
Add an IPA which controls the exposure time and analog gain for a sensor connected to the rkisp1 pipeline. The IPA supports turning AE on and off and informing the camera of the status of the AE control loop. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-later # Copyright (C) 2018, Google Inc. # # Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com> # # ipu3-capture.sh - Capture raw frames from cameras based on the Intel IPU3 # # The scripts makes use of the following tools, which are expected to be # executable from the system-wide path or from the local directory: # # - media-ctl (from v4l-utils git://linuxtv.org/v4l-utils.git) # - raw2pnm (from nvt https://github.com/intel/nvt.git) # - yavta (from git://git.ideasonboard.org/yavta.git) # Locate the sensor entity find_sensor() { local bus local sensor_name=$1 bus=$(grep "$sensor_name" /sys/class/video4linux/v4l-subdev*/name | cut -d ' ' -f 2) if [[ -z $bus ]]; then echo "Sensor '$sensor_name' not found." >&2 exit 1 fi echo "$sensor_name $bus" } # Locate the media device find_media_device() { local mdev for mdev in /dev/media* ; do media-ctl -d $mdev -p | grep -q "^driver[ \t]*ipu3-cio2$" && break mdev= done if [[ -z $mdev ]] ; then echo "IPU3 media device not found." >&2 exit 1 fi echo $mdev } # Locate the CSI2 and CIO2 and get the sensor format parse_pipeline() { local cio2_queue local resolution local sensor=$1 read cio2_queue bus_format sensor_size <<< $($mediactl -p | awk " /^- entity [0-9]*:/ { sensor=0; } /^- entity [0-9]*: $sensor/ { sensor=1; } /^[ \t]*(stream:0)?\[fmt:/ { if (sensor) { gsub(\".*fmt:\", \"\"); gsub(\"[] ].*\", \"\"); gsub(\"/\", \" \"); format=\$0; } } /^[ \t]*->/ { if (sensor) cio2=substr(\$3, 0, 1); } END { print cio2 \" \" format; } ") ipu3_csi2="ipu3-csi2 $cio2_queue" ipu3_capture="ipu3-cio2 $cio2_queue" sensor_width=$(echo $sensor_size | cut -d 'x' -f 1) sensor_height=$(echo $sensor_size | cut -d 'x' -f 2) echo "Using device $mdev with IPU3 CIO2 queue $cio2_queue" } # Configure the pipeline configure_pipeline() { local format="fmt:$bus_format/$sensor_size" echo "Configuring pipeline for $sensor in $format" $mediactl -r $mediactl -l "\"$sensor\":0 -> \"$ipu3_csi2\":0[1]" $mediactl -l "\"$ipu3_csi2\":1 -> \"$ipu3_capture\":0[1]" $mediactl -V "\"$sensor\":0 [$format]" $mediactl -V "\"$ipu3_csi2\":1 [$format]" } # Capture frames capture_frames() { local file_op local frame_count=$1 local ipu3_format=IPU3_${bus_format/_1X10/} local save_file=$2 if [[ $save_file -eq 1 ]]; then file_op="--file=/tmp/frame-#.bin" fi yavta -c$frame_count -n5 -I -f $ipu3_format -s $sensor_size $file_op \ $($mediactl -e "$ipu3_capture") } # Convert captured files to ppm convert_files() { local frame_count=$1 local format=${bus_format/_1X10/} local padded_width=$(expr \( $sensor_width + 49 \) / 50 \* 50) echo "Converting ${sensor_width}x${sensor_height} (${padded_width}x${sensor_height})" for i in `seq -f '%06.0f' 0 $(($frame_count - 1))`; do ipu3-unpack /tmp/frame-$i.bin /tmp/frame-$i.raw raw2pnm -x$padded_width -y$sensor_height -f$format /tmp/frame-$i.raw /tmp/frame-$i.ppm done } # Print usage message usage() { echo "Usage: $1 [options] sensor-name" echo "Supported options:" echo "-c,--count n Number of frame to capture" echo "--no-save Do not save captured frames to disk" } # Parse command line arguments frame_count=10 save_file=1 while (( "$#" )) ; do case $1 in -c|--count) frame_count=$2 shift 2 ;; --no-save) save_file=0 shift ;; -*) echo "Unsupported option $1" >&2 usage $0 exit 1 ;; *) break ;; esac done if [[ $# -ne 1 ]] ; then usage $0 exit 1 fi sensor_name=$1 sensor=$(find_sensor $sensor_name) || exit mdev=$(find_media_device) || exit mediactl="media-ctl -d $mdev" parse_pipeline $sensor configure_pipeline capture_frames $frame_count $save_file [[ $save_file -eq 1 ]] && convert_files $frame_count