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.

1818 lines
71KB

  1. /*
  2. * ATRAC3+ compatible decoder
  3. *
  4. * Copyright (c) 2010-2013 Maxim Poliakovski
  5. *
  6. * This file is part of Libav.
  7. *
  8. * Libav 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. * Libav 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 Libav; if not, write to the Free Software
  20. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  21. */
  22. /**
  23. * @file
  24. * Bitstream parser for ATRAC3+ decoder.
  25. */
  26. #include "libavutil/avassert.h"
  27. #include "avcodec.h"
  28. #include "bitstream.h"
  29. #include "vlc.h"
  30. #include "atrac3plus.h"
  31. #include "atrac3plus_data.h"
  32. static VLC_TYPE tables_data[154276][2];
  33. static VLC wl_vlc_tabs[4];
  34. static VLC sf_vlc_tabs[8];
  35. static VLC ct_vlc_tabs[4];
  36. static VLC spec_vlc_tabs[112];
  37. static VLC gain_vlc_tabs[11];
  38. static VLC tone_vlc_tabs[7];
  39. /**
  40. * Generate canonical VLC table from given descriptor.
  41. *
  42. * @param[in] cb ptr to codebook descriptor
  43. * @param[in] xlat ptr to translation table or NULL
  44. * @param[in,out] tab_offset starting offset to the generated vlc table
  45. * @param[out] out_vlc ptr to vlc table to be generated
  46. */
  47. static av_cold void build_canonical_huff(const uint8_t *cb, const uint8_t *xlat,
  48. int *tab_offset, VLC *out_vlc)
  49. {
  50. int i, b;
  51. uint16_t codes[256];
  52. uint8_t bits[256];
  53. unsigned code = 0;
  54. int index = 0;
  55. int min_len = *cb++; // get shortest codeword length
  56. int max_len = *cb++; // get longest codeword length
  57. for (b = min_len; b <= max_len; b++) {
  58. for (i = *cb++; i > 0; i--) {
  59. av_assert0(index < 256);
  60. bits[index] = b;
  61. codes[index] = code++;
  62. index++;
  63. }
  64. code <<= 1;
  65. }
  66. out_vlc->table = &tables_data[*tab_offset];
  67. out_vlc->table_allocated = 1 << max_len;
  68. ff_init_vlc_sparse(out_vlc, max_len, index, bits, 1, 1, codes, 2, 2,
  69. xlat, 1, 1, INIT_VLC_USE_NEW_STATIC);
  70. *tab_offset += 1 << max_len;
  71. }
  72. av_cold void ff_atrac3p_init_vlcs(AVCodec *codec)
  73. {
  74. int i, wl_vlc_offs, ct_vlc_offs, sf_vlc_offs, tab_offset;
  75. static const int wl_nb_bits[4] = { 2, 3, 5, 5 };
  76. static const int wl_nb_codes[4] = { 3, 5, 8, 8 };
  77. static const uint8_t * const wl_bits[4] = {
  78. atrac3p_wl_huff_bits1, atrac3p_wl_huff_bits2,
  79. atrac3p_wl_huff_bits3, atrac3p_wl_huff_bits4
  80. };
  81. static const uint8_t * const wl_codes[4] = {
  82. atrac3p_wl_huff_code1, atrac3p_wl_huff_code2,
  83. atrac3p_wl_huff_code3, atrac3p_wl_huff_code4
  84. };
  85. static const uint8_t * const wl_xlats[4] = {
  86. atrac3p_wl_huff_xlat1, atrac3p_wl_huff_xlat2, NULL, NULL
  87. };
  88. static const int ct_nb_bits[4] = { 3, 4, 4, 4 };
  89. static const int ct_nb_codes[4] = { 4, 8, 8, 8 };
  90. static const uint8_t * const ct_bits[4] = {
  91. atrac3p_ct_huff_bits1, atrac3p_ct_huff_bits2,
  92. atrac3p_ct_huff_bits2, atrac3p_ct_huff_bits3
  93. };
  94. static const uint8_t * const ct_codes[4] = {
  95. atrac3p_ct_huff_code1, atrac3p_ct_huff_code2,
  96. atrac3p_ct_huff_code2, atrac3p_ct_huff_code3
  97. };
  98. static const uint8_t * const ct_xlats[4] = {
  99. NULL, NULL, atrac3p_ct_huff_xlat1, NULL
  100. };
  101. static const int sf_nb_bits[8] = { 9, 9, 9, 9, 6, 6, 7, 7 };
  102. static const int sf_nb_codes[8] = { 64, 64, 64, 64, 16, 16, 16, 16 };
  103. static const uint8_t * const sf_bits[8] = {
  104. atrac3p_sf_huff_bits1, atrac3p_sf_huff_bits1, atrac3p_sf_huff_bits2,
  105. atrac3p_sf_huff_bits3, atrac3p_sf_huff_bits4, atrac3p_sf_huff_bits4,
  106. atrac3p_sf_huff_bits5, atrac3p_sf_huff_bits6
  107. };
  108. static const uint16_t * const sf_codes[8] = {
  109. atrac3p_sf_huff_code1, atrac3p_sf_huff_code1, atrac3p_sf_huff_code2,
  110. atrac3p_sf_huff_code3, atrac3p_sf_huff_code4, atrac3p_sf_huff_code4,
  111. atrac3p_sf_huff_code5, atrac3p_sf_huff_code6
  112. };
  113. static const uint8_t * const sf_xlats[8] = {
  114. atrac3p_sf_huff_xlat1, atrac3p_sf_huff_xlat2, NULL, NULL,
  115. atrac3p_sf_huff_xlat4, atrac3p_sf_huff_xlat5, NULL, NULL
  116. };
  117. static const uint8_t * const gain_cbs[11] = {
  118. atrac3p_huff_gain_npoints1_cb, atrac3p_huff_gain_npoints1_cb,
  119. atrac3p_huff_gain_lev1_cb, atrac3p_huff_gain_lev2_cb,
  120. atrac3p_huff_gain_lev3_cb, atrac3p_huff_gain_lev4_cb,
  121. atrac3p_huff_gain_loc3_cb, atrac3p_huff_gain_loc1_cb,
  122. atrac3p_huff_gain_loc4_cb, atrac3p_huff_gain_loc2_cb,
  123. atrac3p_huff_gain_loc5_cb
  124. };
  125. static const uint8_t * const gain_xlats[11] = {
  126. NULL, atrac3p_huff_gain_npoints2_xlat, atrac3p_huff_gain_lev1_xlat,
  127. atrac3p_huff_gain_lev2_xlat, atrac3p_huff_gain_lev3_xlat,
  128. atrac3p_huff_gain_lev4_xlat, atrac3p_huff_gain_loc3_xlat,
  129. atrac3p_huff_gain_loc1_xlat, atrac3p_huff_gain_loc4_xlat,
  130. atrac3p_huff_gain_loc2_xlat, atrac3p_huff_gain_loc5_xlat
  131. };
  132. static const uint8_t * const tone_cbs[7] = {
  133. atrac3p_huff_tonebands_cb, atrac3p_huff_numwavs1_cb,
  134. atrac3p_huff_numwavs2_cb, atrac3p_huff_wav_ampsf1_cb,
  135. atrac3p_huff_wav_ampsf2_cb, atrac3p_huff_wav_ampsf3_cb,
  136. atrac3p_huff_freq_cb
  137. };
  138. static const uint8_t * const tone_xlats[7] = {
  139. NULL, NULL, atrac3p_huff_numwavs2_xlat, atrac3p_huff_wav_ampsf1_xlat,
  140. atrac3p_huff_wav_ampsf2_xlat, atrac3p_huff_wav_ampsf3_xlat,
  141. atrac3p_huff_freq_xlat
  142. };
  143. for (i = 0, wl_vlc_offs = 0, ct_vlc_offs = 2508; i < 4; i++) {
  144. wl_vlc_tabs[i].table = &tables_data[wl_vlc_offs];
  145. wl_vlc_tabs[i].table_allocated = 1 << wl_nb_bits[i];
  146. ct_vlc_tabs[i].table = &tables_data[ct_vlc_offs];
  147. ct_vlc_tabs[i].table_allocated = 1 << ct_nb_bits[i];
  148. ff_init_vlc_sparse(&wl_vlc_tabs[i], wl_nb_bits[i], wl_nb_codes[i],
  149. wl_bits[i], 1, 1,
  150. wl_codes[i], 1, 1,
  151. wl_xlats[i], 1, 1,
  152. INIT_VLC_USE_NEW_STATIC);
  153. ff_init_vlc_sparse(&ct_vlc_tabs[i], ct_nb_bits[i], ct_nb_codes[i],
  154. ct_bits[i], 1, 1,
  155. ct_codes[i], 1, 1,
  156. ct_xlats[i], 1, 1,
  157. INIT_VLC_USE_NEW_STATIC);
  158. wl_vlc_offs += wl_vlc_tabs[i].table_allocated;
  159. ct_vlc_offs += ct_vlc_tabs[i].table_allocated;
  160. }
  161. for (i = 0, sf_vlc_offs = 76; i < 8; i++) {
  162. sf_vlc_tabs[i].table = &tables_data[sf_vlc_offs];
  163. sf_vlc_tabs[i].table_allocated = 1 << sf_nb_bits[i];
  164. ff_init_vlc_sparse(&sf_vlc_tabs[i], sf_nb_bits[i], sf_nb_codes[i],
  165. sf_bits[i], 1, 1,
  166. sf_codes[i], 2, 2,
  167. sf_xlats[i], 1, 1,
  168. INIT_VLC_USE_NEW_STATIC);
  169. sf_vlc_offs += sf_vlc_tabs[i].table_allocated;
  170. }
  171. tab_offset = 2564;
  172. /* build huffman tables for spectrum decoding */
  173. for (i = 0; i < 112; i++) {
  174. if (atrac3p_spectra_tabs[i].cb)
  175. build_canonical_huff(atrac3p_spectra_tabs[i].cb,
  176. atrac3p_spectra_tabs[i].xlat,
  177. &tab_offset, &spec_vlc_tabs[i]);
  178. else
  179. spec_vlc_tabs[i].table = 0;
  180. }
  181. /* build huffman tables for gain data decoding */
  182. for (i = 0; i < 11; i++)
  183. build_canonical_huff(gain_cbs[i], gain_xlats[i], &tab_offset, &gain_vlc_tabs[i]);
  184. /* build huffman tables for tone decoding */
  185. for (i = 0; i < 7; i++)
  186. build_canonical_huff(tone_cbs[i], tone_xlats[i], &tab_offset, &tone_vlc_tabs[i]);
  187. }
  188. /**
  189. * Decode number of coded quantization units.
  190. *
  191. * @param[in] bc the Bitstream context
  192. * @param[in,out] chan ptr to the channel parameters
  193. * @param[in,out] ctx ptr to the channel unit context
  194. * @param[in] avctx ptr to the AVCodecContext
  195. * @return result code: 0 = OK, otherwise - error code
  196. */
  197. static int num_coded_units(BitstreamContext *bc, Atrac3pChanParams *chan,
  198. Atrac3pChanUnitCtx *ctx, AVCodecContext *avctx)
  199. {
  200. chan->fill_mode = bitstream_read(bc, 2);
  201. if (!chan->fill_mode) {
  202. chan->num_coded_vals = ctx->num_quant_units;
  203. } else {
  204. chan->num_coded_vals = bitstream_read(bc, 5);
  205. if (chan->num_coded_vals > ctx->num_quant_units) {
  206. av_log(avctx, AV_LOG_ERROR,
  207. "Invalid number of transmitted units!\n");
  208. return AVERROR_INVALIDDATA;
  209. }
  210. if (chan->fill_mode == 3)
  211. chan->split_point = bitstream_read(bc, 2) + (chan->ch_num << 1) + 1;
  212. }
  213. return 0;
  214. }
  215. /**
  216. * Add weighting coefficients to the decoded word-length information.
  217. *
  218. * @param[in,out] ctx ptr to the channel unit context
  219. * @param[in,out] chan ptr to the channel parameters
  220. * @param[in] wtab_idx index of the table of weights
  221. * @param[in] avctx ptr to the AVCodecContext
  222. * @return result code: 0 = OK, otherwise - error code
  223. */
  224. static int add_wordlen_weights(Atrac3pChanUnitCtx *ctx,
  225. Atrac3pChanParams *chan, int wtab_idx,
  226. AVCodecContext *avctx)
  227. {
  228. int i;
  229. const int8_t *weights_tab =
  230. &atrac3p_wl_weights[chan->ch_num * 3 + wtab_idx - 1][0];
  231. for (i = 0; i < ctx->num_quant_units; i++) {
  232. chan->qu_wordlen[i] += weights_tab[i];
  233. if (chan->qu_wordlen[i] < 0 || chan->qu_wordlen[i] > 7) {
  234. av_log(avctx, AV_LOG_ERROR,
  235. "WL index out of range: pos=%d, val=%d!\n",
  236. i, chan->qu_wordlen[i]);
  237. return AVERROR_INVALIDDATA;
  238. }
  239. }
  240. return 0;
  241. }
  242. /**
  243. * Subtract weighting coefficients from decoded scalefactors.
  244. *
  245. * @param[in,out] ctx ptr to the channel unit context
  246. * @param[in,out] chan ptr to the channel parameters
  247. * @param[in] wtab_idx index of table of weights
  248. * @param[in] avctx ptr to the AVCodecContext
  249. * @return result code: 0 = OK, otherwise - error code
  250. */
  251. static int subtract_sf_weights(Atrac3pChanUnitCtx *ctx,
  252. Atrac3pChanParams *chan, int wtab_idx,
  253. AVCodecContext *avctx)
  254. {
  255. int i;
  256. const int8_t *weights_tab = &atrac3p_sf_weights[wtab_idx - 1][0];
  257. for (i = 0; i < ctx->used_quant_units; i++) {
  258. chan->qu_sf_idx[i] -= weights_tab[i];
  259. if (chan->qu_sf_idx[i] < 0 || chan->qu_sf_idx[i] > 63) {
  260. av_log(avctx, AV_LOG_ERROR,
  261. "SF index out of range: pos=%d, val=%d!\n",
  262. i, chan->qu_sf_idx[i]);
  263. return AVERROR_INVALIDDATA;
  264. }
  265. }
  266. return 0;
  267. }
  268. /**
  269. * Unpack vector quantization tables.
  270. *
  271. * @param[in] start_val start value for the unpacked table
  272. * @param[in] shape_vec ptr to table to unpack
  273. * @param[out] dst ptr to output array
  274. * @param[in] num_values number of values to unpack
  275. */
  276. static inline void unpack_vq_shape(int start_val, const int8_t *shape_vec,
  277. int *dst, int num_values)
  278. {
  279. int i;
  280. if (num_values) {
  281. dst[0] = dst[1] = dst[2] = start_val;
  282. for (i = 3; i < num_values; i++)
  283. dst[i] = start_val - shape_vec[atrac3p_qu_num_to_seg[i] - 1];
  284. }
  285. }
  286. #define UNPACK_SF_VQ_SHAPE(bc, dst, num_vals) \
  287. start_val = bitstream_read((bc), 6); \
  288. unpack_vq_shape(start_val, &atrac3p_sf_shapes[bitstream_read((bc), 6)][0], \
  289. (dst), (num_vals))
  290. /**
  291. * Decode word length for each quantization unit of a channel.
  292. *
  293. * @param[in] bc the Bitstream context
  294. * @param[in,out] ctx ptr to the channel unit context
  295. * @param[in] ch_num channel to process
  296. * @param[in] avctx ptr to the AVCodecContext
  297. * @return result code: 0 = OK, otherwise - error code
  298. */
  299. static int decode_channel_wordlen(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  300. int ch_num, AVCodecContext *avctx)
  301. {
  302. int i, weight_idx = 0, delta, diff, pos, delta_bits, min_val, flag,
  303. ret, start_val;
  304. VLC *vlc_tab;
  305. Atrac3pChanParams *chan = &ctx->channels[ch_num];
  306. Atrac3pChanParams *ref_chan = &ctx->channels[0];
  307. chan->fill_mode = 0;
  308. switch (bitstream_read(bc, 2)) { /* switch according to coding mode */
  309. case 0: /* coded using constant number of bits */
  310. for (i = 0; i < ctx->num_quant_units; i++)
  311. chan->qu_wordlen[i] = bitstream_read(bc, 3);
  312. break;
  313. case 1:
  314. if (ch_num) {
  315. if ((ret = num_coded_units(bc, chan, ctx, avctx)) < 0)
  316. return ret;
  317. if (chan->num_coded_vals) {
  318. vlc_tab = &wl_vlc_tabs[bitstream_read(bc, 2)];
  319. for (i = 0; i < chan->num_coded_vals; i++) {
  320. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  321. chan->qu_wordlen[i] = (ref_chan->qu_wordlen[i] + delta) & 7;
  322. }
  323. }
  324. } else {
  325. weight_idx = bitstream_read(bc, 2);
  326. if ((ret = num_coded_units(bc, chan, ctx, avctx)) < 0)
  327. return ret;
  328. if (chan->num_coded_vals) {
  329. pos = bitstream_read(bc, 5);
  330. if (pos > chan->num_coded_vals) {
  331. av_log(avctx, AV_LOG_ERROR,
  332. "WL mode 1: invalid position!\n");
  333. return AVERROR_INVALIDDATA;
  334. }
  335. delta_bits = bitstream_read(bc, 2);
  336. min_val = bitstream_read(bc, 3);
  337. for (i = 0; i < pos; i++)
  338. chan->qu_wordlen[i] = bitstream_read(bc, 3);
  339. for (i = pos; i < chan->num_coded_vals; i++)
  340. chan->qu_wordlen[i] = (min_val + bitstream_read(bc, delta_bits)) & 7;
  341. }
  342. }
  343. break;
  344. case 2:
  345. if ((ret = num_coded_units(bc, chan, ctx, avctx)) < 0)
  346. return ret;
  347. if (ch_num && chan->num_coded_vals) {
  348. vlc_tab = &wl_vlc_tabs[bitstream_read(bc, 2)];
  349. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  350. chan->qu_wordlen[0] = (ref_chan->qu_wordlen[0] + delta) & 7;
  351. for (i = 1; i < chan->num_coded_vals; i++) {
  352. diff = ref_chan->qu_wordlen[i] - ref_chan->qu_wordlen[i - 1];
  353. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  354. chan->qu_wordlen[i] = (chan->qu_wordlen[i - 1] + diff + delta) & 7;
  355. }
  356. } else if (chan->num_coded_vals) {
  357. flag = bitstream_read(bc, 1);
  358. vlc_tab = &wl_vlc_tabs[bitstream_read(bc, 1)];
  359. start_val = bitstream_read(bc, 3);
  360. unpack_vq_shape(start_val,
  361. &atrac3p_wl_shapes[start_val][bitstream_read(bc, 4)][0],
  362. chan->qu_wordlen, chan->num_coded_vals);
  363. if (!flag) {
  364. for (i = 0; i < chan->num_coded_vals; i++) {
  365. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  366. chan->qu_wordlen[i] = (chan->qu_wordlen[i] + delta) & 7;
  367. }
  368. } else {
  369. for (i = 0; i < (chan->num_coded_vals & - 2); i += 2)
  370. if (!bitstream_read_bit(bc)) {
  371. chan->qu_wordlen[i] = (chan->qu_wordlen[i] +
  372. bitstream_read_vlc(bc, vlc_tab->table,
  373. vlc_tab->bits, 1)) & 7;
  374. chan->qu_wordlen[i + 1] = (chan->qu_wordlen[i + 1] +
  375. bitstream_read_vlc(bc, vlc_tab->table,
  376. vlc_tab->bits, 1)) & 7;
  377. }
  378. if (chan->num_coded_vals & 1)
  379. chan->qu_wordlen[i] = (chan->qu_wordlen[i] +
  380. bitstream_read_vlc(bc, vlc_tab->table,
  381. vlc_tab->bits, 1)) & 7;
  382. }
  383. }
  384. break;
  385. case 3:
  386. weight_idx = bitstream_read(bc, 2);
  387. if ((ret = num_coded_units(bc, chan, ctx, avctx)) < 0)
  388. return ret;
  389. if (chan->num_coded_vals) {
  390. vlc_tab = &wl_vlc_tabs[bitstream_read(bc, 2)];
  391. /* first coefficient is coded directly */
  392. chan->qu_wordlen[0] = bitstream_read(bc, 3);
  393. for (i = 1; i < chan->num_coded_vals; i++) {
  394. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  395. chan->qu_wordlen[i] = (chan->qu_wordlen[i - 1] + delta) & 7;
  396. }
  397. }
  398. break;
  399. }
  400. if (chan->fill_mode == 2) {
  401. for (i = chan->num_coded_vals; i < ctx->num_quant_units; i++)
  402. chan->qu_wordlen[i] = ch_num ? bitstream_read_bit(bc) : 1;
  403. } else if (chan->fill_mode == 3) {
  404. pos = ch_num ? chan->num_coded_vals + chan->split_point
  405. : ctx->num_quant_units - chan->split_point;
  406. for (i = chan->num_coded_vals; i < pos; i++)
  407. chan->qu_wordlen[i] = 1;
  408. }
  409. if (weight_idx)
  410. return add_wordlen_weights(ctx, chan, weight_idx, avctx);
  411. return 0;
  412. }
  413. /**
  414. * Decode scale factor indexes for each quant unit of a channel.
  415. *
  416. * @param[in] bc the Bitstream context
  417. * @param[in,out] ctx ptr to the channel unit context
  418. * @param[in] ch_num channel to process
  419. * @param[in] avctx ptr to the AVCodecContext
  420. * @return result code: 0 = OK, otherwise - error code
  421. */
  422. static int decode_channel_sf_idx(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  423. int ch_num, AVCodecContext *avctx)
  424. {
  425. int i, weight_idx = 0, delta, diff, num_long_vals,
  426. delta_bits, min_val, vlc_sel, start_val;
  427. VLC *vlc_tab;
  428. Atrac3pChanParams *chan = &ctx->channels[ch_num];
  429. Atrac3pChanParams *ref_chan = &ctx->channels[0];
  430. switch (bitstream_read(bc, 2)) { /* switch according to coding mode */
  431. case 0: /* coded using constant number of bits */
  432. for (i = 0; i < ctx->used_quant_units; i++)
  433. chan->qu_sf_idx[i] = bitstream_read(bc, 6);
  434. break;
  435. case 1:
  436. if (ch_num) {
  437. vlc_tab = &sf_vlc_tabs[bitstream_read(bc, 2)];
  438. for (i = 0; i < ctx->used_quant_units; i++) {
  439. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  440. chan->qu_sf_idx[i] = (ref_chan->qu_sf_idx[i] + delta) & 0x3F;
  441. }
  442. } else {
  443. weight_idx = bitstream_read(bc, 2);
  444. if (weight_idx == 3) {
  445. UNPACK_SF_VQ_SHAPE(bc, chan->qu_sf_idx, ctx->used_quant_units);
  446. num_long_vals = bitstream_read(bc, 5);
  447. delta_bits = bitstream_read(bc, 2);
  448. min_val = bitstream_read(bc, 4) - 7;
  449. for (i = 0; i < num_long_vals; i++)
  450. chan->qu_sf_idx[i] = (chan->qu_sf_idx[i] +
  451. bitstream_read(bc, 4) - 7) & 0x3F;
  452. /* all others are: min_val + delta */
  453. for (i = num_long_vals; i < ctx->used_quant_units; i++)
  454. chan->qu_sf_idx[i] = (chan->qu_sf_idx[i] + min_val +
  455. bitstream_read(bc, delta_bits)) & 0x3F;
  456. } else {
  457. num_long_vals = bitstream_read(bc, 5);
  458. delta_bits = bitstream_read(bc, 3);
  459. min_val = bitstream_read(bc, 6);
  460. if (num_long_vals > ctx->used_quant_units || delta_bits == 7) {
  461. av_log(avctx, AV_LOG_ERROR,
  462. "SF mode 1: invalid parameters!\n");
  463. return AVERROR_INVALIDDATA;
  464. }
  465. /* read full-precision SF indexes */
  466. for (i = 0; i < num_long_vals; i++)
  467. chan->qu_sf_idx[i] = bitstream_read(bc, 6);
  468. /* all others are: min_val + delta */
  469. for (i = num_long_vals; i < ctx->used_quant_units; i++)
  470. chan->qu_sf_idx[i] = (min_val +
  471. bitstream_read(bc, delta_bits)) & 0x3F;
  472. }
  473. }
  474. break;
  475. case 2:
  476. if (ch_num) {
  477. vlc_tab = &sf_vlc_tabs[bitstream_read(bc, 2)];
  478. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  479. chan->qu_sf_idx[0] = (ref_chan->qu_sf_idx[0] + delta) & 0x3F;
  480. for (i = 1; i < ctx->used_quant_units; i++) {
  481. diff = ref_chan->qu_sf_idx[i] - ref_chan->qu_sf_idx[i - 1];
  482. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  483. chan->qu_sf_idx[i] = (chan->qu_sf_idx[i - 1] + diff + delta) & 0x3F;
  484. }
  485. } else {
  486. vlc_tab = &sf_vlc_tabs[bitstream_read(bc, 2) + 4];
  487. UNPACK_SF_VQ_SHAPE(bc, chan->qu_sf_idx, ctx->used_quant_units);
  488. for (i = 0; i < ctx->used_quant_units; i++) {
  489. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  490. chan->qu_sf_idx[i] = (chan->qu_sf_idx[i] +
  491. sign_extend(delta, 4)) & 0x3F;
  492. }
  493. }
  494. break;
  495. case 3:
  496. if (ch_num) {
  497. /* copy coefficients from reference channel */
  498. for (i = 0; i < ctx->used_quant_units; i++)
  499. chan->qu_sf_idx[i] = ref_chan->qu_sf_idx[i];
  500. } else {
  501. weight_idx = bitstream_read(bc, 2);
  502. vlc_sel = bitstream_read(bc, 2);
  503. vlc_tab = &sf_vlc_tabs[vlc_sel];
  504. if (weight_idx == 3) {
  505. vlc_tab = &sf_vlc_tabs[vlc_sel + 4];
  506. UNPACK_SF_VQ_SHAPE(bc, chan->qu_sf_idx, ctx->used_quant_units);
  507. diff = (bitstream_read(bc, 4) + 56) & 0x3F;
  508. chan->qu_sf_idx[0] = (chan->qu_sf_idx[0] + diff) & 0x3F;
  509. for (i = 1; i < ctx->used_quant_units; i++) {
  510. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  511. diff = (diff + sign_extend(delta, 4)) & 0x3F;
  512. chan->qu_sf_idx[i] = (diff + chan->qu_sf_idx[i]) & 0x3F;
  513. }
  514. } else {
  515. /* 1st coefficient is coded directly */
  516. chan->qu_sf_idx[0] = bitstream_read(bc, 6);
  517. for (i = 1; i < ctx->used_quant_units; i++) {
  518. delta = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  519. chan->qu_sf_idx[i] = (chan->qu_sf_idx[i - 1] + delta) & 0x3F;
  520. }
  521. }
  522. }
  523. break;
  524. }
  525. if (weight_idx && weight_idx < 3)
  526. return subtract_sf_weights(ctx, chan, weight_idx, avctx);
  527. return 0;
  528. }
  529. /**
  530. * Decode word length information for each channel.
  531. *
  532. * @param[in] bc the Bitstream context
  533. * @param[in,out] ctx ptr to the channel unit context
  534. * @param[in] num_channels number of channels to process
  535. * @param[in] avctx ptr to the AVCodecContext
  536. * @return result code: 0 = OK, otherwise - error code
  537. */
  538. static int decode_quant_wordlen(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  539. int num_channels, AVCodecContext *avctx)
  540. {
  541. int ch_num, i, ret;
  542. for (ch_num = 0; ch_num < num_channels; ch_num++) {
  543. memset(ctx->channels[ch_num].qu_wordlen, 0,
  544. sizeof(ctx->channels[ch_num].qu_wordlen));
  545. if ((ret = decode_channel_wordlen(bc, ctx, ch_num, avctx)) < 0)
  546. return ret;
  547. }
  548. /* scan for last non-zero coeff in both channels and
  549. * set number of quant units having coded spectrum */
  550. for (i = ctx->num_quant_units - 1; i >= 0; i--)
  551. if (ctx->channels[0].qu_wordlen[i] ||
  552. (num_channels == 2 && ctx->channels[1].qu_wordlen[i]))
  553. break;
  554. ctx->used_quant_units = i + 1;
  555. return 0;
  556. }
  557. /**
  558. * Decode scale factor indexes for each channel.
  559. *
  560. * @param[in] bc the Bitstream context
  561. * @param[in,out] ctx ptr to the channel unit context
  562. * @param[in] num_channels number of channels to process
  563. * @param[in] avctx ptr to the AVCodecContext
  564. * @return result code: 0 = OK, otherwise - error code
  565. */
  566. static int decode_scale_factors(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  567. int num_channels, AVCodecContext *avctx)
  568. {
  569. int ch_num, ret;
  570. if (!ctx->used_quant_units)
  571. return 0;
  572. for (ch_num = 0; ch_num < num_channels; ch_num++) {
  573. memset(ctx->channels[ch_num].qu_sf_idx, 0,
  574. sizeof(ctx->channels[ch_num].qu_sf_idx));
  575. if ((ret = decode_channel_sf_idx(bc, ctx, ch_num, avctx)) < 0)
  576. return ret;
  577. }
  578. return 0;
  579. }
  580. /**
  581. * Decode number of code table values.
  582. *
  583. * @param[in] bc the Bitstream context
  584. * @param[in,out] ctx ptr to the channel unit context
  585. * @param[in] avctx ptr to the AVCodecContext
  586. * @return result code: 0 = OK, otherwise - error code
  587. */
  588. static int get_num_ct_values(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  589. AVCodecContext *avctx)
  590. {
  591. int num_coded_vals;
  592. if (bitstream_read_bit(bc)) {
  593. num_coded_vals = bitstream_read(bc, 5);
  594. if (num_coded_vals > ctx->used_quant_units) {
  595. av_log(avctx, AV_LOG_ERROR,
  596. "Invalid number of code table indexes: %d!\n", num_coded_vals);
  597. return AVERROR_INVALIDDATA;
  598. }
  599. return num_coded_vals;
  600. } else
  601. return ctx->used_quant_units;
  602. }
  603. #define DEC_CT_IDX_COMMON(OP) \
  604. num_vals = get_num_ct_values(bc, ctx, avctx); \
  605. if (num_vals < 0) \
  606. return num_vals; \
  607. \
  608. for (i = 0; i < num_vals; i++) { \
  609. if (chan->qu_wordlen[i]) { \
  610. chan->qu_tab_idx[i] = OP; \
  611. } else if (ch_num && ref_chan->qu_wordlen[i]) \
  612. /* get clone master flag */ \
  613. chan->qu_tab_idx[i] = bitstream_read_bit(bc); \
  614. }
  615. #define CODING_DIRECT bitstream_read(bc, num_bits)
  616. #define CODING_VLC bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1)
  617. #define CODING_VLC_DELTA \
  618. (!i) ? CODING_VLC \
  619. : (pred + bitstream_read_vlc(bc, delta_vlc->table, \
  620. delta_vlc->bits, 1)) & mask; \
  621. pred = chan->qu_tab_idx[i]
  622. #define CODING_VLC_DIFF \
  623. (ref_chan->qu_tab_idx[i] + \
  624. bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1)) & mask
  625. /**
  626. * Decode code table indexes for each quant unit of a channel.
  627. *
  628. * @param[in] bc the Bitstream context
  629. * @param[in,out] ctx ptr to the channel unit context
  630. * @param[in] ch_num channel to process
  631. * @param[in] avctx ptr to the AVCodecContext
  632. * @return result code: 0 = OK, otherwise - error code
  633. */
  634. static int decode_channel_code_tab(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  635. int ch_num, AVCodecContext *avctx)
  636. {
  637. int i, num_vals, num_bits, pred;
  638. int mask = ctx->use_full_table ? 7 : 3; /* mask for modular arithmetic */
  639. VLC *vlc_tab, *delta_vlc;
  640. Atrac3pChanParams *chan = &ctx->channels[ch_num];
  641. Atrac3pChanParams *ref_chan = &ctx->channels[0];
  642. chan->table_type = bitstream_read_bit(bc);
  643. switch (bitstream_read(bc, 2)) { /* switch according to coding mode */
  644. case 0: /* directly coded */
  645. num_bits = ctx->use_full_table + 2;
  646. DEC_CT_IDX_COMMON(CODING_DIRECT);
  647. break;
  648. case 1: /* entropy-coded */
  649. vlc_tab = ctx->use_full_table ? &ct_vlc_tabs[1]
  650. : ct_vlc_tabs;
  651. DEC_CT_IDX_COMMON(CODING_VLC);
  652. break;
  653. case 2: /* entropy-coded delta */
  654. if (ctx->use_full_table) {
  655. vlc_tab = &ct_vlc_tabs[1];
  656. delta_vlc = &ct_vlc_tabs[2];
  657. } else {
  658. vlc_tab = ct_vlc_tabs;
  659. delta_vlc = ct_vlc_tabs;
  660. }
  661. pred = 0;
  662. DEC_CT_IDX_COMMON(CODING_VLC_DELTA);
  663. break;
  664. case 3: /* entropy-coded difference to master */
  665. if (ch_num) {
  666. vlc_tab = ctx->use_full_table ? &ct_vlc_tabs[3]
  667. : ct_vlc_tabs;
  668. DEC_CT_IDX_COMMON(CODING_VLC_DIFF);
  669. }
  670. break;
  671. }
  672. return 0;
  673. }
  674. /**
  675. * Decode code table indexes for each channel.
  676. *
  677. * @param[in] bc the Bitstream context
  678. * @param[in,out] ctx ptr to the channel unit context
  679. * @param[in] num_channels number of channels to process
  680. * @param[in] avctx ptr to the AVCodecContext
  681. * @return result code: 0 = OK, otherwise - error code
  682. */
  683. static int decode_code_table_indexes(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  684. int num_channels, AVCodecContext *avctx)
  685. {
  686. int ch_num, ret;
  687. if (!ctx->used_quant_units)
  688. return 0;
  689. ctx->use_full_table = bitstream_read_bit(bc);
  690. for (ch_num = 0; ch_num < num_channels; ch_num++) {
  691. memset(ctx->channels[ch_num].qu_tab_idx, 0,
  692. sizeof(ctx->channels[ch_num].qu_tab_idx));
  693. if ((ret = decode_channel_code_tab(bc, ctx, ch_num, avctx)) < 0)
  694. return ret;
  695. }
  696. return 0;
  697. }
  698. /**
  699. * Decode huffman-coded spectral lines for a given quant unit.
  700. *
  701. * This is a generalized version for all known coding modes.
  702. * Its speed can be improved by creating separate functions for each mode.
  703. *
  704. * @param[in] bc the Bitstream context
  705. * @param[in] tab code table telling how to decode spectral lines
  706. * @param[in] vlc_tab ptr to the huffman table associated with the code table
  707. * @param[out] out pointer to buffer where decoded data should be stored
  708. * @param[in] num_specs number of spectral lines to decode
  709. */
  710. static void decode_qu_spectra(BitstreamContext *bc, const Atrac3pSpecCodeTab *tab,
  711. VLC *vlc_tab, int16_t *out, const int num_specs)
  712. {
  713. int i, j, pos, cf;
  714. int group_size = tab->group_size;
  715. int num_coeffs = tab->num_coeffs;
  716. int bits = tab->bits;
  717. int is_signed = tab->is_signed;
  718. unsigned val, mask = (1 << bits) - 1;
  719. for (pos = 0; pos < num_specs;) {
  720. if (group_size == 1 || bitstream_read_bit(bc)) {
  721. for (j = 0; j < group_size; j++) {
  722. val = bitstream_read_vlc(bc, vlc_tab->table, vlc_tab->bits, 1);
  723. for (i = 0; i < num_coeffs; i++) {
  724. cf = val & mask;
  725. if (is_signed)
  726. cf = sign_extend(cf, bits);
  727. else if (cf && bitstream_read_bit(bc))
  728. cf = -cf;
  729. out[pos++] = cf;
  730. val >>= bits;
  731. }
  732. }
  733. } else /* group skipped */
  734. pos += group_size * num_coeffs;
  735. }
  736. }
  737. /**
  738. * Decode huffman-coded IMDCT spectrum for all channels.
  739. *
  740. * @param[in] bc the Bitstream context
  741. * @param[in,out] ctx ptr to the channel unit context
  742. * @param[in] num_channels number of channels to process
  743. * @param[in] avctx ptr to the AVCodecContext
  744. */
  745. static void decode_spectrum(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  746. int num_channels, AVCodecContext *avctx)
  747. {
  748. int i, ch_num, qu, wordlen, codetab, tab_index, num_specs;
  749. const Atrac3pSpecCodeTab *tab;
  750. Atrac3pChanParams *chan;
  751. for (ch_num = 0; ch_num < num_channels; ch_num++) {
  752. chan = &ctx->channels[ch_num];
  753. memset(chan->spectrum, 0, sizeof(chan->spectrum));
  754. /* set power compensation level to disabled */
  755. memset(chan->power_levs, ATRAC3P_POWER_COMP_OFF, sizeof(chan->power_levs));
  756. for (qu = 0; qu < ctx->used_quant_units; qu++) {
  757. num_specs = ff_atrac3p_qu_to_spec_pos[qu + 1] -
  758. ff_atrac3p_qu_to_spec_pos[qu];
  759. wordlen = chan->qu_wordlen[qu];
  760. codetab = chan->qu_tab_idx[qu];
  761. if (wordlen) {
  762. if (!ctx->use_full_table)
  763. codetab = atrac3p_ct_restricted_to_full[chan->table_type][wordlen - 1][codetab];
  764. tab_index = (chan->table_type * 8 + codetab) * 7 + wordlen - 1;
  765. tab = &atrac3p_spectra_tabs[tab_index];
  766. /* this allows reusing VLC tables */
  767. if (tab->redirect >= 0)
  768. tab_index = tab->redirect;
  769. decode_qu_spectra(bc, tab, &spec_vlc_tabs[tab_index],
  770. &chan->spectrum[ff_atrac3p_qu_to_spec_pos[qu]],
  771. num_specs);
  772. } else if (ch_num && ctx->channels[0].qu_wordlen[qu] && !codetab) {
  773. /* copy coefficients from master */
  774. memcpy(&chan->spectrum[ff_atrac3p_qu_to_spec_pos[qu]],
  775. &ctx->channels[0].spectrum[ff_atrac3p_qu_to_spec_pos[qu]],
  776. num_specs *
  777. sizeof(chan->spectrum[ff_atrac3p_qu_to_spec_pos[qu]]));
  778. chan->qu_wordlen[qu] = ctx->channels[0].qu_wordlen[qu];
  779. }
  780. }
  781. /* Power compensation levels only present in the bitstream
  782. * if there are more than 2 quant units. The lowest two units
  783. * correspond to the frequencies 0...351 Hz, whose shouldn't
  784. * be affected by the power compensation. */
  785. if (ctx->used_quant_units > 2) {
  786. num_specs = atrac3p_subband_to_num_powgrps[ctx->num_coded_subbands - 1];
  787. for (i = 0; i < num_specs; i++)
  788. chan->power_levs[i] = bitstream_read(bc, 4);
  789. }
  790. }
  791. }
  792. /**
  793. * Retrieve specified amount of flag bits from the input bitstream.
  794. * The data can be shortened in the case of the following two common conditions:
  795. * if all bits are zero then only one signal bit = 0 will be stored,
  796. * if all bits are ones then two signal bits = 1,0 will be stored.
  797. * Otherwise, all necessary bits will be directly stored
  798. * prefixed by two signal bits = 1,1.
  799. *
  800. * @param[in] bc ptr to the BitstreamContext
  801. * @param[out] out where to place decoded flags
  802. * @param[in] num_flags number of flags to process
  803. * @return: 0 = all flag bits are zero, 1 = there is at least one non-zero flag bit
  804. */
  805. static int get_subband_flags(BitstreamContext *bc, uint8_t *out, int num_flags)
  806. {
  807. int i, result;
  808. memset(out, 0, num_flags);
  809. result = bitstream_read_bit(bc);
  810. if (result) {
  811. if (bitstream_read_bit(bc))
  812. for (i = 0; i < num_flags; i++)
  813. out[i] = bitstream_read_bit(bc);
  814. else
  815. memset(out, 1, num_flags);
  816. }
  817. return result;
  818. }
  819. /**
  820. * Decode mdct window shape flags for all channels.
  821. *
  822. * @param[in] bc the Bitstream context
  823. * @param[in,out] ctx ptr to the channel unit context
  824. * @param[in] num_channels number of channels to process
  825. */
  826. static void decode_window_shape(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  827. int num_channels)
  828. {
  829. int ch_num;
  830. for (ch_num = 0; ch_num < num_channels; ch_num++)
  831. get_subband_flags(bc, ctx->channels[ch_num].wnd_shape,
  832. ctx->num_subbands);
  833. }
  834. /**
  835. * Decode number of gain control points.
  836. *
  837. * @param[in] bc the Bitstream context
  838. * @param[in,out] ctx ptr to the channel unit context
  839. * @param[in] ch_num channel to process
  840. * @param[in] coded_subbands number of subbands to process
  841. * @return result code: 0 = OK, otherwise - error code
  842. */
  843. static int decode_gainc_npoints(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  844. int ch_num, int coded_subbands)
  845. {
  846. int i, delta, delta_bits, min_val;
  847. Atrac3pChanParams *chan = &ctx->channels[ch_num];
  848. Atrac3pChanParams *ref_chan = &ctx->channels[0];
  849. switch (bitstream_read(bc, 2)) { /* switch according to coding mode */
  850. case 0: /* fixed-length coding */
  851. for (i = 0; i < coded_subbands; i++)
  852. chan->gain_data[i].num_points = bitstream_read(bc, 3);
  853. break;
  854. case 1: /* variable-length coding */
  855. for (i = 0; i < coded_subbands; i++)
  856. chan->gain_data[i].num_points =
  857. bitstream_read_vlc(bc, gain_vlc_tabs[0].table,
  858. gain_vlc_tabs[0].bits, 1);
  859. break;
  860. case 2:
  861. if (ch_num) { /* VLC modulo delta to master channel */
  862. for (i = 0; i < coded_subbands; i++) {
  863. delta = bitstream_read_vlc(bc, gain_vlc_tabs[1].table,
  864. gain_vlc_tabs[1].bits, 1);
  865. chan->gain_data[i].num_points =
  866. (ref_chan->gain_data[i].num_points + delta) & 7;
  867. }
  868. } else { /* VLC modulo delta to previous */
  869. chan->gain_data[0].num_points =
  870. bitstream_read_vlc(bc, gain_vlc_tabs[0].table,
  871. gain_vlc_tabs[0].bits, 1);
  872. for (i = 1; i < coded_subbands; i++) {
  873. delta = bitstream_read_vlc(bc, gain_vlc_tabs[1].table,
  874. gain_vlc_tabs[1].bits, 1);
  875. chan->gain_data[i].num_points =
  876. (chan->gain_data[i - 1].num_points + delta) & 7;
  877. }
  878. }
  879. break;
  880. case 3:
  881. if (ch_num) { /* copy data from master channel */
  882. for (i = 0; i < coded_subbands; i++)
  883. chan->gain_data[i].num_points =
  884. ref_chan->gain_data[i].num_points;
  885. } else { /* shorter delta to min */
  886. delta_bits = bitstream_read(bc, 2);
  887. min_val = bitstream_read(bc, 3);
  888. for (i = 0; i < coded_subbands; i++) {
  889. chan->gain_data[i].num_points = min_val + bitstream_read(bc, delta_bits);
  890. if (chan->gain_data[i].num_points > 7)
  891. return AVERROR_INVALIDDATA;
  892. }
  893. }
  894. }
  895. return 0;
  896. }
  897. /**
  898. * Implements coding mode 3 (slave) for gain compensation levels.
  899. *
  900. * @param[out] dst ptr to the output array
  901. * @param[in] ref ptr to the reference channel
  902. */
  903. static inline void gainc_level_mode3s(AtracGainInfo *dst, AtracGainInfo *ref)
  904. {
  905. int i;
  906. for (i = 0; i < dst->num_points; i++)
  907. dst->lev_code[i] = (i >= ref->num_points) ? 7 : ref->lev_code[i];
  908. }
  909. /**
  910. * Implements coding mode 1 (master) for gain compensation levels.
  911. *
  912. * @param[in] bc the Bitstream context
  913. * @param[in] ctx ptr to the channel unit context
  914. * @param[out] dst ptr to the output array
  915. */
  916. static inline void gainc_level_mode1m(BitstreamContext *bc,
  917. Atrac3pChanUnitCtx *ctx,
  918. AtracGainInfo *dst)
  919. {
  920. int i, delta;
  921. if (dst->num_points > 0)
  922. dst->lev_code[0] = bitstream_read_vlc(bc, gain_vlc_tabs[2].table,
  923. gain_vlc_tabs[2].bits, 1);
  924. for (i = 1; i < dst->num_points; i++) {
  925. delta = bitstream_read_vlc(bc, gain_vlc_tabs[3].table,
  926. gain_vlc_tabs[3].bits, 1);
  927. dst->lev_code[i] = (dst->lev_code[i - 1] + delta) & 0xF;
  928. }
  929. }
  930. /**
  931. * Decode level code for each gain control point.
  932. *
  933. * @param[in] bc the Bitstream context
  934. * @param[in,out] ctx ptr to the channel unit context
  935. * @param[in] ch_num channel to process
  936. * @param[in] coded_subbands number of subbands to process
  937. * @return result code: 0 = OK, otherwise - error code
  938. */
  939. static int decode_gainc_levels(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  940. int ch_num, int coded_subbands)
  941. {
  942. int sb, i, delta, delta_bits, min_val, pred;
  943. Atrac3pChanParams *chan = &ctx->channels[ch_num];
  944. Atrac3pChanParams *ref_chan = &ctx->channels[0];
  945. switch (bitstream_read(bc, 2)) { /* switch according to coding mode */
  946. case 0: /* fixed-length coding */
  947. for (sb = 0; sb < coded_subbands; sb++)
  948. for (i = 0; i < chan->gain_data[sb].num_points; i++)
  949. chan->gain_data[sb].lev_code[i] = bitstream_read(bc, 4);
  950. break;
  951. case 1:
  952. if (ch_num) { /* VLC modulo delta to master channel */
  953. for (sb = 0; sb < coded_subbands; sb++)
  954. for (i = 0; i < chan->gain_data[sb].num_points; i++) {
  955. delta = bitstream_read_vlc(bc, gain_vlc_tabs[5].table,
  956. gain_vlc_tabs[5].bits, 1);
  957. pred = (i >= ref_chan->gain_data[sb].num_points)
  958. ? 7 : ref_chan->gain_data[sb].lev_code[i];
  959. chan->gain_data[sb].lev_code[i] = (pred + delta) & 0xF;
  960. }
  961. } else { /* VLC modulo delta to previous */
  962. for (sb = 0; sb < coded_subbands; sb++)
  963. gainc_level_mode1m(bc, ctx, &chan->gain_data[sb]);
  964. }
  965. break;
  966. case 2:
  967. if (ch_num) { /* VLC modulo delta to previous or clone master */
  968. for (sb = 0; sb < coded_subbands; sb++)
  969. if (chan->gain_data[sb].num_points > 0) {
  970. if (bitstream_read_bit(bc))
  971. gainc_level_mode1m(bc, ctx, &chan->gain_data[sb]);
  972. else
  973. gainc_level_mode3s(&chan->gain_data[sb],
  974. &ref_chan->gain_data[sb]);
  975. }
  976. } else { /* VLC modulo delta to lev_codes of previous subband */
  977. if (chan->gain_data[0].num_points > 0)
  978. gainc_level_mode1m(bc, ctx, &chan->gain_data[0]);
  979. for (sb = 1; sb < coded_subbands; sb++)
  980. for (i = 0; i < chan->gain_data[sb].num_points; i++) {
  981. delta = bitstream_read_vlc(bc, gain_vlc_tabs[4].table,
  982. gain_vlc_tabs[4].bits, 1);
  983. pred = (i >= chan->gain_data[sb - 1].num_points)
  984. ? 7 : chan->gain_data[sb - 1].lev_code[i];
  985. chan->gain_data[sb].lev_code[i] = (pred + delta) & 0xF;
  986. }
  987. }
  988. break;
  989. case 3:
  990. if (ch_num) { /* clone master */
  991. for (sb = 0; sb < coded_subbands; sb++)
  992. gainc_level_mode3s(&chan->gain_data[sb],
  993. &ref_chan->gain_data[sb]);
  994. } else { /* shorter delta to min */
  995. delta_bits = bitstream_read(bc, 2);
  996. min_val = bitstream_read(bc, 4);
  997. for (sb = 0; sb < coded_subbands; sb++)
  998. for (i = 0; i < chan->gain_data[sb].num_points; i++) {
  999. chan->gain_data[sb].lev_code[i] = min_val + bitstream_read(bc, delta_bits);
  1000. if (chan->gain_data[sb].lev_code[i] > 15)
  1001. return AVERROR_INVALIDDATA;
  1002. }
  1003. }
  1004. break;
  1005. }
  1006. return 0;
  1007. }
  1008. /**
  1009. * Implements coding mode 0 for gain compensation locations.
  1010. *
  1011. * @param[in] bc the Bitstream context
  1012. * @param[in] ctx ptr to the channel unit context
  1013. * @param[out] dst ptr to the output array
  1014. * @param[in] pos position of the value to be processed
  1015. */
  1016. static inline void gainc_loc_mode0(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1017. AtracGainInfo *dst, int pos)
  1018. {
  1019. int delta_bits;
  1020. if (!pos || dst->loc_code[pos - 1] < 15)
  1021. dst->loc_code[pos] = bitstream_read(bc, 5);
  1022. else if (dst->loc_code[pos - 1] >= 30)
  1023. dst->loc_code[pos] = 31;
  1024. else {
  1025. delta_bits = av_log2(30 - dst->loc_code[pos - 1]) + 1;
  1026. dst->loc_code[pos] = dst->loc_code[pos - 1] +
  1027. bitstream_read(bc, delta_bits) + 1;
  1028. }
  1029. }
  1030. /**
  1031. * Implements coding mode 1 for gain compensation locations.
  1032. *
  1033. * @param[in] bc the Bitstream context
  1034. * @param[in] ctx ptr to the channel unit context
  1035. * @param[out] dst ptr to the output array
  1036. */
  1037. static inline void gainc_loc_mode1(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1038. AtracGainInfo *dst)
  1039. {
  1040. int i;
  1041. VLC *tab;
  1042. if (dst->num_points > 0) {
  1043. /* 1st coefficient is stored directly */
  1044. dst->loc_code[0] = bitstream_read(bc, 5);
  1045. for (i = 1; i < dst->num_points; i++) {
  1046. /* switch VLC according to the curve direction
  1047. * (ascending/descending) */
  1048. tab = (dst->lev_code[i] <= dst->lev_code[i - 1])
  1049. ? &gain_vlc_tabs[7]
  1050. : &gain_vlc_tabs[9];
  1051. dst->loc_code[i] = dst->loc_code[i - 1] +
  1052. bitstream_read_vlc(bc, tab->table, tab->bits, 1);
  1053. }
  1054. }
  1055. }
  1056. /**
  1057. * Decode location code for each gain control point.
  1058. *
  1059. * @param[in] bc the Bitstream context
  1060. * @param[in,out] ctx ptr to the channel unit context
  1061. * @param[in] ch_num channel to process
  1062. * @param[in] coded_subbands number of subbands to process
  1063. * @param[in] avctx ptr to the AVCodecContext
  1064. * @return result code: 0 = OK, otherwise - error code
  1065. */
  1066. static int decode_gainc_loc_codes(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1067. int ch_num, int coded_subbands,
  1068. AVCodecContext *avctx)
  1069. {
  1070. int sb, i, delta, delta_bits, min_val, pred, more_than_ref;
  1071. AtracGainInfo *dst, *ref;
  1072. VLC *tab;
  1073. Atrac3pChanParams *chan = &ctx->channels[ch_num];
  1074. Atrac3pChanParams *ref_chan = &ctx->channels[0];
  1075. switch (bitstream_read(bc, 2)) { /* switch according to coding mode */
  1076. case 0: /* sequence of numbers in ascending order */
  1077. for (sb = 0; sb < coded_subbands; sb++)
  1078. for (i = 0; i < chan->gain_data[sb].num_points; i++)
  1079. gainc_loc_mode0(bc, ctx, &chan->gain_data[sb], i);
  1080. break;
  1081. case 1:
  1082. if (ch_num) {
  1083. for (sb = 0; sb < coded_subbands; sb++) {
  1084. if (chan->gain_data[sb].num_points <= 0)
  1085. continue;
  1086. dst = &chan->gain_data[sb];
  1087. ref = &ref_chan->gain_data[sb];
  1088. /* 1st value is vlc-coded modulo delta to master */
  1089. delta = bitstream_read_vlc(bc, gain_vlc_tabs[10].table,
  1090. gain_vlc_tabs[10].bits, 1);
  1091. pred = ref->num_points > 0 ? ref->loc_code[0] : 0;
  1092. dst->loc_code[0] = (pred + delta) & 0x1F;
  1093. for (i = 1; i < dst->num_points; i++) {
  1094. more_than_ref = i >= ref->num_points;
  1095. if (dst->lev_code[i] > dst->lev_code[i - 1]) {
  1096. /* ascending curve */
  1097. if (more_than_ref) {
  1098. delta =
  1099. bitstream_read_vlc(bc, gain_vlc_tabs[9].table,
  1100. gain_vlc_tabs[9].bits, 1);
  1101. dst->loc_code[i] = dst->loc_code[i - 1] + delta;
  1102. } else {
  1103. if (bitstream_read_bit(bc))
  1104. gainc_loc_mode0(bc, ctx, dst, i); // direct coding
  1105. else
  1106. dst->loc_code[i] = ref->loc_code[i]; // clone master
  1107. }
  1108. } else { /* descending curve */
  1109. tab = more_than_ref ? &gain_vlc_tabs[7]
  1110. : &gain_vlc_tabs[10];
  1111. delta = bitstream_read_vlc(bc, tab->table, tab->bits, 1);
  1112. if (more_than_ref)
  1113. dst->loc_code[i] = dst->loc_code[i - 1] + delta;
  1114. else
  1115. dst->loc_code[i] = (ref->loc_code[i] + delta) & 0x1F;
  1116. }
  1117. }
  1118. }
  1119. } else /* VLC delta to previous */
  1120. for (sb = 0; sb < coded_subbands; sb++)
  1121. gainc_loc_mode1(bc, ctx, &chan->gain_data[sb]);
  1122. break;
  1123. case 2:
  1124. if (ch_num) {
  1125. for (sb = 0; sb < coded_subbands; sb++) {
  1126. if (chan->gain_data[sb].num_points <= 0)
  1127. continue;
  1128. dst = &chan->gain_data[sb];
  1129. ref = &ref_chan->gain_data[sb];
  1130. if (dst->num_points > ref->num_points || bitstream_read_bit(bc))
  1131. gainc_loc_mode1(bc, ctx, dst);
  1132. else /* clone master for the whole subband */
  1133. for (i = 0; i < chan->gain_data[sb].num_points; i++)
  1134. dst->loc_code[i] = ref->loc_code[i];
  1135. }
  1136. } else {
  1137. /* data for the first subband is coded directly */
  1138. for (i = 0; i < chan->gain_data[0].num_points; i++)
  1139. gainc_loc_mode0(bc, ctx, &chan->gain_data[0], i);
  1140. for (sb = 1; sb < coded_subbands; sb++) {
  1141. if (chan->gain_data[sb].num_points <= 0)
  1142. continue;
  1143. dst = &chan->gain_data[sb];
  1144. /* 1st value is vlc-coded modulo delta to the corresponding
  1145. * value of the previous subband if any or zero */
  1146. delta = bitstream_read_vlc(bc, gain_vlc_tabs[6].table,
  1147. gain_vlc_tabs[6].bits, 1);
  1148. pred = dst[-1].num_points > 0
  1149. ? dst[-1].loc_code[0] : 0;
  1150. dst->loc_code[0] = (pred + delta) & 0x1F;
  1151. for (i = 1; i < dst->num_points; i++) {
  1152. more_than_ref = i >= dst[-1].num_points;
  1153. /* Select VLC table according to curve direction and
  1154. * presence of prediction. */
  1155. tab = &gain_vlc_tabs[(dst->lev_code[i] > dst->lev_code[i - 1]) *
  1156. 2 + more_than_ref + 6];
  1157. delta = bitstream_read_vlc(bc, tab->table, tab->bits, 1);
  1158. if (more_than_ref)
  1159. dst->loc_code[i] = dst->loc_code[i - 1] + delta;
  1160. else
  1161. dst->loc_code[i] = (dst[-1].loc_code[i] + delta) & 0x1F;
  1162. }
  1163. }
  1164. }
  1165. break;
  1166. case 3:
  1167. if (ch_num) { /* clone master or direct or direct coding */
  1168. for (sb = 0; sb < coded_subbands; sb++)
  1169. for (i = 0; i < chan->gain_data[sb].num_points; i++) {
  1170. if (i >= ref_chan->gain_data[sb].num_points)
  1171. gainc_loc_mode0(bc, ctx, &chan->gain_data[sb], i);
  1172. else
  1173. chan->gain_data[sb].loc_code[i] =
  1174. ref_chan->gain_data[sb].loc_code[i];
  1175. }
  1176. } else { /* shorter delta to min */
  1177. delta_bits = bitstream_read(bc, 2) + 1;
  1178. min_val = bitstream_read(bc, 5);
  1179. for (sb = 0; sb < coded_subbands; sb++)
  1180. for (i = 0; i < chan->gain_data[sb].num_points; i++)
  1181. chan->gain_data[sb].loc_code[i] = min_val + i +
  1182. bitstream_read(bc, delta_bits);
  1183. }
  1184. break;
  1185. }
  1186. /* Validate decoded information */
  1187. for (sb = 0; sb < coded_subbands; sb++) {
  1188. dst = &chan->gain_data[sb];
  1189. for (i = 0; i < chan->gain_data[sb].num_points; i++) {
  1190. if (dst->loc_code[i] < 0 || dst->loc_code[i] > 31 ||
  1191. (i && dst->loc_code[i] <= dst->loc_code[i - 1])) {
  1192. av_log(avctx, AV_LOG_ERROR,
  1193. "Invalid gain location: ch=%d, sb=%d, pos=%d, val=%d\n",
  1194. ch_num, sb, i, dst->loc_code[i]);
  1195. return AVERROR_INVALIDDATA;
  1196. }
  1197. }
  1198. }
  1199. return 0;
  1200. }
  1201. /**
  1202. * Decode gain control data for all channels.
  1203. *
  1204. * @param[in] bc the Bitstream context
  1205. * @param[in,out] ctx ptr to the channel unit context
  1206. * @param[in] num_channels number of channels to process
  1207. * @param[in] avctx ptr to the AVCodecContext
  1208. * @return result code: 0 = OK, otherwise - error code
  1209. */
  1210. static int decode_gainc_data(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1211. int num_channels, AVCodecContext *avctx)
  1212. {
  1213. int ch_num, coded_subbands, sb, ret;
  1214. for (ch_num = 0; ch_num < num_channels; ch_num++) {
  1215. memset(ctx->channels[ch_num].gain_data, 0,
  1216. sizeof(*ctx->channels[ch_num].gain_data) * ATRAC3P_SUBBANDS);
  1217. if (bitstream_read_bit(bc)) { /* gain control data present? */
  1218. coded_subbands = bitstream_read(bc, 4) + 1;
  1219. if (bitstream_read_bit(bc)) /* is high band gain data replication on? */
  1220. ctx->channels[ch_num].num_gain_subbands = bitstream_read(bc, 4) + 1;
  1221. else
  1222. ctx->channels[ch_num].num_gain_subbands = coded_subbands;
  1223. if ((ret = decode_gainc_npoints(bc, ctx, ch_num, coded_subbands)) < 0 ||
  1224. (ret = decode_gainc_levels(bc, ctx, ch_num, coded_subbands)) < 0 ||
  1225. (ret = decode_gainc_loc_codes(bc, ctx, ch_num, coded_subbands, avctx)) < 0)
  1226. return ret;
  1227. if (coded_subbands > 0) { /* propagate gain data if requested */
  1228. for (sb = coded_subbands; sb < ctx->channels[ch_num].num_gain_subbands; sb++)
  1229. ctx->channels[ch_num].gain_data[sb] =
  1230. ctx->channels[ch_num].gain_data[sb - 1];
  1231. }
  1232. } else {
  1233. ctx->channels[ch_num].num_gain_subbands = 0;
  1234. }
  1235. }
  1236. return 0;
  1237. }
  1238. /**
  1239. * Decode envelope for all tones of a channel.
  1240. *
  1241. * @param[in] bc the Bitstream context
  1242. * @param[in,out] ctx ptr to the channel unit context
  1243. * @param[in] ch_num channel to process
  1244. * @param[in] band_has_tones ptr to an array of per-band-flags:
  1245. * 1 - tone data present
  1246. */
  1247. static void decode_tones_envelope(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1248. int ch_num, int band_has_tones[])
  1249. {
  1250. int sb;
  1251. Atrac3pWavesData *dst = ctx->channels[ch_num].tones_info;
  1252. Atrac3pWavesData *ref = ctx->channels[0].tones_info;
  1253. if (!ch_num || !bitstream_read_bit(bc)) { /* mode 0: fixed-length coding */
  1254. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1255. if (!band_has_tones[sb])
  1256. continue;
  1257. dst[sb].pend_env.has_start_point = bitstream_read_bit(bc);
  1258. dst[sb].pend_env.start_pos = dst[sb].pend_env.has_start_point
  1259. ? bitstream_read(bc, 5) : -1;
  1260. dst[sb].pend_env.has_stop_point = bitstream_read_bit(bc);
  1261. dst[sb].pend_env.stop_pos = dst[sb].pend_env.has_stop_point
  1262. ? bitstream_read(bc, 5) : 32;
  1263. }
  1264. } else { /* mode 1(slave only): copy master */
  1265. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1266. if (!band_has_tones[sb])
  1267. continue;
  1268. dst[sb].pend_env.has_start_point = ref[sb].pend_env.has_start_point;
  1269. dst[sb].pend_env.has_stop_point = ref[sb].pend_env.has_stop_point;
  1270. dst[sb].pend_env.start_pos = ref[sb].pend_env.start_pos;
  1271. dst[sb].pend_env.stop_pos = ref[sb].pend_env.stop_pos;
  1272. }
  1273. }
  1274. }
  1275. /**
  1276. * Decode number of tones for each subband of a channel.
  1277. *
  1278. * @param[in] bc the Bitstream context
  1279. * @param[in,out] ctx ptr to the channel unit context
  1280. * @param[in] ch_num channel to process
  1281. * @param[in] band_has_tones ptr to an array of per-band-flags:
  1282. * 1 - tone data present
  1283. * @param[in] avctx ptr to the AVCodecContext
  1284. * @return result code: 0 = OK, otherwise - error code
  1285. */
  1286. static int decode_band_numwavs(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1287. int ch_num, int band_has_tones[],
  1288. AVCodecContext *avctx)
  1289. {
  1290. int mode, sb, delta;
  1291. Atrac3pWavesData *dst = ctx->channels[ch_num].tones_info;
  1292. Atrac3pWavesData *ref = ctx->channels[0].tones_info;
  1293. mode = bitstream_read(bc, ch_num + 1);
  1294. switch (mode) {
  1295. case 0: /** fixed-length coding */
  1296. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++)
  1297. if (band_has_tones[sb])
  1298. dst[sb].num_wavs = bitstream_read(bc, 4);
  1299. break;
  1300. case 1: /** variable-length coding */
  1301. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++)
  1302. if (band_has_tones[sb])
  1303. dst[sb].num_wavs =
  1304. bitstream_read_vlc(bc, tone_vlc_tabs[1].table,
  1305. tone_vlc_tabs[1].bits, 1);
  1306. break;
  1307. case 2: /** VLC modulo delta to master (slave only) */
  1308. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++)
  1309. if (band_has_tones[sb]) {
  1310. delta = bitstream_read_vlc(bc, tone_vlc_tabs[2].table,
  1311. tone_vlc_tabs[2].bits, 1);
  1312. delta = sign_extend(delta, 3);
  1313. dst[sb].num_wavs = (ref[sb].num_wavs + delta) & 0xF;
  1314. }
  1315. break;
  1316. case 3: /** copy master (slave only) */
  1317. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++)
  1318. if (band_has_tones[sb])
  1319. dst[sb].num_wavs = ref[sb].num_wavs;
  1320. break;
  1321. }
  1322. /** initialize start tone index for each subband */
  1323. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++)
  1324. if (band_has_tones[sb]) {
  1325. if (ctx->waves_info->tones_index + dst[sb].num_wavs > 48) {
  1326. av_log(avctx, AV_LOG_ERROR,
  1327. "Too many tones: %d (max. 48), frame: %d!\n",
  1328. ctx->waves_info->tones_index + dst[sb].num_wavs,
  1329. avctx->frame_number);
  1330. return AVERROR_INVALIDDATA;
  1331. }
  1332. dst[sb].start_index = ctx->waves_info->tones_index;
  1333. ctx->waves_info->tones_index += dst[sb].num_wavs;
  1334. }
  1335. return 0;
  1336. }
  1337. /**
  1338. * Decode frequency information for each subband of a channel.
  1339. *
  1340. * @param[in] bc the Bitstream context
  1341. * @param[in,out] ctx ptr to the channel unit context
  1342. * @param[in] ch_num channel to process
  1343. * @param[in] band_has_tones ptr to an array of per-band-flags:
  1344. * 1 - tone data present
  1345. */
  1346. static void decode_tones_frequency(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1347. int ch_num, int band_has_tones[])
  1348. {
  1349. int sb, i, direction, nbits, pred, delta;
  1350. Atrac3pWaveParam *iwav, *owav;
  1351. Atrac3pWavesData *dst = ctx->channels[ch_num].tones_info;
  1352. Atrac3pWavesData *ref = ctx->channels[0].tones_info;
  1353. if (!ch_num || !bitstream_read_bit(bc)) { /* mode 0: fixed-length coding */
  1354. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1355. if (!band_has_tones[sb] || !dst[sb].num_wavs)
  1356. continue;
  1357. iwav = &ctx->waves_info->waves[dst[sb].start_index];
  1358. direction = (dst[sb].num_wavs > 1) ? bitstream_read_bit(bc) : 0;
  1359. if (direction) { /** packed numbers in descending order */
  1360. if (dst[sb].num_wavs)
  1361. iwav[dst[sb].num_wavs - 1].freq_index = bitstream_read(bc, 10);
  1362. for (i = dst[sb].num_wavs - 2; i >= 0 ; i--) {
  1363. nbits = av_log2(iwav[i+1].freq_index) + 1;
  1364. iwav[i].freq_index = bitstream_read(bc, nbits);
  1365. }
  1366. } else { /** packed numbers in ascending order */
  1367. for (i = 0; i < dst[sb].num_wavs; i++) {
  1368. if (!i || iwav[i - 1].freq_index < 512)
  1369. iwav[i].freq_index = bitstream_read(bc, 10);
  1370. else {
  1371. nbits = av_log2(1023 - iwav[i - 1].freq_index) + 1;
  1372. iwav[i].freq_index = bitstream_read(bc, nbits) +
  1373. 1024 - (1 << nbits);
  1374. }
  1375. }
  1376. }
  1377. }
  1378. } else { /* mode 1: VLC modulo delta to master (slave only) */
  1379. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1380. if (!band_has_tones[sb] || !dst[sb].num_wavs)
  1381. continue;
  1382. iwav = &ctx->waves_info->waves[ref[sb].start_index];
  1383. owav = &ctx->waves_info->waves[dst[sb].start_index];
  1384. for (i = 0; i < dst[sb].num_wavs; i++) {
  1385. delta = bitstream_read_vlc(bc, tone_vlc_tabs[6].table,
  1386. tone_vlc_tabs[6].bits, 1);
  1387. delta = sign_extend(delta, 8);
  1388. pred = (i < ref[sb].num_wavs) ? iwav[i].freq_index :
  1389. (ref[sb].num_wavs ? iwav[ref[sb].num_wavs - 1].freq_index : 0);
  1390. owav[i].freq_index = (pred + delta) & 0x3FF;
  1391. }
  1392. }
  1393. }
  1394. }
  1395. /**
  1396. * Decode amplitude information for each subband of a channel.
  1397. *
  1398. * @param[in] bc the Bitstream context
  1399. * @param[in,out] ctx ptr to the channel unit context
  1400. * @param[in] ch_num channel to process
  1401. * @param[in] band_has_tones ptr to an array of per-band-flags:
  1402. * 1 - tone data present
  1403. */
  1404. static void decode_tones_amplitude(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1405. int ch_num, int band_has_tones[])
  1406. {
  1407. int mode, sb, j, i, diff, maxdiff, fi, delta, pred;
  1408. Atrac3pWaveParam *wsrc, *wref;
  1409. int refwaves[48] = { 0 };
  1410. Atrac3pWavesData *dst = ctx->channels[ch_num].tones_info;
  1411. Atrac3pWavesData *ref = ctx->channels[0].tones_info;
  1412. if (ch_num) {
  1413. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1414. if (!band_has_tones[sb] || !dst[sb].num_wavs)
  1415. continue;
  1416. wsrc = &ctx->waves_info->waves[dst[sb].start_index];
  1417. wref = &ctx->waves_info->waves[ref[sb].start_index];
  1418. for (j = 0; j < dst[sb].num_wavs; j++) {
  1419. for (i = 0, fi = 0, maxdiff = 1024; i < ref[sb].num_wavs; i++) {
  1420. diff = FFABS(wsrc[j].freq_index - wref[i].freq_index);
  1421. if (diff < maxdiff) {
  1422. maxdiff = diff;
  1423. fi = i;
  1424. }
  1425. }
  1426. if (maxdiff < 8)
  1427. refwaves[dst[sb].start_index + j] = fi + ref[sb].start_index;
  1428. else if (j < ref[sb].num_wavs)
  1429. refwaves[dst[sb].start_index + j] = j + ref[sb].start_index;
  1430. else
  1431. refwaves[dst[sb].start_index + j] = -1;
  1432. }
  1433. }
  1434. }
  1435. mode = bitstream_read(bc, ch_num + 1);
  1436. switch (mode) {
  1437. case 0: /** fixed-length coding */
  1438. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1439. if (!band_has_tones[sb] || !dst[sb].num_wavs)
  1440. continue;
  1441. if (ctx->waves_info->amplitude_mode)
  1442. for (i = 0; i < dst[sb].num_wavs; i++)
  1443. ctx->waves_info->waves[dst[sb].start_index + i].amp_sf = bitstream_read(bc, 6);
  1444. else
  1445. ctx->waves_info->waves[dst[sb].start_index].amp_sf = bitstream_read(bc, 6);
  1446. }
  1447. break;
  1448. case 1: /** min + VLC delta */
  1449. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1450. if (!band_has_tones[sb] || !dst[sb].num_wavs)
  1451. continue;
  1452. if (ctx->waves_info->amplitude_mode)
  1453. for (i = 0; i < dst[sb].num_wavs; i++)
  1454. ctx->waves_info->waves[dst[sb].start_index + i].amp_sf =
  1455. bitstream_read_vlc(bc, tone_vlc_tabs[3].table,
  1456. tone_vlc_tabs[3].bits, 1) + 20;
  1457. else
  1458. ctx->waves_info->waves[dst[sb].start_index].amp_sf =
  1459. bitstream_read_vlc(bc, tone_vlc_tabs[4].table,
  1460. tone_vlc_tabs[4].bits, 1) + 24;
  1461. }
  1462. break;
  1463. case 2: /** VLC modulo delta to master (slave only) */
  1464. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1465. if (!band_has_tones[sb] || !dst[sb].num_wavs)
  1466. continue;
  1467. for (i = 0; i < dst[sb].num_wavs; i++) {
  1468. delta = bitstream_read_vlc(bc, tone_vlc_tabs[5].table,
  1469. tone_vlc_tabs[5].bits, 1);
  1470. delta = sign_extend(delta, 5);
  1471. pred = refwaves[dst[sb].start_index + i] >= 0 ?
  1472. ctx->waves_info->waves[refwaves[dst[sb].start_index + i]].amp_sf : 34;
  1473. ctx->waves_info->waves[dst[sb].start_index + i].amp_sf = (pred + delta) & 0x3F;
  1474. }
  1475. }
  1476. break;
  1477. case 3: /** clone master (slave only) */
  1478. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1479. if (!band_has_tones[sb])
  1480. continue;
  1481. for (i = 0; i < dst[sb].num_wavs; i++)
  1482. ctx->waves_info->waves[dst[sb].start_index + i].amp_sf =
  1483. refwaves[dst[sb].start_index + i] >= 0
  1484. ? ctx->waves_info->waves[refwaves[dst[sb].start_index + i]].amp_sf
  1485. : 32;
  1486. }
  1487. break;
  1488. }
  1489. }
  1490. /**
  1491. * Decode phase information for each subband of a channel.
  1492. *
  1493. * @param[in] bc the Bitstream context
  1494. * @param[in,out] ctx ptr to the channel unit context
  1495. * @param[in] ch_num channel to process
  1496. * @param[in] band_has_tones ptr to an array of per-band-flags:
  1497. * 1 - tone data present
  1498. */
  1499. static void decode_tones_phase(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1500. int ch_num, int band_has_tones[])
  1501. {
  1502. int sb, i;
  1503. Atrac3pWaveParam *wparam;
  1504. Atrac3pWavesData *dst = ctx->channels[ch_num].tones_info;
  1505. for (sb = 0; sb < ctx->waves_info->num_tone_bands; sb++) {
  1506. if (!band_has_tones[sb])
  1507. continue;
  1508. wparam = &ctx->waves_info->waves[dst[sb].start_index];
  1509. for (i = 0; i < dst[sb].num_wavs; i++)
  1510. wparam[i].phase_index = bitstream_read(bc, 5);
  1511. }
  1512. }
  1513. /**
  1514. * Decode tones info for all channels.
  1515. *
  1516. * @param[in] bc the Bitstream context
  1517. * @param[in,out] ctx ptr to the channel unit context
  1518. * @param[in] num_channels number of channels to process
  1519. * @param[in] avctx ptr to the AVCodecContext
  1520. * @return result code: 0 = OK, otherwise - error code
  1521. */
  1522. static int decode_tones_info(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1523. int num_channels, AVCodecContext *avctx)
  1524. {
  1525. int ch_num, i, ret;
  1526. int band_has_tones[16];
  1527. for (ch_num = 0; ch_num < num_channels; ch_num++)
  1528. memset(ctx->channels[ch_num].tones_info, 0,
  1529. sizeof(*ctx->channels[ch_num].tones_info) * ATRAC3P_SUBBANDS);
  1530. ctx->waves_info->tones_present = bitstream_read_bit(bc);
  1531. if (!ctx->waves_info->tones_present)
  1532. return 0;
  1533. memset(ctx->waves_info->waves, 0, sizeof(ctx->waves_info->waves));
  1534. ctx->waves_info->amplitude_mode = bitstream_read_bit(bc);
  1535. if (!ctx->waves_info->amplitude_mode) {
  1536. avpriv_report_missing_feature(avctx, "GHA amplitude mode 0");
  1537. return AVERROR_PATCHWELCOME;
  1538. }
  1539. ctx->waves_info->num_tone_bands =
  1540. bitstream_read_vlc(bc, tone_vlc_tabs[0].table,
  1541. tone_vlc_tabs[0].bits, 1) + 1;
  1542. if (num_channels == 2) {
  1543. get_subband_flags(bc, ctx->waves_info->tone_sharing, ctx->waves_info->num_tone_bands);
  1544. get_subband_flags(bc, ctx->waves_info->tone_master, ctx->waves_info->num_tone_bands);
  1545. if (get_subband_flags(bc, ctx->waves_info->phase_shift,
  1546. ctx->waves_info->num_tone_bands)) {
  1547. avpriv_report_missing_feature(avctx, "GHA Phase shifting");
  1548. return AVERROR_PATCHWELCOME;
  1549. }
  1550. }
  1551. ctx->waves_info->tones_index = 0;
  1552. for (ch_num = 0; ch_num < num_channels; ch_num++) {
  1553. for (i = 0; i < ctx->waves_info->num_tone_bands; i++)
  1554. band_has_tones[i] = !ch_num ? 1 : !ctx->waves_info->tone_sharing[i];
  1555. decode_tones_envelope(bc, ctx, ch_num, band_has_tones);
  1556. if ((ret = decode_band_numwavs(bc, ctx, ch_num, band_has_tones,
  1557. avctx)) < 0)
  1558. return ret;
  1559. decode_tones_frequency(bc, ctx, ch_num, band_has_tones);
  1560. decode_tones_amplitude(bc, ctx, ch_num, band_has_tones);
  1561. decode_tones_phase(bc, ctx, ch_num, band_has_tones);
  1562. }
  1563. if (num_channels == 2) {
  1564. for (i = 0; i < ctx->waves_info->num_tone_bands; i++) {
  1565. if (ctx->waves_info->tone_sharing[i])
  1566. ctx->channels[1].tones_info[i] = ctx->channels[0].tones_info[i];
  1567. if (ctx->waves_info->tone_master[i])
  1568. FFSWAP(Atrac3pWavesData, ctx->channels[0].tones_info[i],
  1569. ctx->channels[1].tones_info[i]);
  1570. }
  1571. }
  1572. return 0;
  1573. }
  1574. int ff_atrac3p_decode_channel_unit(BitstreamContext *bc, Atrac3pChanUnitCtx *ctx,
  1575. int num_channels, AVCodecContext *avctx)
  1576. {
  1577. int ret;
  1578. /* parse sound header */
  1579. ctx->num_quant_units = bitstream_read(bc, 5) + 1;
  1580. if (ctx->num_quant_units > 28 && ctx->num_quant_units < 32) {
  1581. av_log(avctx, AV_LOG_ERROR,
  1582. "Invalid number of quantization units: %d!\n",
  1583. ctx->num_quant_units);
  1584. return AVERROR_INVALIDDATA;
  1585. }
  1586. ctx->mute_flag = bitstream_read_bit(bc);
  1587. /* decode various sound parameters */
  1588. if ((ret = decode_quant_wordlen(bc, ctx, num_channels, avctx)) < 0)
  1589. return ret;
  1590. ctx->num_subbands = atrac3p_qu_to_subband[ctx->num_quant_units - 1] + 1;
  1591. ctx->num_coded_subbands = ctx->used_quant_units
  1592. ? atrac3p_qu_to_subband[ctx->used_quant_units - 1] + 1
  1593. : 0;
  1594. if ((ret = decode_scale_factors(bc, ctx, num_channels, avctx)) < 0)
  1595. return ret;
  1596. if ((ret = decode_code_table_indexes(bc, ctx, num_channels, avctx)) < 0)
  1597. return ret;
  1598. decode_spectrum(bc, ctx, num_channels, avctx);
  1599. if (num_channels == 2) {
  1600. get_subband_flags(bc, ctx->swap_channels, ctx->num_coded_subbands);
  1601. get_subband_flags(bc, ctx->negate_coeffs, ctx->num_coded_subbands);
  1602. }
  1603. decode_window_shape(bc, ctx, num_channels);
  1604. if ((ret = decode_gainc_data(bc, ctx, num_channels, avctx)) < 0)
  1605. return ret;
  1606. if ((ret = decode_tones_info(bc, ctx, num_channels, avctx)) < 0)
  1607. return ret;
  1608. /* decode global noise info */
  1609. ctx->noise_present = bitstream_read_bit(bc);
  1610. if (ctx->noise_present) {
  1611. ctx->noise_level_index = bitstream_read(bc, 4);
  1612. ctx->noise_table_index = bitstream_read(bc, 4);
  1613. }
  1614. return 0;
  1615. }