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.

955 lines
31KB

  1. /*
  2. * ATRAC9 decoder
  3. * Copyright (c) 2018 Rostislav Pehlivanov <atomnuker@gmail.com>
  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. #include "internal.h"
  22. #include "get_bits.h"
  23. #include "fft.h"
  24. #include "atrac9tab.h"
  25. #include "libavutil/lfg.h"
  26. #include "libavutil/float_dsp.h"
  27. typedef struct ATRAC9ChannelData {
  28. int band_ext;
  29. int q_unit_cnt;
  30. int band_ext_data[4];
  31. int32_t scalefactors[31];
  32. int32_t scalefactors_prev[31];
  33. int precision_coarse[30];
  34. int precision_fine[30];
  35. int precision_mask[30];
  36. int codebookset[30];
  37. int32_t q_coeffs_coarse[256];
  38. int32_t q_coeffs_fine[256];
  39. DECLARE_ALIGNED(32, float, coeffs )[256];
  40. DECLARE_ALIGNED(32, float, prev_win)[128];
  41. } ATRAC9ChannelData;
  42. typedef struct ATRAC9BlockData {
  43. ATRAC9ChannelData channel[2];
  44. /* Base */
  45. int band_count;
  46. int q_unit_cnt;
  47. int q_unit_cnt_prev;
  48. /* Stereo block only */
  49. int stereo_q_unit;
  50. /* Band extension only */
  51. int has_band_ext;
  52. int has_band_ext_data;
  53. int band_ext_q_unit;
  54. /* Gradient */
  55. int grad_mode;
  56. int grad_boundary;
  57. int gradient[31];
  58. /* Stereo */
  59. int cpe_base_channel;
  60. int is_signs[30];
  61. } ATRAC9BlockData;
  62. typedef struct ATRAC9Context {
  63. AVCodecContext *avctx;
  64. AVFloatDSPContext *fdsp;
  65. FFTContext imdct;
  66. ATRAC9BlockData block[5];
  67. AVLFG lfg;
  68. /* Set on init */
  69. int frame_log2;
  70. int avg_frame_size;
  71. int frame_count;
  72. int samplerate_idx;
  73. const ATRAC9BlockConfig *block_config;
  74. /* Generated on init */
  75. VLC sf_vlc[2][8]; /* Signed/unsigned, length */
  76. VLC coeff_vlc[2][8][4]; /* Cookbook, precision, cookbook index */
  77. uint8_t alloc_curve[48][48];
  78. DECLARE_ALIGNED(32, float, imdct_win)[256];
  79. DECLARE_ALIGNED(32, float, temp)[256];
  80. } ATRAC9Context;
  81. static inline int parse_gradient(ATRAC9Context *s, ATRAC9BlockData *b,
  82. GetBitContext *gb)
  83. {
  84. int grad_range[2];
  85. int grad_value[2];
  86. int values, sign, base;
  87. uint8_t *curve;
  88. float scale;
  89. b->grad_mode = get_bits(gb, 2);
  90. if (b->grad_mode) {
  91. grad_range[0] = get_bits(gb, 5);
  92. grad_range[1] = 31;
  93. grad_value[0] = get_bits(gb, 5);
  94. grad_value[1] = 31;
  95. } else {
  96. grad_range[0] = get_bits(gb, 6);
  97. grad_range[1] = get_bits(gb, 6) + 1;
  98. grad_value[0] = get_bits(gb, 5);
  99. grad_value[1] = get_bits(gb, 5);
  100. }
  101. b->grad_boundary = get_bits(gb, 4);
  102. if (grad_range[0] >= grad_range[1] || grad_range[1] > 47)
  103. return AVERROR_INVALIDDATA;
  104. if (grad_value[0] > 31 || grad_value[1] > 31)
  105. return AVERROR_INVALIDDATA;
  106. if (b->grad_boundary > b->q_unit_cnt)
  107. return AVERROR_INVALIDDATA;
  108. values = grad_value[1] - grad_value[0];
  109. sign = 1 - 2*(values < 0);
  110. base = grad_value[0] + sign;
  111. scale = (FFABS(values) - 1) / 31.0f;
  112. curve = s->alloc_curve[grad_range[1] - grad_range[0] - 1];
  113. for (int i = 0; i <= b->q_unit_cnt; i++)
  114. b->gradient[i] = grad_value[i >= grad_range[0]];
  115. for (int i = grad_range[0]; i < grad_range[1]; i++)
  116. b->gradient[i] = base + sign*((int)(scale*curve[i - grad_range[0]]));
  117. return 0;
  118. }
  119. static inline void calc_precision(ATRAC9Context *s, ATRAC9BlockData *b,
  120. ATRAC9ChannelData *c)
  121. {
  122. memset(c->precision_mask, 0, sizeof(c->precision_mask));
  123. for (int i = 1; i < b->q_unit_cnt; i++) {
  124. const int delta = FFABS(c->scalefactors[i] - c->scalefactors[i - 1]) - 1;
  125. if (delta > 0) {
  126. const int neg = c->scalefactors[i - 1] > c->scalefactors[i];
  127. c->precision_mask[i - neg] += FFMIN(delta, 5);
  128. }
  129. }
  130. if (b->grad_mode) {
  131. for (int i = 0; i < b->q_unit_cnt; i++) {
  132. c->precision_coarse[i] = c->scalefactors[i];
  133. c->precision_coarse[i] += c->precision_mask[i] - b->gradient[i];
  134. if (c->precision_coarse[i] < 0)
  135. continue;
  136. switch (b->grad_mode) {
  137. case 1:
  138. c->precision_coarse[i] >>= 1;
  139. break;
  140. case 2:
  141. c->precision_coarse[i] = (3 * c->precision_coarse[i]) >> 3;
  142. break;
  143. case 3:
  144. c->precision_coarse[i] >>= 2;
  145. break;
  146. }
  147. }
  148. } else {
  149. for (int i = 0; i < b->q_unit_cnt; i++)
  150. c->precision_coarse[i] = c->scalefactors[i] - b->gradient[i];
  151. }
  152. for (int i = 0; i < b->q_unit_cnt; i++)
  153. c->precision_coarse[i] = FFMAX(c->precision_coarse[i], 1);
  154. for (int i = 0; i < b->grad_boundary; i++)
  155. c->precision_coarse[i]++;
  156. for (int i = 0; i < b->q_unit_cnt; i++) {
  157. c->precision_fine[i] = 0;
  158. if (c->precision_coarse[i] > 15) {
  159. c->precision_fine[i] = c->precision_coarse[i] - 15;
  160. c->precision_coarse[i] = 15;
  161. }
  162. }
  163. }
  164. static inline int parse_band_ext(ATRAC9Context *s, ATRAC9BlockData *b,
  165. GetBitContext *gb, int stereo)
  166. {
  167. int ext_band = 0;
  168. if (b->has_band_ext) {
  169. ext_band = at9_tab_band_ext_group[b->q_unit_cnt - 13][2];
  170. if (stereo) {
  171. b->channel[1].band_ext = get_bits(gb, 2);
  172. b->channel[1].band_ext = ext_band > 2 ? b->channel[1].band_ext : 4;
  173. } else {
  174. skip_bits1(gb);
  175. }
  176. }
  177. b->has_band_ext_data = get_bits1(gb);
  178. if (!b->has_band_ext_data)
  179. return 0;
  180. if (!b->has_band_ext) {
  181. skip_bits(gb, 2);
  182. skip_bits_long(gb, get_bits(gb, 5));
  183. return 0;
  184. }
  185. b->channel[0].band_ext = get_bits(gb, 2);
  186. b->channel[0].band_ext = ext_band > 2 ? b->channel[0].band_ext : 4;
  187. if (!get_bits(gb, 5))
  188. return 0;
  189. for (int i = 0; i <= stereo; i++) {
  190. ATRAC9ChannelData *c = &b->channel[i];
  191. const int count = at9_tab_band_ext_cnt[c->band_ext][ext_band];
  192. for (int j = 0; j < count; j++) {
  193. int len = at9_tab_band_ext_lengths[c->band_ext][ext_band][j];
  194. c->band_ext_data[j] = get_bits(gb, len);
  195. }
  196. }
  197. return 0;
  198. }
  199. static inline int read_scalefactors(ATRAC9Context *s, ATRAC9BlockData *b,
  200. ATRAC9ChannelData *c, GetBitContext *gb,
  201. int channel_idx, int first_in_pkt)
  202. {
  203. static const uint8_t mode_map[2][4] = { { 0, 1, 2, 3 }, { 0, 2, 3, 4 } };
  204. const int mode = mode_map[channel_idx][get_bits(gb, 2)];
  205. memset(c->scalefactors, 0, sizeof(c->scalefactors));
  206. if (first_in_pkt && (mode == 4 || ((mode == 3) && !channel_idx))) {
  207. av_log(s->avctx, AV_LOG_ERROR, "Invalid scalefactor coding mode!\n");
  208. return AVERROR_INVALIDDATA;
  209. }
  210. switch (mode) {
  211. case 0: { /* VLC delta offset */
  212. const uint8_t *sf_weights = at9_tab_sf_weights[get_bits(gb, 3)];
  213. const int base = get_bits(gb, 5);
  214. const int len = get_bits(gb, 2) + 3;
  215. const VLC *tab = &s->sf_vlc[0][len];
  216. c->scalefactors[0] = get_bits(gb, len);
  217. for (int i = 1; i < b->band_ext_q_unit; i++) {
  218. int val = c->scalefactors[i - 1] + get_vlc2(gb, tab->table, 9, 2);
  219. c->scalefactors[i] = val & ((1 << len) - 1);
  220. }
  221. for (int i = 0; i < b->band_ext_q_unit; i++)
  222. c->scalefactors[i] += base - sf_weights[i];
  223. break;
  224. }
  225. case 1: { /* CLC offset */
  226. const int len = get_bits(gb, 2) + 2;
  227. const int base = len < 5 ? get_bits(gb, 5) : 0;
  228. for (int i = 0; i < b->band_ext_q_unit; i++)
  229. c->scalefactors[i] = base + get_bits(gb, len);
  230. break;
  231. }
  232. case 2:
  233. case 4: { /* VLC dist to baseline */
  234. const int *baseline = mode == 4 ? c->scalefactors_prev :
  235. channel_idx ? b->channel[0].scalefactors :
  236. c->scalefactors_prev;
  237. const int baseline_len = mode == 4 ? b->q_unit_cnt_prev :
  238. channel_idx ? b->band_ext_q_unit :
  239. b->q_unit_cnt_prev;
  240. const int len = get_bits(gb, 2) + 2;
  241. const int unit_cnt = FFMIN(b->band_ext_q_unit, baseline_len);
  242. const VLC *tab = &s->sf_vlc[1][len];
  243. for (int i = 0; i < unit_cnt; i++) {
  244. int dist = get_vlc2(gb, tab->table, 9, 2);
  245. c->scalefactors[i] = baseline[i] + dist;
  246. }
  247. for (int i = unit_cnt; i < b->band_ext_q_unit; i++)
  248. c->scalefactors[i] = get_bits(gb, 5);
  249. break;
  250. }
  251. case 3: { /* VLC offset with baseline */
  252. const int *baseline = channel_idx ? b->channel[0].scalefactors :
  253. c->scalefactors_prev;
  254. const int baseline_len = channel_idx ? b->band_ext_q_unit :
  255. b->q_unit_cnt_prev;
  256. const int base = get_bits(gb, 5) - (1 << (5 - 1));
  257. const int len = get_bits(gb, 2) + 1;
  258. const int unit_cnt = FFMIN(b->band_ext_q_unit, baseline_len);
  259. const VLC *tab = &s->sf_vlc[0][len];
  260. c->scalefactors[0] = get_bits(gb, len);
  261. for (int i = 1; i < unit_cnt; i++) {
  262. int val = c->scalefactors[i - 1] + get_vlc2(gb, tab->table, 9, 2);
  263. c->scalefactors[i] = val & ((1 << len) - 1);
  264. }
  265. for (int i = 0; i < unit_cnt; i++)
  266. c->scalefactors[i] += base + baseline[i];
  267. for (int i = unit_cnt; i < b->band_ext_q_unit; i++)
  268. c->scalefactors[i] = get_bits(gb, 5);
  269. break;
  270. }
  271. }
  272. for (int i = 0; i < b->band_ext_q_unit; i++)
  273. if (c->scalefactors[i] < 0 || c->scalefactors[i] > 31)
  274. return AVERROR_INVALIDDATA;
  275. memcpy(c->scalefactors_prev, c->scalefactors, sizeof(c->scalefactors));
  276. return 0;
  277. }
  278. static inline void calc_codebook_idx(ATRAC9Context *s, ATRAC9BlockData *b,
  279. ATRAC9ChannelData *c)
  280. {
  281. int avg = 0;
  282. const int last_sf = c->scalefactors[c->q_unit_cnt];
  283. memset(c->codebookset, 0, sizeof(c->codebookset));
  284. if (c->q_unit_cnt <= 1)
  285. return;
  286. if (s->samplerate_idx > 7)
  287. return;
  288. c->scalefactors[c->q_unit_cnt] = c->scalefactors[c->q_unit_cnt - 1];
  289. if (c->q_unit_cnt > 12) {
  290. for (int i = 0; i < 12; i++)
  291. avg += c->scalefactors[i];
  292. avg = (avg + 6) / 12;
  293. }
  294. for (int i = 8; i < c->q_unit_cnt; i++) {
  295. const int prev = c->scalefactors[i - 1];
  296. const int cur = c->scalefactors[i ];
  297. const int next = c->scalefactors[i + 1];
  298. const int min = FFMIN(prev, next);
  299. if ((cur - min >= 3 || 2*cur - prev - next >= 3))
  300. c->codebookset[i] = 1;
  301. }
  302. for (int i = 12; i < c->q_unit_cnt; i++) {
  303. const int cur = c->scalefactors[i];
  304. const int cnd = at9_q_unit_to_coeff_cnt[i] == 16;
  305. const int min = FFMIN(c->scalefactors[i + 1], c->scalefactors[i - 1]);
  306. if (c->codebookset[i])
  307. continue;
  308. c->codebookset[i] = (((cur - min) >= 2) && (cur >= (avg - cnd)));
  309. }
  310. c->scalefactors[c->q_unit_cnt] = last_sf;
  311. }
  312. static inline void read_coeffs_coarse(ATRAC9Context *s, ATRAC9BlockData *b,
  313. ATRAC9ChannelData *c, GetBitContext *gb)
  314. {
  315. const int max_prec = s->samplerate_idx > 7 ? 1 : 7;
  316. memset(c->q_coeffs_coarse, 0, sizeof(c->q_coeffs_coarse));
  317. for (int i = 0; i < c->q_unit_cnt; i++) {
  318. int *coeffs = &c->q_coeffs_coarse[at9_q_unit_to_coeff_idx[i]];
  319. const int bands = at9_q_unit_to_coeff_cnt[i];
  320. const int prec = c->precision_coarse[i] + 1;
  321. if (prec <= max_prec) {
  322. const int cb = c->codebookset[i];
  323. const int cbi = at9_q_unit_to_codebookidx[i];
  324. const VLC *tab = &s->coeff_vlc[cb][prec][cbi];
  325. const HuffmanCodebook *huff = &at9_huffman_coeffs[cb][prec][cbi];
  326. const int groups = bands >> huff->value_cnt_pow;
  327. for (int j = 0; j < groups; j++) {
  328. uint16_t val = get_vlc2(gb, tab->table, 9, huff->max_bit_size);
  329. for (int k = 0; k < huff->value_cnt; k++) {
  330. coeffs[k] = sign_extend(val, huff->value_bits);
  331. val >>= huff->value_bits;
  332. }
  333. coeffs += huff->value_cnt;
  334. }
  335. } else {
  336. for (int j = 0; j < bands; j++)
  337. coeffs[j] = sign_extend(get_bits(gb, prec), prec);
  338. }
  339. }
  340. }
  341. static inline void read_coeffs_fine(ATRAC9Context *s, ATRAC9BlockData *b,
  342. ATRAC9ChannelData *c, GetBitContext *gb)
  343. {
  344. memset(c->q_coeffs_fine, 0, sizeof(c->q_coeffs_fine));
  345. for (int i = 0; i < c->q_unit_cnt; i++) {
  346. const int start = at9_q_unit_to_coeff_idx[i + 0];
  347. const int end = at9_q_unit_to_coeff_idx[i + 1];
  348. const int len = c->precision_fine[i] + 1;
  349. if (c->precision_fine[i] <= 0)
  350. continue;
  351. for (int j = start; j < end; j++)
  352. c->q_coeffs_fine[j] = sign_extend(get_bits(gb, len), len);
  353. }
  354. }
  355. static inline void dequantize(ATRAC9Context *s, ATRAC9BlockData *b,
  356. ATRAC9ChannelData *c)
  357. {
  358. memset(c->coeffs, 0, sizeof(c->coeffs));
  359. for (int i = 0; i < c->q_unit_cnt; i++) {
  360. const int start = at9_q_unit_to_coeff_idx[i + 0];
  361. const int end = at9_q_unit_to_coeff_idx[i + 1];
  362. const float coarse_c = at9_quant_step_coarse[c->precision_coarse[i]];
  363. const float fine_c = at9_quant_step_fine[c->precision_fine[i]];
  364. for (int j = start; j < end; j++) {
  365. const float vc = c->q_coeffs_coarse[j] * coarse_c;
  366. const float vf = c->q_coeffs_fine[j] * fine_c;
  367. c->coeffs[j] = vc + vf;
  368. }
  369. }
  370. }
  371. static inline void apply_intensity_stereo(ATRAC9Context *s, ATRAC9BlockData *b,
  372. const int stereo)
  373. {
  374. float *src = b->channel[ b->cpe_base_channel].coeffs;
  375. float *dst = b->channel[!b->cpe_base_channel].coeffs;
  376. if (!stereo)
  377. return;
  378. if (b->q_unit_cnt <= b->stereo_q_unit)
  379. return;
  380. for (int i = b->stereo_q_unit; i < b->q_unit_cnt; i++) {
  381. const int sign = b->is_signs[i];
  382. const int start = at9_q_unit_to_coeff_idx[i + 0];
  383. const int end = at9_q_unit_to_coeff_idx[i + 1];
  384. for (int j = start; j < end; j++)
  385. dst[j] = sign*src[j];
  386. }
  387. }
  388. static inline void apply_scalefactors(ATRAC9Context *s, ATRAC9BlockData *b,
  389. const int stereo)
  390. {
  391. for (int i = 0; i <= stereo; i++) {
  392. float *coeffs = b->channel[i].coeffs;
  393. for (int j = 0; j < b->q_unit_cnt; j++) {
  394. const int start = at9_q_unit_to_coeff_idx[j + 0];
  395. const int end = at9_q_unit_to_coeff_idx[j + 1];
  396. const int scalefactor = b->channel[i].scalefactors[j];
  397. const float scale = at9_scalefactor_c[scalefactor];
  398. for (int k = start; k < end; k++)
  399. coeffs[k] *= scale;
  400. }
  401. }
  402. }
  403. static inline void fill_with_noise(ATRAC9Context *s, ATRAC9ChannelData *c,
  404. int start, int count)
  405. {
  406. float maxval = 0.0f;
  407. for (int i = 0; i < count; i += 2) {
  408. double tmp[2];
  409. av_bmg_get(&s->lfg, tmp);
  410. c->coeffs[start + i + 0] = tmp[0];
  411. c->coeffs[start + i + 1] = tmp[1];
  412. maxval = FFMAX(FFMAX(FFABS(tmp[0]), FFABS(tmp[1])), maxval);
  413. }
  414. /* Normalize */
  415. for (int i = 0; i < count; i++)
  416. c->coeffs[start + i] /= maxval;
  417. }
  418. static inline void scale_band_ext_coeffs(ATRAC9ChannelData *c, float sf[6],
  419. const int s_unit, const int e_unit)
  420. {
  421. for (int i = s_unit; i < e_unit; i++) {
  422. const int start = at9_q_unit_to_coeff_idx[i + 0];
  423. const int end = at9_q_unit_to_coeff_idx[i + 1];
  424. for (int j = start; j < end; j++)
  425. c->coeffs[j] *= sf[i - s_unit];
  426. }
  427. }
  428. static inline void apply_band_extension(ATRAC9Context *s, ATRAC9BlockData *b,
  429. const int stereo)
  430. {
  431. const int g_units[4] = { /* A, B, C, total units */
  432. b->q_unit_cnt,
  433. at9_tab_band_ext_group[b->q_unit_cnt - 13][0],
  434. at9_tab_band_ext_group[b->q_unit_cnt - 13][1],
  435. FFMAX(g_units[2], 22),
  436. };
  437. const int g_bins[4] = { /* A, B, C, total bins */
  438. at9_q_unit_to_coeff_idx[g_units[0]],
  439. at9_q_unit_to_coeff_idx[g_units[1]],
  440. at9_q_unit_to_coeff_idx[g_units[2]],
  441. at9_q_unit_to_coeff_idx[g_units[3]],
  442. };
  443. if (!b->has_band_ext || !b->has_band_ext_data)
  444. return;
  445. for (int ch = 0; ch <= stereo; ch++) {
  446. ATRAC9ChannelData *c = &b->channel[ch];
  447. /* Mirror the spectrum */
  448. for (int i = 0; i < 3; i++)
  449. for (int j = 0; j < (g_bins[i + 1] - g_bins[i + 0]); j++)
  450. c->coeffs[g_bins[i] + j] = c->coeffs[g_bins[i] - j - 1];
  451. switch (c->band_ext) {
  452. case 0: {
  453. float sf[6] = { 0.0f };
  454. const int l = g_units[3] - g_units[0] - 1;
  455. const int n_start = at9_q_unit_to_coeff_idx[g_units[3] - 1];
  456. const int n_cnt = at9_q_unit_to_coeff_cnt[g_units[3] - 1];
  457. switch (at9_tab_band_ext_group[b->q_unit_cnt - 13][2]) {
  458. case 3:
  459. sf[0] = at9_band_ext_scales_m0[0][0][c->band_ext_data[0]];
  460. sf[1] = at9_band_ext_scales_m0[0][1][c->band_ext_data[0]];
  461. sf[2] = at9_band_ext_scales_m0[0][2][c->band_ext_data[1]];
  462. sf[3] = at9_band_ext_scales_m0[0][3][c->band_ext_data[2]];
  463. sf[4] = at9_band_ext_scales_m0[0][4][c->band_ext_data[3]];
  464. break;
  465. case 4:
  466. sf[0] = at9_band_ext_scales_m0[1][0][c->band_ext_data[0]];
  467. sf[1] = at9_band_ext_scales_m0[1][1][c->band_ext_data[0]];
  468. sf[2] = at9_band_ext_scales_m0[1][2][c->band_ext_data[1]];
  469. sf[3] = at9_band_ext_scales_m0[1][3][c->band_ext_data[2]];
  470. sf[4] = at9_band_ext_scales_m0[1][4][c->band_ext_data[3]];
  471. break;
  472. case 5:
  473. sf[0] = at9_band_ext_scales_m0[2][0][c->band_ext_data[0]];
  474. sf[1] = at9_band_ext_scales_m0[2][1][c->band_ext_data[1]];
  475. sf[2] = at9_band_ext_scales_m0[2][2][c->band_ext_data[1]];
  476. break;
  477. }
  478. sf[l] = at9_scalefactor_c[c->scalefactors[g_units[0]]];
  479. fill_with_noise(s, c, n_start, n_cnt);
  480. scale_band_ext_coeffs(c, sf, g_units[0], g_units[3]);
  481. break;
  482. }
  483. case 1: {
  484. float sf[6];
  485. for (int i = g_units[0]; i < g_units[3]; i++)
  486. sf[i - g_units[0]] = at9_scalefactor_c[c->scalefactors[i]];
  487. fill_with_noise(s, c, g_bins[0], g_bins[3] - g_bins[0]);
  488. scale_band_ext_coeffs(c, sf, g_units[0], g_units[3]);
  489. break;
  490. }
  491. case 2: {
  492. const float g_sf[2] = {
  493. at9_band_ext_scales_m2[c->band_ext_data[0]],
  494. at9_band_ext_scales_m2[c->band_ext_data[1]],
  495. };
  496. for (int i = 0; i < 2; i++)
  497. for (int j = g_bins[i + 0]; j < g_bins[i + 1]; j++)
  498. c->coeffs[j] *= g_sf[i];
  499. break;
  500. }
  501. case 3: {
  502. float scale = at9_band_ext_scales_m3[c->band_ext_data[0]][0];
  503. float rate = at9_band_ext_scales_m3[c->band_ext_data[1]][1];
  504. rate = pow(2, rate);
  505. for (int i = g_bins[0]; i < g_bins[3]; i++) {
  506. scale *= rate;
  507. c->coeffs[i] *= scale;
  508. }
  509. break;
  510. }
  511. case 4: {
  512. const float m = at9_band_ext_scales_m4[c->band_ext_data[0]];
  513. const float g_sf[3] = { 0.7079468f*m, 0.5011902f*m, 0.3548279f*m };
  514. for (int i = 0; i < 3; i++)
  515. for (int j = g_bins[i + 0]; j < g_bins[i + 1]; j++)
  516. c->coeffs[j] *= g_sf[i];
  517. break;
  518. }
  519. }
  520. }
  521. }
  522. static int atrac9_decode_block(ATRAC9Context *s, GetBitContext *gb,
  523. ATRAC9BlockData *b, AVFrame *frame,
  524. int frame_idx, int block_idx)
  525. {
  526. const int first_in_pkt = !get_bits1(gb);
  527. const int reuse_params = get_bits1(gb);
  528. const int stereo = s->block_config->type[block_idx] == ATRAC9_BLOCK_TYPE_CPE;
  529. if (s->block_config->type[block_idx] == ATRAC9_BLOCK_TYPE_LFE) {
  530. ATRAC9ChannelData *c = &b->channel[0];
  531. const int precision = reuse_params ? 8 : 4;
  532. c->q_unit_cnt = b->q_unit_cnt = 2;
  533. memset(c->scalefactors, 0, sizeof(c->scalefactors));
  534. memset(c->q_coeffs_fine, 0, sizeof(c->q_coeffs_fine));
  535. memset(c->q_coeffs_coarse, 0, sizeof(c->q_coeffs_coarse));
  536. for (int i = 0; i < b->q_unit_cnt; i++) {
  537. c->scalefactors[i] = get_bits(gb, 5);
  538. c->precision_coarse[i] = precision;
  539. c->precision_fine[i] = 0;
  540. }
  541. for (int i = 0; i < c->q_unit_cnt; i++) {
  542. const int start = at9_q_unit_to_coeff_idx[i + 0];
  543. const int end = at9_q_unit_to_coeff_idx[i + 1];
  544. for (int j = start; j < end; j++)
  545. c->q_coeffs_coarse[j] = get_bits(gb, c->precision_coarse[i] + 1);
  546. }
  547. dequantize (s, b, c);
  548. apply_scalefactors(s, b, 0);
  549. goto imdct;
  550. }
  551. if (first_in_pkt && reuse_params) {
  552. av_log(s->avctx, AV_LOG_ERROR, "Invalid block flags!\n");
  553. return AVERROR_INVALIDDATA;
  554. }
  555. /* Band parameters */
  556. if (!reuse_params) {
  557. int stereo_band, ext_band;
  558. const int min_band_count = s->samplerate_idx > 7 ? 1 : 3;
  559. b->band_count = get_bits(gb, 4) + min_band_count;
  560. b->q_unit_cnt = at9_tab_band_q_unit_map[b->band_count];
  561. b->band_ext_q_unit = b->stereo_q_unit = b->q_unit_cnt;
  562. if (b->band_count > at9_tab_sri_max_bands[s->samplerate_idx]) {
  563. av_log(s->avctx, AV_LOG_ERROR, "Invalid band count %i!\n",
  564. b->band_count);
  565. return AVERROR_INVALIDDATA;
  566. }
  567. if (stereo) {
  568. stereo_band = get_bits(gb, 4) + min_band_count;
  569. if (stereo_band > b->band_count) {
  570. av_log(s->avctx, AV_LOG_ERROR, "Invalid stereo band %i!\n",
  571. stereo_band);
  572. return AVERROR_INVALIDDATA;
  573. }
  574. b->stereo_q_unit = at9_tab_band_q_unit_map[stereo_band];
  575. }
  576. b->has_band_ext = get_bits1(gb);
  577. if (b->has_band_ext) {
  578. ext_band = get_bits(gb, 4) + min_band_count;
  579. if (ext_band < b->band_count) {
  580. av_log(s->avctx, AV_LOG_ERROR, "Invalid extension band %i!\n",
  581. ext_band);
  582. return AVERROR_INVALIDDATA;
  583. }
  584. b->band_ext_q_unit = at9_tab_band_q_unit_map[ext_band];
  585. }
  586. }
  587. /* Calculate bit alloc gradient */
  588. if (parse_gradient(s, b, gb))
  589. return AVERROR_INVALIDDATA;
  590. /* IS data */
  591. b->cpe_base_channel = 0;
  592. if (stereo) {
  593. b->cpe_base_channel = get_bits1(gb);
  594. if (get_bits1(gb)) {
  595. for (int i = b->stereo_q_unit; i < b->q_unit_cnt; i++)
  596. b->is_signs[i] = 1 - 2*get_bits1(gb);
  597. } else {
  598. for (int i = 0; i < FF_ARRAY_ELEMS(b->is_signs); i++)
  599. b->is_signs[i] = 1;
  600. }
  601. }
  602. /* Band extension */
  603. if (parse_band_ext(s, b, gb, stereo))
  604. return AVERROR_INVALIDDATA;
  605. /* Scalefactors */
  606. for (int i = 0; i <= stereo; i++) {
  607. ATRAC9ChannelData *c = &b->channel[i];
  608. c->q_unit_cnt = i == b->cpe_base_channel ? b->q_unit_cnt :
  609. b->stereo_q_unit;
  610. if (read_scalefactors(s, b, c, gb, i, first_in_pkt))
  611. return AVERROR_INVALIDDATA;
  612. calc_precision (s, b, c);
  613. calc_codebook_idx (s, b, c);
  614. read_coeffs_coarse(s, b, c, gb);
  615. read_coeffs_fine (s, b, c, gb);
  616. dequantize (s, b, c);
  617. }
  618. b->q_unit_cnt_prev = b->has_band_ext ? b->band_ext_q_unit : b->q_unit_cnt;
  619. apply_intensity_stereo(s, b, stereo);
  620. apply_scalefactors (s, b, stereo);
  621. apply_band_extension (s, b, stereo);
  622. imdct:
  623. for (int i = 0; i <= stereo; i++) {
  624. ATRAC9ChannelData *c = &b->channel[i];
  625. const int dst_idx = s->block_config->plane_map[block_idx][i];
  626. const int wsize = 1 << s->frame_log2;
  627. const ptrdiff_t offset = wsize*frame_idx*sizeof(float);
  628. float *dst = (float *)(frame->extended_data[dst_idx] + offset);
  629. s->imdct.imdct_half(&s->imdct, s->temp, c->coeffs);
  630. s->fdsp->vector_fmul_window(dst, c->prev_win, s->temp,
  631. s->imdct_win, wsize >> 1);
  632. memcpy(c->prev_win, s->temp + (wsize >> 1), sizeof(float)*wsize >> 1);
  633. }
  634. return 0;
  635. }
  636. static int atrac9_decode_frame(AVCodecContext *avctx, void *data,
  637. int *got_frame_ptr, AVPacket *avpkt)
  638. {
  639. int ret;
  640. GetBitContext gb;
  641. AVFrame *frame = data;
  642. ATRAC9Context *s = avctx->priv_data;
  643. const int frames = FFMIN(avpkt->size / s->avg_frame_size, s->frame_count);
  644. frame->nb_samples = (1 << s->frame_log2) * frames;
  645. ret = ff_get_buffer(avctx, frame, 0);
  646. if (ret < 0)
  647. return ret;
  648. init_get_bits8(&gb, avpkt->data, avpkt->size);
  649. for (int i = 0; i < frames; i++) {
  650. for (int j = 0; j < s->block_config->count; j++) {
  651. ret = atrac9_decode_block(s, &gb, &s->block[j], frame, i, j);
  652. if (ret)
  653. return ret;
  654. align_get_bits(&gb);
  655. }
  656. }
  657. *got_frame_ptr = 1;
  658. return avctx->block_align;
  659. }
  660. static void atrac9_decode_flush(AVCodecContext *avctx)
  661. {
  662. ATRAC9Context *s = avctx->priv_data;
  663. for (int j = 0; j < s->block_config->count; j++) {
  664. ATRAC9BlockData *b = &s->block[j];
  665. const int stereo = s->block_config->type[j] == ATRAC9_BLOCK_TYPE_CPE;
  666. for (int i = 0; i <= stereo; i++) {
  667. ATRAC9ChannelData *c = &b->channel[i];
  668. memset(c->prev_win, 0, sizeof(c->prev_win));
  669. }
  670. }
  671. }
  672. static av_cold int atrac9_decode_close(AVCodecContext *avctx)
  673. {
  674. ATRAC9Context *s = avctx->priv_data;
  675. for (int i = 1; i < 7; i++)
  676. ff_free_vlc(&s->sf_vlc[0][i]);
  677. for (int i = 2; i < 6; i++)
  678. ff_free_vlc(&s->sf_vlc[1][i]);
  679. for (int i = 0; i < 2; i++)
  680. for (int j = 0; j < 8; j++)
  681. for (int k = 0; k < 4; k++)
  682. ff_free_vlc(&s->coeff_vlc[i][j][k]);
  683. ff_mdct_end(&s->imdct);
  684. av_free(s->fdsp);
  685. return 0;
  686. }
  687. static av_cold int atrac9_decode_init(AVCodecContext *avctx)
  688. {
  689. GetBitContext gb;
  690. ATRAC9Context *s = avctx->priv_data;
  691. int version, block_config_idx, superframe_idx, alloc_c_len;
  692. s->avctx = avctx;
  693. av_lfg_init(&s->lfg, 0xFBADF00D);
  694. if (avctx->extradata_size != 12) {
  695. av_log(avctx, AV_LOG_ERROR, "Invalid extradata length!\n");
  696. return AVERROR_INVALIDDATA;
  697. }
  698. version = AV_RL32(avctx->extradata);
  699. if (version > 2) {
  700. av_log(avctx, AV_LOG_ERROR, "Unsupported version (%i)!\n", version);
  701. return AVERROR_INVALIDDATA;
  702. }
  703. init_get_bits8(&gb, avctx->extradata + 4, avctx->extradata_size);
  704. if (get_bits(&gb, 8) != 0xFE) {
  705. av_log(avctx, AV_LOG_ERROR, "Incorrect magic byte!\n");
  706. return AVERROR_INVALIDDATA;
  707. }
  708. s->samplerate_idx = get_bits(&gb, 4);
  709. avctx->sample_rate = at9_tab_samplerates[s->samplerate_idx];
  710. block_config_idx = get_bits(&gb, 3);
  711. if (block_config_idx > 5) {
  712. av_log(avctx, AV_LOG_ERROR, "Incorrect block config!\n");
  713. return AVERROR_INVALIDDATA;
  714. }
  715. s->block_config = &at9_block_layout[block_config_idx];
  716. avctx->channel_layout = s->block_config->channel_layout;
  717. avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
  718. if (get_bits1(&gb)) {
  719. av_log(avctx, AV_LOG_ERROR, "Incorrect verification bit!\n");
  720. return AVERROR_INVALIDDATA;
  721. }
  722. /* Average frame size in bytes */
  723. s->avg_frame_size = get_bits(&gb, 11) + 1;
  724. superframe_idx = get_bits(&gb, 2);
  725. if (superframe_idx & 1) {
  726. av_log(avctx, AV_LOG_ERROR, "Invalid superframe index!\n");
  727. return AVERROR_INVALIDDATA;
  728. }
  729. s->frame_count = 1 << superframe_idx;
  730. s->frame_log2 = at9_tab_sri_frame_log2[s->samplerate_idx];
  731. if (ff_mdct_init(&s->imdct, s->frame_log2 + 1, 1, 1.0f / 32768.0f))
  732. return AVERROR(ENOMEM);
  733. s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
  734. if (!s->fdsp)
  735. return AVERROR(ENOMEM);
  736. /* iMDCT window */
  737. for (int i = 0; i < (1 << s->frame_log2); i++) {
  738. const int len = 1 << s->frame_log2;
  739. const float sidx = ( i + 0.5f) / len;
  740. const float eidx = (len - i - 0.5f) / len;
  741. const float s_c = sinf(sidx*M_PI - M_PI_2)*0.5f + 0.5f;
  742. const float e_c = sinf(eidx*M_PI - M_PI_2)*0.5f + 0.5f;
  743. s->imdct_win[i] = s_c / ((s_c * s_c) + (e_c * e_c));
  744. }
  745. /* Allocation curve */
  746. alloc_c_len = FF_ARRAY_ELEMS(at9_tab_b_dist);
  747. for (int i = 1; i <= alloc_c_len; i++)
  748. for (int j = 0; j < i; j++)
  749. s->alloc_curve[i - 1][j] = at9_tab_b_dist[(j * alloc_c_len) / i];
  750. /* Unsigned scalefactor VLCs */
  751. for (int i = 1; i < 7; i++) {
  752. const HuffmanCodebook *hf = &at9_huffman_sf_unsigned[i];
  753. init_vlc(&s->sf_vlc[0][i], 9, hf->size, hf->bits, 1, 1, hf->codes,
  754. 2, 2, 0);
  755. }
  756. /* Signed scalefactor VLCs */
  757. for (int i = 2; i < 6; i++) {
  758. const HuffmanCodebook *hf = &at9_huffman_sf_signed[i];
  759. int nums = hf->size;
  760. int16_t sym[32];
  761. for (int j = 0; j < nums; j++)
  762. sym[j] = sign_extend(j, hf->value_bits);
  763. ff_init_vlc_sparse(&s->sf_vlc[1][i], 9, hf->size, hf->bits, 1, 1,
  764. hf->codes, 2, 2, sym, sizeof(*sym), sizeof(*sym), 0);
  765. }
  766. /* Coefficient VLCs */
  767. for (int i = 0; i < 2; i++) {
  768. for (int j = 0; j < 8; j++) {
  769. for (int k = 0; k < 4; k++) {
  770. const HuffmanCodebook *hf = &at9_huffman_coeffs[i][j][k];
  771. init_vlc(&s->coeff_vlc[i][j][k], 9, hf->size, hf->bits, 1, 1,
  772. hf->codes, 2, 2, 0);
  773. }
  774. }
  775. }
  776. return 0;
  777. }
  778. AVCodec ff_atrac9_decoder = {
  779. .name = "atrac9",
  780. .long_name = NULL_IF_CONFIG_SMALL("ATRAC9 (Adaptive TRansform Acoustic Coding 9)"),
  781. .type = AVMEDIA_TYPE_AUDIO,
  782. .id = AV_CODEC_ID_ATRAC9,
  783. .priv_data_size = sizeof(ATRAC9Context),
  784. .init = atrac9_decode_init,
  785. .close = atrac9_decode_close,
  786. .decode = atrac9_decode_frame,
  787. .flush = atrac9_decode_flush,
  788. .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
  789. .capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1,
  790. };