[vsp-tests] [PATCH 14/16] vsp-lib: Add support for color space

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Support configuring the color space when setting formats on subdev pads
and on video devices. As the VSP only cares about the encoding and
quantization, the colorspace and transfer function parameters are not
handled.

Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
---
 scripts/vsp-lib.sh | 82 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 76 insertions(+), 6 deletions(-)

diff --git a/scripts/vsp-lib.sh b/scripts/vsp-lib.sh
index 85f3fdef69d1..47828296285e 100755
--- a/scripts/vsp-lib.sh
+++ b/scripts/vsp-lib.sh
@@ -85,6 +85,12 @@ vsp1_entity_set_format() {
 	shift 4
 	local options="$*"
 
+	if [ $format = 'AYUV8_1X32' ] ; then
+		options="$options ycbcr:$__vsp_encoding quantization:$__vsp_quantization"
+	else
+		options="$options ycbcr:601 quantization:full-range"
+	fi
+
 	$mediactl -d $mdev -V "'$dev $entity':$pad [fmt:$format/$size $options]"
 }
 
@@ -115,6 +121,30 @@ vsp1_reset_controls() {
 	$yavta --no-query --reset-controls $subdev | ./logger.sh "$entity" >> $logfile
 }
 
+gen_image_csc_options() {
+	local options=
+
+	case $__vsp_encoding in
+	601)
+		options="$options -e BT.601"
+		;;
+	709)
+		options="$options -e REC.709"
+		;;
+	esac
+
+	case $__vsp_quantization in
+	lim-range)
+		options="$options -q limited"
+		;;
+	full-range)
+		options="$options -q full"
+		;;
+	esac
+
+	echo "$options"
+}
+
 # -----------------------------------------------------------------------------
 # Reference frame generation
 #
@@ -206,6 +236,11 @@ reference_frame() {
 
 	[ x$__vsp_brx_inputs != x ] && options="$options -c $__vsp_brx_inputs"
 
+	options="$options $(gen_image_csc_options)"
+
+	echo "Generating reference frame with $genimage -i $in_format -f $out_format -s $size -a $alpha $options" | \
+		./logger.sh check >> $logfile
+
 	$genimage -i $in_format -f $out_format -s $size -a $alpha $options -o $file \
 		frames/frame-reference-1024x768.ppm
 }
@@ -512,6 +547,8 @@ pipe_reset() {
 	__vsp_rpf_format=
 	__vsp_wpf_index=0
 	__vsp_wpf_format=
+	__vsp_encoding=601
+	__vsp_quantization=lim-range
 	__vsp_pixel_perfect=true
 }
 
@@ -866,7 +903,23 @@ format_configure() {
 	local pipe=${1//-/_}
 	shift 1
 
-	format_$pipe $*
+	local options
+	local arg
+
+	for arg in $* ; do
+		case $arg in
+		--encoding=*)
+			local encoding=${arg/--encoding=/}
+			__vsp_encoding=${encoding%:*}
+			__vsp_quantization=${encoding#*:}
+			;;
+		*)
+			options="$options $arg"
+			;;
+		esac
+	done
+
+	format_$pipe $options
 }
 
 # ------------------------------------------------------------------------------
@@ -886,9 +939,10 @@ hgt_configure() {
 #
 
 generate_input_frame() {
-	local file=$1
-	local format=$2
-	local size=$3
+	local entity=$1
+	local file=$2
+	local format=$3
+	local size=$4
 
 	local alpha=
 	local options=
@@ -910,6 +964,11 @@ generate_input_frame() {
 
 	$(format_v4l2_is_yuv $format) && options="$options -C -i YUV444M"
 
+	options="$options $(gen_image_csc_options)"
+
+	echo "Generating input frame with $genimage -f $format -s $size -a $alpha $options" | \
+		./logger.sh $entity >> $logfile
+
 	$genimage -f $format -s $size -a $alpha $options -o $file \
 		frames/frame-reference-1024x768.ppm
 }
@@ -952,6 +1011,7 @@ vsp_runner() {
 	local videodev
 	local format
 	local size
+	local csc
 
 	case $entity in
 	hgo)
@@ -971,7 +1031,7 @@ vsp_runner() {
 		format=$__vsp_rpf_format
 		size=$(vsp1_entity_get_size $entity 0)
 		file=${frames_dir}${entity}.bin
-		generate_input_frame $file $format $size
+		generate_input_frame $entity $file $format $size
 		;;
 
 	wpf.*)
@@ -982,7 +1042,17 @@ vsp_runner() {
 		;;
 	esac
 
-	$yavta -c$count -n $buffers ${format:+-f $format} ${size:+-s $size} \
+	if [ x$format != 'x' ] ; then
+		if [ $(format_v4l2_to_mbus $format) = 'AYUV8_1X32' ] ; then
+			local encoding=$(echo $__vsp_encoding | tr '[:lower:]-' '[:upper:]_')
+			local quantization=$(echo $__vsp_quantization | tr '[:lower:]-' '[:upper:]_')
+			csc="--encoding $encoding --quantization $quantization"
+		else
+			csc="--encoding 601 --quantization FULL_RANGE"
+		fi
+	fi
+
+	$yavta -c$count -n $buffers ${format:+-f $format} ${size:+-s $size} $csc \
 		${skip:+--skip $skip} ${file:+--file=$file} ${pause:+-p$pause} \
 		$videodev | ./logger.sh $entity >> $logfile
 }
-- 
Regards,

Laurent Pinchart





[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux