[libcamera-devel] [PATCH 4/4] utils: rkisp1: Support optional CSI-2 receiver subdev

paul.elder at ideasonboard.com paul.elder at ideasonboard.com
Fri Jul 15 09:39:46 CEST 2022


Hi Laurent,

On Tue, Jun 21, 2022 at 12:06:58AM +0300, Laurent Pinchart via libcamera-devel wrote:
> The media graph may include a CSI-2 receiver entity between the sensor
> and the ISP for platforms that have a CSI-2 receiver external to the
> ISP. Support this by configuring the pipeline accordingly.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
>  utils/rkisp1/rkisp1-capture.sh | 56 +++++++++++++++++++++++++++++++++-
>  1 file changed, 55 insertions(+), 1 deletion(-)
> 
> diff --git a/utils/rkisp1/rkisp1-capture.sh b/utils/rkisp1/rkisp1-capture.sh
> index 2549779d0f78..c5f859f21001 100755
> --- a/utils/rkisp1/rkisp1-capture.sh
> +++ b/utils/rkisp1/rkisp1-capture.sh
> @@ -14,6 +14,37 @@
>  # - raw2rgbpnm (from git://git.retiisi.org.uk/~sailus/raw2rgbpnm.git)
>  # - yavta (from git://git.ideasonboard.org/yavta.git)
>  
> +# Return the entity connected to a given pad
> +# $1: The pad, expressed as "entity":index
> +mc_remote_entity() {
> +	local entity="${1%:*}"
> +	local pad="${1#*:}"
> +
> +	${mediactl} -p | awk '
> +/^- entity / {
> +	in_entity=0
> +}
> +
> +/^- entity [0-9]+: '"${entity}"' / {
> +	in_entity=1
> +}
> +
> +/^[ \t]+pad/ {
> +	in_pad=0
> +}
> +
> +/^[ \t]+pad'"${pad}"': / {
> +	in_pad=1
> +}
> +
> +/^[ \t]+(<-|->) "[^"]+"/ {
> +	if (in_entity && in_pad) {
> +		print gensub(/^[^"]+"([^"]+)":([0-9]+).*$/, "\\1", "g")
> +		exit
> +	}
> +}'
> +}
> +
>  # Locate the sensor entity
>  find_sensor() {
>  	local bus
> @@ -28,6 +59,17 @@ find_sensor() {
>  	echo "$sensor_name $bus"
>  }
>  
> +# Locate the CSI-2 receiver
> +find_csi2_rx() {
> +	local sensor_name=$1
> +	local csi2_rx
> +
> +	csi2_rx=$(mc_remote_entity "$sensor_name:0")
> +	if [ "$csi2_rx" != rkisp1_isp ] ; then
> +		echo "$csi2_rx"
> +	fi
> +}
> +
>  # Locate the media device
>  find_media_device() {
>  	local mdev
> @@ -63,15 +105,27 @@ configure_pipeline() {
>  	local format="fmt:$sensor_mbus_code/$sensor_size"
>  	local capture_mbus_code=$1
>  	local capture_size=$2
> +	local csi2_rx
>  
>  	echo "Configuring pipeline for $sensor in $format"
>  
> +	csi2_rx=$(find_csi2_rx "$sensor")
> +
>  	$mediactl -r
>  
> -	$mediactl -l "'$sensor':0 -> 'rkisp1_isp':0 [1]"
> +	if [ -n "$csi2_rx" ] ; then
> +		$mediactl -l "'$sensor':0 -> '$csi2_rx':0 [1]"
> +		$mediactl -l "'$csi2_rx':1 -> 'rkisp1_isp':0 [1]"
> +	else
> +		$mediactl -l "'$sensor':0 -> 'rkisp1_isp':0 [1]"
> +	fi
>  	$mediactl -l "'rkisp1_isp':2 -> 'rkisp1_resizer_mainpath':0 [1]"
>  
>  	$mediactl -V "\"$sensor\":0 [$format]"
> +	if [ -n "$csi2_rx" ] ; then
> +		$mediactl -V "'$csi2_rx':0 [$format]"
> +		$mediactl -V "'$csi2_rx':1 [$format]"
> +	fi
>  	$mediactl -V "'rkisp1_isp':0 [$format crop:(0,0)/$sensor_size]"
>  	$mediactl -V "'rkisp1_isp':2 [fmt:$capture_mbus_code/$sensor_size crop:(0,0)/$sensor_size]"
>  	$mediactl -V "'rkisp1_resizer_mainpath':0 [fmt:$capture_mbus_code/$sensor_size crop:(0,0)/$sensor_size]"


More information about the libcamera-devel mailing list