FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
opus_celt.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012 Andrew D'Addesio
3  * Copyright (c) 2013-2014 Mozilla Corporation
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * Opus CELT decoder
25  */
26 
27 #include <stdint.h>
28 
29 #include "libavutil/float_dsp.h"
30 
31 #include "opus.h"
32 #include "opus_imdct.h"
33 
34 enum CeltSpread {
39 };
40 
41 typedef struct CeltFrame {
44 
46 
47  /* buffer for mdct output + postfilter */
48  DECLARE_ALIGNED(32, float, buf)[2048];
49 
50  /* postfilter parameters */
52  float pf_gains_new[3];
53  int pf_period;
54  float pf_gains[3];
56  float pf_gains_old[3];
57 
58  float deemph_coeff;
59 } CeltFrame;
60 
61 struct CeltContext {
62  // constant values that do not change during context lifetime
67 
68  // values that have inter-frame effect and must be reset on flush
70  uint32_t seed;
71  int flushed;
72 
73  // values that only affect a single frame
75  int framebits;
76  int duration;
77 
78  /* number of iMDCT blocks in the frame */
79  int blocks;
80  /* size of each block */
81  int blocksize;
82 
83  int startband;
84  int endband;
86 
88 
92 
93  int remaining;
99 
101  DECLARE_ALIGNED(32, float, scratch)[22 * 8]; // MAX(celt_freq_range) * 1<<CELT_MAX_LOG_BLOCKS
102 };
103 
104 static const uint16_t celt_model_tapset[] = { 4, 2, 3, 4 };
105 
106 static const uint16_t celt_model_spread[] = { 32, 7, 9, 30, 32 };
107 
108 static const uint16_t celt_model_alloc_trim[] = {
109  128, 2, 4, 9, 19, 41, 87, 109, 119, 124, 126, 128
110 };
111 
112 static const uint16_t celt_model_energy_small[] = { 4, 2, 3, 4 };
113 
114 static const uint8_t celt_freq_bands[] = { /* in steps of 200Hz */
115  0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 34, 40, 48, 60, 78, 100
116 };
117 
118 static const uint8_t celt_freq_range[] = {
119  1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 6, 6, 8, 12, 18, 22
120 };
121 
122 static const uint8_t celt_log_freq_range[] = {
123  0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 16, 16, 21, 21, 24, 29, 34, 36
124 };
125 
126 static const int8_t celt_tf_select[4][2][2][2] = {
127  { { { 0, -1 }, { 0, -1 } }, { { 0, -1 }, { 0, -1 } } },
128  { { { 0, -1 }, { 0, -2 } }, { { 1, 0 }, { 1, -1 } } },
129  { { { 0, -2 }, { 0, -3 } }, { { 2, 0 }, { 1, -1 } } },
130  { { { 0, -2 }, { 0, -3 } }, { { 3, 0 }, { 1, -1 } } }
131 };
132 
133 static const float celt_mean_energy[] = {
134  6.437500f, 6.250000f, 5.750000f, 5.312500f, 5.062500f,
135  4.812500f, 4.500000f, 4.375000f, 4.875000f, 4.687500f,
136  4.562500f, 4.437500f, 4.875000f, 4.625000f, 4.312500f,
137  4.500000f, 4.375000f, 4.625000f, 4.750000f, 4.437500f,
138  3.750000f, 3.750000f, 3.750000f, 3.750000f, 3.750000f
139 };
140 
141 static const float celt_alpha_coef[] = {
142  29440.0f/32768.0f, 26112.0f/32768.0f, 21248.0f/32768.0f, 16384.0f/32768.0f
143 };
144 
145 static const float celt_beta_coef[] = { /* TODO: precompute 1 minus this if the code ends up neater */
146  30147.0f/32768.0f, 22282.0f/32768.0f, 12124.0f/32768.0f, 6554.0f/32768.0f
147 };
148 
149 static const uint8_t celt_coarse_energy_dist[4][2][42] = {
150  {
151  { // 120-sample inter
152  72, 127, 65, 129, 66, 128, 65, 128, 64, 128, 62, 128, 64, 128,
153  64, 128, 92, 78, 92, 79, 92, 78, 90, 79, 116, 41, 115, 40,
154  114, 40, 132, 26, 132, 26, 145, 17, 161, 12, 176, 10, 177, 11
155  }, { // 120-sample intra
156  24, 179, 48, 138, 54, 135, 54, 132, 53, 134, 56, 133, 55, 132,
157  55, 132, 61, 114, 70, 96, 74, 88, 75, 88, 87, 74, 89, 66,
158  91, 67, 100, 59, 108, 50, 120, 40, 122, 37, 97, 43, 78, 50
159  }
160  }, {
161  { // 240-sample inter
162  83, 78, 84, 81, 88, 75, 86, 74, 87, 71, 90, 73, 93, 74,
163  93, 74, 109, 40, 114, 36, 117, 34, 117, 34, 143, 17, 145, 18,
164  146, 19, 162, 12, 165, 10, 178, 7, 189, 6, 190, 8, 177, 9
165  }, { // 240-sample intra
166  23, 178, 54, 115, 63, 102, 66, 98, 69, 99, 74, 89, 71, 91,
167  73, 91, 78, 89, 86, 80, 92, 66, 93, 64, 102, 59, 103, 60,
168  104, 60, 117, 52, 123, 44, 138, 35, 133, 31, 97, 38, 77, 45
169  }
170  }, {
171  { // 480-sample inter
172  61, 90, 93, 60, 105, 42, 107, 41, 110, 45, 116, 38, 113, 38,
173  112, 38, 124, 26, 132, 27, 136, 19, 140, 20, 155, 14, 159, 16,
174  158, 18, 170, 13, 177, 10, 187, 8, 192, 6, 175, 9, 159, 10
175  }, { // 480-sample intra
176  21, 178, 59, 110, 71, 86, 75, 85, 84, 83, 91, 66, 88, 73,
177  87, 72, 92, 75, 98, 72, 105, 58, 107, 54, 115, 52, 114, 55,
178  112, 56, 129, 51, 132, 40, 150, 33, 140, 29, 98, 35, 77, 42
179  }
180  }, {
181  { // 960-sample inter
182  42, 121, 96, 66, 108, 43, 111, 40, 117, 44, 123, 32, 120, 36,
183  119, 33, 127, 33, 134, 34, 139, 21, 147, 23, 152, 20, 158, 25,
184  154, 26, 166, 21, 173, 16, 184, 13, 184, 10, 150, 13, 139, 15
185  }, { // 960-sample intra
186  22, 178, 63, 114, 74, 82, 84, 83, 92, 82, 103, 62, 96, 72,
187  96, 67, 101, 73, 107, 72, 113, 55, 118, 52, 125, 52, 118, 52,
188  117, 55, 135, 49, 137, 39, 157, 32, 145, 29, 97, 33, 77, 40
189  }
190  }
191 };
192 
193 static const uint8_t celt_static_alloc[11][21] = { /* 1/32 bit/sample */
194  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
195  { 90, 80, 75, 69, 63, 56, 49, 40, 34, 29, 20, 18, 10, 0, 0, 0, 0, 0, 0, 0, 0 },
196  { 110, 100, 90, 84, 78, 71, 65, 58, 51, 45, 39, 32, 26, 20, 12, 0, 0, 0, 0, 0, 0 },
197  { 118, 110, 103, 93, 86, 80, 75, 70, 65, 59, 53, 47, 40, 31, 23, 15, 4, 0, 0, 0, 0 },
198  { 126, 119, 112, 104, 95, 89, 83, 78, 72, 66, 60, 54, 47, 39, 32, 25, 17, 12, 1, 0, 0 },
199  { 134, 127, 120, 114, 103, 97, 91, 85, 78, 72, 66, 60, 54, 47, 41, 35, 29, 23, 16, 10, 1 },
200  { 144, 137, 130, 124, 113, 107, 101, 95, 88, 82, 76, 70, 64, 57, 51, 45, 39, 33, 26, 15, 1 },
201  { 152, 145, 138, 132, 123, 117, 111, 105, 98, 92, 86, 80, 74, 67, 61, 55, 49, 43, 36, 20, 1 },
202  { 162, 155, 148, 142, 133, 127, 121, 115, 108, 102, 96, 90, 84, 77, 71, 65, 59, 53, 46, 30, 1 },
203  { 172, 165, 158, 152, 143, 137, 131, 125, 118, 112, 106, 100, 94, 87, 81, 75, 69, 63, 56, 45, 20 },
204  { 200, 200, 200, 200, 200, 200, 200, 200, 198, 193, 188, 183, 178, 173, 168, 163, 158, 153, 148, 129, 104 }
205 };
206 
207 static const uint8_t celt_static_caps[4][2][21] = {
208  { // 120-sample
209  {224, 224, 224, 224, 224, 224, 224, 224, 160, 160,
210  160, 160, 185, 185, 185, 178, 178, 168, 134, 61, 37},
211  {224, 224, 224, 224, 224, 224, 224, 224, 240, 240,
212  240, 240, 207, 207, 207, 198, 198, 183, 144, 66, 40},
213  }, { // 240-sample
214  {160, 160, 160, 160, 160, 160, 160, 160, 185, 185,
215  185, 185, 193, 193, 193, 183, 183, 172, 138, 64, 38},
216  {240, 240, 240, 240, 240, 240, 240, 240, 207, 207,
217  207, 207, 204, 204, 204, 193, 193, 180, 143, 66, 40},
218  }, { // 480-sample
219  {185, 185, 185, 185, 185, 185, 185, 185, 193, 193,
220  193, 193, 193, 193, 193, 183, 183, 172, 138, 65, 39},
221  {207, 207, 207, 207, 207, 207, 207, 207, 204, 204,
222  204, 204, 201, 201, 201, 188, 188, 176, 141, 66, 40},
223  }, { // 960-sample
224  {193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
225  193, 193, 194, 194, 194, 184, 184, 173, 139, 65, 39},
226  {204, 204, 204, 204, 204, 204, 204, 204, 201, 201,
227  201, 201, 198, 198, 198, 187, 187, 175, 140, 66, 40}
228  }
229 };
230 
231 static const uint8_t celt_cache_bits[392] = {
232  40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
233  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
234  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28,
235  31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50,
236  51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65,
237  66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61,
238  64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92,
239  94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123,
240  124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94,
241  97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139,
242  142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35,
243  28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149,
244  153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225,
245  229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157,
246  166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63,
247  86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250,
248  25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180,
249  185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89,
250  110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41,
251  74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138,
252  163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214,
253  228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49,
254  90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47,
255  87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57,
256  106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187,
257  224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127,
258  182, 234
259 };
260 
261 static const int16_t celt_cache_index[105] = {
262  -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 41, 41, 41,
263  82, 82, 123, 164, 200, 222, 0, 0, 0, 0, 0, 0, 0, 0, 41,
264  41, 41, 41, 123, 123, 123, 164, 164, 240, 266, 283, 295, 41, 41, 41,
265  41, 41, 41, 41, 41, 123, 123, 123, 123, 240, 240, 240, 266, 266, 305,
266  318, 328, 336, 123, 123, 123, 123, 123, 123, 123, 123, 240, 240, 240, 240,
267  305, 305, 305, 318, 318, 343, 351, 358, 364, 240, 240, 240, 240, 240, 240,
268  240, 240, 305, 305, 305, 305, 343, 343, 343, 351, 351, 370, 376, 382, 387,
269 };
270 
271 static const uint8_t celt_log2_frac[] = {
272  0, 8, 13, 16, 19, 21, 23, 24, 26, 27, 28, 29, 30, 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 37
273 };
274 
275 static const uint8_t celt_bit_interleave[] = {
276  0, 1, 1, 1, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3
277 };
278 
279 static const uint8_t celt_bit_deinterleave[] = {
280  0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F,
281  0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF
282 };
283 
284 static const uint8_t celt_hadamard_ordery[] = {
285  1, 0,
286  3, 0, 2, 1,
287  7, 0, 4, 3, 6, 1, 5, 2,
288  15, 0, 8, 7, 12, 3, 11, 4, 14, 1, 9, 6, 13, 2, 10, 5
289 };
290 
291 static const uint16_t celt_qn_exp2[] = {
292  16384, 17866, 19483, 21247, 23170, 25267, 27554, 30048
293 };
294 
295 static const uint32_t celt_pvq_u[1272] = {
296  /* N = 0, K = 0...176 */
297  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
298  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
299  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
300  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
301  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
302  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
303  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
304  /* N = 1, K = 1...176 */
305  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
306  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
307  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
308  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
309  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
310  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
311  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
312  /* N = 2, K = 2...176 */
313  3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
314  43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
315  81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
316  115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143,
317  145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
318  175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203,
319  205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233,
320  235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263,
321  265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293,
322  295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323,
323  325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351,
324  /* N = 3, K = 3...176 */
325  13, 25, 41, 61, 85, 113, 145, 181, 221, 265, 313, 365, 421, 481, 545, 613,
326  685, 761, 841, 925, 1013, 1105, 1201, 1301, 1405, 1513, 1625, 1741, 1861,
327  1985, 2113, 2245, 2381, 2521, 2665, 2813, 2965, 3121, 3281, 3445, 3613, 3785,
328  3961, 4141, 4325, 4513, 4705, 4901, 5101, 5305, 5513, 5725, 5941, 6161, 6385,
329  6613, 6845, 7081, 7321, 7565, 7813, 8065, 8321, 8581, 8845, 9113, 9385, 9661,
330  9941, 10225, 10513, 10805, 11101, 11401, 11705, 12013, 12325, 12641, 12961,
331  13285, 13613, 13945, 14281, 14621, 14965, 15313, 15665, 16021, 16381, 16745,
332  17113, 17485, 17861, 18241, 18625, 19013, 19405, 19801, 20201, 20605, 21013,
333  21425, 21841, 22261, 22685, 23113, 23545, 23981, 24421, 24865, 25313, 25765,
334  26221, 26681, 27145, 27613, 28085, 28561, 29041, 29525, 30013, 30505, 31001,
335  31501, 32005, 32513, 33025, 33541, 34061, 34585, 35113, 35645, 36181, 36721,
336  37265, 37813, 38365, 38921, 39481, 40045, 40613, 41185, 41761, 42341, 42925,
337  43513, 44105, 44701, 45301, 45905, 46513, 47125, 47741, 48361, 48985, 49613,
338  50245, 50881, 51521, 52165, 52813, 53465, 54121, 54781, 55445, 56113, 56785,
339  57461, 58141, 58825, 59513, 60205, 60901, 61601,
340  /* N = 4, K = 4...176 */
341  63, 129, 231, 377, 575, 833, 1159, 1561, 2047, 2625, 3303, 4089, 4991, 6017,
342  7175, 8473, 9919, 11521, 13287, 15225, 17343, 19649, 22151, 24857, 27775,
343  30913, 34279, 37881, 41727, 45825, 50183, 54809, 59711, 64897, 70375, 76153,
344  82239, 88641, 95367, 102425, 109823, 117569, 125671, 134137, 142975, 152193,
345  161799, 171801, 182207, 193025, 204263, 215929, 228031, 240577, 253575,
346  267033, 280959, 295361, 310247, 325625, 341503, 357889, 374791, 392217,
347  410175, 428673, 447719, 467321, 487487, 508225, 529543, 551449, 573951,
348  597057, 620775, 645113, 670079, 695681, 721927, 748825, 776383, 804609,
349  833511, 863097, 893375, 924353, 956039, 988441, 1021567, 1055425, 1090023,
350  1125369, 1161471, 1198337, 1235975, 1274393, 1313599, 1353601, 1394407,
351  1436025, 1478463, 1521729, 1565831, 1610777, 1656575, 1703233, 1750759,
352  1799161, 1848447, 1898625, 1949703, 2001689, 2054591, 2108417, 2163175,
353  2218873, 2275519, 2333121, 2391687, 2451225, 2511743, 2573249, 2635751,
354  2699257, 2763775, 2829313, 2895879, 2963481, 3032127, 3101825, 3172583,
355  3244409, 3317311, 3391297, 3466375, 3542553, 3619839, 3698241, 3777767,
356  3858425, 3940223, 4023169, 4107271, 4192537, 4278975, 4366593, 4455399,
357  4545401, 4636607, 4729025, 4822663, 4917529, 5013631, 5110977, 5209575,
358  5309433, 5410559, 5512961, 5616647, 5721625, 5827903, 5935489, 6044391,
359  6154617, 6266175, 6379073, 6493319, 6608921, 6725887, 6844225, 6963943,
360  7085049, 7207551,
361  /* N = 5, K = 5...176 */
362  321, 681, 1289, 2241, 3649, 5641, 8361, 11969, 16641, 22569, 29961, 39041,
363  50049, 63241, 78889, 97281, 118721, 143529, 172041, 204609, 241601, 283401,
364  330409, 383041, 441729, 506921, 579081, 658689, 746241, 842249, 947241,
365  1061761, 1186369, 1321641, 1468169, 1626561, 1797441, 1981449, 2179241,
366  2391489, 2618881, 2862121, 3121929, 3399041, 3694209, 4008201, 4341801,
367  4695809, 5071041, 5468329, 5888521, 6332481, 6801089, 7295241, 7815849,
368  8363841, 8940161, 9545769, 10181641, 10848769, 11548161, 12280841, 13047849,
369  13850241, 14689089, 15565481, 16480521, 17435329, 18431041, 19468809,
370  20549801, 21675201, 22846209, 24064041, 25329929, 26645121, 28010881,
371  29428489, 30899241, 32424449, 34005441, 35643561, 37340169, 39096641,
372  40914369, 42794761, 44739241, 46749249, 48826241, 50971689, 53187081,
373  55473921, 57833729, 60268041, 62778409, 65366401, 68033601, 70781609,
374  73612041, 76526529, 79526721, 82614281, 85790889, 89058241, 92418049,
375  95872041, 99421961, 103069569, 106816641, 110664969, 114616361, 118672641,
376  122835649, 127107241, 131489289, 135983681, 140592321, 145317129, 150160041,
377  155123009, 160208001, 165417001, 170752009, 176215041, 181808129, 187533321,
378  193392681, 199388289, 205522241, 211796649, 218213641, 224775361, 231483969,
379  238341641, 245350569, 252512961, 259831041, 267307049, 274943241, 282741889,
380  290705281, 298835721, 307135529, 315607041, 324252609, 333074601, 342075401,
381  351257409, 360623041, 370174729, 379914921, 389846081, 399970689, 410291241,
382  420810249, 431530241, 442453761, 453583369, 464921641, 476471169, 488234561,
383  500214441, 512413449, 524834241, 537479489, 550351881, 563454121, 576788929,
384  590359041, 604167209, 618216201, 632508801,
385  /* N = 6, K = 6...96 (technically V(109,5) fits in 32 bits, but that can't be
386  achieved by splitting an Opus band) */
387  1683, 3653, 7183, 13073, 22363, 36365, 56695, 85305, 124515, 177045, 246047,
388  335137, 448427, 590557, 766727, 982729, 1244979, 1560549, 1937199, 2383409,
389  2908411, 3522221, 4235671, 5060441, 6009091, 7095093, 8332863, 9737793,
390  11326283, 13115773, 15124775, 17372905, 19880915, 22670725, 25765455,
391  29189457, 32968347, 37129037, 41699767, 46710137, 52191139, 58175189,
392  64696159, 71789409, 79491819, 87841821, 96879431, 106646281, 117185651,
393  128542501, 140763503, 153897073, 167993403, 183104493, 199284183, 216588185,
394  235074115, 254801525, 275831935, 298228865, 322057867, 347386557, 374284647,
395  402823977, 433078547, 465124549, 499040399, 534906769, 572806619, 612825229,
396  655050231, 699571641, 746481891, 795875861, 847850911, 902506913, 959946283,
397  1020274013, 1083597703, 1150027593, 1219676595, 1292660325, 1369097135,
398  1449108145, 1532817275, 1620351277, 1711839767, 1807415257, 1907213187,
399  2011371957, 2120032959,
400  /* N = 7, K = 7...54 (technically V(60,6) fits in 32 bits, but that can't be
401  achieved by splitting an Opus band) */
402  8989, 19825, 40081, 75517, 134245, 227305, 369305, 579125, 880685, 1303777,
403  1884961, 2668525, 3707509, 5064793, 6814249, 9041957, 11847485, 15345233,
404  19665841, 24957661, 31388293, 39146185, 48442297, 59511829, 72616013,
405  88043969, 106114625, 127178701, 151620757, 179861305, 212358985, 249612805,
406  292164445, 340600625, 395555537, 457713341, 527810725, 606639529, 695049433,
407  793950709, 904317037, 1027188385, 1163673953, 1314955181, 1482288821,
408  1667010073, 1870535785, 2094367717,
409  /* N = 8, K = 8...37 (technically V(40,7) fits in 32 bits, but that can't be
410  achieved by splitting an Opus band) */
411  48639, 108545, 224143, 433905, 795455, 1392065, 2340495, 3800305, 5984767,
412  9173505, 13726991, 20103025, 28875327, 40754369, 56610575, 77500017,
413  104692735, 139703809, 184327311, 240673265, 311207743, 398796225, 506750351,
414  638878193, 799538175, 993696769, 1226990095, 1505789553, 1837271615,
415  2229491905,
416  /* N = 9, K = 9...28 (technically V(29,8) fits in 32 bits, but that can't be
417  achieved by splitting an Opus band) */
418  265729, 598417, 1256465, 2485825, 4673345, 8405905, 14546705, 24331777,
419  39490049, 62390545, 96220561, 145198913, 214828609, 312193553, 446304145,
420  628496897, 872893441, 1196924561, 1621925137, 2173806145,
421  /* N = 10, K = 10...24 */
422  1462563, 3317445, 7059735, 14218905, 27298155, 50250765, 89129247, 152951073,
423  254831667, 413442773, 654862247, 1014889769, 1541911931, 2300409629,
424  3375210671,
425  /* N = 11, K = 11...19 (technically V(20,10) fits in 32 bits, but that can't be
426  achieved by splitting an Opus band) */
427  8097453, 18474633, 39753273, 81270333, 158819253, 298199265, 540279585,
428  948062325, 1616336765,
429  /* N = 12, K = 12...18 */
430  45046719, 103274625, 224298231, 464387817, 921406335, 1759885185,
431  3248227095,
432  /* N = 13, K = 13...16 */
433  251595969, 579168825, 1267854873, 2653649025,
434  /* N = 14, K = 14 */
435  1409933619
436 };
437 
438 DECLARE_ALIGNED(32, static const float, celt_window)[120] = {
439  6.7286966e-05f, 0.00060551348f, 0.0016815970f, 0.0032947962f, 0.0054439943f,
440  0.0081276923f, 0.011344001f, 0.015090633f, 0.019364886f, 0.024163635f,
441  0.029483315f, 0.035319905f, 0.041668911f, 0.048525347f, 0.055883718f,
442  0.063737999f, 0.072081616f, 0.080907428f, 0.090207705f, 0.099974111f,
443  0.11019769f, 0.12086883f, 0.13197729f, 0.14351214f, 0.15546177f,
444  0.16781389f, 0.18055550f, 0.19367290f, 0.20715171f, 0.22097682f,
445  0.23513243f, 0.24960208f, 0.26436860f, 0.27941419f, 0.29472040f,
446  0.31026818f, 0.32603788f, 0.34200931f, 0.35816177f, 0.37447407f,
447  0.39092462f, 0.40749142f, 0.42415215f, 0.44088423f, 0.45766484f,
448  0.47447104f, 0.49127978f, 0.50806798f, 0.52481261f, 0.54149077f,
449  0.55807973f, 0.57455701f, 0.59090049f, 0.60708841f, 0.62309951f,
450  0.63891306f, 0.65450896f, 0.66986776f, 0.68497077f, 0.69980010f,
451  0.71433873f, 0.72857055f, 0.74248043f, 0.75605424f, 0.76927895f,
452  0.78214257f, 0.79463430f, 0.80674445f, 0.81846456f, 0.82978733f,
453  0.84070669f, 0.85121779f, 0.86131698f, 0.87100183f, 0.88027111f,
454  0.88912479f, 0.89756398f, 0.90559094f, 0.91320904f, 0.92042270f,
455  0.92723738f, 0.93365955f, 0.93969656f, 0.94535671f, 0.95064907f,
456  0.95558353f, 0.96017067f, 0.96442171f, 0.96834849f, 0.97196334f,
457  0.97527906f, 0.97830883f, 0.98106616f, 0.98356480f, 0.98581869f,
458  0.98784191f, 0.98964856f, 0.99125274f, 0.99266849f, 0.99390969f,
459  0.99499004f, 0.99592297f, 0.99672162f, 0.99739874f, 0.99796667f,
460  0.99843728f, 0.99882195f, 0.99913147f, 0.99937606f, 0.99956527f,
461  0.99970802f, 0.99981248f, 0.99988613f, 0.99993565f, 0.99996697f,
462  0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.0000000f,
463 };
464 
465 /* square of the window, used for the postfilter */
466 const float ff_celt_window2[120] = {
467  4.5275357e-09f, 3.66647e-07f, 2.82777e-06f, 1.08557e-05f, 2.96371e-05f, 6.60594e-05f,
468  0.000128686f, 0.000227727f, 0.000374999f, 0.000583881f, 0.000869266f, 0.0012475f,
469  0.0017363f, 0.00235471f, 0.00312299f, 0.00406253f, 0.00519576f, 0.00654601f,
470  0.00813743f, 0.00999482f, 0.0121435f, 0.0146093f, 0.017418f, 0.0205957f, 0.0241684f,
471  0.0281615f, 0.0326003f, 0.0375092f, 0.0429118f, 0.0488308f, 0.0552873f, 0.0623012f,
472  0.0698908f, 0.0780723f, 0.0868601f, 0.0962664f, 0.106301f, 0.11697f, 0.12828f,
473  0.140231f, 0.152822f, 0.166049f, 0.179905f, 0.194379f, 0.209457f, 0.225123f, 0.241356f,
474  0.258133f, 0.275428f, 0.293212f, 0.311453f, 0.330116f, 0.349163f, 0.368556f, 0.388253f,
475  0.40821f, 0.428382f, 0.448723f, 0.469185f, 0.48972f, 0.51028f, 0.530815f, 0.551277f,
476  0.571618f, 0.59179f, 0.611747f, 0.631444f, 0.650837f, 0.669884f, 0.688547f, 0.706788f,
477  0.724572f, 0.741867f, 0.758644f, 0.774877f, 0.790543f, 0.805621f, 0.820095f, 0.833951f,
478  0.847178f, 0.859769f, 0.87172f, 0.88303f, 0.893699f, 0.903734f, 0.91314f, 0.921928f,
479  0.930109f, 0.937699f, 0.944713f, 0.951169f, 0.957088f, 0.962491f, 0.9674f, 0.971838f,
480  0.975832f, 0.979404f, 0.982582f, 0.985391f, 0.987857f, 0.990005f, 0.991863f, 0.993454f,
481  0.994804f, 0.995937f, 0.996877f, 0.997645f, 0.998264f, 0.998753f, 0.999131f, 0.999416f,
482  0.999625f, 0.999772f, 0.999871f, 0.999934f, 0.99997f, 0.999989f, 0.999997f, 0.99999964f, 1.0f,
483 };
484 
485 static const uint32_t * const celt_pvq_u_row[15] = {
486  celt_pvq_u + 0, celt_pvq_u + 176, celt_pvq_u + 351,
487  celt_pvq_u + 525, celt_pvq_u + 698, celt_pvq_u + 870,
488  celt_pvq_u + 1041, celt_pvq_u + 1131, celt_pvq_u + 1178,
489  celt_pvq_u + 1207, celt_pvq_u + 1226, celt_pvq_u + 1240,
490  celt_pvq_u + 1248, celt_pvq_u + 1254, celt_pvq_u + 1257
491 };
492 
493 static inline int16_t celt_cos(int16_t x)
494 {
495  x = (MUL16(x, x) + 4096) >> 13;
496  x = (32767-x) + ROUND_MUL16(x, (-7651 + ROUND_MUL16(x, (8277 + ROUND_MUL16(-626, x)))));
497  return 1+x;
498 }
499 
500 static inline int celt_log2tan(int isin, int icos)
501 {
502  int lc, ls;
503  lc = opus_ilog(icos);
504  ls = opus_ilog(isin);
505  icos <<= 15 - lc;
506  isin <<= 15 - ls;
507  return (ls << 11) - (lc << 11) +
508  ROUND_MUL16(isin, ROUND_MUL16(isin, -2597) + 7932) -
509  ROUND_MUL16(icos, ROUND_MUL16(icos, -2597) + 7932);
510 }
511 
512 static inline uint32_t celt_rng(CeltContext *s)
513 {
514  s->seed = 1664525 * s->seed + 1013904223;
515  return s->seed;
516 }
517 
519 {
520  int i, j;
521  float prev[2] = {0};
522  float alpha, beta;
523  const uint8_t *model;
524 
525  /* use the 2D z-transform to apply prediction in both */
526  /* the time domain (alpha) and the frequency domain (beta) */
527 
528  if (opus_rc_tell(rc)+3 <= s->framebits && opus_rc_p2model(rc, 3)) {
529  /* intra frame */
530  alpha = 0;
531  beta = 1.0f - 4915.0f/32768.0f;
532  model = celt_coarse_energy_dist[s->duration][1];
533  } else {
534  alpha = celt_alpha_coef[s->duration];
535  beta = 1.0f - celt_beta_coef[s->duration];
536  model = celt_coarse_energy_dist[s->duration][0];
537  }
538 
539  for (i = 0; i < CELT_MAX_BANDS; i++) {
540  for (j = 0; j < s->coded_channels; j++) {
541  CeltFrame *frame = &s->frame[j];
542  float value;
543  int available;
544 
545  if (i < s->startband || i >= s->endband) {
546  frame->energy[i] = 0.0;
547  continue;
548  }
549 
550  available = s->framebits - opus_rc_tell(rc);
551  if (available >= 15) {
552  /* decode using a Laplace distribution */
553  int k = FFMIN(i, 20) << 1;
554  value = opus_rc_laplace(rc, model[k] << 7, model[k+1] << 6);
555  } else if (available >= 2) {
557  value = (x>>1) ^ -(x&1);
558  } else if (available >= 1) {
559  value = -(float)opus_rc_p2model(rc, 1);
560  } else value = -1;
561 
562  frame->energy[i] = FFMAX(-9.0f, frame->energy[i]) * alpha + prev[j] + value;
563  prev[j] += beta * value;
564  }
565  }
566 }
567 
569 {
570  int i;
571  for (i = s->startband; i < s->endband; i++) {
572  int j;
573  if (!s->fine_bits[i])
574  continue;
575 
576  for (j = 0; j < s->coded_channels; j++) {
577  CeltFrame *frame = &s->frame[j];
578  int q2;
579  float offset;
580  q2 = opus_getrawbits(rc, s->fine_bits[i]);
581  offset = (q2 + 0.5f) * (1 << (14 - s->fine_bits[i])) / 16384.0f - 0.5f;
582  frame->energy[i] += offset;
583  }
584  }
585 }
586 
588  int bits_left)
589 {
590  int priority, i, j;
591 
592  for (priority = 0; priority < 2; priority++) {
593  for (i = s->startband; i < s->endband && bits_left >= s->coded_channels; i++) {
594  if (s->fine_priority[i] != priority || s->fine_bits[i] >= CELT_MAX_FINE_BITS)
595  continue;
596 
597  for (j = 0; j < s->coded_channels; j++) {
598  int q2;
599  float offset;
600  q2 = opus_getrawbits(rc, 1);
601  offset = (q2 - 0.5f) * (1 << (14 - s->fine_bits[i] - 1)) / 16384.0f;
602  s->frame[j].energy[i] += offset;
603  bits_left--;
604  }
605  }
606  }
607 }
608 
610  int transient)
611 {
612  int i, diff = 0, tf_select = 0, tf_changed = 0, tf_select_bit;
613  int consumed, bits = transient ? 2 : 4;
614 
615  consumed = opus_rc_tell(rc);
616  tf_select_bit = (s->duration != 0 && consumed+bits+1 <= s->framebits);
617 
618  for (i = s->startband; i < s->endband; i++) {
619  if (consumed+bits+tf_select_bit <= s->framebits) {
620  diff ^= opus_rc_p2model(rc, bits);
621  consumed = opus_rc_tell(rc);
622  tf_changed |= diff;
623  }
624  s->tf_change[i] = diff;
625  bits = transient ? 4 : 5;
626  }
627 
628  if (tf_select_bit && celt_tf_select[s->duration][transient][0][tf_changed] !=
629  celt_tf_select[s->duration][transient][1][tf_changed])
630  tf_select = opus_rc_p2model(rc, 1);
631 
632  for (i = s->startband; i < s->endband; i++) {
633  s->tf_change[i] = celt_tf_select[s->duration][transient][tf_select][s->tf_change[i]];
634  }
635 }
636 
638 {
639  // approx. maximum bit allocation for each band before boost/trim
640  int cap[CELT_MAX_BANDS];
641  int boost[CELT_MAX_BANDS];
642  int threshold[CELT_MAX_BANDS];
643  int bits1[CELT_MAX_BANDS];
644  int bits2[CELT_MAX_BANDS];
645  int trim_offset[CELT_MAX_BANDS];
646 
647  int skip_startband = s->startband;
648  int dynalloc = 6;
649  int alloctrim = 5;
650  int extrabits = 0;
651 
652  int skip_bit = 0;
653  int intensitystereo_bit = 0;
654  int dualstereo_bit = 0;
655 
656  int remaining, bandbits;
657  int low, high, total, done;
658  int totalbits;
659  int consumed;
660  int i, j;
661 
662  consumed = opus_rc_tell(rc);
663 
664  /* obtain spread flag */
666  if (consumed + 4 <= s->framebits)
668 
669  /* generate static allocation caps */
670  for (i = 0; i < CELT_MAX_BANDS; i++) {
671  cap[i] = (celt_static_caps[s->duration][s->coded_channels - 1][i] + 64)
672  * celt_freq_range[i] << (s->coded_channels - 1) << s->duration >> 2;
673  }
674 
675  /* obtain band boost */
676  totalbits = s->framebits << 3; // convert to 1/8 bits
677  consumed = opus_rc_tell_frac(rc);
678  for (i = s->startband; i < s->endband; i++) {
679  int quanta, band_dynalloc;
680 
681  boost[i] = 0;
682 
683  quanta = celt_freq_range[i] << (s->coded_channels - 1) << s->duration;
684  quanta = FFMIN(quanta << 3, FFMAX(6 << 3, quanta));
685  band_dynalloc = dynalloc;
686  while (consumed + (band_dynalloc<<3) < totalbits && boost[i] < cap[i]) {
687  int add = opus_rc_p2model(rc, band_dynalloc);
688  consumed = opus_rc_tell_frac(rc);
689  if (!add)
690  break;
691 
692  boost[i] += quanta;
693  totalbits -= quanta;
694  band_dynalloc = 1;
695  }
696  /* dynalloc is more likely to occur if it's already been used for earlier bands */
697  if (boost[i])
698  dynalloc = FFMAX(2, dynalloc - 1);
699  }
700 
701  /* obtain allocation trim */
702  if (consumed + (6 << 3) <= totalbits)
703  alloctrim = opus_rc_getsymbol(rc, celt_model_alloc_trim);
704 
705  /* anti-collapse bit reservation */
706  totalbits = (s->framebits << 3) - opus_rc_tell_frac(rc) - 1;
707  s->anticollapse_bit = 0;
708  if (s->blocks > 1 && s->duration >= 2 &&
709  totalbits >= ((s->duration + 2) << 3))
710  s->anticollapse_bit = 1 << 3;
711  totalbits -= s->anticollapse_bit;
712 
713  /* band skip bit reservation */
714  if (totalbits >= 1 << 3)
715  skip_bit = 1 << 3;
716  totalbits -= skip_bit;
717 
718  /* intensity/dual stereo bit reservation */
719  if (s->coded_channels == 2) {
720  intensitystereo_bit = celt_log2_frac[s->endband - s->startband];
721  if (intensitystereo_bit <= totalbits) {
722  totalbits -= intensitystereo_bit;
723  if (totalbits >= 1 << 3) {
724  dualstereo_bit = 1 << 3;
725  totalbits -= 1 << 3;
726  }
727  } else
728  intensitystereo_bit = 0;
729  }
730 
731  for (i = s->startband; i < s->endband; i++) {
732  int trim = alloctrim - 5 - s->duration;
733  int band = celt_freq_range[i] * (s->endband - i - 1);
734  int duration = s->duration + 3;
735  int scale = duration + s->coded_channels - 1;
736 
737  /* PVQ minimum allocation threshold, below this value the band is
738  * skipped */
739  threshold[i] = FFMAX(3 * celt_freq_range[i] << duration >> 4,
740  s->coded_channels << 3);
741 
742  trim_offset[i] = trim * (band << scale) >> 6;
743 
744  if (celt_freq_range[i] << s->duration == 1)
745  trim_offset[i] -= s->coded_channels << 3;
746  }
747 
748  /* bisection */
749  low = 1;
750  high = CELT_VECTORS - 1;
751  while (low <= high) {
752  int center = (low + high) >> 1;
753  done = total = 0;
754 
755  for (i = s->endband - 1; i >= s->startband; i--) {
756  bandbits = celt_freq_range[i] * celt_static_alloc[center][i]
757  << (s->coded_channels - 1) << s->duration >> 2;
758 
759  if (bandbits)
760  bandbits = FFMAX(0, bandbits + trim_offset[i]);
761  bandbits += boost[i];
762 
763  if (bandbits >= threshold[i] || done) {
764  done = 1;
765  total += FFMIN(bandbits, cap[i]);
766  } else if (bandbits >= s->coded_channels << 3)
767  total += s->coded_channels << 3;
768  }
769 
770  if (total > totalbits)
771  high = center - 1;
772  else
773  low = center + 1;
774  }
775  high = low--;
776 
777  for (i = s->startband; i < s->endband; i++) {
778  bits1[i] = celt_freq_range[i] * celt_static_alloc[low][i]
779  << (s->coded_channels - 1) << s->duration >> 2;
780  bits2[i] = high >= CELT_VECTORS ? cap[i] :
781  celt_freq_range[i] * celt_static_alloc[high][i]
782  << (s->coded_channels - 1) << s->duration >> 2;
783 
784  if (bits1[i])
785  bits1[i] = FFMAX(0, bits1[i] + trim_offset[i]);
786  if (bits2[i])
787  bits2[i] = FFMAX(0, bits2[i] + trim_offset[i]);
788  if (low)
789  bits1[i] += boost[i];
790  bits2[i] += boost[i];
791 
792  if (boost[i])
793  skip_startband = i;
794  bits2[i] = FFMAX(0, bits2[i] - bits1[i]);
795  }
796 
797  /* bisection */
798  low = 0;
799  high = 1 << CELT_ALLOC_STEPS;
800  for (i = 0; i < CELT_ALLOC_STEPS; i++) {
801  int center = (low + high) >> 1;
802  done = total = 0;
803 
804  for (j = s->endband - 1; j >= s->startband; j--) {
805  bandbits = bits1[j] + (center * bits2[j] >> CELT_ALLOC_STEPS);
806 
807  if (bandbits >= threshold[j] || done) {
808  done = 1;
809  total += FFMIN(bandbits, cap[j]);
810  } else if (bandbits >= s->coded_channels << 3)
811  total += s->coded_channels << 3;
812  }
813  if (total > totalbits)
814  high = center;
815  else
816  low = center;
817  }
818 
819  done = total = 0;
820  for (i = s->endband - 1; i >= s->startband; i--) {
821  bandbits = bits1[i] + (low * bits2[i] >> CELT_ALLOC_STEPS);
822 
823  if (bandbits >= threshold[i] || done)
824  done = 1;
825  else
826  bandbits = (bandbits >= s->coded_channels << 3) ?
827  s->coded_channels << 3 : 0;
828 
829  bandbits = FFMIN(bandbits, cap[i]);
830  s->pulses[i] = bandbits;
831  total += bandbits;
832  }
833 
834  /* band skipping */
835  for (s->codedbands = s->endband; ; s->codedbands--) {
836  int allocation;
837  j = s->codedbands - 1;
838 
839  if (j == skip_startband) {
840  /* all remaining bands are not skipped */
841  totalbits += skip_bit;
842  break;
843  }
844 
845  /* determine the number of bits available for coding "do not skip" markers */
846  remaining = totalbits - total;
847  bandbits = remaining / (celt_freq_bands[j+1] - celt_freq_bands[s->startband]);
848  remaining -= bandbits * (celt_freq_bands[j+1] - celt_freq_bands[s->startband]);
849  allocation = s->pulses[j] + bandbits * celt_freq_range[j]
850  + FFMAX(0, remaining - (celt_freq_bands[j] - celt_freq_bands[s->startband]));
851 
852  /* a "do not skip" marker is only coded if the allocation is
853  above the chosen threshold */
854  if (allocation >= FFMAX(threshold[j], (s->coded_channels + 1) <<3 )) {
855  if (opus_rc_p2model(rc, 1))
856  break;
857 
858  total += 1 << 3;
859  allocation -= 1 << 3;
860  }
861 
862  /* the band is skipped, so reclaim its bits */
863  total -= s->pulses[j];
864  if (intensitystereo_bit) {
865  total -= intensitystereo_bit;
866  intensitystereo_bit = celt_log2_frac[j - s->startband];
867  total += intensitystereo_bit;
868  }
869 
870  total += s->pulses[j] = (allocation >= s->coded_channels << 3) ?
871  s->coded_channels << 3 : 0;
872  }
873 
874  /* obtain stereo flags */
875  s->intensitystereo = 0;
876  s->dualstereo = 0;
877  if (intensitystereo_bit)
878  s->intensitystereo = s->startband +
879  opus_rc_unimodel(rc, s->codedbands + 1 - s->startband);
880  if (s->intensitystereo <= s->startband)
881  totalbits += dualstereo_bit; /* no intensity stereo means no dual stereo */
882  else if (dualstereo_bit)
883  s->dualstereo = opus_rc_p2model(rc, 1);
884 
885  /* supply the remaining bits in this frame to lower bands */
886  remaining = totalbits - total;
887  bandbits = remaining / (celt_freq_bands[s->codedbands] - celt_freq_bands[s->startband]);
888  remaining -= bandbits * (celt_freq_bands[s->codedbands] - celt_freq_bands[s->startband]);
889  for (i = s->startband; i < s->codedbands; i++) {
890  int bits = FFMIN(remaining, celt_freq_range[i]);
891 
892  s->pulses[i] += bits + bandbits * celt_freq_range[i];
893  remaining -= bits;
894  }
895 
896  for (i = s->startband; i < s->codedbands; i++) {
897  int N = celt_freq_range[i] << s->duration;
898  int prev_extra = extrabits;
899  s->pulses[i] += extrabits;
900 
901  if (N > 1) {
902  int dof; // degrees of freedom
903  int temp; // dof * channels * log(dof)
904  int offset; // fine energy quantization offset, i.e.
905  // extra bits assigned over the standard
906  // totalbits/dof
907  int fine_bits, max_bits;
908 
909  extrabits = FFMAX(0, s->pulses[i] - cap[i]);
910  s->pulses[i] -= extrabits;
911 
912  /* intensity stereo makes use of an extra degree of freedom */
913  dof = N * s->coded_channels
914  + (s->coded_channels == 2 && N > 2 && !s->dualstereo && i < s->intensitystereo);
915  temp = dof * (celt_log_freq_range[i] + (s->duration<<3));
916  offset = (temp >> 1) - dof * CELT_FINE_OFFSET;
917  if (N == 2) /* dof=2 is the only case that doesn't fit the model */
918  offset += dof<<1;
919 
920  /* grant an additional bias for the first and second pulses */
921  if (s->pulses[i] + offset < 2 * (dof << 3))
922  offset += temp >> 2;
923  else if (s->pulses[i] + offset < 3 * (dof << 3))
924  offset += temp >> 3;
925 
926  fine_bits = (s->pulses[i] + offset + (dof << 2)) / (dof << 3);
927  max_bits = FFMIN((s->pulses[i]>>3) >> (s->coded_channels - 1),
929 
930  max_bits = FFMAX(max_bits, 0);
931 
932  s->fine_bits[i] = av_clip(fine_bits, 0, max_bits);
933 
934  /* if fine_bits was rounded down or capped,
935  give priority for the final fine energy pass */
936  s->fine_priority[i] = (s->fine_bits[i] * (dof<<3) >= s->pulses[i] + offset);
937 
938  /* the remaining bits are assigned to PVQ */
939  s->pulses[i] -= s->fine_bits[i] << (s->coded_channels - 1) << 3;
940  } else {
941  /* all bits go to fine energy except for the sign bit */
942  extrabits = FFMAX(0, s->pulses[i] - (s->coded_channels << 3));
943  s->pulses[i] -= extrabits;
944  s->fine_bits[i] = 0;
945  s->fine_priority[i] = 1;
946  }
947 
948  /* hand back a limited number of extra fine energy bits to this band */
949  if (extrabits > 0) {
950  int fineextra = FFMIN(extrabits >> (s->coded_channels + 2),
951  CELT_MAX_FINE_BITS - s->fine_bits[i]);
952  s->fine_bits[i] += fineextra;
953 
954  fineextra <<= s->coded_channels + 2;
955  s->fine_priority[i] = (fineextra >= extrabits - prev_extra);
956  extrabits -= fineextra;
957  }
958  }
959  s->remaining = extrabits;
960 
961  /* skipped bands dedicate all of their bits for fine energy */
962  for (; i < s->endband; i++) {
963  s->fine_bits[i] = s->pulses[i] >> (s->coded_channels - 1) >> 3;
964  s->pulses[i] = 0;
965  s->fine_priority[i] = s->fine_bits[i] < 1;
966  }
967 }
968 
969 static inline int celt_bits2pulses(const uint8_t *cache, int bits)
970 {
971  // TODO: Find the size of cache and make it into an array in the parameters list
972  int i, low = 0, high;
973 
974  high = cache[0];
975  bits--;
976 
977  for (i = 0; i < 6; i++) {
978  int center = (low + high + 1) >> 1;
979  if (cache[center] >= bits)
980  high = center;
981  else
982  low = center;
983  }
984 
985  return (bits - (low == 0 ? -1 : cache[low]) <= cache[high] - bits) ? low : high;
986 }
987 
988 static inline int celt_pulses2bits(const uint8_t *cache, int pulses)
989 {
990  // TODO: Find the size of cache and make it into an array in the parameters list
991  return (pulses == 0) ? 0 : cache[pulses] + 1;
992 }
993 
994 static inline void celt_normalize_residual(const int * av_restrict iy, float * av_restrict X,
995  int N, float g)
996 {
997  int i;
998  for (i = 0; i < N; i++)
999  X[i] = g * iy[i];
1000 }
1001 
1002 static void celt_exp_rotation1(float *X, unsigned int len, unsigned int stride,
1003  float c, float s)
1004 {
1005  float *Xptr;
1006  int i;
1007 
1008  Xptr = X;
1009  for (i = 0; i < len - stride; i++) {
1010  float x1, x2;
1011  x1 = Xptr[0];
1012  x2 = Xptr[stride];
1013  Xptr[stride] = c * x2 + s * x1;
1014  *Xptr++ = c * x1 - s * x2;
1015  }
1016 
1017  Xptr = &X[len - 2 * stride - 1];
1018  for (i = len - 2 * stride - 1; i >= 0; i--) {
1019  float x1, x2;
1020  x1 = Xptr[0];
1021  x2 = Xptr[stride];
1022  Xptr[stride] = c * x2 + s * x1;
1023  *Xptr-- = c * x1 - s * x2;
1024  }
1025 }
1026 
1027 static inline void celt_exp_rotation(float *X, unsigned int len,
1028  unsigned int stride, unsigned int K,
1029  enum CeltSpread spread)
1030 {
1031  unsigned int stride2 = 0;
1032  float c, s;
1033  float gain, theta;
1034  int i;
1035 
1036  if (2*K >= len || spread == CELT_SPREAD_NONE)
1037  return;
1038 
1039  gain = (float)len / (len + (20 - 5*spread) * K);
1040  theta = M_PI * gain * gain / 4;
1041 
1042  c = cos(theta);
1043  s = sin(theta);
1044 
1045  if (len >= stride << 3) {
1046  stride2 = 1;
1047  /* This is just a simple (equivalent) way of computing sqrt(len/stride) with rounding.
1048  It's basically incrementing long as (stride2+0.5)^2 < len/stride. */
1049  while ((stride2 * stride2 + stride2) * stride + (stride >> 2) < len)
1050  stride2++;
1051  }
1052 
1053  /*NOTE: As a minor optimization, we could be passing around log2(B), not B, for both this and for
1054  extract_collapse_mask().*/
1055  len /= stride;
1056  for (i = 0; i < stride; i++) {
1057  if (stride2)
1058  celt_exp_rotation1(X + i * len, len, stride2, s, c);
1059  celt_exp_rotation1(X + i * len, len, 1, c, s);
1060  }
1061 }
1062 
1063 static inline unsigned int celt_extract_collapse_mask(const int *iy,
1064  unsigned int N,
1065  unsigned int B)
1066 {
1067  unsigned int collapse_mask;
1068  int N0;
1069  int i, j;
1070 
1071  if (B <= 1)
1072  return 1;
1073 
1074  /*NOTE: As a minor optimization, we could be passing around log2(B), not B, for both this and for
1075  exp_rotation().*/
1076  N0 = N/B;
1077  collapse_mask = 0;
1078  for (i = 0; i < B; i++)
1079  for (j = 0; j < N0; j++)
1080  collapse_mask |= (iy[i*N0+j]!=0)<<i;
1081  return collapse_mask;
1082 }
1083 
1084 static inline void celt_renormalize_vector(float *X, int N, float gain)
1085 {
1086  int i;
1087  float g = 1e-15f;
1088  for (i = 0; i < N; i++)
1089  g += X[i] * X[i];
1090  g = gain / sqrtf(g);
1091 
1092  for (i = 0; i < N; i++)
1093  X[i] *= g;
1094 }
1095 
1096 static inline void celt_stereo_merge(float *X, float *Y, float mid, int N)
1097 {
1098  int i;
1099  float xp = 0, side = 0;
1100  float E[2];
1101  float mid2;
1102  float t, gain[2];
1103 
1104  /* Compute the norm of X+Y and X-Y as |X|^2 + |Y|^2 +/- sum(xy) */
1105  for (i = 0; i < N; i++) {
1106  xp += X[i] * Y[i];
1107  side += Y[i] * Y[i];
1108  }
1109 
1110  /* Compensating for the mid normalization */
1111  xp *= mid;
1112  mid2 = mid;
1113  E[0] = mid2 * mid2 + side - 2 * xp;
1114  E[1] = mid2 * mid2 + side + 2 * xp;
1115  if (E[0] < 6e-4f || E[1] < 6e-4f) {
1116  for (i = 0; i < N; i++)
1117  Y[i] = X[i];
1118  return;
1119  }
1120 
1121  t = E[0];
1122  gain[0] = 1.0f / sqrtf(t);
1123  t = E[1];
1124  gain[1] = 1.0f / sqrtf(t);
1125 
1126  for (i = 0; i < N; i++) {
1127  float value[2];
1128  /* Apply mid scaling (side is already scaled) */
1129  value[0] = mid * X[i];
1130  value[1] = Y[i];
1131  X[i] = gain[0] * (value[0] - value[1]);
1132  Y[i] = gain[1] * (value[0] + value[1]);
1133  }
1134 }
1135 
1136 static void celt_interleave_hadamard(float *tmp, float *X, int N0,
1137  int stride, int hadamard)
1138 {
1139  int i, j;
1140  int N = N0*stride;
1141 
1142  if (hadamard) {
1143  const uint8_t *ordery = celt_hadamard_ordery + stride - 2;
1144  for (i = 0; i < stride; i++)
1145  for (j = 0; j < N0; j++)
1146  tmp[j*stride+i] = X[ordery[i]*N0+j];
1147  } else {
1148  for (i = 0; i < stride; i++)
1149  for (j = 0; j < N0; j++)
1150  tmp[j*stride+i] = X[i*N0+j];
1151  }
1152 
1153  for (i = 0; i < N; i++)
1154  X[i] = tmp[i];
1155 }
1156 
1157 static void celt_deinterleave_hadamard(float *tmp, float *X, int N0,
1158  int stride, int hadamard)
1159 {
1160  int i, j;
1161  int N = N0*stride;
1162 
1163  if (hadamard) {
1164  const uint8_t *ordery = celt_hadamard_ordery + stride - 2;
1165  for (i = 0; i < stride; i++)
1166  for (j = 0; j < N0; j++)
1167  tmp[ordery[i]*N0+j] = X[j*stride+i];
1168  } else {
1169  for (i = 0; i < stride; i++)
1170  for (j = 0; j < N0; j++)
1171  tmp[i*N0+j] = X[j*stride+i];
1172  }
1173 
1174  for (i = 0; i < N; i++)
1175  X[i] = tmp[i];
1176 }
1177 
1178 static void celt_haar1(float *X, int N0, int stride)
1179 {
1180  int i, j;
1181  N0 >>= 1;
1182  for (i = 0; i < stride; i++) {
1183  for (j = 0; j < N0; j++) {
1184  float x0 = X[stride * (2 * j + 0) + i];
1185  float x1 = X[stride * (2 * j + 1) + i];
1186  X[stride * (2 * j + 0) + i] = (x0 + x1) * M_SQRT1_2;
1187  X[stride * (2 * j + 1) + i] = (x0 - x1) * M_SQRT1_2;
1188  }
1189  }
1190 }
1191 
1192 static inline int celt_compute_qn(int N, int b, int offset, int pulse_cap,
1193  int dualstereo)
1194 {
1195  int qn, qb;
1196  int N2 = 2 * N - 1;
1197  if (dualstereo && N == 2)
1198  N2--;
1199 
1200  /* The upper limit ensures that in a stereo split with itheta==16384, we'll
1201  * always have enough bits left over to code at least one pulse in the
1202  * side; otherwise it would collapse, since it doesn't get folded. */
1203  qb = FFMIN3(b - pulse_cap - (4 << 3), (b + N2 * offset) / N2, 8 << 3);
1204  qn = (qb < (1 << 3 >> 1)) ? 1 : ((celt_qn_exp2[qb & 0x7] >> (14 - (qb >> 3))) + 1) >> 1 << 1;
1205  return qn;
1206 }
1207 
1208 // this code was adapted from libopus
1209 static inline uint64_t celt_cwrsi(unsigned int N, unsigned int K, unsigned int i, int *y)
1210 {
1211  uint64_t norm = 0;
1212  uint32_t p;
1213  int s, val;
1214  int k0;
1215 
1216  while (N > 2) {
1217  uint32_t q;
1218 
1219  /*Lots of pulses case:*/
1220  if (K >= N) {
1221  const uint32_t *row = celt_pvq_u_row[N];
1222 
1223  /* Are the pulses in this dimension negative? */
1224  p = row[K + 1];
1225  s = -(i >= p);
1226  i -= p & s;
1227 
1228  /*Count how many pulses were placed in this dimension.*/
1229  k0 = K;
1230  q = row[N];
1231  if (q > i) {
1232  K = N;
1233  do {
1234  p = celt_pvq_u_row[--K][N];
1235  } while (p > i);
1236  } else
1237  for (p = row[K]; p > i; p = row[K])
1238  K--;
1239 
1240  i -= p;
1241  val = (k0 - K + s) ^ s;
1242  norm += val * val;
1243  *y++ = val;
1244  } else { /*Lots of dimensions case:*/
1245  /*Are there any pulses in this dimension at all?*/
1246  p = celt_pvq_u_row[K ][N];
1247  q = celt_pvq_u_row[K + 1][N];
1248 
1249  if (p <= i && i < q) {
1250  i -= p;
1251  *y++ = 0;
1252  } else {
1253  /*Are the pulses in this dimension negative?*/
1254  s = -(i >= q);
1255  i -= q & s;
1256 
1257  /*Count how many pulses were placed in this dimension.*/
1258  k0 = K;
1259  do p = celt_pvq_u_row[--K][N];
1260  while (p > i);
1261 
1262  i -= p;
1263  val = (k0 - K + s) ^ s;
1264  norm += val * val;
1265  *y++ = val;
1266  }
1267  }
1268  N--;
1269  }
1270 
1271  /* N == 2 */
1272  p = 2 * K + 1;
1273  s = -(i >= p);
1274  i -= p & s;
1275  k0 = K;
1276  K = (i + 1) / 2;
1277 
1278  if (K)
1279  i -= 2 * K - 1;
1280 
1281  val = (k0 - K + s) ^ s;
1282  norm += val * val;
1283  *y++ = val;
1284 
1285  /* N==1 */
1286  s = -i;
1287  val = (K + s) ^ s;
1288  norm += val * val;
1289  *y = val;
1290 
1291  return norm;
1292 }
1293 
1294 static inline float celt_decode_pulses(OpusRangeCoder *rc, int *y, unsigned int N, unsigned int K)
1295 {
1296  unsigned int idx;
1297 #define CELT_PVQ_U(n, k) (celt_pvq_u_row[FFMIN(n, k)][FFMAX(n, k)])
1298 #define CELT_PVQ_V(n, k) (CELT_PVQ_U(n, k) + CELT_PVQ_U(n, (k) + 1))
1299  idx = opus_rc_unimodel(rc, CELT_PVQ_V(N, K));
1300  return celt_cwrsi(N, K, idx, y);
1301 }
1302 
1303 /** Decode pulse vector and combine the result with the pitch vector to produce
1304  the final normalised signal in the current band. */
1305 static inline unsigned int celt_alg_unquant(OpusRangeCoder *rc, float *X,
1306  unsigned int N, unsigned int K,
1307  enum CeltSpread spread,
1308  unsigned int blocks, float gain)
1309 {
1310  int y[176];
1311 
1312  gain /= sqrtf(celt_decode_pulses(rc, y, N, K));
1313  celt_normalize_residual(y, X, N, gain);
1314  celt_exp_rotation(X, N, blocks, K, spread);
1315  return celt_extract_collapse_mask(y, N, blocks);
1316 }
1317 
1318 static unsigned int celt_decode_band(CeltContext *s, OpusRangeCoder *rc,
1319  const int band, float *X, float *Y,
1320  int N, int b, unsigned int blocks,
1321  float *lowband, int duration,
1322  float *lowband_out, int level,
1323  float gain, float *lowband_scratch,
1324  int fill)
1325 {
1326  const uint8_t *cache;
1327  int dualstereo, split;
1328  int imid = 0, iside = 0;
1329  unsigned int N0 = N;
1330  int N_B;
1331  int N_B0;
1332  int B0 = blocks;
1333  int time_divide = 0;
1334  int recombine = 0;
1335  int inv = 0;
1336  float mid = 0, side = 0;
1337  int longblocks = (B0 == 1);
1338  unsigned int cm = 0;
1339 
1340  N_B0 = N_B = N / blocks;
1341  split = dualstereo = (Y != NULL);
1342 
1343  if (N == 1) {
1344  /* special case for one sample */
1345  int i;
1346  float *x = X;
1347  for (i = 0; i <= dualstereo; i++) {
1348  int sign = 0;
1349  if (s->remaining2 >= 1<<3) {
1350  sign = opus_getrawbits(rc, 1);
1351  s->remaining2 -= 1 << 3;
1352  b -= 1 << 3;
1353  }
1354  x[0] = sign ? -1.0f : 1.0f;
1355  x = Y;
1356  }
1357  if (lowband_out)
1358  lowband_out[0] = X[0];
1359  return 1;
1360  }
1361 
1362  if (!dualstereo && level == 0) {
1363  int tf_change = s->tf_change[band];
1364  int k;
1365  if (tf_change > 0)
1366  recombine = tf_change;
1367  /* Band recombining to increase frequency resolution */
1368 
1369  if (lowband &&
1370  (recombine || ((N_B & 1) == 0 && tf_change < 0) || B0 > 1)) {
1371  int j;
1372  for (j = 0; j < N; j++)
1373  lowband_scratch[j] = lowband[j];
1374  lowband = lowband_scratch;
1375  }
1376 
1377  for (k = 0; k < recombine; k++) {
1378  if (lowband)
1379  celt_haar1(lowband, N >> k, 1 << k);
1380  fill = celt_bit_interleave[fill & 0xF] | celt_bit_interleave[fill >> 4] << 2;
1381  }
1382  blocks >>= recombine;
1383  N_B <<= recombine;
1384 
1385  /* Increasing the time resolution */
1386  while ((N_B & 1) == 0 && tf_change < 0) {
1387  if (lowband)
1388  celt_haar1(lowband, N_B, blocks);
1389  fill |= fill << blocks;
1390  blocks <<= 1;
1391  N_B >>= 1;
1392  time_divide++;
1393  tf_change++;
1394  }
1395  B0 = blocks;
1396  N_B0 = N_B;
1397 
1398  /* Reorganize the samples in time order instead of frequency order */
1399  if (B0 > 1 && lowband)
1400  celt_deinterleave_hadamard(s->scratch, lowband, N_B >> recombine,
1401  B0 << recombine, longblocks);
1402  }
1403 
1404  /* If we need 1.5 more bit than we can produce, split the band in two. */
1405  cache = celt_cache_bits +
1406  celt_cache_index[(duration + 1) * CELT_MAX_BANDS + band];
1407  if (!dualstereo && duration >= 0 && b > cache[cache[0]] + 12 && N > 2) {
1408  N >>= 1;
1409  Y = X + N;
1410  split = 1;
1411  duration -= 1;
1412  if (blocks == 1)
1413  fill = (fill & 1) | (fill << 1);
1414  blocks = (blocks + 1) >> 1;
1415  }
1416 
1417  if (split) {
1418  int qn;
1419  int itheta = 0;
1420  int mbits, sbits, delta;
1421  int qalloc;
1422  int pulse_cap;
1423  int offset;
1424  int orig_fill;
1425  int tell;
1426 
1427  /* Decide on the resolution to give to the split parameter theta */
1428  pulse_cap = celt_log_freq_range[band] + duration * 8;
1429  offset = (pulse_cap >> 1) - (dualstereo && N == 2 ? CELT_QTHETA_OFFSET_TWOPHASE :
1431  qn = (dualstereo && band >= s->intensitystereo) ? 1 :
1432  celt_compute_qn(N, b, offset, pulse_cap, dualstereo);
1433  tell = opus_rc_tell_frac(rc);
1434  if (qn != 1) {
1435  /* Entropy coding of the angle. We use a uniform pdf for the
1436  time split, a step for stereo, and a triangular one for the rest. */
1437  if (dualstereo && N > 2)
1438  itheta = opus_rc_stepmodel(rc, qn/2);
1439  else if (dualstereo || B0 > 1)
1440  itheta = opus_rc_unimodel(rc, qn+1);
1441  else
1442  itheta = opus_rc_trimodel(rc, qn);
1443  itheta = itheta * 16384 / qn;
1444  /* NOTE: Renormalising X and Y *may* help fixed-point a bit at very high rate.
1445  Let's do that at higher complexity */
1446  } else if (dualstereo) {
1447  inv = (b > 2 << 3 && s->remaining2 > 2 << 3) ? opus_rc_p2model(rc, 2) : 0;
1448  itheta = 0;
1449  }
1450  qalloc = opus_rc_tell_frac(rc) - tell;
1451  b -= qalloc;
1452 
1453  orig_fill = fill;
1454  if (itheta == 0) {
1455  imid = 32767;
1456  iside = 0;
1457  fill &= (1 << blocks) - 1;
1458  delta = -16384;
1459  } else if (itheta == 16384) {
1460  imid = 0;
1461  iside = 32767;
1462  fill &= ((1 << blocks) - 1) << blocks;
1463  delta = 16384;
1464  } else {
1465  imid = celt_cos(itheta);
1466  iside = celt_cos(16384-itheta);
1467  /* This is the mid vs side allocation that minimizes squared error
1468  in that band. */
1469  delta = ROUND_MUL16((N - 1) << 7, celt_log2tan(iside, imid));
1470  }
1471 
1472  mid = imid / 32768.0f;
1473  side = iside / 32768.0f;
1474 
1475  /* This is a special case for N=2 that only works for stereo and takes
1476  advantage of the fact that mid and side are orthogonal to encode
1477  the side with just one bit. */
1478  if (N == 2 && dualstereo) {
1479  int c;
1480  int sign = 0;
1481  float tmp;
1482  float *x2, *y2;
1483  mbits = b;
1484  /* Only need one bit for the side */
1485  sbits = (itheta != 0 && itheta != 16384) ? 1 << 3 : 0;
1486  mbits -= sbits;
1487  c = (itheta > 8192);
1488  s->remaining2 -= qalloc+sbits;
1489 
1490  x2 = c ? Y : X;
1491  y2 = c ? X : Y;
1492  if (sbits)
1493  sign = opus_getrawbits(rc, 1);
1494  sign = 1 - 2 * sign;
1495  /* We use orig_fill here because we want to fold the side, but if
1496  itheta==16384, we'll have cleared the low bits of fill. */
1497  cm = celt_decode_band(s, rc, band, x2, NULL, N, mbits, blocks,
1498  lowband, duration, lowband_out, level, gain,
1499  lowband_scratch, orig_fill);
1500  /* We don't split N=2 bands, so cm is either 1 or 0 (for a fold-collapse),
1501  and there's no need to worry about mixing with the other channel. */
1502  y2[0] = -sign * x2[1];
1503  y2[1] = sign * x2[0];
1504  X[0] *= mid;
1505  X[1] *= mid;
1506  Y[0] *= side;
1507  Y[1] *= side;
1508  tmp = X[0];
1509  X[0] = tmp - Y[0];
1510  Y[0] = tmp + Y[0];
1511  tmp = X[1];
1512  X[1] = tmp - Y[1];
1513  Y[1] = tmp + Y[1];
1514  } else {
1515  /* "Normal" split code */
1516  float *next_lowband2 = NULL;
1517  float *next_lowband_out1 = NULL;
1518  int next_level = 0;
1519  int rebalance;
1520 
1521  /* Give more bits to low-energy MDCTs than they would
1522  * otherwise deserve */
1523  if (B0 > 1 && !dualstereo && (itheta & 0x3fff)) {
1524  if (itheta > 8192)
1525  /* Rough approximation for pre-echo masking */
1526  delta -= delta >> (4 - duration);
1527  else
1528  /* Corresponds to a forward-masking slope of
1529  * 1.5 dB per 10 ms */
1530  delta = FFMIN(0, delta + (N << 3 >> (5 - duration)));
1531  }
1532  mbits = av_clip((b - delta) / 2, 0, b);
1533  sbits = b - mbits;
1534  s->remaining2 -= qalloc;
1535 
1536  if (lowband && !dualstereo)
1537  next_lowband2 = lowband + N; /* >32-bit split case */
1538 
1539  /* Only stereo needs to pass on lowband_out.
1540  * Otherwise, it's handled at the end */
1541  if (dualstereo)
1542  next_lowband_out1 = lowband_out;
1543  else
1544  next_level = level + 1;
1545 
1546  rebalance = s->remaining2;
1547  if (mbits >= sbits) {
1548  /* In stereo mode, we do not apply a scaling to the mid
1549  * because we need the normalized mid for folding later */
1550  cm = celt_decode_band(s, rc, band, X, NULL, N, mbits, blocks,
1551  lowband, duration, next_lowband_out1,
1552  next_level, dualstereo ? 1.0f : (gain * mid),
1553  lowband_scratch, fill);
1554 
1555  rebalance = mbits - (rebalance - s->remaining2);
1556  if (rebalance > 3 << 3 && itheta != 0)
1557  sbits += rebalance - (3 << 3);
1558 
1559  /* For a stereo split, the high bits of fill are always zero,
1560  * so no folding will be done to the side. */
1561  cm |= celt_decode_band(s, rc, band, Y, NULL, N, sbits, blocks,
1562  next_lowband2, duration, NULL,
1563  next_level, gain * side, NULL,
1564  fill >> blocks) << ((B0 >> 1) & (dualstereo - 1));
1565  } else {
1566  /* For a stereo split, the high bits of fill are always zero,
1567  * so no folding will be done to the side. */
1568  cm = celt_decode_band(s, rc, band, Y, NULL, N, sbits, blocks,
1569  next_lowband2, duration, NULL,
1570  next_level, gain * side, NULL,
1571  fill >> blocks) << ((B0 >> 1) & (dualstereo - 1));
1572 
1573  rebalance = sbits - (rebalance - s->remaining2);
1574  if (rebalance > 3 << 3 && itheta != 16384)
1575  mbits += rebalance - (3 << 3);
1576 
1577  /* In stereo mode, we do not apply a scaling to the mid because
1578  * we need the normalized mid for folding later */
1579  cm |= celt_decode_band(s, rc, band, X, NULL, N, mbits, blocks,
1580  lowband, duration, next_lowband_out1,
1581  next_level, dualstereo ? 1.0f : (gain * mid),
1582  lowband_scratch, fill);
1583  }
1584  }
1585  } else {
1586  /* This is the basic no-split case */
1587  unsigned int q = celt_bits2pulses(cache, b);
1588  unsigned int curr_bits = celt_pulses2bits(cache, q);
1589  s->remaining2 -= curr_bits;
1590 
1591  /* Ensures we can never bust the budget */
1592  while (s->remaining2 < 0 && q > 0) {
1593  s->remaining2 += curr_bits;
1594  curr_bits = celt_pulses2bits(cache, --q);
1595  s->remaining2 -= curr_bits;
1596  }
1597 
1598  if (q != 0) {
1599  /* Finally do the actual quantization */
1600  cm = celt_alg_unquant(rc, X, N, (q < 8) ? q : (8 + (q & 7)) << ((q >> 3) - 1),
1601  s->spread, blocks, gain);
1602  } else {
1603  /* If there's no pulse, fill the band anyway */
1604  int j;
1605  unsigned int cm_mask = (1 << blocks) - 1;
1606  fill &= cm_mask;
1607  if (!fill) {
1608  for (j = 0; j < N; j++)
1609  X[j] = 0.0f;
1610  } else {
1611  if (!lowband) {
1612  /* Noise */
1613  for (j = 0; j < N; j++)
1614  X[j] = (((int32_t)celt_rng(s)) >> 20);
1615  cm = cm_mask;
1616  } else {
1617  /* Folded spectrum */
1618  for (j = 0; j < N; j++) {
1619  /* About 48 dB below the "normal" folding level */
1620  X[j] = lowband[j] + (((celt_rng(s)) & 0x8000) ? 1.0f / 256 : -1.0f / 256);
1621  }
1622  cm = fill;
1623  }
1624  celt_renormalize_vector(X, N, gain);
1625  }
1626  }
1627  }
1628 
1629  /* This code is used by the decoder and by the resynthesis-enabled encoder */
1630  if (dualstereo) {
1631  int j;
1632  if (N != 2)
1633  celt_stereo_merge(X, Y, mid, N);
1634  if (inv) {
1635  for (j = 0; j < N; j++)
1636  Y[j] *= -1;
1637  }
1638  } else if (level == 0) {
1639  int k;
1640 
1641  /* Undo the sample reorganization going from time order to frequency order */
1642  if (B0 > 1)
1643  celt_interleave_hadamard(s->scratch, X, N_B>>recombine,
1644  B0<<recombine, longblocks);
1645 
1646  /* Undo time-freq changes that we did earlier */
1647  N_B = N_B0;
1648  blocks = B0;
1649  for (k = 0; k < time_divide; k++) {
1650  blocks >>= 1;
1651  N_B <<= 1;
1652  cm |= cm >> blocks;
1653  celt_haar1(X, N_B, blocks);
1654  }
1655 
1656  for (k = 0; k < recombine; k++) {
1657  cm = celt_bit_deinterleave[cm];
1658  celt_haar1(X, N0>>k, 1<<k);
1659  }
1660  blocks <<= recombine;
1661 
1662  /* Scale output for later folding */
1663  if (lowband_out) {
1664  int j;
1665  float n = sqrtf(N0);
1666  for (j = 0; j < N0; j++)
1667  lowband_out[j] = n * X[j];
1668  }
1669  cm &= (1 << blocks) - 1;
1670  }
1671  return cm;
1672 }
1673 
1675 {
1676  int i, j;
1677 
1678  for (i = s->startband; i < s->endband; i++) {
1679  float *dst = data + (celt_freq_bands[i] << s->duration);
1680  float norm = pow(2, frame->energy[i] + celt_mean_energy[i]);
1681 
1682  for (j = 0; j < celt_freq_range[i] << s->duration; j++)
1683  dst[j] *= norm;
1684  }
1685 }
1686 
1688 {
1689  const int T0 = frame->pf_period_old;
1690  const int T1 = frame->pf_period;
1691 
1692  float g00, g01, g02;
1693  float g10, g11, g12;
1694 
1695  float x0, x1, x2, x3, x4;
1696 
1697  int i;
1698 
1699  if (frame->pf_gains[0] == 0.0 &&
1700  frame->pf_gains_old[0] == 0.0)
1701  return;
1702 
1703  g00 = frame->pf_gains_old[0];
1704  g01 = frame->pf_gains_old[1];
1705  g02 = frame->pf_gains_old[2];
1706  g10 = frame->pf_gains[0];
1707  g11 = frame->pf_gains[1];
1708  g12 = frame->pf_gains[2];
1709 
1710  x1 = data[-T1 + 1];
1711  x2 = data[-T1];
1712  x3 = data[-T1 - 1];
1713  x4 = data[-T1 - 2];
1714 
1715  for (i = 0; i < CELT_OVERLAP; i++) {
1716  float w = ff_celt_window2[i];
1717  x0 = data[i - T1 + 2];
1718 
1719  data[i] += (1.0 - w) * g00 * data[i - T0] +
1720  (1.0 - w) * g01 * (data[i - T0 - 1] + data[i - T0 + 1]) +
1721  (1.0 - w) * g02 * (data[i - T0 - 2] + data[i - T0 + 2]) +
1722  w * g10 * x2 +
1723  w * g11 * (x1 + x3) +
1724  w * g12 * (x0 + x4);
1725  x4 = x3;
1726  x3 = x2;
1727  x2 = x1;
1728  x1 = x0;
1729  }
1730 }
1731 
1733  float *data, int len)
1734 {
1735  const int T = frame->pf_period;
1736  float g0, g1, g2;
1737  float x0, x1, x2, x3, x4;
1738  int i;
1739 
1740  if (frame->pf_gains[0] == 0.0 || len <= 0)
1741  return;
1742 
1743  g0 = frame->pf_gains[0];
1744  g1 = frame->pf_gains[1];
1745  g2 = frame->pf_gains[2];
1746 
1747  x4 = data[-T - 2];
1748  x3 = data[-T - 1];
1749  x2 = data[-T];
1750  x1 = data[-T + 1];
1751 
1752  for (i = 0; i < len; i++) {
1753  x0 = data[i - T + 2];
1754  data[i] += g0 * x2 +
1755  g1 * (x1 + x3) +
1756  g2 * (x0 + x4);
1757  x4 = x3;
1758  x3 = x2;
1759  x2 = x1;
1760  x1 = x0;
1761  }
1762 }
1763 
1765 {
1766  int len = s->blocksize * s->blocks;
1767 
1768  celt_postfilter_apply_transition(frame, frame->buf + 1024);
1769 
1770  frame->pf_period_old = frame->pf_period;
1771  memcpy(frame->pf_gains_old, frame->pf_gains, sizeof(frame->pf_gains));
1772 
1773  frame->pf_period = frame->pf_period_new;
1774  memcpy(frame->pf_gains, frame->pf_gains_new, sizeof(frame->pf_gains));
1775 
1776  if (len > CELT_OVERLAP) {
1777  celt_postfilter_apply_transition(frame, frame->buf + 1024 + CELT_OVERLAP);
1778  celt_postfilter_apply(frame, frame->buf + 1024 + 2 * CELT_OVERLAP,
1779  len - 2 * CELT_OVERLAP);
1780 
1781  frame->pf_period_old = frame->pf_period;
1782  memcpy(frame->pf_gains_old, frame->pf_gains, sizeof(frame->pf_gains));
1783  }
1784 
1785  memmove(frame->buf, frame->buf + len, (1024 + CELT_OVERLAP / 2) * sizeof(float));
1786 }
1787 
1788 static int parse_postfilter(CeltContext *s, OpusRangeCoder *rc, int consumed)
1789 {
1790  static const float postfilter_taps[3][3] = {
1791  { 0.3066406250f, 0.2170410156f, 0.1296386719f },
1792  { 0.4638671875f, 0.2680664062f, 0.0 },
1793  { 0.7998046875f, 0.1000976562f, 0.0 }
1794  };
1795  int i;
1796 
1797  memset(s->frame[0].pf_gains_new, 0, sizeof(s->frame[0].pf_gains_new));
1798  memset(s->frame[1].pf_gains_new, 0, sizeof(s->frame[1].pf_gains_new));
1799 
1800  if (s->startband == 0 && consumed + 16 <= s->framebits) {
1801  int has_postfilter = opus_rc_p2model(rc, 1);
1802  if (has_postfilter) {
1803  float gain;
1804  int tapset, octave, period;
1805 
1806  octave = opus_rc_unimodel(rc, 6);
1807  period = (16 << octave) + opus_getrawbits(rc, 4 + octave) - 1;
1808  gain = 0.09375f * (opus_getrawbits(rc, 3) + 1);
1809  tapset = (opus_rc_tell(rc) + 2 <= s->framebits) ?
1811 
1812  for (i = 0; i < 2; i++) {
1813  CeltFrame *frame = &s->frame[i];
1814 
1815  frame->pf_period_new = FFMAX(period, CELT_POSTFILTER_MINPERIOD);
1816  frame->pf_gains_new[0] = gain * postfilter_taps[tapset][0];
1817  frame->pf_gains_new[1] = gain * postfilter_taps[tapset][1];
1818  frame->pf_gains_new[2] = gain * postfilter_taps[tapset][2];
1819  }
1820  }
1821 
1822  consumed = opus_rc_tell(rc);
1823  }
1824 
1825  return consumed;
1826 }
1827 
1829 {
1830  int i, j, k;
1831 
1832  for (i = s->startband; i < s->endband; i++) {
1833  int renormalize = 0;
1834  float *xptr;
1835  float prev[2];
1836  float Ediff, r;
1837  float thresh, sqrt_1;
1838  int depth;
1839 
1840  /* depth in 1/8 bits */
1841  depth = (1 + s->pulses[i]) / (celt_freq_range[i] << s->duration);
1842  thresh = pow(2, -1.0 - 0.125f * depth);
1843  sqrt_1 = 1.0f / sqrtf(celt_freq_range[i] << s->duration);
1844 
1845  xptr = X + (celt_freq_bands[i] << s->duration);
1846 
1847  prev[0] = frame->prev_energy[0][i];
1848  prev[1] = frame->prev_energy[1][i];
1849  if (s->coded_channels == 1) {
1850  CeltFrame *frame1 = &s->frame[1];
1851 
1852  prev[0] = FFMAX(prev[0], frame1->prev_energy[0][i]);
1853  prev[1] = FFMAX(prev[1], frame1->prev_energy[1][i]);
1854  }
1855  Ediff = frame->energy[i] - FFMIN(prev[0], prev[1]);
1856  Ediff = FFMAX(0, Ediff);
1857 
1858  /* r needs to be multiplied by 2 or 2*sqrt(2) depending on LM because
1859  short blocks don't have the same energy as long */
1860  r = pow(2, 1 - Ediff);
1861  if (s->duration == 3)
1862  r *= M_SQRT2;
1863  r = FFMIN(thresh, r) * sqrt_1;
1864  for (k = 0; k < 1 << s->duration; k++) {
1865  /* Detect collapse */
1866  if (!(frame->collapse_masks[i] & 1 << k)) {
1867  /* Fill with noise */
1868  for (j = 0; j < celt_freq_range[i]; j++)
1869  xptr[(j << s->duration) + k] = (celt_rng(s) & 0x8000) ? r : -r;
1870  renormalize = 1;
1871  }
1872  }
1873 
1874  /* We just added some energy, so we need to renormalize */
1875  if (renormalize)
1876  celt_renormalize_vector(xptr, celt_freq_range[i] << s->duration, 1.0f);
1877  }
1878 }
1879 
1881 {
1882  float lowband_scratch[8 * 22];
1883  float norm[2 * 8 * 100];
1884 
1885  int totalbits = (s->framebits << 3) - s->anticollapse_bit;
1886 
1887  int update_lowband = 1;
1888  int lowband_offset = 0;
1889 
1890  int i, j;
1891 
1892  memset(s->coeffs, 0, sizeof(s->coeffs));
1893 
1894  for (i = s->startband; i < s->endband; i++) {
1895  int band_offset = celt_freq_bands[i] << s->duration;
1896  int band_size = celt_freq_range[i] << s->duration;
1897  float *X = s->coeffs[0] + band_offset;
1898  float *Y = (s->coded_channels == 2) ? s->coeffs[1] + band_offset : NULL;
1899 
1900  int consumed = opus_rc_tell_frac(rc);
1901  float *norm2 = norm + 8 * 100;
1902  int effective_lowband = -1;
1903  unsigned int cm[2];
1904  int b;
1905 
1906  /* Compute how many bits we want to allocate to this band */
1907  if (i != s->startband)
1908  s->remaining -= consumed;
1909  s->remaining2 = totalbits - consumed - 1;
1910  if (i <= s->codedbands - 1) {
1911  int curr_balance = s->remaining / FFMIN(3, s->codedbands-i);
1912  b = av_clip(FFMIN(s->remaining2 + 1, s->pulses[i] + curr_balance), 0, 16383);
1913  } else
1914  b = 0;
1915 
1917  (update_lowband || lowband_offset == 0))
1918  lowband_offset = i;
1919 
1920  /* Get a conservative estimate of the collapse_mask's for the bands we're
1921  going to be folding from. */
1922  if (lowband_offset != 0 && (s->spread != CELT_SPREAD_AGGRESSIVE ||
1923  s->blocks > 1 || s->tf_change[i] < 0)) {
1924  int foldstart, foldend;
1925 
1926  /* This ensures we never repeat spectral content within one band */
1927  effective_lowband = FFMAX(celt_freq_bands[s->startband],
1928  celt_freq_bands[lowband_offset] - celt_freq_range[i]);
1929  foldstart = lowband_offset;
1930  while (celt_freq_bands[--foldstart] > effective_lowband);
1931  foldend = lowband_offset - 1;
1932  while (celt_freq_bands[++foldend] < effective_lowband + celt_freq_range[i]);
1933 
1934  cm[0] = cm[1] = 0;
1935  for (j = foldstart; j < foldend; j++) {
1936  cm[0] |= s->frame[0].collapse_masks[j];
1937  cm[1] |= s->frame[s->coded_channels - 1].collapse_masks[j];
1938  }
1939  } else
1940  /* Otherwise, we'll be using the LCG to fold, so all blocks will (almost
1941  always) be non-zero.*/
1942  cm[0] = cm[1] = (1 << s->blocks) - 1;
1943 
1944  if (s->dualstereo && i == s->intensitystereo) {
1945  /* Switch off dual stereo to do intensity */
1946  s->dualstereo = 0;
1947  for (j = celt_freq_bands[s->startband] << s->duration; j < band_offset; j++)
1948  norm[j] = (norm[j] + norm2[j]) / 2;
1949  }
1950 
1951  if (s->dualstereo) {
1952  cm[0] = celt_decode_band(s, rc, i, X, NULL, band_size, b / 2, s->blocks,
1953  effective_lowband != -1 ? norm + (effective_lowband << s->duration) : NULL, s->duration,
1954  norm + band_offset, 0, 1.0f, lowband_scratch, cm[0]);
1955 
1956  cm[1] = celt_decode_band(s, rc, i, Y, NULL, band_size, b/2, s->blocks,
1957  effective_lowband != -1 ? norm2 + (effective_lowband << s->duration) : NULL, s->duration,
1958  norm2 + band_offset, 0, 1.0f, lowband_scratch, cm[1]);
1959  } else {
1960  cm[0] = celt_decode_band(s, rc, i, X, Y, band_size, b, s->blocks,
1961  effective_lowband != -1 ? norm + (effective_lowband << s->duration) : NULL, s->duration,
1962  norm + band_offset, 0, 1.0f, lowband_scratch, cm[0]|cm[1]);
1963 
1964  cm[1] = cm[0];
1965  }
1966 
1967  s->frame[0].collapse_masks[i] = (uint8_t)cm[0];
1968  s->frame[s->coded_channels - 1].collapse_masks[i] = (uint8_t)cm[1];
1969  s->remaining += s->pulses[i] + consumed;
1970 
1971  /* Update the folding position only as long as we have 1 bit/sample depth */
1972  update_lowband = (b > band_size << 3);
1973  }
1974 }
1975 
1977  float **output, int coded_channels, int frame_size,
1978  int startband, int endband)
1979 {
1980  int i, j;
1981 
1982  int consumed; // bits of entropy consumed thus far for this frame
1983  int silence = 0;
1984  int transient = 0;
1985  int anticollapse = 0;
1986  CeltIMDCTContext *imdct;
1987  float imdct_scale = 1.0;
1988 
1989  if (coded_channels != 1 && coded_channels != 2) {
1990  av_log(s->avctx, AV_LOG_ERROR, "Invalid number of coded channels: %d\n",
1991  coded_channels);
1992  return AVERROR_INVALIDDATA;
1993  }
1994  if (startband < 0 || startband > endband || endband > CELT_MAX_BANDS) {
1995  av_log(s->avctx, AV_LOG_ERROR, "Invalid start/end band: %d %d\n",
1996  startband, endband);
1997  return AVERROR_INVALIDDATA;
1998  }
1999 
2000  s->flushed = 0;
2001  s->coded_channels = coded_channels;
2002  s->startband = startband;
2003  s->endband = endband;
2004  s->framebits = rc->rb.bytes * 8;
2005 
2006  s->duration = av_log2(frame_size / CELT_SHORT_BLOCKSIZE);
2007  if (s->duration > CELT_MAX_LOG_BLOCKS ||
2008  frame_size != CELT_SHORT_BLOCKSIZE * (1 << s->duration)) {
2009  av_log(s->avctx, AV_LOG_ERROR, "Invalid CELT frame size: %d\n",
2010  frame_size);
2011  return AVERROR_INVALIDDATA;
2012  }
2013 
2014  if (!s->output_channels)
2015  s->output_channels = coded_channels;
2016 
2017  memset(s->frame[0].collapse_masks, 0, sizeof(s->frame[0].collapse_masks));
2018  memset(s->frame[1].collapse_masks, 0, sizeof(s->frame[1].collapse_masks));
2019 
2020  consumed = opus_rc_tell(rc);
2021 
2022  /* obtain silence flag */
2023  if (consumed >= s->framebits)
2024  silence = 1;
2025  else if (consumed == 1)
2026  silence = opus_rc_p2model(rc, 15);
2027 
2028 
2029  if (silence) {
2030  consumed = s->framebits;
2031  rc->total_read_bits += s->framebits - opus_rc_tell(rc);
2032  }
2033 
2034  /* obtain post-filter options */
2035  consumed = parse_postfilter(s, rc, consumed);
2036 
2037  /* obtain transient flag */
2038  if (s->duration != 0 && consumed+3 <= s->framebits)
2039  transient = opus_rc_p2model(rc, 3);
2040 
2041  s->blocks = transient ? 1 << s->duration : 1;
2042  s->blocksize = frame_size / s->blocks;
2043 
2044  imdct = s->imdct[transient ? 0 : s->duration];
2045 
2046  if (coded_channels == 1) {
2047  for (i = 0; i < CELT_MAX_BANDS; i++)
2048  s->frame[0].energy[i] = FFMAX(s->frame[0].energy[i], s->frame[1].energy[i]);
2049  }
2050 
2052  celt_decode_tf_changes (s, rc, transient);
2053  celt_decode_allocation (s, rc);
2054  celt_decode_fine_energy (s, rc);
2055  celt_decode_bands (s, rc);
2056 
2057  if (s->anticollapse_bit)
2058  anticollapse = opus_getrawbits(rc, 1);
2059 
2061 
2062  /* apply anti-collapse processing and denormalization to
2063  * each coded channel */
2064  for (i = 0; i < s->coded_channels; i++) {
2065  CeltFrame *frame = &s->frame[i];
2066 
2067  if (anticollapse)
2068  process_anticollapse(s, frame, s->coeffs[i]);
2069 
2070  celt_denormalize(s, frame, s->coeffs[i]);
2071  }
2072 
2073  /* stereo -> mono downmix */
2074  if (s->output_channels < s->coded_channels) {
2075  s->dsp.vector_fmac_scalar(s->coeffs[0], s->coeffs[1], 1.0, FFALIGN(frame_size, 16));
2076  imdct_scale = 0.5;
2077  } else if (s->output_channels > s->coded_channels)
2078  memcpy(s->coeffs[1], s->coeffs[0], frame_size * sizeof(float));
2079 
2080  if (silence) {
2081  for (i = 0; i < 2; i++) {
2082  CeltFrame *frame = &s->frame[i];
2083 
2084  for (j = 0; j < FF_ARRAY_ELEMS(frame->energy); j++)
2085  frame->energy[j] = CELT_ENERGY_SILENCE;
2086  }
2087  memset(s->coeffs, 0, sizeof(s->coeffs));
2088  }
2089 
2090  /* transform and output for each output channel */
2091  for (i = 0; i < s->output_channels; i++) {
2092  CeltFrame *frame = &s->frame[i];
2093  float m = frame->deemph_coeff;
2094 
2095  /* iMDCT and overlap-add */
2096  for (j = 0; j < s->blocks; j++) {
2097  float *dst = frame->buf + 1024 + j * s->blocksize;
2098 
2099  imdct->imdct_half(imdct, dst + CELT_OVERLAP / 2, s->coeffs[i] + j,
2100  s->blocks, imdct_scale);
2101  s->dsp.vector_fmul_window(dst, dst, dst + CELT_OVERLAP / 2,
2102  celt_window, CELT_OVERLAP / 2);
2103  }
2104 
2105  /* postfilter */
2106  celt_postfilter(s, frame);
2107 
2108  /* deemphasis and output scaling */
2109  for (j = 0; j < frame_size; j++) {
2110  float tmp = frame->buf[1024 - frame_size + j] + m;
2111  m = tmp * CELT_DEEMPH_COEFF;
2112  output[i][j] = tmp / 32768.;
2113  }
2114  frame->deemph_coeff = m;
2115  }
2116 
2117  if (coded_channels == 1)
2118  memcpy(s->frame[1].energy, s->frame[0].energy, sizeof(s->frame[0].energy));
2119 
2120  for (i = 0; i < 2; i++ ) {
2121  CeltFrame *frame = &s->frame[i];
2122 
2123  if (!transient) {
2124  memcpy(frame->prev_energy[1], frame->prev_energy[0], sizeof(frame->prev_energy[0]));
2125  memcpy(frame->prev_energy[0], frame->energy, sizeof(frame->prev_energy[0]));
2126  } else {
2127  for (j = 0; j < CELT_MAX_BANDS; j++)
2128  frame->prev_energy[0][j] = FFMIN(frame->prev_energy[0][j], frame->energy[j]);
2129  }
2130 
2131  for (j = 0; j < s->startband; j++) {
2132  frame->prev_energy[0][j] = CELT_ENERGY_SILENCE;
2133  frame->energy[j] = 0.0;
2134  }
2135  for (j = s->endband; j < CELT_MAX_BANDS; j++) {
2136  frame->prev_energy[0][j] = CELT_ENERGY_SILENCE;
2137  frame->energy[j] = 0.0;
2138  }
2139  }
2140 
2141  s->seed = rc->range;
2142 
2143  return 0;
2144 }
2145 
2147 {
2148  int i, j;
2149 
2150  if (s->flushed)
2151  return;
2152 
2153  for (i = 0; i < 2; i++) {
2154  CeltFrame *frame = &s->frame[i];
2155 
2156  for (j = 0; j < CELT_MAX_BANDS; j++)
2157  frame->prev_energy[0][j] = frame->prev_energy[1][j] = CELT_ENERGY_SILENCE;
2158 
2159  memset(frame->energy, 0, sizeof(frame->energy));
2160  memset(frame->buf, 0, sizeof(frame->buf));
2161 
2162  memset(frame->pf_gains, 0, sizeof(frame->pf_gains));
2163  memset(frame->pf_gains_old, 0, sizeof(frame->pf_gains_old));
2164  memset(frame->pf_gains_new, 0, sizeof(frame->pf_gains_new));
2165 
2166  frame->deemph_coeff = 0.0;
2167  }
2168  s->seed = 0;
2169 
2170  s->flushed = 1;
2171 }
2172 
2174 {
2175  CeltContext *s = *ps;
2176  int i;
2177 
2178  if (!s)
2179  return;
2180 
2181  for (i = 0; i < FF_ARRAY_ELEMS(s->imdct); i++)
2182  ff_celt_imdct_uninit(&s->imdct[i]);
2183 
2184  av_freep(ps);
2185 }
2186 
2187 int ff_celt_init(AVCodecContext *avctx, CeltContext **ps, int output_channels)
2188 {
2189  CeltContext *s;
2190  int i, ret;
2191 
2192  if (output_channels != 1 && output_channels != 2) {
2193  av_log(avctx, AV_LOG_ERROR, "Invalid number of output channels: %d\n",
2194  output_channels);
2195  return AVERROR(EINVAL);
2196  }
2197 
2198  s = av_mallocz(sizeof(*s));
2199  if (!s)
2200  return AVERROR(ENOMEM);
2201 
2202  s->avctx = avctx;
2203  s->output_channels = output_channels;
2204 
2205  for (i = 0; i < FF_ARRAY_ELEMS(s->imdct); i++) {
2206  ret = ff_celt_imdct_init(&s->imdct[i], i + 3);
2207  if (ret < 0)
2208  goto fail;
2209  }
2210 
2212 
2213  ff_celt_flush(s);
2214 
2215  *ps = s;
2216 
2217  return 0;
2218 fail:
2219  ff_celt_free(&s);
2220  return ret;
2221 }