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