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