-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlayout_test.go
177 lines (164 loc) · 6.17 KB
/
layout_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package xstack_test
import (
"errors"
"testing"
"github.com/video-audio/xstack"
)
func TestLayout(t *testing.T) {
tests := []struct {
n int
align xstack.Align
wlayout string
werr error
}{
{0, xstack.AlignVertical, "", xstack.ErrZeroN},
{1, xstack.AlignVertical, "0_0", nil},
{2, xstack.AlignVertical, "0_0|0_h0", nil},
{3, xstack.AlignVertical, "0_0|0_h0|0_h0+h1", nil},
{4, xstack.AlignVertical, "0_0|w0_0|0_h0|w0_h0", nil},
{6, xstack.AlignVertical, "0_0|w0_0|0_h0|w0_h0|0_h0+h1|w0_h0+h1", nil},
{8, xstack.AlignVertical, "0_0|w0_0|0_h0|w0_h0|0_h0+h1|w0_h0+h1|0_h0+h1+h2|w0_h0+h1+h2", nil},
// see https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos%20using%20xstack
{9, xstack.AlignVertical, "0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0|0_h0+h1|w0_h0+h1|w0+w1_h0+h1", nil},
{10, xstack.AlignVertical, "0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0|0_h0+h1|w0_h0+h1|w0+w1_h0+h1|0_h0+h1+h2", nil},
{15, xstack.AlignVertical,
"0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0|0_h0+h1" +
"|w0_h0+h1|w0+w1_h0+h1|0_h0+h1+h2|w0_h0+h1+h2" +
"|w0+w1_h0+h1+h2|0_h0+h1+h2+h3|w0_h0+h1+h2+h3" +
"|w0+w1_h0+h1+h2+h3",
nil},
// see https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos%20using%20xstack
{36, xstack.AlignVertical,
"0_0" +
"|w0_0" +
"|w0+w1_0" +
"|w0+w1+w2_0" +
"|w0+w1+w2+w3_0" +
"|w0+w1+w2+w3+w4_0" +
"|0_h0" +
"|w0_h0" +
"|w0+w1_h0" +
"|w0+w1+w2_h0" +
"|w0+w1+w2+w3_h0" +
"|w0+w1+w2+w3+w4_h0" +
"|0_h0+h1" +
"|w0_h0+h1" +
"|w0+w1_h0+h1" +
"|w0+w1+w2_h0+h1" +
"|w0+w1+w2+w3_h0+h1" +
"|w0+w1+w2+w3+w4_h0+h1" +
"|0_h0+h1+h2" +
"|w0_h0+h1+h2" +
"|w0+w1_h0+h1+h2" +
"|w0+w1+w2_h0+h1+h2" +
"|w0+w1+w2+w3_h0+h1+h2" +
"|w0+w1+w2+w3+w4_h0+h1+h2" +
"|0_h0+h1+h2+h3" +
"|w0_h0+h1+h2+h3" +
"|w0+w1_h0+h1+h2+h3" +
"|w0+w1+w2_h0+h1+h2+h3" +
"|w0+w1+w2+w3_h0+h1+h2+h3" +
"|w0+w1+w2+w3+w4_h0+h1+h2+h3" +
"|0_h0+h1+h2+h3+h4" +
"|w0_h0+h1+h2+h3+h4" +
"|w0+w1_h0+h1+h2+h3+h4" +
"|w0+w1+w2_h0+h1+h2+h3+h4" +
"|w0+w1+w2+w3_h0+h1+h2+h3+h4" +
"|w0+w1+w2+w3+w4_h0+h1+h2+h3+h4",
nil},
{100, xstack.AlignVertical,
"0_0" +
"|w0_0" +
"|w0+w1_0" +
"|w0+w1+w2_0" +
"|w0+w1+w2+w3_0" +
"|w0+w1+w2+w3+w4_0" +
"|w0+w1+w2+w3+w4+w5_0" +
"|w0+w1+w2+w3+w4+w5+w6_0" +
"|w0+w1+w2+w3+w4+w5+w6+w7_0" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_0" +
"|0_h0" +
"|w0_h0" +
"|w0+w1_h0" +
"|w0+w1+w2_h0" +
"|w0+w1+w2+w3_h0" +
"|w0+w1+w2+w3+w4_h0" +
"|w0+w1+w2+w3+w4+w5_h0" +
"|w0+w1+w2+w3+w4+w5+w6_h0" +
"|w0+w1+w2+w3+w4+w5+w6+w7_h0" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0" +
"|0_h0+h1" +
"|w0_h0+h1" +
"|w0+w1_h0+h1" +
"|w0+w1+w2_h0+h1" +
"|w0+w1+w2+w3_h0+h1" +
"|w0+w1+w2+w3+w4_h0+h1" +
"|w0+w1+w2+w3+w4+w5_h0+h1" +
"|w0+w1+w2+w3+w4+w5+w6_h0+h1" +
"|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1" +
"|0_h0+h1+h2|w0_h0+h1+h2|w0+w1_h0+h1+h2|w0+w1+w2_h0+h1+h2" +
"|w0+w1+w2+w3_h0+h1+h2|w0+w1+w2+w3+w4_h0+h1+h2|w0+w1+w2+w3+w4+w5_h0+h1+h2" +
"|w0+w1+w2+w3+w4+w5+w6_h0+h1+h2|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1+h2" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1+h2|0_h0+h1+h2+h3|w0_h0+h1+h2+h3" +
"|w0+w1_h0+h1+h2+h3|w0+w1+w2_h0+h1+h2+h3|w0+w1+w2+w3_h0+h1+h2+h3" +
"|w0+w1+w2+w3+w4_h0+h1+h2+h3|w0+w1+w2+w3+w4+w5_h0+h1+h2+h3" +
"|w0+w1+w2+w3+w4+w5+w6_h0+h1+h2+h3|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1+h2+h3" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1+h2+h3|0_h0+h1+h2+h3+h4" +
"|w0_h0+h1+h2+h3+h4|w0+w1_h0+h1+h2+h3+h4|w0+w1+w2_h0+h1+h2+h3+h4" +
"|w0+w1+w2+w3_h0+h1+h2+h3+h4|w0+w1+w2+w3+w4_h0+h1+h2+h3+h4" +
"|w0+w1+w2+w3+w4+w5_h0+h1+h2+h3+h4|w0+w1+w2+w3+w4+w5+w6_h0+h1+h2+h3+h4" +
"|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1+h2+h3+h4" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1+h2+h3+h4" +
"|0_h0+h1+h2+h3+h4+h5|w0_h0+h1+h2+h3+h4+h5|w0+w1_h0+h1+h2+h3+h4+h5" +
"|w0+w1+w2_h0+h1+h2+h3+h4+h5|w0+w1+w2+w3_h0+h1+h2+h3+h4+h5" +
"|w0+w1+w2+w3+w4_h0+h1+h2+h3+h4+h5" +
"|w0+w1+w2+w3+w4+w5_h0+h1+h2+h3+h4+h5" +
"|w0+w1+w2+w3+w4+w5+w6_h0+h1+h2+h3+h4+h5" +
"|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1+h2+h3+h4+h5" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1+h2+h3+h4+h5" +
"|0_h0+h1+h2+h3+h4+h5+h6" +
"|w0_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1+w2_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1+w2+w3_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1+w2+w3+w4_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1+w2+w3+w4+w5_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1+w2+w3+w4+w5+w6_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1+h2+h3+h4+h5+h6" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1+h2+h3+h4+h5+h6" +
"|0_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1+w2_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1+w2+w3_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1+w2+w3+w4_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1+w2+w3+w4+w5_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1+w2+w3+w4+w5+w6_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1+h2+h3+h4+h5+h6+h7" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1+h2+h3+h4+h5+h6+h7" +
"|0_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1+w2_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1+w2+w3_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1+w2+w3+w4_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1+w2+w3+w4+w5_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1+w2+w3+w4+w5+w6_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1+w2+w3+w4+w5+w6+w7_h0+h1+h2+h3+h4+h5+h6+h7+h8" +
"|w0+w1+w2+w3+w4+w5+w6+w7+w8_h0+h1+h2+h3+h4+h5+h6+h7+h8", nil},
{6, xstack.AlignHorizontal, "0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0", nil},
// see https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos%20using%20xstack
{9, xstack.AlignHorizontal, "0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0|0_h0+h1|w0_h0+h1|w0+w1_h0+h1", nil},
}
for i, tt := range tests {
func() {
layout, err := xstack.LayoutWithAlign(uint64(tt.n), tt.align)
if !errors.Is(err, tt.werr) {
t.Errorf("#%d: err = %v, want %v", i, err, tt.werr)
}
if layout != tt.wlayout {
t.Errorf("#%d: layout = %s, want %s", i, layout, tt.wlayout)
}
}()
}
}