[libcamera-devel] [RFC PATCH] utils: ipu3-process: Stream multiple frames using v4l2-ctl
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Jul 12 00:15:36 CEST 2022
Hi Umang,
Thank you for the patch.
On Mon, Jul 11, 2022 at 10:14:13PM +0530, Umang Jain via libcamera-devel wrote:
> Stream IMGU using v4l2-ctl as it provides more granular controls
> on the video nodes. The goal here is to stream a single input
> file containing multiple frames in 10-bit IPU3 packed bayer format.
> Such a input file can be created using the ipu3-pack utility.
s/a input/an input/
> This patch enables the IMGU's parameter node as well in
> configure_pipeline() without which, the input node won't stream
s/ without which,/, without which/
> successive input frames.
>
> The viewfinder and output nodes will still stream using yavta, so
> no changes required there.
Would it be difficult to use v4l2-ctl everywhere ? It would be nice to
avoid depending on multiple tools.
> It's is quite tricky to stream input and parameters nodes synchronously
> with v4l2-ctl commands for each. The patch overcomes this short-coming
> by streaming both the nodes endlessly until both of them are killed.
> A sleep of 1 second is introduced to make sure $frame_count buffers
> are captured on the output and vf nodes.
What's the issue, can't we get v4l2-ctl to stream a given number of
frames ?
> Another short-coming of this patch is when specific parameter-buffer(s)
> (from a file) are needed to streamed on the parameters node, this might
> require some adjusting. For now, the parameters node streams with
> un-assigned buffers. It depends on the decision how this script is
> expanded further down the line.
Any proposal ? :-)
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> ---
> utils/ipu3/ipu3-process.sh | 29 ++++++++++++++++++++++++-----
> 1 file changed, 24 insertions(+), 5 deletions(-)
>
> diff --git a/utils/ipu3/ipu3-process.sh b/utils/ipu3/ipu3-process.sh
> index bb4abbe8..48466d70 100755
> --- a/utils/ipu3/ipu3-process.sh
> +++ b/utils/ipu3/ipu3-process.sh
> @@ -37,11 +37,13 @@ configure_pipeline() {
> local enable_3a=1
> local enable_out=1
> local enable_vf=1
> + local enable_param=1
> local mode=0
>
> # Configure the links
> $mediactl -r
> $mediactl -l "\"$imgu_entity input\":0 -> \"$imgu_entity\":0[1]"
> + $mediactl -l "\"$imgu_entity parameters\":0 -> \"$imgu_entity\":1[$enable_param]"
> $mediactl -l "\"$imgu_entity\":2 -> \"$imgu_entity output\":0[$enable_out]"
> $mediactl -l "\"$imgu_entity\":3 -> \"$imgu_entity viewfinder\":0[$enable_vf]"
> $mediactl -l "\"$imgu_entity\":4 -> \"$imgu_entity 3a stat\":0[$enable_3a]"
> @@ -76,9 +78,26 @@ process_frames() {
> $yavta $($mediactl -e "$imgu_entity 3a stat") &
> sleep 0.5
>
> - # Feed the IMGU input.
> - $yavta -f $IMGU_IN_PIXELFORMAT -s $in_size "-F$in_file" \
> - $($mediactl -e "$imgu_entity input")
> + echo "Feeding IMGU $in_size"
> + # Start stream parameters node first
> + v4l2-ctl -d$($mediactl -e "$imgu_entity parameters") --stream-out-mmap &
> + local param_streaming=$!
> +
> + # Start streaming on input node
> + local width=$(echo $in_size | awk -F 'x' '{print $1}')
> + local height=$(echo $in_size | awk -F 'x' '{print $2}')
> + v4l2-ctl -d $($mediactl -e "$imgu_entity input") \
> + --set-fmt-video-out=width=$width,height=$height,pixelformat=$IMGU_IN_PIXELFORMAT \
> + --stream-out-mmap --stream-from=$in_file --stream-loop &
> + local input_streaming=$!
> +
> + # Sleep for 1 second and then kill the IMGU streaming. By then $frame_count output and vf
> + # buffers should have been captured.
> + sleep 1
> + kill $input_streaming
> + kill $param_streaming
> +
> + echo "IMGU FED"
> }
>
> # Convert captured files to ppm
> @@ -98,7 +117,7 @@ convert_files() {
> }
>
> run_test() {
> - IMGU_IN_PIXELFORMAT=IPU3_SGRBG10
> + IMGU_IN_PIXELFORMAT=ip3G
> IMGU_OUT_PIXELFORMAT=NV12
> IMGU_VF_PIXELFORMAT=NV12
>
> @@ -193,6 +212,6 @@ mediactl="media-ctl -d $mdev"
> echo "Using device $mdev"
>
> output_dir="/tmp"
> -frame_count=5
> +frame_count=10
> nbufs=7
> run_test
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list