tests: Add SPDX headers to vsp-unit-test-0026.sh
[renesas/vsp-tests.git] / tests / vsp-unit-test-0016.sh
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0-or-later
3 # SPDX-FileCopyrightText: 2016-2017 Renesas Electronics Corporation
4
5 #
6 # Test all combinations of horizontal flip, vertical flip and rotation on WPF.0
7 # with image partitioning by inserting a UDS in the pipeline.
8 #
9
10 . ./vsp-lib.sh
11
12 features="rpf.0 uds wpf.0 wpf.0[control:'Vertical+Flip']"
13 optional_features="wpf.0[control:'Horizontal+Flip'] wpf.0[control:'Rotate']"
14
15 directions="horizontal vertical rotate"
16 dir_horizontal_control="Horizontal+Flip"
17 dir_horizontal_label="hflip"
18 dir_horizontal_values="0 1"
19 dir_vertical_control="Vertical+Flip"
20 dir_vertical_label="vflip"
21 dir_vertical_values="0 1"
22 dir_rotate_control="Rotate"
23 dir_rotate_label="rotate"
24 dir_rotate_values="0 90"
25
26 format="RGB24"
27
28 get_var() {
29         echo $(eval echo \$dir_$1_$2)
30 }
31
32 set_var() {
33         eval dir_$1_$2=$3
34 }
35
36 get_array_value() {
37         local index=$2
38
39         echo $1 | cut -d ' ' -f $((index+1))
40 }
41
42 get_array_length() {
43         echo $#
44 }
45
46 dir_next_value() {
47         # Get the direction name corresponding to the index
48         local direction=$(get_array_value "$supported_directions" $1)
49
50         # Get the current value index and increase it
51         local value=$(get_var $direction index)
52         value=$((value+1))
53
54         # If the index exceeds the possible values array length, reset it to 0.
55         if [ $value -ge $(get_array_length $(get_var $direction values)) ] ; then
56                 value=0
57         fi
58
59         # Update the current value index for the direction
60         set_var $direction index $value
61
62         # Return whether we have exceeded the maximum
63         [ $value != 0 ]
64 }
65
66 dir_set_flipping_control() {
67         local direction=$1
68
69         local index=$(get_var $direction index)
70         local control=$(get_var $direction control)
71         local values=$(get_var $direction values)
72         local value=$(get_array_value "$values" $index)
73
74         vsp1_set_control wpf.0 "$control" $value
75 }
76
77 test_flipping() {
78         local label=$1
79         local insize=$2
80         local outsize=$3
81
82         test_start "$label $insize -> $outsize"
83
84         pipe_configure rpf-uds
85         format_configure rpf-uds $format $insize $format $outsize
86
87         vsp_runner rpf.0 &
88         vsp_runner wpf.0
89
90         local result=$(compare_frames $label)
91
92         test_complete $result
93 }
94
95 test_main() {
96         local direction
97
98         for direction in $directions ; do
99                 $(vsp1_has_feature "wpf.0[control:'$(get_var $direction control)']") && {
100                         set_var $direction index 0
101                         supported_directions="$supported_directions $direction"
102                 }
103         done
104
105         local dir_max=$(get_array_length $supported_directions)
106         local dir_current=0
107
108         while true ; do
109                 # Update all controls
110                 local label=
111                 for direction in $supported_directions ; do
112                         local index=$(get_var $direction index)
113                         local values=$(get_var $direction values)
114                         local value=$(get_array_value "$values" $index)
115                         label="$label $(get_var $direction label)=$value"
116                         dir_set_flipping_control $direction
117                 done
118
119                 test_flipping "$label" 640x480 640x480
120                 test_flipping "$label" 640x480 1024x768
121                 test_flipping "$label" 1024x768 640x480
122
123                 while [ $dir_current -lt $dir_max ] ; do
124                         dir_next_value $dir_current && break
125                         dir_current=$((dir_current+1))
126                 done
127
128                 if [ $dir_current -ge $dir_max ] ; then
129                         break
130                 fi
131
132                 dir_current=0
133         done
134 }
135
136 test_init $0 "$features" "$optional_features"
137 test_run