xref: /aosp_15_r20/external/libopus/tests/opus_encode_regressions.c (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
1 /* Copyright (c) 2016 Mark Harris, Jean-Marc Valin */
2 /*
3    Redistribution and use in source and binary forms, with or without
4    modification, are permitted provided that the following conditions
5    are met:
6 
7    - Redistributions of source code must retain the above copyright
8    notice, this list of conditions and the following disclaimer.
9 
10    - Redistributions in binary form must reproduce the above copyright
11    notice, this list of conditions and the following disclaimer in the
12    documentation and/or other materials provided with the distribution.
13 
14    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
16    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
17    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
18    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
22    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
23    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26 
27 
28 #ifdef HAVE_CONFIG_H
29 #include "config.h"
30 #endif
31 
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <limits.h>
35 #include <stdint.h>
36 #include <math.h>
37 #include <string.h>
38 #include "opus_multistream.h"
39 #include "opus.h"
40 #include "test_opus_common.h"
41 
42 
celt_ec_internal_error(void)43 static int celt_ec_internal_error(void)
44 {
45     OpusMSEncoder *enc;
46     int err;
47     unsigned char data[2460];
48     int streams;
49     int coupled_streams;
50     unsigned char mapping[1];
51 
52     enc = opus_multistream_surround_encoder_create(16000, 1, 1, &streams,
53         &coupled_streams, mapping, OPUS_APPLICATION_VOIP, &err);
54     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
55     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
56     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(0));
57     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
58     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(0));
59     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(0));
60     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(0));
61     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
62     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_AUTO));
63     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(8));
64     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(0));
65     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(0));
66     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(OPUS_AUTO));
67     {
68         static const short pcm[320] =
69         {
70                  0,     0,     0,     0,     0,     0,     0,     0,     0,
71                  0,     0,     0,     0,     0,     0,  1792,  1799,  1799,
72               1799,  1799,  1799,  1799,  1799,  1799,  1799,  1799,  1799,
73               1799,  1799,  1799,  1799,  1799,     0, 25600,  1799,  1799,
74               1799,  1799,  1799,  1799,  1799,  1799,  1799,  1799,  1799,
75               1799,  1799,  1799,  1799,     7,     0,   255,     0,     0,
76                  0,     0,     0,     0,     0,     0,     0, 32767,    -1,
77                  0,     0,     0,   100,     0, 16384,     0,     0,     0,
78                  0,     0,     0,     4,     0,     0,  -256,   255,     0,
79                  0,     0,     0,     0,     0,     0,     0,     0,     0,
80                  0,     0,     0,     0,     0,     0,     0,     0,     0,
81                  0,     0,-32768,     0,     0,     0,     0,     0,     0,
82                  0,     0,     0,     0,     0,     0,     0,     0,     0,
83                  0,     0,     0,     0,     0,     0,     0,     0,     0,
84                  0,     0,     0,     0,   128,     0,     0,     0,     0,
85                  0,     0,     0,     0,  -256,     0,     0,    32,     0,
86                  0,     0,     0,     0,     0,     0,  4352,     4,   228,
87                  0,     0,     0,     0,     0,     0,     0,     0,     0,
88                  0,     0,     0,     0,     0,     0,  5632,     0,     0,
89                  0,     0,-32768,     0,     0,     0,     0,     0,     0,
90                  0,     0,     0,     0,     0,     0,     0,     0,     0,
91                  0,     0,     0,     0,     0,     0,     0,     0,     0,
92                  0,     0,     0,   256,     0,     0,     0,     0,     0,
93                  0,     0,     0,     0,     0,     0,     0,     0,     0,
94              -3944, 10500,  4285, 10459, -6474, 10204, -6539, 11601, -6824,
95              13385, -7142, 13872,-11553, 13670, -7725, 13463, -6887,  7874,
96              -5580, 12600, -4964, 12480,  3254, 11741, -4210,  9741, -3155,
97               7558, -5468,  5431, -1073,  3641, -1304,     0,    -1,   343,
98                 26,     0,     0,   150,     0,     0,     0,     0,     0,
99                  0,     0,     0,     0,     0,     0,     0,     0,     0,
100                  0,     0,     0,     0,     0,     0,     0,     0,     0,
101                  0,     0,     0,     0,     0,     0,     0,     0,     0,
102                  0,     0,     0,     0,     0,     0,     0,     0,     0,
103                  0,     0,     0,  1799,  1799,  1799,  1799,  1799, -2553,
104                  7,  1792,  1799,  1799,  1799,  1799,  1799,  1799,  1799,
105               1799,  1799,  1799,  1799, -9721
106         };
107         err = opus_multistream_encode(enc, pcm, 320, data, 2460);
108         opus_test_assert(err > 0);
109     }
110     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
111     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
112     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(1));
113     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
114     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(0));
115     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(1));
116     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(10));
117     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
118     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
119     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(18));
120     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));
121     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(90));
122     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(280130));
123     {
124         static const short pcm[160] =
125         {
126              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
127              -9510, -9510, -9510, -9510, -9510, -9510, -9526, -9510, -9510,
128              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
129              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
130              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
131              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
132              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
133              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
134              -9510, -9510, -9510, -9510, -9510, 25600, -9510, -9510, -9510,
135              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
136              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
137              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
138              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
139              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
140              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
141              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
142              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
143              -9510, -9510, -9510, -9510, -9510, -9510, -9510
144         };
145         err = opus_multistream_encode(enc, pcm, 160, data, 2460);
146         opus_test_assert(err > 0);
147     }
148     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
149     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
150     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(1));
151     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
152     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(0));
153     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(1));
154     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(10));
155     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
156     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
157     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(18));
158     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));
159     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(90));
160     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(280130));
161     {
162         static const short pcm[160] =
163         {
164              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
165              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
166              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
167              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
168              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
169              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
170              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
171              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
172              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
173              -9510, -9494, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
174              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
175              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
176              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
177              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
178              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
179              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
180              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
181              -9510, -9510, -9510, -9510, -9510, -9510, -9510
182         };
183         err = opus_multistream_encode(enc, pcm, 160, data, 2460);
184         opus_test_assert(err > 0);
185     }
186     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
187     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
188     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(1));
189     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
190     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(0));
191     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(1));
192     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(10));
193     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
194     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
195     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(18));
196     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));
197     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(90));
198     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(280130));
199     {
200         static const short pcm[160] =
201         {
202              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
203              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
204              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
205              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
206              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
207              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
208              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
209              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
210              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
211              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
212              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
213              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
214              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
215              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
216              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9479, -9510,
217              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
218              -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510, -9510,
219              -9510, -9510, -9510, -9510, -9510, -9510, -9510
220         };
221         err = opus_multistream_encode(enc, pcm, 160, data, 2460);
222         opus_test_assert(err > 0);
223     }
224     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
225     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
226     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(1));
227     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
228     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(0));
229     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(1));
230     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(10));
231     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
232     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
233     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(18));
234     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));
235     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(90));
236     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(280130));
237     {
238         static const short pcm[160] =
239         {
240              -9510, -9510,  1799,  1799,  1799,  1799,  1799,  1799,  1799,
241               1799,  1799,  1799,  1799,  1799,  1799,  1799,  1799,     0,
242                  0,     0,     0,     0,     0,     0,     0,     0,     0,
243                  0,     0,     0,     0,     0,     0,     0,     0,     0,
244                  0,     0,     0,     0,     0,     0,     0,     0,     0,
245               -256,   255,     0,     0,     0,     0,     0,     0,     0,
246                  0,     0,     0,     0,     0,     0,     0,     0,     0,
247                  0,     0,     0,     0,     0,     0,     0,     0,     0,
248                  0,     0,     0,     0,     0,     0,     0,     0,     0,
249                  0,     0,     0,     0,     0,     0,     0,     0,     0,
250                  0,     0,     0,     0,     0,     0,     0,   128,     0,
251                  0,     0,     0,     0,     0,     0,     0,     0,     0,
252                  0,    32,     0,     0,     0,     0,     0,     0,     0,
253               4352,     4,     0,     0,     0,     0,     0,     0,     0,
254                  0,     0,     0,     0,   148,     0,     0,     0,     0,
255               5632
256         };
257         err = opus_multistream_encode(enc, pcm, 160, data, 2460);
258         opus_test_assert(err > 0);
259     }
260     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE));
261     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
262     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(1));
263     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
264     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(1));
265     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(1));
266     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(0));
267     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
268     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_AUTO));
269     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(12));
270     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(0));
271     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(41));
272     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(21425));
273     {
274         static const short pcm[40] =
275         {
276              10459, -6474, 10204, -6539, 11601, -6824, 13385, -7142, 13872,
277             -11553, 13670, -7725, 13463, -6887, 12482, -5580, 12600, -4964,
278              12480,  3254, 11741, -4210,  9741, -3155,  7558, -5468,  5431,
279              -1073,  3641, -1304,     0,    -1,   343,    26,     0,     0,
280                  0,     0,  -256,   226
281         };
282         err = opus_multistream_encode(enc, pcm, 40, data, 2460);
283         opus_test_assert(err > 0);
284         /* returns -3 */
285     }
286     opus_multistream_encoder_destroy(enc);
287     return 0;
288 }
289 
mscbr_encode_fail10(void)290 static int mscbr_encode_fail10(void)
291 {
292     OpusMSEncoder *enc;
293     int err;
294     unsigned char data[627300];
295     static const unsigned char mapping[255] =
296     {
297           0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
298          17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
299          34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
300          51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
301          68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
302          85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,
303         102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,
304         119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,
305         136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,
306         153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,
307         170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,
308         187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,
309         204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,
310         221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,
311         238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254
312     };
313 
314     enc = opus_multistream_encoder_create(8000, 255, 254, 1, mapping,
315         OPUS_APPLICATION_RESTRICTED_LOWDELAY, &err);
316     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE));
317     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
318     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(0));
319     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(0));
320     opus_multistream_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(2));
321     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(1));
322     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(1));
323     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(2));
324     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
325     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_AUTO));
326     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(14));
327     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(0));
328     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(57));
329     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(3642675));
330     {
331         static const short pcm[20*255] =
332         {
333                  0
334         };
335         err = opus_multistream_encode(enc, pcm, 20, data, 627300);
336         opus_test_assert(err > 0);
337         /* returns -1 */
338     }
339     opus_multistream_encoder_destroy(enc);
340     return 0;
341 }
342 
mscbr_encode_fail(void)343 static int mscbr_encode_fail(void)
344 {
345     OpusMSEncoder *enc;
346     int err;
347     unsigned char data[472320];
348     static const unsigned char mapping[192] =
349     {
350           0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
351          17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
352          34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
353          51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
354          68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
355          85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,
356         102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,
357         119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,
358         136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,
359         153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,
360         170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,
361         187,188,189,190,191
362     };
363 
364     enc = opus_multistream_encoder_create(8000, 192, 189, 3, mapping,
365         OPUS_APPLICATION_RESTRICTED_LOWDELAY, &err);
366     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
367     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(0));
368     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(0));
369     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(0));
370     opus_multistream_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(OPUS_AUTO));
371     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(0));
372     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(0));
373     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(0));
374     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_MEDIUMBAND));
375     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_AUTO));
376     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(8));
377     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(0));
378     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(0));
379     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(15360));
380     {
381         static const short pcm[20*192] =
382         {
383                  0
384         };
385         err = opus_multistream_encode(enc, pcm, 20, data, 472320);
386         opus_test_assert(err > 0);
387         /* returns -1 */
388     }
389     opus_multistream_encoder_destroy(enc);
390     return 0;
391 }
392 
surround_analysis_uninit(void)393 static int surround_analysis_uninit(void)
394 {
395     OpusMSEncoder *enc;
396     int err;
397     unsigned char data[7380];
398     int streams;
399     int coupled_streams;
400     unsigned char mapping[3];
401 
402     enc = opus_multistream_surround_encoder_create(24000, 3, 1, &streams,
403         &coupled_streams, mapping, OPUS_APPLICATION_AUDIO, &err);
404     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE));
405     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(1));
406     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(1));
407     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(0));
408     opus_multistream_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(OPUS_AUTO));
409     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(0));
410     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(0));
411     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(0));
412     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
413     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
414     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(8));
415     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));
416     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(84315));
417     {
418         static const short pcm[960*3] =
419         {
420              -6896,  4901, -6158,  4120, -5164,  3631, -4442,  3153, -4070,
421               3349, -4577,  4474, -5541,  5058, -6701,  3881, -7933,  1863,
422              -8041,   697, -6738,-31464, 14330,-12523,  4096, -6130, 29178,
423               -250,-21252, 10467, 16907, -3359, -6644, 31965, 14607,-21544,
424             -32497, 24020, 12557,-26926,-18421, -1842, 24587, 19659,  4878,
425              10954, 23060,  8907,-10215,-16179, 31772,-11825,-15590,-23089,
426              17173,-25903,-17387, 11733,  4884, 10204,-16476,-14367,   516,
427              20453,-16898, 20967,-23813,   -20, 22011,-17167,  9459, 32499,
428             -25855,  -523, -3883,  -390, -4206,   634, -3767,  2325, -2751,
429               3115, -2392,  2746, -2173,  2317, -1147,  2326, 23142, 11314,
430             -15350,-24529,  3026,  6146,  2150,  2476,  1105,  -830,  1775,
431              -3425,  3674,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
432               4293,-14023,  3879,-15553,  3158,-16161,  2629, 18433,-12535,
433              -6645,-20735,-32763,-13824,-20992, 25859, 13052, -8731,  2292,
434              -3860, 24049, 10225,-19220, 10478,-22294, 22773, 28137, 13816,
435              30953,-25863,-24598, 16888,-14612,-28942, 20974,-27397,-18944,
436             -18690, 20991,-16638,  5632,-14330, 28911,-25594, 17408, 29958,
437               -517,-20984, -1800, 11281,  9977,-21221,-14854, 23840, -9477,
438               3362,-12805,-22493, 32507,   156, 16384, -1163,  2301, -1874,
439               4600, -1748,  6950, 16557,  8192, -7372, -1033, -3278,  2806,
440              20275,  3317,  -717,  9792,  -767,  9099,  -613,  8362,  5027,
441               7774,  2597,  8549,  5278,  8743,  9343,  6940, 13038,  4826,
442              14086,  2964, 13215,  1355, 11596,   455,  9850,  -519, 10680,
443              -2287, 12551, -3736, 13639, -4291, 13790, -2722, 14544,  -866,
444              15050,  -304, 22833, -1196, 13520, -2063, 13051, -2317, 13066,
445              -2737, 13773, -2664, 14105, -3447, 13854, 24589, 24672, -5280,
446              10388, -4933,  7543, -4149,  3654, -1552,  1726,   661,    57,
447               2922,  -751,  3917,  8419,  3840, -5218,  3435,  5540, -1073,
448               4153, -6656,  1649,  -769, -7276,-13072,  6380, -7948, 20717,
449              18425, 17392, 14335,-18190, -1842, 24587, 19659, 11790, 10954,
450              23060,  8907,-10215,-16179, 31772,-11825,-15590,-23101, 17173,
451             -25903,-17387, 11733,  4884, 10192,-16627,-14367,   516, 20453,
452             -16898, 20967,-23813,   -20, 22011,-17167,  9468, 32499,-25607,
453               -523, -3883,  -390, -4206,   634, -3767,  2325, -2751,  3115,
454              -2392,  2746, -2161,  2317, -1147,  2326, 23142, 11314,-15350,
455             -29137,  3026,-15056,  -491,-15170,  -386,-16015,  -641,-16505,
456               -930,-16206,  -717,-16175, -2839,-16374, -4558,-16237, -5207,
457             -15903, -6421,  6373, -1403,  5431, -1073,  3641, -1304, -4495,
458               -769, -7276,  2856, -7870,  3314, -8730,  3964,-10183,  4011,
459             -11135,  3421,-11727,  2966,-12360,  2818,-13472,  3660,-13805,
460               5162,-13478,  6434,-12840,  7335,-12420,  6865,-12349,  5541,
461             -11965,  5530,-10820,  5132, -9197,  3367, -7745,  1223, -6910,
462               -433, -6211, -1711, -4958, -1025, -3755,  -836, -3292, -1666,
463              -2661,-10755, 31472,-27906, 31471, 18690,  5617, 16649, 11253,
464             -22516,-17674,-31990,  3575,-31479,  5883, 26121, 12890, -6612,
465              12228,-11634,   523, 26136,-21496, 20745,-15868, -4100,-24826,
466              23282, 22798,   491, -1774, 15075,-27373,-13094,  6417,-29487,
467              14608, 10185, 16143, 22211, -8436,  4288, -8694,  2375,  3023,
468                486,  1455,   128,   202,   942,  -923,  2068, -1233,  -717,
469              -1042, -2167, 32255, -4632,   310, -4458, -3639, -5258,  2106,
470              -6857,  2681, -7497,  2765, -6601,  1945, -5219, 19154, -4877,
471                619, -5719, -1928, -6208,  -121,   593,   188,  1558, -4152,
472               1648,   156,  1604, -3664, -6862, -2851, -5112, -3600, -3747,
473              -5081, -4428, -5592, 20974,-27397,-18944,-18690, 20991,-17406,
474               5632,-14330, 28911, 15934, 15934, 15934, 15934, 15934, 15934,
475              15934, 15934, 15934, 15934, 15934, 15934,-25594, 17408, 29958,
476              -7173,-16888,  9098,  -613,  8362,   675,  7774,  2597,  8549,
477               5278,  8743,  9375,  6940, 13038,  4826, 14598,  7721,-24308,
478             -29905,-19703,-17106,-16124, -3287,-26118,-19709,-10769, 24353,
479              28648,  6946, -1363, 12485, -1187, 26074,-25055, 10004,-24798,
480               7204, -4581, -9678,  1554, 10553,  3102, 12193,  2443, 11955,
481               1213, 10689, -1293,   921, -4173, 10709, -6049,  8815, -7128,
482               8147, -8308,  6847, -2977,  4920,-11447,-22426,-11794,  3514,
483             -10220,  3430, -7993,  1926, -7072,   327, -7569,  -608, -7605,
484               3695, -6271, -1579, -4877, -1419, -3103, -2197,   128, -3904,
485               3760, -5401,  4906, -6051,  4250, -6272,  3492, -6343,  3197,
486              -6397,  4041, -6341,  6255, -6381,  7905, 16504,     0, -6144,
487               8062, -5606,  8622, -5555,    -9,    -1,  7423,     0,     1,
488                238,  5148,  1309,  4700,  2218,  4403,  2573,  3568, 28303,
489               1758,  3454, -1247,  3434, -4912,  2862, -7844,  1718,-10095,
490                369,-12631,   128, -3904,  3632, -5401,  4906, -6051,  4250,
491              -6272,  3492, -6343,  3197, -6397,  4041, -6341,  6255, -6381,
492               7905, 16504,     0, -6144,  8062, -5606,  8622, -5555,  8439,
493              -3382,  7398, -1170,  6132,   238,  5148,  1309,  4700,  2218,
494               4403,  2573,  3568,  2703,  1758,  3454, -1247,  3434, -4912,
495               2862, -7844,  1718,-10095,   369,-12631,  -259,-14632,   234,
496             -15056,  -521,-15170,  -386,-16015,  -641,-16505,  -930,-16206,
497              -1209,-16146, -2839,-16374, -4558,-16218, -5207,-15903, -6421,
498             -15615, -6925,-14871, -6149,-13759, -5233,-12844, 18313, -4357,
499              -5696,  2804, 12992,-22802, -6720, -9770, -7088, -8998, 14330,
500             -12523, 14843, -6130, 29178,  -250,-27396, 10467, 16907, -3359,
501              -6644, 31965, 14607,-21544,-32497, 24020, 12557,-26926,  -173,
502               -129, -6401,  -130,-25089, -3841, -4916, -3048,   224,  -237,
503              -3969,  -189, -3529,  -535, -3464,-14863,-14907,-14907,-14907,
504             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
505             -14907,-14395,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
506             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
507             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
508             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
509             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
510             -14907,-14907,     0, 32512,-14907,-14907,-14907,-14907,-14907,
511             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
512             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
513             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
514             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
515             -14907,-14907,-14907,-14907,-14907,  9925,  -718,  9753,  -767,
516               9099,  -613,  8362,   675,  7774,  2597,  8549,  5278,  8743,
517               9375,  6940, 13038,  4826, 14598,  7721,-24308,-29905,-19703,
518             -17106,-16124, -3287,-26118,-19709,     0, 24353, 28648, 10274,
519             -11292,-29665,-16417, 24346, 14553, 18707, 26323, -4596,-17711,
520               5133, 26328,    13,-31168, 24583, 18404,-28927,-24350, 19453,
521              28642,  1019,-10777, -3079, 30188, -7686, 27635,-32521,-16384,
522              12528, -6386, 10986, 23827,-25880,-32752,-23321, 14605, 32231,
523                780,-13849, 15119, 28647,  4888, -7705, 30750,    64,     0,
524              32488,  6687,-20758, 19745, -2070,-13792, -6414, 28188, -2821,
525              -4585,  7168,  7444, 23557,-21998, 13064,  3345, -4086,-28915,
526              -8694, 32262,  8461, 27387,-12275, 12012, 23563,-18719,-28410,
527              29144,-22271,  -562, -9986, -5434, 12288,  5573,-16642, 32448,
528              29182, 32705,-30723, 24255,-19716, 18368, -4357, -5696,  2804,
529              12992,-22802,-22080, -7701, -5183,   486, -3133, -5660, -1083,
530              16871,-28726,-11029,-30259, -1209,-16146, -2839,-16374, -4558,
531             -16218,-10523, 20697, -9500, -1316,  5431, -1073,  3641, -1304,
532               1649,  -769, -7276,  2856, -7870,  3314, -8730,  3964,-10183,
533               4011,-11135,  3421,-11727, 21398, 32767,    -1, 32486,    -1,
534               6301,-13071,  6380, -7948,    -1, 32767,   240, 14081, -5646,
535              30973, -3598,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
536             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
537             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
538             -14907,-14907,-14907,-14907, 32767,-14907,-14907,-14907,-14907,
539             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
540             -14907,  8901,  9375,  6940, 13038,  4826, 14598,  7721,-24308,
541             -29905,-19703,-17106,-16124, -3287,-26118,-19709,-10769, 24361,
542              28648, 10274,-11292,-29665,-16417, 24346, 14580, 18707, 26323,
543              -4440,-17711,  5133, 26328,-14579,-31008, 24583, 18404, 28417,
544             -24350, 19453, 28642,-32513,-10777, -3079, 30188, -7686, 27635,
545             -32521,-16384,-20240, -6386, 10986, 23827,-25880,-32752,-23321,
546              14605, 32231,   780,-13849, 15119, 28647,  4888, -7705,-15074,
547             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
548             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
549             -14907,-14907,-14907,  8192,-14907,-14907,-14907,-14907,-14907,
550             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
551             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
552             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
553             -14907,-14907,-14907,-14897,-14907,-14907,-14907,-14907,-14907,
554             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
555             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
556             -15931,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
557             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
558             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
559             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
560             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
561             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
562             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
563             -14907,-14907,-14907,-14907,-14907,-14907, 26121, 12890,  2604,
564              12228,-11634, 12299,  5573,-16642, 32452, 29182, 32705,-30723,
565              24255,-19716, 13248,-11779, -5696,  2804, 12992,-27666,-22080,
566              -7701, -5183, -6682,-31464, 14330,-12523, 14843, -6130, 29178,
567                -18,-27396, 10467, 16907, -3359, -6644, 31965, 14607,-21544,
568             -32497, 24020, 12557,-26926,-18421,   706, 24587, 19659,  4878,
569              10954, 23060,  8907,-10215,-22579, 31772,-11825,-15590,-23089,
570              17173,-25903,-17387,  3285,  4884, 10204,-16627,-14367,   516,
571              20453,-16898, 20967,-23815,   -20, 22011,-17167,  9468, 32499,
572             -25607,  -523, -3883,  -390, -4206,   634, -3767,  2325, -2751,
573               3115, -2392,  2746, -2173,  2317, -1147,  2326, 23142, 11314,
574             -15130,-29137,  3026,  6146,  2150,  2476,  1105,  -830,  1775,
575              -3425,  3674, -5287,  4609, -7175,  4922, -9579,  4556,-12007,
576               4236,-14023,  3879,-15553,  3158,-16161,  2576, 18398,-12535,
577              -6645,-20735,-32763,-13824,-20992, 25859,  5372, 12040, 13307,
578              -4355,-30213,    -9, -6019, 14061,-31487,-13842, 30449, 15083,
579              14088, 31205,-18678,-12830, 14090,-26138,-25337,-11541, -3254,
580              27628,-22270, 30953,-16136,-30745, 20991,-17406,  5632,-14330,
581              28911,-25594, 17408,-20474, 13041, -8731,  2292, -3860, 24049,
582              10225,-19220, 10478, -4374, -1199,   148,  -330,   -74,   593,
583                188,  1558, -4152, 15984, 15934, 15934, 15934, 15934, 15934,
584              15934, 15934, 15934, 15934, 15934, 15934,  1598,   156,  1604,
585              -1163,  2278,-30018,-25821,-21763,-23776, 24066,  9502, 25866,
586             -25055, 10004,-24798,  7204, -4581, -9678,  1554, 10553,  3102,
587              12193,  2443, 11955,  1213, 10689, -1293,   921, -4173,  8661,
588              -6049,  8815,-21221,-14854, 23840, -9477,  8549,  5278,  8743,
589               9375,  6940, 13038,  4826, 14598,  7721,-24308,-29905,-19703,
590             -17106,-16124, -3287,-26118,-19709,-10769, 24361, 28648, 10274,
591             -11292,-29665,-16417, 24346, 14580, 18707, 26323, -4410,-17711,
592               5133, 26328,-14579,-31008, 24583, 18404, 28417,-24350, 19453,
593              28642,-32513,-10777, -3079, 30188, -7686, 27635,-32521,-16384,
594             -20240, -6386, 10986, 23827,-25880,-32752,-23321, 14605, 32231,
595                780,-13849, 15119, 28647,  4888, -7705, 30750,    64,     0,
596              32488,  6687,-20758, 19745, -2070,    -1,    -1,    28,   256,
597              -4608,  7168,  7444, 23557,-21998, 13064,  3345, -4086,-28915,
598              -8594, 32262,  8461, 27387,-12275, 12012, 23563,-18719,-28410,
599              29144,-22271,-32562,-16384, 12528, -6386, 10986, 23827,-25880,
600             -32752,-23321, 14605, 32231,   780,-13849, 15119, 28647,  4888,
601              -7705, 30750,    64,     0, 32488,  6687,-20758, 19745, -2070,
602             -13792, -6414, 28188, -2821, -4585,  7168,  7444, 23557,-21998,
603              13064,  3345, -4086,-28915, -8694, 32262,  8461, 27387,-12275,
604              12012, 23563,-18719,-28410, 29144,-22271,  -562, -9986, -5434,
605              12288, -2107,-16643, 32452, 29182, 32705,-30723, 24255,-19716,
606              18368, -4357, -5696,  2804, 12992,-22802,-22080, -7701, -5183,
607                486, -3133, -5660, -1083, 16871,-28726,-11029,-30259, -1209,
608             -16146, -2839,-16374, -4558,-16218,-10523, 20697, -9500, -1316,
609               5431, -1073,  3641, -1304,  1649,  -769, -7276,  2856, -7870,
610               3314, -8730,  3964,-10183,  4011,-11135,  3421,-11727, 21398,
611              32767,    -1, 32486,    -1,   -99,-13072,  6380, -7948,  4864,
612              32767, 17392, 14335, -5646, 30973, -3598,-10299,-14907,-14907,
613             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
614             -14907,-14907,-14905,-14907,-14907,-14907,-14907,-14907,-14907,
615             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
616             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
617             -14907,-14907,-14907,-14907,-14907,-19771,-14907,-14907,-14907,
618             -14907,-14907,-14907,-14907,-14907,-16443,-14907,-14907,-14907,
619             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
620             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
621             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
622             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
623             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
624             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
625             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
626             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
627             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
628             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
629             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
630             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
631             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
632             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
633             -14907,-14907,-14907,-14907,-15931,-14907,-14907,-14907,-14907,
634             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
635             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
636             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
637             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
638             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
639             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
640             -14907,-14907,-14907,-14907,-14907,-14907,    -1,-14907,-14907,
641             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
642             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
643             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
644             -14907,-14907,  7877,  7710,  7710,  7710,  7710,  7710,  7710,
645               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
646               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
647               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
648               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
649               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
650               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
651               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
652               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
653               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
654               7710,  7710,  7710,  7710,  7710,  -994, -7276,  2856, -7870,
655               3314, -8730,  3964,-10183,  4011,-11135,  3421,-11727, 21398,
656              32767,    -1, 32486,    -1,   -99,-13072,  6380, -7948,  4864,
657              32767, 17392, 14335, -5646, 30973, -3598,-14907,-14907,-14907,
658             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
659             -14907,-14907,-14905,-14907,-14907,-14907,-14907,-14907,-14907,
660             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
661             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
662             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
663             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
664             -14907,-14907,   197,     0,-14977,-14907,-14907,-14907,-14907,
665             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
666             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
667             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
668             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
669             -14907,-14907,-14907,-14907,-14907,-14907, 12838,  6653,   294,
670             -29699,-25821,-21763,-23776, 24066,  9502, 25866,-25055, 10004,
671             -24798,  7204, -4581, -9678,  1554, 10553,  3102, 12193,  2443,
672              11955,  1213, 10689, -1293,   921,   179,  8448, -6049,  8815,
673              -7128,  8147, -8308,  6847, -9889,  4920,-11447,  3174,-11794,
674               3514,-10220,  3430, 16384,  1926, -7072,   327, -7537,  -608,
675              -7605, -1169, -6397, -1579, -4877, -1419, -3103, -2197,   128,
676              -3904,  3632, -5401,  4906, -6051,  4250, -6272,  3492, -6343,
677               3197, -6397,  4041, -6341,  6255, -6381,  7905, 16504,     0,
678              -6144,  8062, -5606,  8622, -5555,  8439, -3382,  7398, -1170,
679               6132,   238,  5148,  1309,  4700,  2218,  4403,  2573,  3568,
680               2703,  1758,  3454, -1247,  3434, -4912,  2862, -7844,  1718,
681             -10095,   369,-12631,  -259,-14632,   234,-15056,  -491,-16194,
682               -386,-16015,  -641,-16505,  -930,-16206, -1209,-16146, -2839,
683             -16374, -4558,-16218, -5207,-15903, -6421,-15615, -6925,-14871,
684              -6149,-13759, -5233,-12844, 18313, -4357, -5696,  2804, 12992,
685             -22802, -6720, -9770, -7088, -8998, 14330,-12523, 14843, -6130,
686              29178,  -250,-27396, 10467, 16907, -3359, -6644, 31965, 14607,
687             -21544,-32497, 24020, 12557,-26926,  -173,  -129, -6401,  -130,
688             -25089, -3816, -4916, -3048,   -32,    -1, -3969,   256, -3529,
689               -535, -3464,-14863,-14907,-14907,-14907,-14907,-14907,-14907,
690             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
691             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
692              -1209,-16146, -2839,-16374, -4558,-16218,-10523, 20697, -9500,
693              -1316,  5431, -1073,  3641, -1304,  1649,  -769, -7276,  2856,
694              -7870,  3314, -8730,  3964,-10183,  4011,-11135,  3421,-11727,
695              21398, 32767,    -1, 32486,    -1,  6301,-13071,  6380, -7948,
696                 -1, 32767,   240, 14081, -5646, 30973, -3598,-14907,-14907,
697             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
698             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
699             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
700              32767,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
701             -14907,-14907,-14907,-14907,-14907,-14907,  8901,  9375,  6940,
702              13038,  4826, 14598,  7721,-24308,-29905,-19703,-17106,-16124,
703              -3287,-26118,-19709,-10769, 24361, 28648, 10274,-11292,-29665,
704             -16417, 24346, 14580, 18707, 26323, -4440,-17711,  5133, 26328,
705             -14579,-31008, 24583, 18404, 28417,-24350, 19453, 28642,-32513,
706             -10777, -3079, 30188, -7686, 27635,-32521,-16384,-20240, -6386,
707              10986, 23827,-25880,-32752,-23321, 14605, 32231,   780,-13849,
708              15119, 28647,  4888, -7705,-15074,-14907,-14907,-14907,-14907,
709             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
710             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,  8192,
711             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
712             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
713             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
714             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14897,
715             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
716             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
717             -14907,-14907,-14907,-14907,-14907,-15931,-14907,-14907,-14907,
718             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
719             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
720             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
721             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
722             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
723             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
724             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
725             -14907,-14907, 26121, 12890,  2604, 12228,-11634, 12299,  5573,
726             -16642, 32452, 29182, 32705,-30723, 24255,-19716, 13248,-11779,
727              -5696,  2804, 12992,-27666,-22080, -7701, -5183, -6682,-31464,
728              14330,-12523, 14843, -6130, 29178,   -18,-27396, 10467, 16907,
729              -3359, -6644, 31965, 14607,-21544,-32497, 24020, 12557,-26926,
730             -18421,   706, 24587, 19659,  4878, 10954, 23060,  8907,-10215,
731             -22579, 31772,-11825,-15590,-23089, 17173,-25903,-17387,  3285,
732               4884, 10204,-16627,-14367,   516, 20453,-16898, 20967,-23815,
733                -20, 22011,-17167,  9468, 32499,-25607,  -523, -3883,  -390,
734              -4206,   634, -3767,  2325, -2751,  3115, -2392,  2746, -2173,
735               2317, -1147,  2326, 23142, 11314,-15130,-29137,  3026,  6146,
736               2150,  2476,  1105,  -830,  1775, -3425,  3674, -5287,  4609,
737              -7175,  4922, -9579,  4556,-12007,  4236,-14023,  3879,-15553,
738               3158,-16161,  2576, 18398,-12535, -6645,-20735,-32763,-13824,
739             -20992, 25859,  5372, 12040, 13307, -4355,-30213,    -9, -6019
740         };
741         err = opus_multistream_encode(enc, pcm, 960, data, 7380);
742         opus_test_assert(err > 0);
743     }
744     opus_multistream_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
745     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(1));
746     opus_multistream_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(0));
747     opus_multistream_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
748     opus_multistream_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(OPUS_AUTO));
749     opus_multistream_encoder_ctl(enc, OPUS_SET_PHASE_INVERSION_DISABLED(1));
750     opus_multistream_encoder_ctl(enc, OPUS_SET_DTX(1));
751     opus_multistream_encoder_ctl(enc, OPUS_SET_COMPLEXITY(6));
752     opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
753     opus_multistream_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_AUTO));
754     opus_multistream_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(9));
755     opus_multistream_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));
756     opus_multistream_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(5));
757     opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(775410));
758     {
759         static const short pcm[1440*3] =
760         {
761              30449, 15083, 14088, 31205,-18678,-12830, 14090,-26138,-25337,
762             -11541, -3254, 27628,-22270, 30953,-16136,-30745, 20991,-17406,
763               5632,-14330, 28911,-25594, 17408,-20474, 13041, -8731,  2292,
764              -3860, 24049, 10225,-19220, 10478, -4374, -1199,   148,  -330,
765                -74,   593,   188,  1558, -4152, 15984, 15934, 15934, 15934,
766              15934, 15934, 15934, 15934, 15934, 15934, 15934, 15934,  1598,
767                156,  1604, -1163,  2278,-30018,-25821,-21763,-23776, 24066,
768               9502, 25866,-25055, 10004,-24798,  7204, -4581, -9678,  1554,
769              10553,  3102, 12193,  2443, 11955,  1213, 10689, -1293,   921,
770              -4173,  8661, -6049,  8815,-21221,-14854, 23840, -9477,  8549,
771               5278,  8743,  9375,  6940, 13038,  4826, 14598,  7721,-24308,
772             -29905,-19703,-17106,-16124, -3287,-26118,-19709,-10769, 24361,
773              28648, 10274,-11292,-29665,-16417, 24346, 14580, 18707, 26323,
774              -4410,-17711,  5133, 26328,-14579,-31008, 24583, 18404, 28417,
775             -24350, 19453, 28642,-32513,-10777, -3079, 30188, -7686, 27635,
776             -32521,-16384,-20240, -6386, 10986, 23827,-25880,-32752,-23321,
777              14605, 32231,   780,-13849, 15119, 28647,  4888, -7705, 30750,
778                 64,     0, 32488,  6687,-20758, 19745, -2070,    -1,    -1,
779                 28,   256, -4608,  7168,  7444, 23557,-21998, 13064,  3345,
780              -4086,-28915, -8594, 32262,  8461, 27387,-12275, 12012, 23563,
781             -18719,-28410, 29144,-22271,-32562,-16384, 12528, -6386, 10986,
782              23827,-25880,-32752,-23321, 14605, 32231,   780,-13849, 15119,
783              28647,  4888, -7705, 30750,    64,     0, 32488,  6687,-20758,
784              19745, -2070,-13792, -6414, 28188, -2821, -4585,  7168,  7444,
785              23557,-21998, 13064,  3345, -4086,-28915, -8694, 32262,  8461,
786             -14853,-14907,-14907,-14907,-14907, 32767,-14907,-14907,-14907,
787             -14907,-14907,-14907,-14907,-14907,-14891,-14907,-14907,-14907,
788             -14907,-14907,  8901,  9375,  6940, 13038,  4826, 14598,  7721,
789             -24308,-29905,-19703,-17106,-16124, -3287,-26118,-19709,-10769,
790              24361, 28648, 10274,-11292,-29665,-16417, 24346, 14580, 18707,
791              26323, -4440,-17711,  5133, 26328,-14579,-31008, 24583, 18404,
792              28417,-24350, 19453, 28642,-32513,-10777, -3079, 30188, -7686,
793              27635,-32521,-16384,-20240, -6386, 10986, 23827,-25880,-32752,
794             -23321, 14605, 32231,   780,-13849, 15119, 28647,  4888, -7705,
795             -15074,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
796             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
797             -14907,-14907,-14907,-14907,  8192,-14907,-14907,-14907,-14907,
798             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
799             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
800             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
801             -14907,-14907,-14907,-14907,-14897,-14907,-14907,-14907,-14907,
802             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
803             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
804             -14907,-15931,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
805             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
806             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
807             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
808             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
809             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
810             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
811             -14907,-14907,-14907,-14907,-14907,-14907,-14907, 26121, 12890,
812               2604, 12228,-11634, 12299,  5573,-16642, 32452, 29182,  7710,
813               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
814               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
815               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
816               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
817               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
818               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
819               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
820               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
821               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
822               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
823               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
824               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
825               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
826               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
827               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
828               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
829               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
830               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
831               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
832               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
833               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
834               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
835               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
836               7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,  7710,
837               7710,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
838             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
839             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
840             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
841             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
842             -14907,-14907,-14907,-14907,-14907,-14907,-10811,-14907,-14907,
843             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
844             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
845             -14907,-14907,-14917,-14907,-14907,-14907,-14907,-14907,-14907,
846             -14907,-14907,-14907,-14907,-14907,-14907,-14938,-14907,-14907,
847             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
848             -14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,-14907,
849             -14907,-14907,-14907,-14907,  -571, -9986,   -58, 12542,-18491,
850              32507, 12838,  6653,   294,    -1,     0,-19968, 18368, -4357,
851              -5696,  2804, 12998,-22802,-22080, -7701, -5183,   486, -3133,
852              -5660, -1083, 13799,-28726,-11029,   205,-14848, 32464,    -1,
853               -129,-13072,  6380, -7948, 20717, 18425, 17392, 14335, -5646,
854              30973, -3598,  7188, -3867,  3055, -4247,  5597, -4011,-26427,
855                -11,-30418,  7922,  2614,   237, -5839,-27413,-17624,-29716,
856             -13539,   239, 20991, 18164, -4082,-16647,-27386, 19458, 20224,
857               4619, 19728, -7409,-18186,-25073, 27627,-23539, -7945,-31464,
858              14330,-12523,-22021, -7701, -5183,   486, -3133, -5660, -1083,
859              13799,-28726,-11029,   205,-14848, 32464,    -1,  -129,-13072,
860               6380, -7948, 20717, 18425, 17392, 14093, -5646, 30973, -3598,
861               7188, -3867,  3055,  3689, -5401,  4906, -6051,  4250, -6272,
862               3492, -6343,  3197, -6397,  4041, -6341,  6255, -6381,   239,
863              20991, 18164, -4082,-16647,-27386, 19458, 20224,  4619, 19728,
864              -7409,-18186,-25073, 27627,-23539, -7945,-31464, 14330,-12523,
865              14843, -6130, 30202,  -250,-28420, 10467, 16907, -3359, -6644,
866              31965,  3343,-11727,  2966,-12616,  3064,-13472,  6732,-12349,
867               5541,-11965,  5530,-10820, -1912, -3637, 32285, -4607,   310,
868             -32768,     0, -5258,  2106, -6857,  2681, -5449, -3606, -6717,
869              -5482, -3606, -1853,  4082, -7631, -9808, -1742, -2851, -5112,
870                 64,  -868,-13546,-13365,-13365,-13365,-13365,-13365,-13365,
871             -13365,-13365,-13365,-13365,-13365,-13365,-13365,-13365,-13365,
872             -13365,-13365,-13365,-13365,-13365,-13365,-13365,-13365,-13365,
873             -13365,-13365,-13365,-13365,-13365,-13365,-13365,-13365,-13365,
874             -13365,-13365,-13365,-13365,-13365,-13365,-13365,  7883, -2316,
875               9086, -3944, 10500,  4285, 10459, -6474, 10204, -6539, 11601,
876              -6824, 13385, -7142, 13872, -7457, 13670, -7725, 13463, -6887,
877              12482, -5580, 12600, -4964, 12480,  3254, 11741, -4210,-24819,
878              23282, 22798,   491, -1774, -1073,  3641, -1304, 28928,  -250,
879             -27396,  6657, -8961, 22524, 19987, 10231,  1791,  8947,-32763,
880             -26385,-31227,  -792,-30461,  8926,  4866, 27863, 27756, 27756,
881              27756, 27756, 27756, 27756, 27756, 27756,  5630,-11070,-16136,
882              20671,-11530, 27328,  8179,  5059,-31503,-24379,-19472, 17863,
883             -29202, 22986,   -23,  8909,  8422, 10450
884         };
885         err = opus_multistream_encode(enc, pcm, 1440, data, 7380);
886         /* reads uninitialized data at src/opus_multistream_encoder.c:293 */
887         opus_test_assert(err > 0);
888     }
889     opus_multistream_encoder_destroy(enc);
890     return 0;
891 }
892 
ec_enc_shrink_assert(void)893 static int ec_enc_shrink_assert(void)
894 {
895     OpusEncoder *enc;
896     int err;
897     int data_len;
898     unsigned char data[2000];
899     static const short pcm1[960] = { 5140 };
900     static const short pcm2[2880] =
901     {
902           -256,-12033,     0, -2817,  6912,     0, -5359,  5200,  3061,
903              0, -2903,  5652, -1281,-24656,-14433,-24678,    32,-29793,
904           2870,     0,  4096,  5120,  5140,  -234,-20230,-24673,-24633,
905         -24673,-24705,     0,-32768,-25444,-25444,     0,-25444,-25444,
906            156,-20480, -7948, -5920, -7968, -7968,   224,     0, 20480,
907             11, 20496,    13, 20496,    11,-20480,  2292,-20240,   244,
908          20480,    11, 20496,    11,-20480,   244,-20240,  7156, 20456,
909           -246,-20243,   244,   128,   244, 20480,    11, 20496,    11,
910         -20480,   244,-20256,   244, 20480,   256,     0,  -246, 16609,
911           -176,     0, 29872, -4096, -2888,   516,  2896,  4096,  2896,
912         -20480, -3852, -2896, -1025,-31056,-14433,   244,  1792,  -256,
913         -12033,     0, -2817,     0,     0, -5359,  5200,  3061,    16,
914          -2903,  5652, -1281,-24656,-14433,-24678,    32,-29793,  2870,
915              0,  4096,  5120,  5140,  -234,-20230,-24673,-24633,-24673,
916         -24705,     0,-32768,-25444,-25444,     0,-25444,-25444,   156,
917         -20480, -7973, -5920, -7968, -7968,   224,     0, 20480,    11,
918          20496,    11, 20496,    11,-20480,  2292,-20213,   244, 20480,
919             11, 20496,    11,-24698, -2873,     0,     7,    -1,   208,
920           -256,   244,     0,  4352, 20715, -2796,    11,-22272,  5364,
921           -234,-20230,-24673,-25913,  8351,-24832, 13963,    11,     0,
922             16,  5140,  5652, -1281,-24656,-14433,-24673, 32671,   159,
923              0,-25472,-25444,   156,-25600,-25444,-25444,     0, -2896,
924          -7968, -7960, -7968, -7968,     0,     0,  2896,  4096,  2896,
925           4096,  2896,     0, -2896, -4088, -2896,     0,  2896,     0,
926          -2896, -4096, -2896,    11,  2640, -4609, -2896,-32768, -3072,
927              0,  2896,  4096,  2896,     0, -2896, -4096, -2896,     0,
928             80,     1,  2816,     0, 20656,   255,-20480,   116,-18192
929     };
930     static const short pcm3[2880] = { 0 };
931 
932     enc = opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, &err);
933     opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(10));
934     opus_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(6));
935     opus_encoder_ctl(enc, OPUS_SET_BITRATE(6000));
936     data_len = opus_encode(enc, pcm1, 960, data, 2000);
937     opus_test_assert(data_len > 0);
938 
939     opus_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE));
940     opus_encoder_ctl(enc, OPUS_SET_PREDICTION_DISABLED(1));
941     opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_SUPERWIDEBAND));
942     opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(1));
943     opus_encoder_ctl(enc, OPUS_SET_BITRATE(15600));
944     data_len = opus_encode(enc, pcm2, 2880, data, 122);
945     opus_test_assert(data_len > 0);
946 
947     opus_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
948     opus_encoder_ctl(enc, OPUS_SET_BITRATE(27000));
949     data_len = opus_encode(enc, pcm3, 2880, data, 122); /* assertion failure */
950     opus_test_assert(data_len > 0);
951 
952     opus_encoder_destroy(enc);
953     return 0;
954 }
955 
ec_enc_shrink_assert2(void)956 static int ec_enc_shrink_assert2(void)
957 {
958     OpusEncoder *enc;
959     int err;
960     int data_len;
961     unsigned char data[2000];
962 
963     enc = opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, &err);
964     opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(6));
965     opus_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE));
966     opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
967     opus_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(26));
968     opus_encoder_ctl(enc, OPUS_SET_BITRATE(27000));
969     {
970         static const short pcm[960] = { 0 };
971         data_len = opus_encode(enc, pcm, 960, data, 2000);
972         opus_test_assert(data_len > 0);
973     }
974     opus_encoder_ctl(enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
975     {
976         static const short pcm[480] =
977         {
978             32767, 32767, 0, 0, 32767, 32767, 0, 0, 32767, 32767,
979             -32768, -32768, 0, 0, -32768, -32768, 0, 0, -32768, -32768
980         };
981         data_len = opus_encode(enc, pcm, 480, data, 19);
982         opus_test_assert(data_len > 0);
983     }
984     opus_encoder_destroy(enc);
985     return 0;
986 }
987 
silk_gain_assert(void)988 static int silk_gain_assert(void)
989 {
990     OpusEncoder *enc;
991     int err;
992     int data_len;
993     unsigned char data[1000];
994     static const short pcm1[160] = { 0 };
995     static const short pcm2[960] =
996     {
997         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
998         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
999         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1000         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1001         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1002         32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1003         0, 0, 0, 0, 32767
1004     };
1005 
1006     enc = opus_encoder_create(8000, 1, OPUS_APPLICATION_AUDIO, &err);
1007     opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(3));
1008     opus_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
1009     opus_encoder_ctl(enc, OPUS_SET_BITRATE(6000));
1010     data_len = opus_encode(enc, pcm1, 160, data, 1000);
1011     opus_test_assert(data_len > 0);
1012 
1013     opus_encoder_ctl(enc, OPUS_SET_VBR(0));
1014     opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(0));
1015     opus_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_MEDIUMBAND));
1016     opus_encoder_ctl(enc, OPUS_SET_BITRATE(2867));
1017     data_len = opus_encode(enc, pcm2, 960, data, 1000);
1018     opus_test_assert(data_len > 0);
1019 
1020     opus_encoder_destroy(enc);
1021     return 0;
1022 }
1023 
regression_test(void)1024 void regression_test(void)
1025 {
1026    fprintf(stderr, "Running simple tests for bugs that have been fixed previously\n");
1027    celt_ec_internal_error();
1028    mscbr_encode_fail10();
1029    mscbr_encode_fail();
1030    surround_analysis_uninit();
1031    ec_enc_shrink_assert();
1032    ec_enc_shrink_assert2();
1033    silk_gain_assert();
1034 }
1035