You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1162 lines
53KB

  1. /*
  2. * Copyright (c) 2012 Andrew D'Addesio
  3. * Copyright (c) 2013-2014 Mozilla Corporation
  4. * Copyright (c) 2016 Rostislav Pehlivanov <atomnuker@gmail.com>
  5. *
  6. * This file is part of FFmpeg.
  7. *
  8. * FFmpeg is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU Lesser General Public
  10. * License as published by the Free Software Foundation; either
  11. * version 2.1 of the License, or (at your option) any later version.
  12. *
  13. * FFmpeg is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16. * Lesser General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU Lesser General Public
  19. * License along with FFmpeg; if not, write to the Free Software
  20. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  21. */
  22. #include "opustab.h"
  23. const uint8_t ff_opus_default_coupled_streams[] = { 0, 1, 1, 2, 2, 2, 2, 3 };
  24. const uint8_t ff_celt_band_end[] = { 13, 17, 17, 19, 21 };
  25. const uint16_t ff_silk_model_lbrr_flags_40[] = { 256, 0, 53, 106, 256 };
  26. const uint16_t ff_silk_model_lbrr_flags_60[] = { 256, 0, 41, 61, 90, 131, 146, 174, 256 };
  27. const uint16_t ff_silk_model_stereo_s1[] = {
  28. 256, 7, 9, 10, 11, 12, 22, 46, 54, 55, 56, 59, 82, 174, 197, 200,
  29. 201, 202, 210, 234, 244, 245, 246, 247, 249, 256
  30. };
  31. const uint16_t ff_silk_model_stereo_s2[] = {256, 85, 171, 256};
  32. const uint16_t ff_silk_model_stereo_s3[] = {256, 51, 102, 154, 205, 256};
  33. const uint16_t ff_silk_model_mid_only[] = {256, 192, 256};
  34. const uint16_t ff_silk_model_frame_type_inactive[] = {256, 26, 256};
  35. const uint16_t ff_silk_model_frame_type_active[] = {256, 24, 98, 246, 256};
  36. const uint16_t ff_silk_model_gain_highbits[3][9] = {
  37. {256, 32, 144, 212, 241, 253, 254, 255, 256},
  38. {256, 2, 19, 64, 124, 186, 233, 252, 256},
  39. {256, 1, 4, 30, 101, 195, 245, 254, 256}
  40. };
  41. const uint16_t ff_silk_model_gain_lowbits[] = {256, 32, 64, 96, 128, 160, 192, 224, 256};
  42. const uint16_t ff_silk_model_gain_delta[] = {
  43. 256, 6, 11, 22, 53, 185, 206, 214, 218, 221, 223, 225, 227, 228, 229, 230,
  44. 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
  45. 247, 248, 249, 250, 251, 252, 253, 254, 255, 256
  46. };
  47. const uint16_t ff_silk_model_lsf_s1[2][2][33] = {
  48. {
  49. { // NB or MB, unvoiced
  50. 256, 44, 78, 108, 127, 148, 160, 171, 174, 177, 179, 195, 197, 199, 200, 205,
  51. 207, 208, 211, 214, 215, 216, 218, 220, 222, 225, 226, 235, 244, 246, 253, 255, 256
  52. }, { // NB or MB, voiced
  53. 256, 1, 11, 12, 20, 23, 31, 39, 53, 66, 80, 81, 95, 107, 120, 131,
  54. 142, 154, 165, 175, 185, 196, 204, 213, 221, 228, 236, 237, 238, 244, 245, 251, 256
  55. }
  56. }, {
  57. { // WB, unvoiced
  58. 256, 31, 52, 55, 72, 73, 81, 98, 102, 103, 121, 137, 141, 143, 146, 147,
  59. 157, 158, 161, 177, 188, 204, 206, 208, 211, 213, 224, 225, 229, 238, 246, 253, 256
  60. }, { // WB, voiced
  61. 256, 1, 5, 21, 26, 44, 55, 60, 74, 89, 90, 93, 105, 118, 132, 146,
  62. 152, 166, 178, 180, 186, 187, 199, 211, 222, 232, 235, 245, 250, 251, 252, 253, 256
  63. }
  64. }
  65. };
  66. const uint16_t ff_silk_model_lsf_s2[32][10] = {
  67. // NB, MB
  68. { 256, 1, 2, 3, 18, 242, 253, 254, 255, 256 },
  69. { 256, 1, 2, 4, 38, 221, 253, 254, 255, 256 },
  70. { 256, 1, 2, 6, 48, 197, 252, 254, 255, 256 },
  71. { 256, 1, 2, 10, 62, 185, 246, 254, 255, 256 },
  72. { 256, 1, 4, 20, 73, 174, 248, 254, 255, 256 },
  73. { 256, 1, 4, 21, 76, 166, 239, 254, 255, 256 },
  74. { 256, 1, 8, 32, 85, 159, 226, 252, 255, 256 },
  75. { 256, 1, 2, 20, 83, 161, 219, 249, 255, 256 },
  76. // WB
  77. { 256, 1, 2, 3, 12, 244, 253, 254, 255, 256 },
  78. { 256, 1, 2, 4, 32, 218, 253, 254, 255, 256 },
  79. { 256, 1, 2, 5, 47, 199, 252, 254, 255, 256 },
  80. { 256, 1, 2, 12, 61, 187, 252, 254, 255, 256 },
  81. { 256, 1, 5, 24, 72, 172, 249, 254, 255, 256 },
  82. { 256, 1, 2, 16, 70, 170, 242, 254, 255, 256 },
  83. { 256, 1, 2, 17, 78, 165, 226, 251, 255, 256 },
  84. { 256, 1, 8, 29, 79, 156, 237, 254, 255, 256 }
  85. };
  86. const uint16_t ff_silk_model_lsf_s2_ext[] = { 256, 156, 216, 240, 249, 253, 255, 256 };
  87. const uint16_t ff_silk_model_lsf_interpolation_offset[] = { 256, 13, 35, 64, 75, 256 };
  88. const uint16_t ff_silk_model_pitch_highbits[] = {
  89. 256, 3, 6, 12, 23, 44, 74, 106, 125, 136, 146, 158, 171, 184, 196, 207,
  90. 216, 224, 231, 237, 241, 243, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256
  91. };
  92. const uint16_t ff_silk_model_pitch_lowbits_nb[] = { 256, 64, 128, 192, 256 };
  93. const uint16_t ff_silk_model_pitch_lowbits_mb[] = { 256, 43, 85, 128, 171, 213, 256 };
  94. const uint16_t ff_silk_model_pitch_lowbits_wb[] = { 256, 32, 64, 96, 128, 160, 192, 224, 256 };
  95. const uint16_t ff_silk_model_pitch_delta[] = {
  96. 256, 46, 48, 50, 53, 57, 63, 73, 88, 114, 152, 182, 204, 219, 229, 236,
  97. 242, 246, 250, 252, 254, 256
  98. };
  99. const uint16_t ff_silk_model_pitch_contour_nb10ms[] = { 256, 143, 193, 256 };
  100. const uint16_t ff_silk_model_pitch_contour_nb20ms[] = {
  101. 256, 68, 80, 101, 118, 137, 159, 189, 213, 230, 246, 256
  102. };
  103. const uint16_t ff_silk_model_pitch_contour_mbwb10ms[] = {
  104. 256, 91, 137, 176, 195, 209, 221, 229, 236, 242, 247, 252, 256
  105. };
  106. const uint16_t ff_silk_model_pitch_contour_mbwb20ms[] = {
  107. 256, 33, 55, 73, 89, 104, 118, 132, 145, 158, 168, 177, 186, 194, 200, 206,
  108. 212, 217, 221, 225, 229, 232, 235, 238, 240, 242, 244, 246, 248, 250, 252, 253,
  109. 254, 255, 256
  110. };
  111. const uint16_t ff_silk_model_ltp_filter[] = { 256, 77, 157, 256 };
  112. const uint16_t ff_silk_model_ltp_filter0_sel[] = {
  113. 256, 185, 200, 213, 226, 235, 244, 250, 256
  114. };
  115. const uint16_t ff_silk_model_ltp_filter1_sel[] = {
  116. 256, 57, 91, 112, 132, 147, 160, 172, 185, 195, 205, 214, 224, 233, 241, 248, 256
  117. };
  118. const uint16_t ff_silk_model_ltp_filter2_sel[] = {
  119. 256, 15, 31, 45, 57, 69, 81, 92, 103, 114, 124, 133, 142, 151, 160, 168,
  120. 176, 184, 192, 199, 206, 212, 218, 223, 227, 232, 236, 240, 244, 247, 251, 254, 256
  121. };
  122. const uint16_t ff_silk_model_ltp_scale_index[] = { 256, 128, 192, 256 };
  123. const uint16_t ff_silk_model_lcg_seed[] = { 256, 64, 128, 192, 256 };
  124. const uint16_t ff_silk_model_exc_rate[2][10] = {
  125. { 256, 15, 66, 78, 124, 169, 182, 215, 242, 256 }, // unvoiced
  126. { 256, 33, 63, 99, 116, 150, 199, 217, 238, 256 } // voiced
  127. };
  128. const uint16_t ff_silk_model_pulse_count[11][19] = {
  129. { 256, 131, 205, 230, 238, 241, 244, 245, 246,
  130. 247, 248, 249, 250, 251, 252, 253, 254, 255, 256 },
  131. { 256, 58, 151, 211, 234, 241, 244, 245, 246,
  132. 247, 248, 249, 250, 251, 252, 253, 254, 255, 256 },
  133. { 256, 43, 94, 140, 173, 197, 213, 224, 232,
  134. 238, 241, 244, 247, 249, 250, 251, 253, 254, 256 },
  135. { 256, 17, 69, 140, 197, 228, 240, 245, 246,
  136. 247, 248, 249, 250, 251, 252, 253, 254, 255, 256 },
  137. { 256, 6, 27, 68, 121, 170, 205, 226, 237,
  138. 243, 246, 248, 250, 251, 252, 253, 254, 255, 256 },
  139. { 256, 7, 21, 43, 71, 100, 128, 153, 173,
  140. 190, 203, 214, 223, 230, 235, 239, 243, 246, 256 },
  141. { 256, 2, 7, 21, 50, 92, 138, 179, 210,
  142. 229, 240, 246, 249, 251, 252, 253, 254, 255, 256 },
  143. { 256, 1, 3, 7, 17, 36, 65, 100, 137,
  144. 171, 199, 219, 233, 241, 246, 250, 252, 254, 256 },
  145. { 256, 1, 3, 5, 10, 19, 33, 53, 77,
  146. 104, 132, 158, 181, 201, 216, 227, 235, 241, 256 },
  147. { 256, 1, 2, 3, 9, 36, 94, 150, 189,
  148. 214, 228, 238, 244, 247, 250, 252, 253, 254, 256 },
  149. { 256, 2, 3, 9, 36, 94, 150, 189, 214,
  150. 228, 238, 244, 247, 250, 252, 253, 254, 256, 256 }
  151. };
  152. const uint16_t ff_silk_model_pulse_location[4][168] = {
  153. {
  154. 256, 126, 256,
  155. 256, 56, 198, 256,
  156. 256, 25, 126, 230, 256,
  157. 256, 12, 72, 180, 244, 256,
  158. 256, 7, 42, 126, 213, 250, 256,
  159. 256, 4, 24, 83, 169, 232, 253, 256,
  160. 256, 3, 15, 53, 125, 200, 242, 254, 256,
  161. 256, 2, 10, 35, 89, 162, 221, 248, 255, 256,
  162. 256, 2, 7, 24, 63, 126, 191, 233, 251, 255, 256,
  163. 256, 1, 5, 17, 45, 94, 157, 211, 241, 252, 255, 256,
  164. 256, 1, 5, 13, 33, 70, 125, 182, 223, 245, 253, 255, 256,
  165. 256, 1, 4, 11, 26, 54, 98, 151, 199, 232, 248, 254, 255, 256,
  166. 256, 1, 3, 9, 21, 42, 77, 124, 172, 212, 237, 249, 254, 255, 256,
  167. 256, 1, 2, 6, 16, 33, 60, 97, 144, 187, 220, 241, 250, 254, 255, 256,
  168. 256, 1, 2, 3, 11, 25, 47, 80, 120, 163, 201, 229, 245, 253, 254, 255, 256,
  169. 256, 1, 2, 3, 4, 17, 35, 62, 98, 139, 180, 214, 238, 252, 253, 254, 255, 256
  170. },{
  171. 256, 127, 256,
  172. 256, 53, 202, 256,
  173. 256, 22, 127, 233, 256,
  174. 256, 11, 72, 183, 246, 256,
  175. 256, 6, 41, 127, 215, 251, 256,
  176. 256, 4, 24, 83, 170, 232, 253, 256,
  177. 256, 3, 16, 56, 127, 200, 241, 254, 256,
  178. 256, 3, 12, 39, 92, 162, 218, 246, 255, 256,
  179. 256, 3, 11, 30, 67, 124, 185, 229, 249, 255, 256,
  180. 256, 3, 10, 25, 53, 97, 151, 200, 233, 250, 255, 256,
  181. 256, 1, 8, 21, 43, 77, 123, 171, 209, 237, 251, 255, 256,
  182. 256, 1, 2, 13, 35, 62, 97, 139, 186, 219, 244, 254, 255, 256,
  183. 256, 1, 2, 8, 22, 48, 85, 128, 171, 208, 234, 248, 254, 255, 256,
  184. 256, 1, 2, 6, 16, 36, 67, 107, 149, 189, 220, 240, 250, 254, 255, 256,
  185. 256, 1, 2, 5, 13, 29, 55, 90, 128, 166, 201, 227, 243, 251, 254, 255, 256,
  186. 256, 1, 2, 4, 10, 22, 43, 73, 109, 147, 183, 213, 234, 246, 252, 254, 255, 256
  187. },{
  188. 256, 127, 256,
  189. 256, 49, 206, 256,
  190. 256, 20, 127, 236, 256,
  191. 256, 11, 71, 184, 246, 256,
  192. 256, 7, 43, 127, 214, 250, 256,
  193. 256, 6, 30, 87, 169, 229, 252, 256,
  194. 256, 5, 23, 62, 126, 194, 236, 252, 256,
  195. 256, 6, 20, 49, 96, 157, 209, 239, 253, 256,
  196. 256, 1, 16, 39, 74, 125, 175, 215, 245, 255, 256,
  197. 256, 1, 2, 23, 55, 97, 149, 195, 236, 254, 255, 256,
  198. 256, 1, 7, 23, 50, 86, 128, 170, 206, 233, 249, 255, 256,
  199. 256, 1, 6, 18, 39, 70, 108, 148, 186, 217, 238, 250, 255, 256,
  200. 256, 1, 4, 13, 30, 56, 90, 128, 166, 200, 226, 243, 252, 255, 256,
  201. 256, 1, 4, 11, 25, 47, 76, 110, 146, 180, 209, 231, 245, 252, 255, 256,
  202. 256, 1, 3, 8, 19, 37, 62, 93, 128, 163, 194, 219, 237, 248, 253, 255, 256,
  203. 256, 1, 2, 6, 15, 30, 51, 79, 111, 145, 177, 205, 226, 241, 250, 254, 255, 256
  204. },{
  205. 256, 128, 256,
  206. 256, 42, 214, 256,
  207. 256, 21, 128, 235, 256,
  208. 256, 12, 72, 184, 245, 256,
  209. 256, 8, 42, 128, 214, 249, 256,
  210. 256, 8, 31, 86, 176, 231, 251, 256,
  211. 256, 5, 20, 58, 130, 202, 238, 253, 256,
  212. 256, 6, 18, 45, 97, 174, 221, 241, 251, 256,
  213. 256, 6, 25, 53, 88, 128, 168, 203, 231, 250, 256,
  214. 256, 4, 18, 40, 71, 108, 148, 185, 216, 238, 252, 256,
  215. 256, 3, 13, 31, 57, 90, 128, 166, 199, 225, 243, 253, 256,
  216. 256, 2, 10, 23, 44, 73, 109, 147, 183, 212, 233, 246, 254, 256,
  217. 256, 1, 6, 16, 33, 58, 90, 128, 166, 198, 223, 240, 250, 255, 256,
  218. 256, 1, 5, 12, 25, 46, 75, 110, 146, 181, 210, 231, 244, 251, 255, 256,
  219. 256, 1, 3, 8, 18, 35, 60, 92, 128, 164, 196, 221, 238, 248, 253, 255, 256,
  220. 256, 1, 3, 7, 14, 27, 48, 76, 110, 146, 180, 208, 229, 242, 249, 253, 255, 256
  221. }
  222. };
  223. const uint16_t ff_silk_model_excitation_lsb[] = {256, 136, 256};
  224. const uint16_t ff_silk_model_excitation_sign[3][2][7][3] = {
  225. { // Inactive
  226. { // Low offset
  227. {256, 2, 256},
  228. {256, 207, 256},
  229. {256, 189, 256},
  230. {256, 179, 256},
  231. {256, 174, 256},
  232. {256, 163, 256},
  233. {256, 157, 256}
  234. }, { // High offset
  235. {256, 58, 256},
  236. {256, 245, 256},
  237. {256, 238, 256},
  238. {256, 232, 256},
  239. {256, 225, 256},
  240. {256, 220, 256},
  241. {256, 211, 256}
  242. }
  243. }, { // Unvoiced
  244. { // Low offset
  245. {256, 1, 256},
  246. {256, 210, 256},
  247. {256, 190, 256},
  248. {256, 178, 256},
  249. {256, 169, 256},
  250. {256, 162, 256},
  251. {256, 152, 256}
  252. }, { // High offset
  253. {256, 48, 256},
  254. {256, 242, 256},
  255. {256, 235, 256},
  256. {256, 224, 256},
  257. {256, 214, 256},
  258. {256, 205, 256},
  259. {256, 190, 256}
  260. }
  261. }, { // Voiced
  262. { // Low offset
  263. {256, 1, 256},
  264. {256, 162, 256},
  265. {256, 152, 256},
  266. {256, 147, 256},
  267. {256, 144, 256},
  268. {256, 141, 256},
  269. {256, 138, 256}
  270. }, { // High offset
  271. {256, 8, 256},
  272. {256, 203, 256},
  273. {256, 187, 256},
  274. {256, 176, 256},
  275. {256, 168, 256},
  276. {256, 161, 256},
  277. {256, 154, 256}
  278. }
  279. }
  280. };
  281. const int16_t ff_silk_stereo_weights[] = {
  282. -13732, -10050, -8266, -7526, -6500, -5000, -2950, -820,
  283. 820, 2950, 5000, 6500, 7526, 8266, 10050, 13732
  284. };
  285. const uint8_t ff_silk_lsf_s2_model_sel_nbmb[32][10] = {
  286. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  287. { 1, 3, 1, 2, 2, 1, 2, 1, 1, 1 },
  288. { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
  289. { 1, 2, 2, 2, 2, 1, 2, 1, 1, 1 },
  290. { 2, 3, 3, 3, 3, 2, 2, 2, 2, 2 },
  291. { 0, 5, 3, 3, 2, 2, 2, 2, 1, 1 },
  292. { 0, 2, 2, 2, 2, 2, 2, 2, 2, 1 },
  293. { 2, 3, 6, 4, 4, 4, 5, 4, 5, 5 },
  294. { 2, 4, 5, 5, 4, 5, 4, 6, 4, 4 },
  295. { 2, 4, 4, 7, 4, 5, 4, 5, 5, 4 },
  296. { 4, 3, 3, 3, 2, 3, 2, 2, 2, 2 },
  297. { 1, 5, 5, 6, 4, 5, 4, 5, 5, 5 },
  298. { 2, 7, 4, 6, 5, 5, 5, 5, 5, 5 },
  299. { 2, 7, 5, 5, 5, 5, 5, 6, 5, 4 },
  300. { 3, 3, 5, 4, 4, 5, 4, 5, 4, 4 },
  301. { 2, 3, 3, 5, 5, 4, 4, 4, 4, 4 },
  302. { 2, 4, 4, 6, 4, 5, 4, 5, 5, 5 },
  303. { 2, 5, 4, 6, 5, 5, 5, 4, 5, 4 },
  304. { 2, 7, 4, 5, 4, 5, 4, 5, 5, 5 },
  305. { 2, 5, 4, 6, 7, 6, 5, 6, 5, 4 },
  306. { 3, 6, 7, 4, 6, 5, 5, 6, 4, 5 },
  307. { 2, 7, 6, 4, 4, 4, 5, 4, 5, 5 },
  308. { 4, 5, 5, 4, 6, 6, 5, 6, 5, 4 },
  309. { 2, 5, 5, 6, 5, 6, 4, 6, 4, 4 },
  310. { 4, 5, 5, 5, 3, 7, 4, 5, 5, 4 },
  311. { 2, 3, 4, 5, 5, 6, 4, 5, 5, 4 },
  312. { 2, 3, 2, 3, 3, 4, 2, 3, 3, 3 },
  313. { 1, 1, 2, 2, 2, 2, 2, 3, 2, 2 },
  314. { 4, 5, 5, 6, 6, 6, 5, 6, 4, 5 },
  315. { 3, 5, 5, 4, 4, 4, 4, 3, 3, 2 },
  316. { 2, 5, 3, 7, 5, 5, 4, 4, 5, 4 },
  317. { 4, 4, 5, 4, 5, 6, 5, 6, 5, 4 }
  318. };
  319. const uint8_t ff_silk_lsf_s2_model_sel_wb[32][16] = {
  320. { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
  321. { 10, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 9, 9, 9, 8, 11 },
  322. { 10, 13, 13, 11, 15, 12, 12, 13, 10, 13, 12, 13, 13, 12, 11, 11 },
  323. { 8, 10, 9, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9 },
  324. { 8, 14, 13, 12, 14, 12, 15, 13, 12, 12, 12, 13, 13, 12, 12, 11 },
  325. { 8, 11, 13, 13, 12, 11, 11, 13, 11, 11, 11, 11, 11, 11, 10, 12 },
  326. { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
  327. { 8, 10, 14, 11, 15, 10, 13, 11, 12, 13, 13, 12, 11, 11, 10, 11 },
  328. { 8, 14, 10, 14, 14, 12, 13, 12, 14, 13, 12, 12, 13, 11, 11, 11 },
  329. { 10, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
  330. { 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9 },
  331. { 10, 10, 11, 12, 13, 11, 11, 11, 11, 11, 11, 11, 10, 10, 9, 11 },
  332. { 10, 10, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 10, 9, 11 },
  333. { 11, 12, 12, 12, 14, 12, 12, 13, 11, 13, 12, 12, 13, 12, 11, 12 },
  334. { 8, 14, 12, 13, 12, 15, 13, 10, 14, 13, 15, 12, 12, 11, 13, 11 },
  335. { 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 8 },
  336. { 9, 14, 13, 15, 13, 12, 13, 11, 12, 13, 12, 12, 12, 11, 11, 12 },
  337. { 9, 11, 11, 12, 12, 11, 11, 13, 10, 11, 11, 13, 13, 13, 11, 12 },
  338. { 10, 11, 11, 10, 10, 10, 11, 10, 9, 10, 9, 10, 9, 9, 9, 12 },
  339. { 8, 10, 11, 13, 11, 11, 10, 10, 10, 9, 9, 8, 8, 8, 8, 8 },
  340. { 11, 12, 11, 13, 11, 11, 10, 10, 9, 9, 9, 9, 9, 10, 10, 12 },
  341. { 10, 14, 11, 15, 15, 12, 13, 12, 13, 11, 13, 11, 11, 10, 11, 11 },
  342. { 10, 11, 13, 14, 14, 11, 13, 11, 12, 12, 11, 11, 11, 11, 10, 12 },
  343. { 9, 11, 11, 12, 12, 12, 12, 11, 13, 13, 13, 11, 9, 9, 9, 9 },
  344. { 10, 13, 11, 14, 14, 12, 15, 12, 12, 13, 11, 12, 12, 11, 11, 11 },
  345. { 8, 14, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
  346. { 8, 14, 14, 11, 13, 10, 13, 13, 11, 12, 12, 15, 15, 12, 12, 12 },
  347. { 11, 11, 15, 11, 13, 12, 11, 11, 11, 10, 10, 11, 11, 11, 10, 11 },
  348. { 8, 8, 9, 8, 8, 8, 10, 9, 10, 9, 9, 10, 10, 10, 9, 9 },
  349. { 8, 11, 10, 13, 11, 11, 10, 11, 10, 9, 8, 8, 9, 8, 8, 9 },
  350. { 11, 13, 13, 12, 15, 13, 11, 11, 10, 11, 10, 10, 9, 8, 9, 8 },
  351. { 10, 11, 13, 11, 12, 11, 11, 11, 10, 9, 10, 14, 12, 8, 8, 8 }
  352. };
  353. const uint8_t ff_silk_lsf_pred_weights_nbmb[2][9] = {
  354. {179, 138, 140, 148, 151, 149, 153, 151, 163},
  355. {116, 67, 82, 59, 92, 72, 100, 89, 92}
  356. };
  357. const uint8_t ff_silk_lsf_pred_weights_wb[2][15] = {
  358. {175, 148, 160, 176, 178, 173, 174, 164, 177, 174, 196, 182, 198, 192, 182},
  359. { 68, 62, 66, 60, 72, 117, 85, 90, 118, 136, 151, 142, 160, 142, 155}
  360. };
  361. const uint8_t ff_silk_lsf_weight_sel_nbmb[32][9] = {
  362. { 0, 1, 0, 0, 0, 0, 0, 0, 0 },
  363. { 1, 0, 0, 0, 0, 0, 0, 0, 0 },
  364. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  365. { 1, 1, 1, 0, 0, 0, 0, 1, 0 },
  366. { 0, 1, 0, 0, 0, 0, 0, 0, 0 },
  367. { 0, 1, 0, 0, 0, 0, 0, 0, 0 },
  368. { 1, 0, 1, 1, 0, 0, 0, 1, 0 },
  369. { 0, 1, 1, 0, 0, 1, 1, 0, 0 },
  370. { 0, 0, 1, 1, 0, 1, 0, 1, 1 },
  371. { 0, 0, 1, 1, 0, 0, 1, 1, 1 },
  372. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  373. { 0, 1, 0, 1, 1, 1, 1, 1, 0 },
  374. { 0, 1, 0, 1, 1, 1, 1, 1, 0 },
  375. { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
  376. { 1, 0, 1, 1, 0, 1, 1, 1, 1 },
  377. { 0, 1, 1, 1, 1, 1, 0, 1, 0 },
  378. { 0, 0, 1, 1, 0, 1, 0, 1, 0 },
  379. { 0, 0, 1, 1, 1, 0, 1, 1, 1 },
  380. { 0, 1, 1, 0, 0, 1, 1, 1, 0 },
  381. { 0, 0, 0, 1, 1, 1, 0, 1, 0 },
  382. { 0, 1, 1, 0, 0, 1, 0, 1, 0 },
  383. { 0, 1, 1, 0, 0, 0, 1, 1, 0 },
  384. { 0, 0, 0, 0, 0, 1, 1, 1, 1 },
  385. { 0, 0, 1, 1, 0, 0, 0, 1, 1 },
  386. { 0, 0, 0, 1, 0, 1, 1, 1, 1 },
  387. { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
  388. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  389. { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  390. { 0, 0, 1, 0, 1, 1, 0, 1, 0 },
  391. { 1, 0, 0, 1, 0, 0, 0, 0, 0 },
  392. { 0, 0, 0, 1, 1, 0, 1, 0, 1 },
  393. { 1, 0, 1, 1, 0, 1, 1, 1, 1 }
  394. };
  395. const uint8_t ff_silk_lsf_weight_sel_wb[32][15] = {
  396. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  397. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  398. { 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0 },
  399. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
  400. { 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0 },
  401. { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  402. { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0 },
  403. { 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 },
  404. { 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1 },
  405. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  406. { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  407. { 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0 },
  408. { 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
  409. { 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0 },
  410. { 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1 },
  411. { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
  412. { 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0 },
  413. { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0 },
  414. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  415. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
  416. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  417. { 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0 },
  418. { 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0 },
  419. { 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0 },
  420. { 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 },
  421. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  422. { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1 },
  423. { 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1 },
  424. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  425. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  426. { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
  427. { 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0 }
  428. };
  429. const uint8_t ff_silk_lsf_codebook_nbmb[32][10] = {
  430. { 12, 35, 60, 83, 108, 132, 157, 180, 206, 228 },
  431. { 15, 32, 55, 77, 101, 125, 151, 175, 201, 225 },
  432. { 19, 42, 66, 89, 114, 137, 162, 184, 209, 230 },
  433. { 12, 25, 50, 72, 97, 120, 147, 172, 200, 223 },
  434. { 26, 44, 69, 90, 114, 135, 159, 180, 205, 225 },
  435. { 13, 22, 53, 80, 106, 130, 156, 180, 205, 228 },
  436. { 15, 25, 44, 64, 90, 115, 142, 168, 196, 222 },
  437. { 19, 24, 62, 82, 100, 120, 145, 168, 190, 214 },
  438. { 22, 31, 50, 79, 103, 120, 151, 170, 203, 227 },
  439. { 21, 29, 45, 65, 106, 124, 150, 171, 196, 224 },
  440. { 30, 49, 75, 97, 121, 142, 165, 186, 209, 229 },
  441. { 19, 25, 52, 70, 93, 116, 143, 166, 192, 219 },
  442. { 26, 34, 62, 75, 97, 118, 145, 167, 194, 217 },
  443. { 25, 33, 56, 70, 91, 113, 143, 165, 196, 223 },
  444. { 21, 34, 51, 72, 97, 117, 145, 171, 196, 222 },
  445. { 20, 29, 50, 67, 90, 117, 144, 168, 197, 221 },
  446. { 22, 31, 48, 66, 95, 117, 146, 168, 196, 222 },
  447. { 24, 33, 51, 77, 116, 134, 158, 180, 200, 224 },
  448. { 21, 28, 70, 87, 106, 124, 149, 170, 194, 217 },
  449. { 26, 33, 53, 64, 83, 117, 152, 173, 204, 225 },
  450. { 27, 34, 65, 95, 108, 129, 155, 174, 210, 225 },
  451. { 20, 26, 72, 99, 113, 131, 154, 176, 200, 219 },
  452. { 34, 43, 61, 78, 93, 114, 155, 177, 205, 229 },
  453. { 23, 29, 54, 97, 124, 138, 163, 179, 209, 229 },
  454. { 30, 38, 56, 89, 118, 129, 158, 178, 200, 231 },
  455. { 21, 29, 49, 63, 85, 111, 142, 163, 193, 222 },
  456. { 27, 48, 77, 103, 133, 158, 179, 196, 215, 232 },
  457. { 29, 47, 74, 99, 124, 151, 176, 198, 220, 237 },
  458. { 33, 42, 61, 76, 93, 121, 155, 174, 207, 225 },
  459. { 29, 53, 87, 112, 136, 154, 170, 188, 208, 227 },
  460. { 24, 30, 52, 84, 131, 150, 166, 186, 203, 229 },
  461. { 37, 48, 64, 84, 104, 118, 156, 177, 201, 230 }
  462. };
  463. const uint8_t ff_silk_lsf_codebook_wb[32][16] = {
  464. { 7, 23, 38, 54, 69, 85, 100, 116, 131, 147, 162, 178, 193, 208, 223, 239 },
  465. { 13, 25, 41, 55, 69, 83, 98, 112, 127, 142, 157, 171, 187, 203, 220, 236 },
  466. { 15, 21, 34, 51, 61, 78, 92, 106, 126, 136, 152, 167, 185, 205, 225, 240 },
  467. { 10, 21, 36, 50, 63, 79, 95, 110, 126, 141, 157, 173, 189, 205, 221, 237 },
  468. { 17, 20, 37, 51, 59, 78, 89, 107, 123, 134, 150, 164, 184, 205, 224, 240 },
  469. { 10, 15, 32, 51, 67, 81, 96, 112, 129, 142, 158, 173, 189, 204, 220, 236 },
  470. { 8, 21, 37, 51, 65, 79, 98, 113, 126, 138, 155, 168, 179, 192, 209, 218 },
  471. { 12, 15, 34, 55, 63, 78, 87, 108, 118, 131, 148, 167, 185, 203, 219, 236 },
  472. { 16, 19, 32, 36, 56, 79, 91, 108, 118, 136, 154, 171, 186, 204, 220, 237 },
  473. { 11, 28, 43, 58, 74, 89, 105, 120, 135, 150, 165, 180, 196, 211, 226, 241 },
  474. { 6, 16, 33, 46, 60, 75, 92, 107, 123, 137, 156, 169, 185, 199, 214, 225 },
  475. { 11, 19, 30, 44, 57, 74, 89, 105, 121, 135, 152, 169, 186, 202, 218, 234 },
  476. { 12, 19, 29, 46, 57, 71, 88, 100, 120, 132, 148, 165, 182, 199, 216, 233 },
  477. { 17, 23, 35, 46, 56, 77, 92, 106, 123, 134, 152, 167, 185, 204, 222, 237 },
  478. { 14, 17, 45, 53, 63, 75, 89, 107, 115, 132, 151, 171, 188, 206, 221, 240 },
  479. { 9, 16, 29, 40, 56, 71, 88, 103, 119, 137, 154, 171, 189, 205, 222, 237 },
  480. { 16, 19, 36, 48, 57, 76, 87, 105, 118, 132, 150, 167, 185, 202, 218, 236 },
  481. { 12, 17, 29, 54, 71, 81, 94, 104, 126, 136, 149, 164, 182, 201, 221, 237 },
  482. { 15, 28, 47, 62, 79, 97, 115, 129, 142, 155, 168, 180, 194, 208, 223, 238 },
  483. { 8, 14, 30, 45, 62, 78, 94, 111, 127, 143, 159, 175, 192, 207, 223, 239 },
  484. { 17, 30, 49, 62, 79, 92, 107, 119, 132, 145, 160, 174, 190, 204, 220, 235 },
  485. { 14, 19, 36, 45, 61, 76, 91, 108, 121, 138, 154, 172, 189, 205, 222, 238 },
  486. { 12, 18, 31, 45, 60, 76, 91, 107, 123, 138, 154, 171, 187, 204, 221, 236 },
  487. { 13, 17, 31, 43, 53, 70, 83, 103, 114, 131, 149, 167, 185, 203, 220, 237 },
  488. { 17, 22, 35, 42, 58, 78, 93, 110, 125, 139, 155, 170, 188, 206, 224, 240 },
  489. { 8, 15, 34, 50, 67, 83, 99, 115, 131, 146, 162, 178, 193, 209, 224, 239 },
  490. { 13, 16, 41, 66, 73, 86, 95, 111, 128, 137, 150, 163, 183, 206, 225, 241 },
  491. { 17, 25, 37, 52, 63, 75, 92, 102, 119, 132, 144, 160, 175, 191, 212, 231 },
  492. { 19, 31, 49, 65, 83, 100, 117, 133, 147, 161, 174, 187, 200, 213, 227, 242 },
  493. { 18, 31, 52, 68, 88, 103, 117, 126, 138, 149, 163, 177, 192, 207, 223, 239 },
  494. { 16, 29, 47, 61, 76, 90, 106, 119, 133, 147, 161, 176, 193, 209, 224, 240 },
  495. { 15, 21, 35, 50, 61, 73, 86, 97, 110, 119, 129, 141, 175, 198, 218, 237 }
  496. };
  497. const uint16_t ff_silk_lsf_min_spacing_nbmb[] = {
  498. 250, 3, 6, 3, 3, 3, 4, 3, 3, 3, 461
  499. };
  500. const uint16_t ff_silk_lsf_min_spacing_wb[] = {
  501. 100, 3, 40, 3, 3, 3, 5, 14, 14, 10, 11, 3, 8, 9, 7, 3, 347
  502. };
  503. const uint8_t ff_silk_lsf_ordering_nbmb[] = {
  504. 0, 9, 6, 3, 4, 5, 8, 1, 2, 7
  505. };
  506. const uint8_t ff_silk_lsf_ordering_wb[] = {
  507. 0, 15, 8, 7, 4, 11, 12, 3, 2, 13, 10, 5, 6, 9, 14, 1
  508. };
  509. const int16_t ff_silk_cosine[] = { /* (0.12) */
  510. 4096, 4095, 4091, 4085,
  511. 4076, 4065, 4052, 4036,
  512. 4017, 3997, 3973, 3948,
  513. 3920, 3889, 3857, 3822,
  514. 3784, 3745, 3703, 3659,
  515. 3613, 3564, 3513, 3461,
  516. 3406, 3349, 3290, 3229,
  517. 3166, 3102, 3035, 2967,
  518. 2896, 2824, 2751, 2676,
  519. 2599, 2520, 2440, 2359,
  520. 2276, 2191, 2106, 2019,
  521. 1931, 1842, 1751, 1660,
  522. 1568, 1474, 1380, 1285,
  523. 1189, 1093, 995, 897,
  524. 799, 700, 601, 501,
  525. 401, 301, 201, 101,
  526. 0, -101, -201, -301,
  527. -401, -501, -601, -700,
  528. -799, -897, -995, -1093,
  529. -1189, -1285, -1380, -1474,
  530. -1568, -1660, -1751, -1842,
  531. -1931, -2019, -2106, -2191,
  532. -2276, -2359, -2440, -2520,
  533. -2599, -2676, -2751, -2824,
  534. -2896, -2967, -3035, -3102,
  535. -3166, -3229, -3290, -3349,
  536. -3406, -3461, -3513, -3564,
  537. -3613, -3659, -3703, -3745,
  538. -3784, -3822, -3857, -3889,
  539. -3920, -3948, -3973, -3997,
  540. -4017, -4036, -4052, -4065,
  541. -4076, -4085, -4091, -4095,
  542. -4096
  543. };
  544. const uint16_t ff_silk_pitch_scale[] = { 4, 6, 8};
  545. const uint16_t ff_silk_pitch_min_lag[] = { 16, 24, 32};
  546. const uint16_t ff_silk_pitch_max_lag[] = {144, 216, 288};
  547. const int8_t ff_silk_pitch_offset_nb10ms[3][2] = {
  548. { 0, 0},
  549. { 1, 0},
  550. { 0, 1}
  551. };
  552. const int8_t ff_silk_pitch_offset_nb20ms[11][4] = {
  553. { 0, 0, 0, 0},
  554. { 2, 1, 0, -1},
  555. {-1, 0, 1, 2},
  556. {-1, 0, 0, 1},
  557. {-1, 0, 0, 0},
  558. { 0, 0, 0, 1},
  559. { 0, 0, 1, 1},
  560. { 1, 1, 0, 0},
  561. { 1, 0, 0, 0},
  562. { 0, 0, 0, -1},
  563. { 1, 0, 0, -1}
  564. };
  565. const int8_t ff_silk_pitch_offset_mbwb10ms[12][2] = {
  566. { 0, 0},
  567. { 0, 1},
  568. { 1, 0},
  569. {-1, 1},
  570. { 1, -1},
  571. {-1, 2},
  572. { 2, -1},
  573. {-2, 2},
  574. { 2, -2},
  575. {-2, 3},
  576. { 3, -2},
  577. {-3, 3}
  578. };
  579. const int8_t ff_silk_pitch_offset_mbwb20ms[34][4] = {
  580. { 0, 0, 0, 0},
  581. { 0, 0, 1, 1},
  582. { 1, 1, 0, 0},
  583. {-1, 0, 0, 0},
  584. { 0, 0, 0, 1},
  585. { 1, 0, 0, 0},
  586. {-1, 0, 0, 1},
  587. { 0, 0, 0, -1},
  588. {-1, 0, 1, 2},
  589. { 1, 0, 0, -1},
  590. {-2, -1, 1, 2},
  591. { 2, 1, 0, -1},
  592. {-2, 0, 0, 2},
  593. {-2, 0, 1, 3},
  594. { 2, 1, -1, -2},
  595. {-3, -1, 1, 3},
  596. { 2, 0, 0, -2},
  597. { 3, 1, 0, -2},
  598. {-3, -1, 2, 4},
  599. {-4, -1, 1, 4},
  600. { 3, 1, -1, -3},
  601. {-4, -1, 2, 5},
  602. { 4, 2, -1, -3},
  603. { 4, 1, -1, -4},
  604. {-5, -1, 2, 6},
  605. { 5, 2, -1, -4},
  606. {-6, -2, 2, 6},
  607. {-5, -2, 2, 5},
  608. { 6, 2, -1, -5},
  609. {-7, -2, 3, 8},
  610. { 6, 2, -2, -6},
  611. { 5, 2, -2, -5},
  612. { 8, 3, -2, -7},
  613. {-9, -3, 3, 9}
  614. };
  615. const int8_t ff_silk_ltp_filter0_taps[8][5] = {
  616. { 4, 6, 24, 7, 5},
  617. { 0, 0, 2, 0, 0},
  618. { 12, 28, 41, 13, -4},
  619. { -9, 15, 42, 25, 14},
  620. { 1, -2, 62, 41, -9},
  621. {-10, 37, 65, -4, 3},
  622. { -6, 4, 66, 7, -8},
  623. { 16, 14, 38, -3, 33}
  624. };
  625. const int8_t ff_silk_ltp_filter1_taps[16][5] = {
  626. { 13, 22, 39, 23, 12},
  627. { -1, 36, 64, 27, -6},
  628. { -7, 10, 55, 43, 17},
  629. { 1, 1, 8, 1, 1},
  630. { 6, -11, 74, 53, -9},
  631. {-12, 55, 76, -12, 8},
  632. { -3, 3, 93, 27, -4},
  633. { 26, 39, 59, 3, -8},
  634. { 2, 0, 77, 11, 9},
  635. { -8, 22, 44, -6, 7},
  636. { 40, 9, 26, 3, 9},
  637. { -7, 20, 101, -7, 4},
  638. { 3, -8, 42, 26, 0},
  639. {-15, 33, 68, 2, 23},
  640. { -2, 55, 46, -2, 15},
  641. { 3, -1, 21, 16, 41}
  642. };
  643. const int8_t ff_silk_ltp_filter2_taps[32][5] = {
  644. { -6, 27, 61, 39, 5},
  645. {-11, 42, 88, 4, 1},
  646. { -2, 60, 65, 6, -4},
  647. { -1, -5, 73, 56, 1},
  648. { -9, 19, 94, 29, -9},
  649. { 0, 12, 99, 6, 4},
  650. { 8, -19, 102, 46, -13},
  651. { 3, 2, 13, 3, 2},
  652. { 9, -21, 84, 72, -18},
  653. {-11, 46, 104, -22, 8},
  654. { 18, 38, 48, 23, 0},
  655. {-16, 70, 83, -21, 11},
  656. { 5, -11, 117, 22, -8},
  657. { -6, 23, 117, -12, 3},
  658. { 3, -8, 95, 28, 4},
  659. {-10, 15, 77, 60, -15},
  660. { -1, 4, 124, 2, -4},
  661. { 3, 38, 84, 24, -25},
  662. { 2, 13, 42, 13, 31},
  663. { 21, -4, 56, 46, -1},
  664. { -1, 35, 79, -13, 19},
  665. { -7, 65, 88, -9, -14},
  666. { 20, 4, 81, 49, -29},
  667. { 20, 0, 75, 3, -17},
  668. { 5, -9, 44, 92, -8},
  669. { 1, -3, 22, 69, 31},
  670. { -6, 95, 41, -12, 5},
  671. { 39, 67, 16, -4, 1},
  672. { 0, -6, 120, 55, -36},
  673. {-13, 44, 122, 4, -24},
  674. { 81, 5, 11, 3, 7},
  675. { 2, 0, 9, 10, 88}
  676. };
  677. const uint16_t ff_silk_ltp_scale_factor[] = {15565, 12288, 8192};
  678. const uint8_t ff_silk_shell_blocks[3][2] = {
  679. { 5, 10}, // NB
  680. { 8, 15}, // MB
  681. {10, 20} // WB
  682. };
  683. const uint8_t ff_silk_quant_offset[2][2] = { /* (0.23) */
  684. {25, 60}, // Inactive or Unvoiced
  685. { 8, 25} // Voiced
  686. };
  687. const int ff_silk_stereo_interp_len[3] = {
  688. 64, 96, 128
  689. };
  690. const uint16_t ff_celt_model_tapset[] = { 4, 2, 3, 4 };
  691. const uint16_t ff_celt_model_spread[] = { 32, 7, 9, 30, 32 };
  692. const uint16_t ff_celt_model_alloc_trim[] = {
  693. 128, 2, 4, 9, 19, 41, 87, 109, 119, 124, 126, 128
  694. };
  695. const uint16_t ff_celt_model_energy_small[] = { 4, 2, 3, 4 };
  696. const uint8_t ff_celt_freq_bands[] = { /* in steps of 200Hz */
  697. 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 34, 40, 48, 60, 78, 100
  698. };
  699. const uint8_t ff_celt_freq_range[] = {
  700. 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 6, 6, 8, 12, 18, 22
  701. };
  702. const uint8_t ff_celt_log_freq_range[] = {
  703. 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 16, 16, 21, 21, 24, 29, 34, 36
  704. };
  705. /* Positive - increased freqeuency resolution (only possible on transients)
  706. * Negative - increased time resolution */
  707. const int8_t ff_celt_tf_select[4][2][2][2] = {
  708. /* OFF ON Transient frame */
  709. /* OFF ON OFF ON TF select flag */
  710. /* OFF ON OFF ON OFF ON OFF ON TF change flag */
  711. { { { 0, -1 }, { 0, -1 } }, { { 0, -1 }, { 0, -1 } } }, /* 120 */
  712. { { { 0, -1 }, { 0, -2 } }, { { 1, 0 }, { 1, -1 } } }, /* 240 */
  713. { { { 0, -2 }, { 0, -3 } }, { { 2, 0 }, { 1, -1 } } }, /* 480 */
  714. { { { 0, -2 }, { 0, -3 } }, { { 3, 0 }, { 1, -1 } } } /* 960 */
  715. };
  716. const float ff_celt_mean_energy[] = {
  717. 6.437500f, 6.250000f, 5.750000f, 5.312500f, 5.062500f,
  718. 4.812500f, 4.500000f, 4.375000f, 4.875000f, 4.687500f,
  719. 4.562500f, 4.437500f, 4.875000f, 4.625000f, 4.312500f,
  720. 4.500000f, 4.375000f, 4.625000f, 4.750000f, 4.437500f,
  721. 3.750000f, 3.750000f, 3.750000f, 3.750000f, 3.750000f
  722. };
  723. const float ff_celt_alpha_coef[] = {
  724. 29440.0f/32768.0f, 26112.0f/32768.0f, 21248.0f/32768.0f, 16384.0f/32768.0f
  725. };
  726. const float ff_celt_beta_coef[] = {
  727. 1.0f - (30147.0f/32768.0f), 1.0f - (22282.0f/32768.0f), 1.0f - (12124.0f/32768.0f), 1.0f - (6554.0f/32768.0f),
  728. };
  729. const uint8_t ff_celt_coarse_energy_dist[4][2][42] = {
  730. {
  731. { // 120-sample inter
  732. 72, 127, 65, 129, 66, 128, 65, 128, 64, 128, 62, 128, 64, 128,
  733. 64, 128, 92, 78, 92, 79, 92, 78, 90, 79, 116, 41, 115, 40,
  734. 114, 40, 132, 26, 132, 26, 145, 17, 161, 12, 176, 10, 177, 11
  735. }, { // 120-sample intra
  736. 24, 179, 48, 138, 54, 135, 54, 132, 53, 134, 56, 133, 55, 132,
  737. 55, 132, 61, 114, 70, 96, 74, 88, 75, 88, 87, 74, 89, 66,
  738. 91, 67, 100, 59, 108, 50, 120, 40, 122, 37, 97, 43, 78, 50
  739. }
  740. }, {
  741. { // 240-sample inter
  742. 83, 78, 84, 81, 88, 75, 86, 74, 87, 71, 90, 73, 93, 74,
  743. 93, 74, 109, 40, 114, 36, 117, 34, 117, 34, 143, 17, 145, 18,
  744. 146, 19, 162, 12, 165, 10, 178, 7, 189, 6, 190, 8, 177, 9
  745. }, { // 240-sample intra
  746. 23, 178, 54, 115, 63, 102, 66, 98, 69, 99, 74, 89, 71, 91,
  747. 73, 91, 78, 89, 86, 80, 92, 66, 93, 64, 102, 59, 103, 60,
  748. 104, 60, 117, 52, 123, 44, 138, 35, 133, 31, 97, 38, 77, 45
  749. }
  750. }, {
  751. { // 480-sample inter
  752. 61, 90, 93, 60, 105, 42, 107, 41, 110, 45, 116, 38, 113, 38,
  753. 112, 38, 124, 26, 132, 27, 136, 19, 140, 20, 155, 14, 159, 16,
  754. 158, 18, 170, 13, 177, 10, 187, 8, 192, 6, 175, 9, 159, 10
  755. }, { // 480-sample intra
  756. 21, 178, 59, 110, 71, 86, 75, 85, 84, 83, 91, 66, 88, 73,
  757. 87, 72, 92, 75, 98, 72, 105, 58, 107, 54, 115, 52, 114, 55,
  758. 112, 56, 129, 51, 132, 40, 150, 33, 140, 29, 98, 35, 77, 42
  759. }
  760. }, {
  761. { // 960-sample inter
  762. 42, 121, 96, 66, 108, 43, 111, 40, 117, 44, 123, 32, 120, 36,
  763. 119, 33, 127, 33, 134, 34, 139, 21, 147, 23, 152, 20, 158, 25,
  764. 154, 26, 166, 21, 173, 16, 184, 13, 184, 10, 150, 13, 139, 15
  765. }, { // 960-sample intra
  766. 22, 178, 63, 114, 74, 82, 84, 83, 92, 82, 103, 62, 96, 72,
  767. 96, 67, 101, 73, 107, 72, 113, 55, 118, 52, 125, 52, 118, 52,
  768. 117, 55, 135, 49, 137, 39, 157, 32, 145, 29, 97, 33, 77, 40
  769. }
  770. }
  771. };
  772. const uint8_t ff_celt_static_alloc[11][21] = { /* 1/32 bit/sample */
  773. { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  774. { 90, 80, 75, 69, 63, 56, 49, 40, 34, 29, 20, 18, 10, 0, 0, 0, 0, 0, 0, 0, 0 },
  775. { 110, 100, 90, 84, 78, 71, 65, 58, 51, 45, 39, 32, 26, 20, 12, 0, 0, 0, 0, 0, 0 },
  776. { 118, 110, 103, 93, 86, 80, 75, 70, 65, 59, 53, 47, 40, 31, 23, 15, 4, 0, 0, 0, 0 },
  777. { 126, 119, 112, 104, 95, 89, 83, 78, 72, 66, 60, 54, 47, 39, 32, 25, 17, 12, 1, 0, 0 },
  778. { 134, 127, 120, 114, 103, 97, 91, 85, 78, 72, 66, 60, 54, 47, 41, 35, 29, 23, 16, 10, 1 },
  779. { 144, 137, 130, 124, 113, 107, 101, 95, 88, 82, 76, 70, 64, 57, 51, 45, 39, 33, 26, 15, 1 },
  780. { 152, 145, 138, 132, 123, 117, 111, 105, 98, 92, 86, 80, 74, 67, 61, 55, 49, 43, 36, 20, 1 },
  781. { 162, 155, 148, 142, 133, 127, 121, 115, 108, 102, 96, 90, 84, 77, 71, 65, 59, 53, 46, 30, 1 },
  782. { 172, 165, 158, 152, 143, 137, 131, 125, 118, 112, 106, 100, 94, 87, 81, 75, 69, 63, 56, 45, 20 },
  783. { 200, 200, 200, 200, 200, 200, 200, 200, 198, 193, 188, 183, 178, 173, 168, 163, 158, 153, 148, 129, 104 }
  784. };
  785. const uint8_t ff_celt_static_caps[4][2][21] = {
  786. { // 120-sample
  787. {224, 224, 224, 224, 224, 224, 224, 224, 160, 160,
  788. 160, 160, 185, 185, 185, 178, 178, 168, 134, 61, 37},
  789. {224, 224, 224, 224, 224, 224, 224, 224, 240, 240,
  790. 240, 240, 207, 207, 207, 198, 198, 183, 144, 66, 40},
  791. }, { // 240-sample
  792. {160, 160, 160, 160, 160, 160, 160, 160, 185, 185,
  793. 185, 185, 193, 193, 193, 183, 183, 172, 138, 64, 38},
  794. {240, 240, 240, 240, 240, 240, 240, 240, 207, 207,
  795. 207, 207, 204, 204, 204, 193, 193, 180, 143, 66, 40},
  796. }, { // 480-sample
  797. {185, 185, 185, 185, 185, 185, 185, 185, 193, 193,
  798. 193, 193, 193, 193, 193, 183, 183, 172, 138, 65, 39},
  799. {207, 207, 207, 207, 207, 207, 207, 207, 204, 204,
  800. 204, 204, 201, 201, 201, 188, 188, 176, 141, 66, 40},
  801. }, { // 960-sample
  802. {193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
  803. 193, 193, 194, 194, 194, 184, 184, 173, 139, 65, 39},
  804. {204, 204, 204, 204, 204, 204, 204, 204, 201, 201,
  805. 201, 201, 198, 198, 198, 187, 187, 175, 140, 66, 40}
  806. }
  807. };
  808. const uint8_t ff_celt_cache_bits[392] = {
  809. 40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  810. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  811. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28,
  812. 31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50,
  813. 51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65,
  814. 66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61,
  815. 64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92,
  816. 94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123,
  817. 124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94,
  818. 97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139,
  819. 142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35,
  820. 28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149,
  821. 153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225,
  822. 229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157,
  823. 166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63,
  824. 86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250,
  825. 25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180,
  826. 185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89,
  827. 110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41,
  828. 74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138,
  829. 163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214,
  830. 228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49,
  831. 90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47,
  832. 87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57,
  833. 106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187,
  834. 224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127,
  835. 182, 234
  836. };
  837. const int16_t ff_celt_cache_index[105] = {
  838. -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 41, 41, 41,
  839. 82, 82, 123, 164, 200, 222, 0, 0, 0, 0, 0, 0, 0, 0, 41,
  840. 41, 41, 41, 123, 123, 123, 164, 164, 240, 266, 283, 295, 41, 41, 41,
  841. 41, 41, 41, 41, 41, 123, 123, 123, 123, 240, 240, 240, 266, 266, 305,
  842. 318, 328, 336, 123, 123, 123, 123, 123, 123, 123, 123, 240, 240, 240, 240,
  843. 305, 305, 305, 318, 318, 343, 351, 358, 364, 240, 240, 240, 240, 240, 240,
  844. 240, 240, 305, 305, 305, 305, 343, 343, 343, 351, 351, 370, 376, 382, 387,
  845. };
  846. const uint8_t ff_celt_log2_frac[] = {
  847. 0, 8, 13, 16, 19, 21, 23, 24, 26, 27, 28, 29, 30, 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 37
  848. };
  849. const uint8_t ff_celt_bit_interleave[] = {
  850. 0, 1, 1, 1, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3
  851. };
  852. const uint8_t ff_celt_bit_deinterleave[] = {
  853. 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F,
  854. 0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF
  855. };
  856. const uint8_t ff_celt_hadamard_order[] = {
  857. 1, 0,
  858. 3, 0, 2, 1,
  859. 7, 0, 4, 3, 6, 1, 5, 2,
  860. 15, 0, 8, 7, 12, 3, 11, 4, 14, 1, 9, 6, 13, 2, 10, 5,
  861. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
  862. };
  863. const uint16_t ff_celt_qn_exp2[] = {
  864. 16384, 17866, 19483, 21247, 23170, 25267, 27554, 30048
  865. };
  866. const uint32_t ff_celt_pvq_u[1272] = {
  867. /* N = 0, K = 0...176 */
  868. 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,
  869. 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,
  870. 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,
  871. 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,
  872. 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,
  873. 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,
  874. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  875. /* N = 1, K = 1...176 */
  876. 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,
  877. 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,
  878. 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,
  879. 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,
  880. 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,
  881. 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,
  882. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  883. /* N = 2, K = 2...176 */
  884. 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
  885. 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
  886. 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
  887. 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143,
  888. 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
  889. 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203,
  890. 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233,
  891. 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263,
  892. 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293,
  893. 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323,
  894. 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351,
  895. /* N = 3, K = 3...176 */
  896. 13, 25, 41, 61, 85, 113, 145, 181, 221, 265, 313, 365, 421, 481, 545, 613,
  897. 685, 761, 841, 925, 1013, 1105, 1201, 1301, 1405, 1513, 1625, 1741, 1861,
  898. 1985, 2113, 2245, 2381, 2521, 2665, 2813, 2965, 3121, 3281, 3445, 3613, 3785,
  899. 3961, 4141, 4325, 4513, 4705, 4901, 5101, 5305, 5513, 5725, 5941, 6161, 6385,
  900. 6613, 6845, 7081, 7321, 7565, 7813, 8065, 8321, 8581, 8845, 9113, 9385, 9661,
  901. 9941, 10225, 10513, 10805, 11101, 11401, 11705, 12013, 12325, 12641, 12961,
  902. 13285, 13613, 13945, 14281, 14621, 14965, 15313, 15665, 16021, 16381, 16745,
  903. 17113, 17485, 17861, 18241, 18625, 19013, 19405, 19801, 20201, 20605, 21013,
  904. 21425, 21841, 22261, 22685, 23113, 23545, 23981, 24421, 24865, 25313, 25765,
  905. 26221, 26681, 27145, 27613, 28085, 28561, 29041, 29525, 30013, 30505, 31001,
  906. 31501, 32005, 32513, 33025, 33541, 34061, 34585, 35113, 35645, 36181, 36721,
  907. 37265, 37813, 38365, 38921, 39481, 40045, 40613, 41185, 41761, 42341, 42925,
  908. 43513, 44105, 44701, 45301, 45905, 46513, 47125, 47741, 48361, 48985, 49613,
  909. 50245, 50881, 51521, 52165, 52813, 53465, 54121, 54781, 55445, 56113, 56785,
  910. 57461, 58141, 58825, 59513, 60205, 60901, 61601,
  911. /* N = 4, K = 4...176 */
  912. 63, 129, 231, 377, 575, 833, 1159, 1561, 2047, 2625, 3303, 4089, 4991, 6017,
  913. 7175, 8473, 9919, 11521, 13287, 15225, 17343, 19649, 22151, 24857, 27775,
  914. 30913, 34279, 37881, 41727, 45825, 50183, 54809, 59711, 64897, 70375, 76153,
  915. 82239, 88641, 95367, 102425, 109823, 117569, 125671, 134137, 142975, 152193,
  916. 161799, 171801, 182207, 193025, 204263, 215929, 228031, 240577, 253575,
  917. 267033, 280959, 295361, 310247, 325625, 341503, 357889, 374791, 392217,
  918. 410175, 428673, 447719, 467321, 487487, 508225, 529543, 551449, 573951,
  919. 597057, 620775, 645113, 670079, 695681, 721927, 748825, 776383, 804609,
  920. 833511, 863097, 893375, 924353, 956039, 988441, 1021567, 1055425, 1090023,
  921. 1125369, 1161471, 1198337, 1235975, 1274393, 1313599, 1353601, 1394407,
  922. 1436025, 1478463, 1521729, 1565831, 1610777, 1656575, 1703233, 1750759,
  923. 1799161, 1848447, 1898625, 1949703, 2001689, 2054591, 2108417, 2163175,
  924. 2218873, 2275519, 2333121, 2391687, 2451225, 2511743, 2573249, 2635751,
  925. 2699257, 2763775, 2829313, 2895879, 2963481, 3032127, 3101825, 3172583,
  926. 3244409, 3317311, 3391297, 3466375, 3542553, 3619839, 3698241, 3777767,
  927. 3858425, 3940223, 4023169, 4107271, 4192537, 4278975, 4366593, 4455399,
  928. 4545401, 4636607, 4729025, 4822663, 4917529, 5013631, 5110977, 5209575,
  929. 5309433, 5410559, 5512961, 5616647, 5721625, 5827903, 5935489, 6044391,
  930. 6154617, 6266175, 6379073, 6493319, 6608921, 6725887, 6844225, 6963943,
  931. 7085049, 7207551,
  932. /* N = 5, K = 5...176 */
  933. 321, 681, 1289, 2241, 3649, 5641, 8361, 11969, 16641, 22569, 29961, 39041,
  934. 50049, 63241, 78889, 97281, 118721, 143529, 172041, 204609, 241601, 283401,
  935. 330409, 383041, 441729, 506921, 579081, 658689, 746241, 842249, 947241,
  936. 1061761, 1186369, 1321641, 1468169, 1626561, 1797441, 1981449, 2179241,
  937. 2391489, 2618881, 2862121, 3121929, 3399041, 3694209, 4008201, 4341801,
  938. 4695809, 5071041, 5468329, 5888521, 6332481, 6801089, 7295241, 7815849,
  939. 8363841, 8940161, 9545769, 10181641, 10848769, 11548161, 12280841, 13047849,
  940. 13850241, 14689089, 15565481, 16480521, 17435329, 18431041, 19468809,
  941. 20549801, 21675201, 22846209, 24064041, 25329929, 26645121, 28010881,
  942. 29428489, 30899241, 32424449, 34005441, 35643561, 37340169, 39096641,
  943. 40914369, 42794761, 44739241, 46749249, 48826241, 50971689, 53187081,
  944. 55473921, 57833729, 60268041, 62778409, 65366401, 68033601, 70781609,
  945. 73612041, 76526529, 79526721, 82614281, 85790889, 89058241, 92418049,
  946. 95872041, 99421961, 103069569, 106816641, 110664969, 114616361, 118672641,
  947. 122835649, 127107241, 131489289, 135983681, 140592321, 145317129, 150160041,
  948. 155123009, 160208001, 165417001, 170752009, 176215041, 181808129, 187533321,
  949. 193392681, 199388289, 205522241, 211796649, 218213641, 224775361, 231483969,
  950. 238341641, 245350569, 252512961, 259831041, 267307049, 274943241, 282741889,
  951. 290705281, 298835721, 307135529, 315607041, 324252609, 333074601, 342075401,
  952. 351257409, 360623041, 370174729, 379914921, 389846081, 399970689, 410291241,
  953. 420810249, 431530241, 442453761, 453583369, 464921641, 476471169, 488234561,
  954. 500214441, 512413449, 524834241, 537479489, 550351881, 563454121, 576788929,
  955. 590359041, 604167209, 618216201, 632508801,
  956. /* N = 6, K = 6...96 (technically V(109,5) fits in 32 bits, but that can't be
  957. achieved by splitting an Opus band) */
  958. 1683, 3653, 7183, 13073, 22363, 36365, 56695, 85305, 124515, 177045, 246047,
  959. 335137, 448427, 590557, 766727, 982729, 1244979, 1560549, 1937199, 2383409,
  960. 2908411, 3522221, 4235671, 5060441, 6009091, 7095093, 8332863, 9737793,
  961. 11326283, 13115773, 15124775, 17372905, 19880915, 22670725, 25765455,
  962. 29189457, 32968347, 37129037, 41699767, 46710137, 52191139, 58175189,
  963. 64696159, 71789409, 79491819, 87841821, 96879431, 106646281, 117185651,
  964. 128542501, 140763503, 153897073, 167993403, 183104493, 199284183, 216588185,
  965. 235074115, 254801525, 275831935, 298228865, 322057867, 347386557, 374284647,
  966. 402823977, 433078547, 465124549, 499040399, 534906769, 572806619, 612825229,
  967. 655050231, 699571641, 746481891, 795875861, 847850911, 902506913, 959946283,
  968. 1020274013, 1083597703, 1150027593, 1219676595, 1292660325, 1369097135,
  969. 1449108145, 1532817275, 1620351277, 1711839767, 1807415257, 1907213187,
  970. 2011371957, 2120032959,
  971. /* N = 7, K = 7...54 (technically V(60,6) fits in 32 bits, but that can't be
  972. achieved by splitting an Opus band) */
  973. 8989, 19825, 40081, 75517, 134245, 227305, 369305, 579125, 880685, 1303777,
  974. 1884961, 2668525, 3707509, 5064793, 6814249, 9041957, 11847485, 15345233,
  975. 19665841, 24957661, 31388293, 39146185, 48442297, 59511829, 72616013,
  976. 88043969, 106114625, 127178701, 151620757, 179861305, 212358985, 249612805,
  977. 292164445, 340600625, 395555537, 457713341, 527810725, 606639529, 695049433,
  978. 793950709, 904317037, 1027188385, 1163673953, 1314955181, 1482288821,
  979. 1667010073, 1870535785, 2094367717,
  980. /* N = 8, K = 8...37 (technically V(40,7) fits in 32 bits, but that can't be
  981. achieved by splitting an Opus band) */
  982. 48639, 108545, 224143, 433905, 795455, 1392065, 2340495, 3800305, 5984767,
  983. 9173505, 13726991, 20103025, 28875327, 40754369, 56610575, 77500017,
  984. 104692735, 139703809, 184327311, 240673265, 311207743, 398796225, 506750351,
  985. 638878193, 799538175, 993696769, 1226990095, 1505789553, 1837271615,
  986. 2229491905,
  987. /* N = 9, K = 9...28 (technically V(29,8) fits in 32 bits, but that can't be
  988. achieved by splitting an Opus band) */
  989. 265729, 598417, 1256465, 2485825, 4673345, 8405905, 14546705, 24331777,
  990. 39490049, 62390545, 96220561, 145198913, 214828609, 312193553, 446304145,
  991. 628496897, 872893441, 1196924561, 1621925137, 2173806145,
  992. /* N = 10, K = 10...24 */
  993. 1462563, 3317445, 7059735, 14218905, 27298155, 50250765, 89129247, 152951073,
  994. 254831667, 413442773, 654862247, 1014889769, 1541911931, 2300409629,
  995. 3375210671,
  996. /* N = 11, K = 11...19 (technically V(20,10) fits in 32 bits, but that can't be
  997. achieved by splitting an Opus band) */
  998. 8097453, 18474633, 39753273, 81270333, 158819253, 298199265, 540279585,
  999. 948062325, 1616336765,
  1000. /* N = 12, K = 12...18 */
  1001. 45046719, 103274625, 224298231, 464387817, 921406335, 1759885185,
  1002. 3248227095,
  1003. /* N = 13, K = 13...16 */
  1004. 251595969, 579168825, 1267854873, 2653649025,
  1005. /* N = 14, K = 14 */
  1006. 1409933619
  1007. };
  1008. const float ff_celt_postfilter_taps[3][3] = {
  1009. { 0.3066406250f, 0.2170410156f, 0.1296386719f },
  1010. { 0.4638671875f, 0.2680664062f, 0.0 },
  1011. { 0.7998046875f, 0.1000976562f, 0.0 }
  1012. };
  1013. DECLARE_ALIGNED(32, static const float, ff_celt_window_padded)[136] = {
  1014. 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
  1015. 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
  1016. 6.7286966e-05f, 0.00060551348f, 0.0016815970f, 0.0032947962f, 0.0054439943f,
  1017. 0.0081276923f, 0.011344001f, 0.015090633f, 0.019364886f, 0.024163635f,
  1018. 0.029483315f, 0.035319905f, 0.041668911f, 0.048525347f, 0.055883718f,
  1019. 0.063737999f, 0.072081616f, 0.080907428f, 0.090207705f, 0.099974111f,
  1020. 0.11019769f, 0.12086883f, 0.13197729f, 0.14351214f, 0.15546177f,
  1021. 0.16781389f, 0.18055550f, 0.19367290f, 0.20715171f, 0.22097682f,
  1022. 0.23513243f, 0.24960208f, 0.26436860f, 0.27941419f, 0.29472040f,
  1023. 0.31026818f, 0.32603788f, 0.34200931f, 0.35816177f, 0.37447407f,
  1024. 0.39092462f, 0.40749142f, 0.42415215f, 0.44088423f, 0.45766484f,
  1025. 0.47447104f, 0.49127978f, 0.50806798f, 0.52481261f, 0.54149077f,
  1026. 0.55807973f, 0.57455701f, 0.59090049f, 0.60708841f, 0.62309951f,
  1027. 0.63891306f, 0.65450896f, 0.66986776f, 0.68497077f, 0.69980010f,
  1028. 0.71433873f, 0.72857055f, 0.74248043f, 0.75605424f, 0.76927895f,
  1029. 0.78214257f, 0.79463430f, 0.80674445f, 0.81846456f, 0.82978733f,
  1030. 0.84070669f, 0.85121779f, 0.86131698f, 0.87100183f, 0.88027111f,
  1031. 0.88912479f, 0.89756398f, 0.90559094f, 0.91320904f, 0.92042270f,
  1032. 0.92723738f, 0.93365955f, 0.93969656f, 0.94535671f, 0.95064907f,
  1033. 0.95558353f, 0.96017067f, 0.96442171f, 0.96834849f, 0.97196334f,
  1034. 0.97527906f, 0.97830883f, 0.98106616f, 0.98356480f, 0.98581869f,
  1035. 0.98784191f, 0.98964856f, 0.99125274f, 0.99266849f, 0.99390969f,
  1036. 0.99499004f, 0.99592297f, 0.99672162f, 0.99739874f, 0.99796667f,
  1037. 0.99843728f, 0.99882195f, 0.99913147f, 0.99937606f, 0.99956527f,
  1038. 0.99970802f, 0.99981248f, 0.99988613f, 0.99993565f, 0.99996697f,
  1039. 0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.00000000f,
  1040. 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f,
  1041. 1.00000000f, 1.00000000f, 1.00000000f,
  1042. };
  1043. const float *ff_celt_window = &ff_celt_window_padded[8];
  1044. /* square of the window, used for the postfilter */
  1045. const float ff_celt_window2[120] = {
  1046. 4.5275357e-09f, 3.66647e-07f, 2.82777e-06f, 1.08557e-05f, 2.96371e-05f, 6.60594e-05f,
  1047. 0.000128686f, 0.000227727f, 0.000374999f, 0.000583881f, 0.000869266f, 0.0012475f,
  1048. 0.0017363f, 0.00235471f, 0.00312299f, 0.00406253f, 0.00519576f, 0.00654601f,
  1049. 0.00813743f, 0.00999482f, 0.0121435f, 0.0146093f, 0.017418f, 0.0205957f, 0.0241684f,
  1050. 0.0281615f, 0.0326003f, 0.0375092f, 0.0429118f, 0.0488308f, 0.0552873f, 0.0623012f,
  1051. 0.0698908f, 0.0780723f, 0.0868601f, 0.0962664f, 0.106301f, 0.11697f, 0.12828f,
  1052. 0.140231f, 0.152822f, 0.166049f, 0.179905f, 0.194379f, 0.209457f, 0.225123f, 0.241356f,
  1053. 0.258133f, 0.275428f, 0.293212f, 0.311453f, 0.330116f, 0.349163f, 0.368556f, 0.388253f,
  1054. 0.40821f, 0.428382f, 0.448723f, 0.469185f, 0.48972f, 0.51028f, 0.530815f, 0.551277f,
  1055. 0.571618f, 0.59179f, 0.611747f, 0.631444f, 0.650837f, 0.669884f, 0.688547f, 0.706788f,
  1056. 0.724572f, 0.741867f, 0.758644f, 0.774877f, 0.790543f, 0.805621f, 0.820095f, 0.833951f,
  1057. 0.847178f, 0.859769f, 0.87172f, 0.88303f, 0.893699f, 0.903734f, 0.91314f, 0.921928f,
  1058. 0.930109f, 0.937699f, 0.944713f, 0.951169f, 0.957088f, 0.962491f, 0.9674f, 0.971838f,
  1059. 0.975832f, 0.979404f, 0.982582f, 0.985391f, 0.987857f, 0.990005f, 0.991863f, 0.993454f,
  1060. 0.994804f, 0.995937f, 0.996877f, 0.997645f, 0.998264f, 0.998753f, 0.999131f, 0.999416f,
  1061. 0.999625f, 0.999772f, 0.999871f, 0.999934f, 0.99997f, 0.999989f, 0.999997f, 0.99999964f, 1.0f,
  1062. };
  1063. const uint32_t * const ff_celt_pvq_u_row[15] = {
  1064. ff_celt_pvq_u + 0, ff_celt_pvq_u + 176, ff_celt_pvq_u + 351,
  1065. ff_celt_pvq_u + 525, ff_celt_pvq_u + 698, ff_celt_pvq_u + 870,
  1066. ff_celt_pvq_u + 1041, ff_celt_pvq_u + 1131, ff_celt_pvq_u + 1178,
  1067. ff_celt_pvq_u + 1207, ff_celt_pvq_u + 1226, ff_celt_pvq_u + 1240,
  1068. ff_celt_pvq_u + 1248, ff_celt_pvq_u + 1254, ff_celt_pvq_u + 1257
  1069. };