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.

971 lines
32KB

  1. /*
  2. * WMA compatible decoder
  3. * Copyright (c) 2002 The FFmpeg Project
  4. *
  5. * This file is part of FFmpeg.
  6. *
  7. * FFmpeg is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * FFmpeg is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with FFmpeg; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. /**
  22. * @file
  23. * WMA compatible decoder.
  24. * This decoder handles Microsoft Windows Media Audio data, versions 1 & 2.
  25. * WMA v1 is identified by audio format 0x160 in Microsoft media files
  26. * (ASF/AVI/WAV). WMA v2 is identified by audio format 0x161.
  27. *
  28. * To use this decoder, a calling application must supply the extra data
  29. * bytes provided with the WMA data. These are the extra, codec-specific
  30. * bytes at the end of a WAVEFORMATEX data structure. Transmit these bytes
  31. * to the decoder using the extradata[_size] fields in AVCodecContext. There
  32. * should be 4 extra bytes for v1 data and 6 extra bytes for v2 data.
  33. */
  34. #include "avcodec.h"
  35. #include "internal.h"
  36. #include "wma.h"
  37. #undef NDEBUG
  38. #include <assert.h>
  39. #define EXPVLCBITS 8
  40. #define EXPMAX ((19+EXPVLCBITS-1)/EXPVLCBITS)
  41. #define HGAINVLCBITS 9
  42. #define HGAINMAX ((13+HGAINVLCBITS-1)/HGAINVLCBITS)
  43. static void wma_lsp_to_curve_init(WMACodecContext *s, int frame_len);
  44. #ifdef TRACE
  45. static void dump_floats(WMACodecContext *s, const char *name, int prec, const float *tab, int n)
  46. {
  47. int i;
  48. tprintf(s->avctx, "%s[%d]:\n", name, n);
  49. for(i=0;i<n;i++) {
  50. if ((i & 7) == 0)
  51. tprintf(s->avctx, "%4d: ", i);
  52. tprintf(s->avctx, " %8.*f", prec, tab[i]);
  53. if ((i & 7) == 7)
  54. tprintf(s->avctx, "\n");
  55. }
  56. if ((i & 7) != 0)
  57. tprintf(s->avctx, "\n");
  58. }
  59. #endif
  60. static int wma_decode_init(AVCodecContext * avctx)
  61. {
  62. WMACodecContext *s = avctx->priv_data;
  63. int i, flags2;
  64. uint8_t *extradata;
  65. s->avctx = avctx;
  66. /* extract flag infos */
  67. flags2 = 0;
  68. extradata = avctx->extradata;
  69. if (avctx->codec->id == AV_CODEC_ID_WMAV1 && avctx->extradata_size >= 4) {
  70. flags2 = AV_RL16(extradata+2);
  71. } else if (avctx->codec->id == AV_CODEC_ID_WMAV2 && avctx->extradata_size >= 6) {
  72. flags2 = AV_RL16(extradata+4);
  73. }
  74. s->use_exp_vlc = flags2 & 0x0001;
  75. s->use_bit_reservoir = flags2 & 0x0002;
  76. s->use_variable_block_len = flags2 & 0x0004;
  77. if(avctx->codec->id == AV_CODEC_ID_WMAV2 && avctx->extradata_size >= 8){
  78. if(AV_RL16(extradata+4)==0xd && s->use_variable_block_len){
  79. av_log(avctx, AV_LOG_WARNING, "Disabling use_variable_block_len, if this fails contact the ffmpeg developers and send us the file\n");
  80. s->use_variable_block_len= 0; // this fixes issue1503
  81. }
  82. }
  83. if(ff_wma_init(avctx, flags2)<0)
  84. return -1;
  85. /* init MDCT */
  86. for(i = 0; i < s->nb_block_sizes; i++)
  87. ff_mdct_init(&s->mdct_ctx[i], s->frame_len_bits - i + 1, 1, 1.0 / 32768.0);
  88. if (s->use_noise_coding) {
  89. init_vlc(&s->hgain_vlc, HGAINVLCBITS, sizeof(ff_wma_hgain_huffbits),
  90. ff_wma_hgain_huffbits, 1, 1,
  91. ff_wma_hgain_huffcodes, 2, 2, 0);
  92. }
  93. if (s->use_exp_vlc) {
  94. init_vlc(&s->exp_vlc, EXPVLCBITS, sizeof(ff_aac_scalefactor_bits), //FIXME move out of context
  95. ff_aac_scalefactor_bits, 1, 1,
  96. ff_aac_scalefactor_code, 4, 4, 0);
  97. } else {
  98. wma_lsp_to_curve_init(s, s->frame_len);
  99. }
  100. avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
  101. avcodec_get_frame_defaults(&s->frame);
  102. avctx->coded_frame = &s->frame;
  103. return 0;
  104. }
  105. /**
  106. * compute x^-0.25 with an exponent and mantissa table. We use linear
  107. * interpolation to reduce the mantissa table size at a small speed
  108. * expense (linear interpolation approximately doubles the number of
  109. * bits of precision).
  110. */
  111. static inline float pow_m1_4(WMACodecContext *s, float x)
  112. {
  113. union {
  114. float f;
  115. unsigned int v;
  116. } u, t;
  117. unsigned int e, m;
  118. float a, b;
  119. u.f = x;
  120. e = u.v >> 23;
  121. m = (u.v >> (23 - LSP_POW_BITS)) & ((1 << LSP_POW_BITS) - 1);
  122. /* build interpolation scale: 1 <= t < 2. */
  123. t.v = ((u.v << LSP_POW_BITS) & ((1 << 23) - 1)) | (127 << 23);
  124. a = s->lsp_pow_m_table1[m];
  125. b = s->lsp_pow_m_table2[m];
  126. return s->lsp_pow_e_table[e] * (a + b * t.f);
  127. }
  128. static void wma_lsp_to_curve_init(WMACodecContext *s, int frame_len)
  129. {
  130. float wdel, a, b;
  131. int i, e, m;
  132. wdel = M_PI / frame_len;
  133. for(i=0;i<frame_len;i++)
  134. s->lsp_cos_table[i] = 2.0f * cos(wdel * i);
  135. /* tables for x^-0.25 computation */
  136. for(i=0;i<256;i++) {
  137. e = i - 126;
  138. s->lsp_pow_e_table[i] = pow(2.0, e * -0.25);
  139. }
  140. /* NOTE: these two tables are needed to avoid two operations in
  141. pow_m1_4 */
  142. b = 1.0;
  143. for(i=(1 << LSP_POW_BITS) - 1;i>=0;i--) {
  144. m = (1 << LSP_POW_BITS) + i;
  145. a = (float)m * (0.5 / (1 << LSP_POW_BITS));
  146. a = pow(a, -0.25);
  147. s->lsp_pow_m_table1[i] = 2 * a - b;
  148. s->lsp_pow_m_table2[i] = b - a;
  149. b = a;
  150. }
  151. }
  152. /**
  153. * NOTE: We use the same code as Vorbis here
  154. * @todo optimize it further with SSE/3Dnow
  155. */
  156. static void wma_lsp_to_curve(WMACodecContext *s,
  157. float *out, float *val_max_ptr,
  158. int n, float *lsp)
  159. {
  160. int i, j;
  161. float p, q, w, v, val_max;
  162. val_max = 0;
  163. for(i=0;i<n;i++) {
  164. p = 0.5f;
  165. q = 0.5f;
  166. w = s->lsp_cos_table[i];
  167. for(j=1;j<NB_LSP_COEFS;j+=2){
  168. q *= w - lsp[j - 1];
  169. p *= w - lsp[j];
  170. }
  171. p *= p * (2.0f - w);
  172. q *= q * (2.0f + w);
  173. v = p + q;
  174. v = pow_m1_4(s, v);
  175. if (v > val_max)
  176. val_max = v;
  177. out[i] = v;
  178. }
  179. *val_max_ptr = val_max;
  180. }
  181. /**
  182. * decode exponents coded with LSP coefficients (same idea as Vorbis)
  183. */
  184. static void decode_exp_lsp(WMACodecContext *s, int ch)
  185. {
  186. float lsp_coefs[NB_LSP_COEFS];
  187. int val, i;
  188. for(i = 0; i < NB_LSP_COEFS; i++) {
  189. if (i == 0 || i >= 8)
  190. val = get_bits(&s->gb, 3);
  191. else
  192. val = get_bits(&s->gb, 4);
  193. lsp_coefs[i] = ff_wma_lsp_codebook[i][val];
  194. }
  195. wma_lsp_to_curve(s, s->exponents[ch], &s->max_exponent[ch],
  196. s->block_len, lsp_coefs);
  197. }
  198. /** pow(10, i / 16.0) for i in -60..95 */
  199. static const float pow_tab[] = {
  200. 1.7782794100389e-04, 2.0535250264571e-04,
  201. 2.3713737056617e-04, 2.7384196342644e-04,
  202. 3.1622776601684e-04, 3.6517412725484e-04,
  203. 4.2169650342858e-04, 4.8696752516586e-04,
  204. 5.6234132519035e-04, 6.4938163157621e-04,
  205. 7.4989420933246e-04, 8.6596432336006e-04,
  206. 1.0000000000000e-03, 1.1547819846895e-03,
  207. 1.3335214321633e-03, 1.5399265260595e-03,
  208. 1.7782794100389e-03, 2.0535250264571e-03,
  209. 2.3713737056617e-03, 2.7384196342644e-03,
  210. 3.1622776601684e-03, 3.6517412725484e-03,
  211. 4.2169650342858e-03, 4.8696752516586e-03,
  212. 5.6234132519035e-03, 6.4938163157621e-03,
  213. 7.4989420933246e-03, 8.6596432336006e-03,
  214. 1.0000000000000e-02, 1.1547819846895e-02,
  215. 1.3335214321633e-02, 1.5399265260595e-02,
  216. 1.7782794100389e-02, 2.0535250264571e-02,
  217. 2.3713737056617e-02, 2.7384196342644e-02,
  218. 3.1622776601684e-02, 3.6517412725484e-02,
  219. 4.2169650342858e-02, 4.8696752516586e-02,
  220. 5.6234132519035e-02, 6.4938163157621e-02,
  221. 7.4989420933246e-02, 8.6596432336007e-02,
  222. 1.0000000000000e-01, 1.1547819846895e-01,
  223. 1.3335214321633e-01, 1.5399265260595e-01,
  224. 1.7782794100389e-01, 2.0535250264571e-01,
  225. 2.3713737056617e-01, 2.7384196342644e-01,
  226. 3.1622776601684e-01, 3.6517412725484e-01,
  227. 4.2169650342858e-01, 4.8696752516586e-01,
  228. 5.6234132519035e-01, 6.4938163157621e-01,
  229. 7.4989420933246e-01, 8.6596432336007e-01,
  230. 1.0000000000000e+00, 1.1547819846895e+00,
  231. 1.3335214321633e+00, 1.5399265260595e+00,
  232. 1.7782794100389e+00, 2.0535250264571e+00,
  233. 2.3713737056617e+00, 2.7384196342644e+00,
  234. 3.1622776601684e+00, 3.6517412725484e+00,
  235. 4.2169650342858e+00, 4.8696752516586e+00,
  236. 5.6234132519035e+00, 6.4938163157621e+00,
  237. 7.4989420933246e+00, 8.6596432336007e+00,
  238. 1.0000000000000e+01, 1.1547819846895e+01,
  239. 1.3335214321633e+01, 1.5399265260595e+01,
  240. 1.7782794100389e+01, 2.0535250264571e+01,
  241. 2.3713737056617e+01, 2.7384196342644e+01,
  242. 3.1622776601684e+01, 3.6517412725484e+01,
  243. 4.2169650342858e+01, 4.8696752516586e+01,
  244. 5.6234132519035e+01, 6.4938163157621e+01,
  245. 7.4989420933246e+01, 8.6596432336007e+01,
  246. 1.0000000000000e+02, 1.1547819846895e+02,
  247. 1.3335214321633e+02, 1.5399265260595e+02,
  248. 1.7782794100389e+02, 2.0535250264571e+02,
  249. 2.3713737056617e+02, 2.7384196342644e+02,
  250. 3.1622776601684e+02, 3.6517412725484e+02,
  251. 4.2169650342858e+02, 4.8696752516586e+02,
  252. 5.6234132519035e+02, 6.4938163157621e+02,
  253. 7.4989420933246e+02, 8.6596432336007e+02,
  254. 1.0000000000000e+03, 1.1547819846895e+03,
  255. 1.3335214321633e+03, 1.5399265260595e+03,
  256. 1.7782794100389e+03, 2.0535250264571e+03,
  257. 2.3713737056617e+03, 2.7384196342644e+03,
  258. 3.1622776601684e+03, 3.6517412725484e+03,
  259. 4.2169650342858e+03, 4.8696752516586e+03,
  260. 5.6234132519035e+03, 6.4938163157621e+03,
  261. 7.4989420933246e+03, 8.6596432336007e+03,
  262. 1.0000000000000e+04, 1.1547819846895e+04,
  263. 1.3335214321633e+04, 1.5399265260595e+04,
  264. 1.7782794100389e+04, 2.0535250264571e+04,
  265. 2.3713737056617e+04, 2.7384196342644e+04,
  266. 3.1622776601684e+04, 3.6517412725484e+04,
  267. 4.2169650342858e+04, 4.8696752516586e+04,
  268. 5.6234132519035e+04, 6.4938163157621e+04,
  269. 7.4989420933246e+04, 8.6596432336007e+04,
  270. 1.0000000000000e+05, 1.1547819846895e+05,
  271. 1.3335214321633e+05, 1.5399265260595e+05,
  272. 1.7782794100389e+05, 2.0535250264571e+05,
  273. 2.3713737056617e+05, 2.7384196342644e+05,
  274. 3.1622776601684e+05, 3.6517412725484e+05,
  275. 4.2169650342858e+05, 4.8696752516586e+05,
  276. 5.6234132519035e+05, 6.4938163157621e+05,
  277. 7.4989420933246e+05, 8.6596432336007e+05,
  278. };
  279. /**
  280. * decode exponents coded with VLC codes
  281. */
  282. static int decode_exp_vlc(WMACodecContext *s, int ch)
  283. {
  284. int last_exp, n, code;
  285. const uint16_t *ptr;
  286. float v, max_scale;
  287. uint32_t *q, *q_end, iv;
  288. const float *ptab = pow_tab + 60;
  289. const uint32_t *iptab = (const uint32_t*)ptab;
  290. ptr = s->exponent_bands[s->frame_len_bits - s->block_len_bits];
  291. q = (uint32_t *)s->exponents[ch];
  292. q_end = q + s->block_len;
  293. max_scale = 0;
  294. if (s->version == 1) {
  295. last_exp = get_bits(&s->gb, 5) + 10;
  296. v = ptab[last_exp];
  297. iv = iptab[last_exp];
  298. max_scale = v;
  299. n = *ptr++;
  300. switch (n & 3) do {
  301. case 0: *q++ = iv;
  302. case 3: *q++ = iv;
  303. case 2: *q++ = iv;
  304. case 1: *q++ = iv;
  305. } while ((n -= 4) > 0);
  306. }else
  307. last_exp = 36;
  308. while (q < q_end) {
  309. code = get_vlc2(&s->gb, s->exp_vlc.table, EXPVLCBITS, EXPMAX);
  310. if (code < 0){
  311. av_log(s->avctx, AV_LOG_ERROR, "Exponent vlc invalid\n");
  312. return -1;
  313. }
  314. /* NOTE: this offset is the same as MPEG4 AAC ! */
  315. last_exp += code - 60;
  316. if ((unsigned)last_exp + 60 >= FF_ARRAY_ELEMS(pow_tab)) {
  317. av_log(s->avctx, AV_LOG_ERROR, "Exponent out of range: %d\n",
  318. last_exp);
  319. return -1;
  320. }
  321. v = ptab[last_exp];
  322. iv = iptab[last_exp];
  323. if (v > max_scale)
  324. max_scale = v;
  325. n = *ptr++;
  326. switch (n & 3) do {
  327. case 0: *q++ = iv;
  328. case 3: *q++ = iv;
  329. case 2: *q++ = iv;
  330. case 1: *q++ = iv;
  331. } while ((n -= 4) > 0);
  332. }
  333. s->max_exponent[ch] = max_scale;
  334. return 0;
  335. }
  336. /**
  337. * Apply MDCT window and add into output.
  338. *
  339. * We ensure that when the windows overlap their squared sum
  340. * is always 1 (MDCT reconstruction rule).
  341. */
  342. static void wma_window(WMACodecContext *s, float *out)
  343. {
  344. float *in = s->output;
  345. int block_len, bsize, n;
  346. /* left part */
  347. if (s->block_len_bits <= s->prev_block_len_bits) {
  348. block_len = s->block_len;
  349. bsize = s->frame_len_bits - s->block_len_bits;
  350. s->dsp.vector_fmul_add(out, in, s->windows[bsize],
  351. out, block_len);
  352. } else {
  353. block_len = 1 << s->prev_block_len_bits;
  354. n = (s->block_len - block_len) / 2;
  355. bsize = s->frame_len_bits - s->prev_block_len_bits;
  356. s->dsp.vector_fmul_add(out+n, in+n, s->windows[bsize],
  357. out+n, block_len);
  358. memcpy(out+n+block_len, in+n+block_len, n*sizeof(float));
  359. }
  360. out += s->block_len;
  361. in += s->block_len;
  362. /* right part */
  363. if (s->block_len_bits <= s->next_block_len_bits) {
  364. block_len = s->block_len;
  365. bsize = s->frame_len_bits - s->block_len_bits;
  366. s->dsp.vector_fmul_reverse(out, in, s->windows[bsize], block_len);
  367. } else {
  368. block_len = 1 << s->next_block_len_bits;
  369. n = (s->block_len - block_len) / 2;
  370. bsize = s->frame_len_bits - s->next_block_len_bits;
  371. memcpy(out, in, n*sizeof(float));
  372. s->dsp.vector_fmul_reverse(out+n, in+n, s->windows[bsize], block_len);
  373. memset(out+n+block_len, 0, n*sizeof(float));
  374. }
  375. }
  376. /**
  377. * @return 0 if OK. 1 if last block of frame. return -1 if
  378. * unrecorrable error.
  379. */
  380. static int wma_decode_block(WMACodecContext *s)
  381. {
  382. int n, v, a, ch, bsize;
  383. int coef_nb_bits, total_gain;
  384. int nb_coefs[MAX_CHANNELS];
  385. float mdct_norm;
  386. FFTContext *mdct;
  387. #ifdef TRACE
  388. tprintf(s->avctx, "***decode_block: %d:%d\n", s->frame_count - 1, s->block_num);
  389. #endif
  390. /* compute current block length */
  391. if (s->use_variable_block_len) {
  392. n = av_log2(s->nb_block_sizes - 1) + 1;
  393. if (s->reset_block_lengths) {
  394. s->reset_block_lengths = 0;
  395. v = get_bits(&s->gb, n);
  396. if (v >= s->nb_block_sizes){
  397. av_log(s->avctx, AV_LOG_ERROR, "prev_block_len_bits %d out of range\n", s->frame_len_bits - v);
  398. return -1;
  399. }
  400. s->prev_block_len_bits = s->frame_len_bits - v;
  401. v = get_bits(&s->gb, n);
  402. if (v >= s->nb_block_sizes){
  403. av_log(s->avctx, AV_LOG_ERROR, "block_len_bits %d out of range\n", s->frame_len_bits - v);
  404. return -1;
  405. }
  406. s->block_len_bits = s->frame_len_bits - v;
  407. } else {
  408. /* update block lengths */
  409. s->prev_block_len_bits = s->block_len_bits;
  410. s->block_len_bits = s->next_block_len_bits;
  411. }
  412. v = get_bits(&s->gb, n);
  413. if (v >= s->nb_block_sizes){
  414. av_log(s->avctx, AV_LOG_ERROR, "next_block_len_bits %d out of range\n", s->frame_len_bits - v);
  415. return -1;
  416. }
  417. s->next_block_len_bits = s->frame_len_bits - v;
  418. } else {
  419. /* fixed block len */
  420. s->next_block_len_bits = s->frame_len_bits;
  421. s->prev_block_len_bits = s->frame_len_bits;
  422. s->block_len_bits = s->frame_len_bits;
  423. }
  424. if (s->frame_len_bits - s->block_len_bits >= s->nb_block_sizes){
  425. av_log(s->avctx, AV_LOG_ERROR, "block_len_bits not initialized to a valid value\n");
  426. return -1;
  427. }
  428. /* now check if the block length is coherent with the frame length */
  429. s->block_len = 1 << s->block_len_bits;
  430. if ((s->block_pos + s->block_len) > s->frame_len){
  431. av_log(s->avctx, AV_LOG_ERROR, "frame_len overflow\n");
  432. return -1;
  433. }
  434. if (s->avctx->channels == 2) {
  435. s->ms_stereo = get_bits1(&s->gb);
  436. }
  437. v = 0;
  438. for(ch = 0; ch < s->avctx->channels; ch++) {
  439. a = get_bits1(&s->gb);
  440. s->channel_coded[ch] = a;
  441. v |= a;
  442. }
  443. bsize = s->frame_len_bits - s->block_len_bits;
  444. /* if no channel coded, no need to go further */
  445. /* XXX: fix potential framing problems */
  446. if (!v)
  447. goto next;
  448. /* read total gain and extract corresponding number of bits for
  449. coef escape coding */
  450. total_gain = 1;
  451. for(;;) {
  452. a = get_bits(&s->gb, 7);
  453. total_gain += a;
  454. if (a != 127)
  455. break;
  456. }
  457. coef_nb_bits= ff_wma_total_gain_to_bits(total_gain);
  458. /* compute number of coefficients */
  459. n = s->coefs_end[bsize] - s->coefs_start;
  460. for(ch = 0; ch < s->avctx->channels; ch++)
  461. nb_coefs[ch] = n;
  462. /* complex coding */
  463. if (s->use_noise_coding) {
  464. for(ch = 0; ch < s->avctx->channels; ch++) {
  465. if (s->channel_coded[ch]) {
  466. int i, n, a;
  467. n = s->exponent_high_sizes[bsize];
  468. for(i=0;i<n;i++) {
  469. a = get_bits1(&s->gb);
  470. s->high_band_coded[ch][i] = a;
  471. /* if noise coding, the coefficients are not transmitted */
  472. if (a)
  473. nb_coefs[ch] -= s->exponent_high_bands[bsize][i];
  474. }
  475. }
  476. }
  477. for(ch = 0; ch < s->avctx->channels; ch++) {
  478. if (s->channel_coded[ch]) {
  479. int i, n, val, code;
  480. n = s->exponent_high_sizes[bsize];
  481. val = (int)0x80000000;
  482. for(i=0;i<n;i++) {
  483. if (s->high_band_coded[ch][i]) {
  484. if (val == (int)0x80000000) {
  485. val = get_bits(&s->gb, 7) - 19;
  486. } else {
  487. code = get_vlc2(&s->gb, s->hgain_vlc.table, HGAINVLCBITS, HGAINMAX);
  488. if (code < 0){
  489. av_log(s->avctx, AV_LOG_ERROR, "hgain vlc invalid\n");
  490. return -1;
  491. }
  492. val += code - 18;
  493. }
  494. s->high_band_values[ch][i] = val;
  495. }
  496. }
  497. }
  498. }
  499. }
  500. /* exponents can be reused in short blocks. */
  501. if ((s->block_len_bits == s->frame_len_bits) ||
  502. get_bits1(&s->gb)) {
  503. for(ch = 0; ch < s->avctx->channels; ch++) {
  504. if (s->channel_coded[ch]) {
  505. if (s->use_exp_vlc) {
  506. if (decode_exp_vlc(s, ch) < 0)
  507. return -1;
  508. } else {
  509. decode_exp_lsp(s, ch);
  510. }
  511. s->exponents_bsize[ch] = bsize;
  512. }
  513. }
  514. }
  515. /* parse spectral coefficients : just RLE encoding */
  516. for (ch = 0; ch < s->avctx->channels; ch++) {
  517. if (s->channel_coded[ch]) {
  518. int tindex;
  519. WMACoef* ptr = &s->coefs1[ch][0];
  520. /* special VLC tables are used for ms stereo because
  521. there is potentially less energy there */
  522. tindex = (ch == 1 && s->ms_stereo);
  523. memset(ptr, 0, s->block_len * sizeof(WMACoef));
  524. ff_wma_run_level_decode(s->avctx, &s->gb, &s->coef_vlc[tindex],
  525. s->level_table[tindex], s->run_table[tindex],
  526. 0, ptr, 0, nb_coefs[ch],
  527. s->block_len, s->frame_len_bits, coef_nb_bits);
  528. }
  529. if (s->version == 1 && s->avctx->channels >= 2) {
  530. align_get_bits(&s->gb);
  531. }
  532. }
  533. /* normalize */
  534. {
  535. int n4 = s->block_len / 2;
  536. mdct_norm = 1.0 / (float)n4;
  537. if (s->version == 1) {
  538. mdct_norm *= sqrt(n4);
  539. }
  540. }
  541. /* finally compute the MDCT coefficients */
  542. for (ch = 0; ch < s->avctx->channels; ch++) {
  543. if (s->channel_coded[ch]) {
  544. WMACoef *coefs1;
  545. float *coefs, *exponents, mult, mult1, noise;
  546. int i, j, n, n1, last_high_band, esize;
  547. float exp_power[HIGH_BAND_MAX_SIZE];
  548. coefs1 = s->coefs1[ch];
  549. exponents = s->exponents[ch];
  550. esize = s->exponents_bsize[ch];
  551. mult = pow(10, total_gain * 0.05) / s->max_exponent[ch];
  552. mult *= mdct_norm;
  553. coefs = s->coefs[ch];
  554. if (s->use_noise_coding) {
  555. mult1 = mult;
  556. /* very low freqs : noise */
  557. for(i = 0;i < s->coefs_start; i++) {
  558. *coefs++ = s->noise_table[s->noise_index] *
  559. exponents[i<<bsize>>esize] * mult1;
  560. s->noise_index = (s->noise_index + 1) & (NOISE_TAB_SIZE - 1);
  561. }
  562. n1 = s->exponent_high_sizes[bsize];
  563. /* compute power of high bands */
  564. exponents = s->exponents[ch] +
  565. (s->high_band_start[bsize]<<bsize>>esize);
  566. last_high_band = 0; /* avoid warning */
  567. for(j=0;j<n1;j++) {
  568. n = s->exponent_high_bands[s->frame_len_bits -
  569. s->block_len_bits][j];
  570. if (s->high_band_coded[ch][j]) {
  571. float e2, v;
  572. e2 = 0;
  573. for(i = 0;i < n; i++) {
  574. v = exponents[i<<bsize>>esize];
  575. e2 += v * v;
  576. }
  577. exp_power[j] = e2 / n;
  578. last_high_band = j;
  579. tprintf(s->avctx, "%d: power=%f (%d)\n", j, exp_power[j], n);
  580. }
  581. exponents += n<<bsize>>esize;
  582. }
  583. /* main freqs and high freqs */
  584. exponents = s->exponents[ch] + (s->coefs_start<<bsize>>esize);
  585. for(j=-1;j<n1;j++) {
  586. if (j < 0) {
  587. n = s->high_band_start[bsize] -
  588. s->coefs_start;
  589. } else {
  590. n = s->exponent_high_bands[s->frame_len_bits -
  591. s->block_len_bits][j];
  592. }
  593. if (j >= 0 && s->high_band_coded[ch][j]) {
  594. /* use noise with specified power */
  595. mult1 = sqrt(exp_power[j] / exp_power[last_high_band]);
  596. /* XXX: use a table */
  597. mult1 = mult1 * pow(10, s->high_band_values[ch][j] * 0.05);
  598. mult1 = mult1 / (s->max_exponent[ch] * s->noise_mult);
  599. mult1 *= mdct_norm;
  600. for(i = 0;i < n; i++) {
  601. noise = s->noise_table[s->noise_index];
  602. s->noise_index = (s->noise_index + 1) & (NOISE_TAB_SIZE - 1);
  603. *coefs++ = noise *
  604. exponents[i<<bsize>>esize] * mult1;
  605. }
  606. exponents += n<<bsize>>esize;
  607. } else {
  608. /* coded values + small noise */
  609. for(i = 0;i < n; i++) {
  610. noise = s->noise_table[s->noise_index];
  611. s->noise_index = (s->noise_index + 1) & (NOISE_TAB_SIZE - 1);
  612. *coefs++ = ((*coefs1++) + noise) *
  613. exponents[i<<bsize>>esize] * mult;
  614. }
  615. exponents += n<<bsize>>esize;
  616. }
  617. }
  618. /* very high freqs : noise */
  619. n = s->block_len - s->coefs_end[bsize];
  620. mult1 = mult * exponents[((-1<<bsize))>>esize];
  621. for(i = 0; i < n; i++) {
  622. *coefs++ = s->noise_table[s->noise_index] * mult1;
  623. s->noise_index = (s->noise_index + 1) & (NOISE_TAB_SIZE - 1);
  624. }
  625. } else {
  626. /* XXX: optimize more */
  627. for(i = 0;i < s->coefs_start; i++)
  628. *coefs++ = 0.0;
  629. n = nb_coefs[ch];
  630. for(i = 0;i < n; i++) {
  631. *coefs++ = coefs1[i] * exponents[i<<bsize>>esize] * mult;
  632. }
  633. n = s->block_len - s->coefs_end[bsize];
  634. for(i = 0;i < n; i++)
  635. *coefs++ = 0.0;
  636. }
  637. }
  638. }
  639. #ifdef TRACE
  640. for (ch = 0; ch < s->avctx->channels; ch++) {
  641. if (s->channel_coded[ch]) {
  642. dump_floats(s, "exponents", 3, s->exponents[ch], s->block_len);
  643. dump_floats(s, "coefs", 1, s->coefs[ch], s->block_len);
  644. }
  645. }
  646. #endif
  647. if (s->ms_stereo && s->channel_coded[1]) {
  648. /* nominal case for ms stereo: we do it before mdct */
  649. /* no need to optimize this case because it should almost
  650. never happen */
  651. if (!s->channel_coded[0]) {
  652. tprintf(s->avctx, "rare ms-stereo case happened\n");
  653. memset(s->coefs[0], 0, sizeof(float) * s->block_len);
  654. s->channel_coded[0] = 1;
  655. }
  656. s->dsp.butterflies_float(s->coefs[0], s->coefs[1], s->block_len);
  657. }
  658. next:
  659. mdct = &s->mdct_ctx[bsize];
  660. for (ch = 0; ch < s->avctx->channels; ch++) {
  661. int n4, index;
  662. n4 = s->block_len / 2;
  663. if(s->channel_coded[ch]){
  664. mdct->imdct_calc(mdct, s->output, s->coefs[ch]);
  665. }else if(!(s->ms_stereo && ch==1))
  666. memset(s->output, 0, sizeof(s->output));
  667. /* multiply by the window and add in the frame */
  668. index = (s->frame_len / 2) + s->block_pos - n4;
  669. wma_window(s, &s->frame_out[ch][index]);
  670. }
  671. /* update block number */
  672. s->block_num++;
  673. s->block_pos += s->block_len;
  674. if (s->block_pos >= s->frame_len)
  675. return 1;
  676. else
  677. return 0;
  678. }
  679. /* decode a frame of frame_len samples */
  680. static int wma_decode_frame(WMACodecContext *s, float **samples,
  681. int samples_offset)
  682. {
  683. int ret, ch;
  684. #ifdef TRACE
  685. tprintf(s->avctx, "***decode_frame: %d size=%d\n", s->frame_count++, s->frame_len);
  686. #endif
  687. /* read each block */
  688. s->block_num = 0;
  689. s->block_pos = 0;
  690. for(;;) {
  691. ret = wma_decode_block(s);
  692. if (ret < 0)
  693. return -1;
  694. if (ret)
  695. break;
  696. }
  697. for (ch = 0; ch < s->avctx->channels; ch++) {
  698. /* copy current block to output */
  699. memcpy(samples[ch] + samples_offset, s->frame_out[ch],
  700. s->frame_len * sizeof(*s->frame_out[ch]));
  701. /* prepare for next block */
  702. memmove(&s->frame_out[ch][0], &s->frame_out[ch][s->frame_len],
  703. s->frame_len * sizeof(*s->frame_out[ch]));
  704. #ifdef TRACE
  705. dump_floats(s, "samples", 6, samples[ch] + samples_offset, s->frame_len);
  706. #endif
  707. }
  708. return 0;
  709. }
  710. static int wma_decode_superframe(AVCodecContext *avctx, void *data,
  711. int *got_frame_ptr, AVPacket *avpkt)
  712. {
  713. const uint8_t *buf = avpkt->data;
  714. int buf_size = avpkt->size;
  715. WMACodecContext *s = avctx->priv_data;
  716. int nb_frames, bit_offset, i, pos, len, ret;
  717. uint8_t *q;
  718. float **samples;
  719. int samples_offset;
  720. tprintf(avctx, "***decode_superframe:\n");
  721. if(buf_size==0){
  722. s->last_superframe_len = 0;
  723. return 0;
  724. }
  725. if (buf_size < avctx->block_align) {
  726. av_log(avctx, AV_LOG_ERROR,
  727. "Input packet size too small (%d < %d)\n",
  728. buf_size, avctx->block_align);
  729. return AVERROR_INVALIDDATA;
  730. }
  731. if(avctx->block_align)
  732. buf_size = avctx->block_align;
  733. init_get_bits(&s->gb, buf, buf_size*8);
  734. if (s->use_bit_reservoir) {
  735. /* read super frame header */
  736. skip_bits(&s->gb, 4); /* super frame index */
  737. nb_frames = get_bits(&s->gb, 4) - (s->last_superframe_len <= 0);
  738. } else {
  739. nb_frames = 1;
  740. }
  741. /* get output buffer */
  742. s->frame.nb_samples = nb_frames * s->frame_len;
  743. if ((ret = ff_get_buffer(avctx, &s->frame)) < 0) {
  744. av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
  745. return ret;
  746. }
  747. samples = (float **)s->frame.extended_data;
  748. samples_offset = 0;
  749. if (s->use_bit_reservoir) {
  750. bit_offset = get_bits(&s->gb, s->byte_offset_bits + 3);
  751. if (bit_offset > get_bits_left(&s->gb)) {
  752. av_log(avctx, AV_LOG_ERROR,
  753. "Invalid last frame bit offset %d > buf size %d (%d)\n",
  754. bit_offset, get_bits_left(&s->gb), buf_size);
  755. goto fail;
  756. }
  757. if (s->last_superframe_len > 0) {
  758. /* add bit_offset bits to last frame */
  759. if ((s->last_superframe_len + ((bit_offset + 7) >> 3)) >
  760. MAX_CODED_SUPERFRAME_SIZE)
  761. goto fail;
  762. q = s->last_superframe + s->last_superframe_len;
  763. len = bit_offset;
  764. while (len > 7) {
  765. *q++ = (get_bits)(&s->gb, 8);
  766. len -= 8;
  767. }
  768. if (len > 0) {
  769. *q++ = (get_bits)(&s->gb, len) << (8 - len);
  770. }
  771. memset(q, 0, FF_INPUT_BUFFER_PADDING_SIZE);
  772. /* XXX: bit_offset bits into last frame */
  773. init_get_bits(&s->gb, s->last_superframe, s->last_superframe_len * 8 + bit_offset);
  774. /* skip unused bits */
  775. if (s->last_bitoffset > 0)
  776. skip_bits(&s->gb, s->last_bitoffset);
  777. /* this frame is stored in the last superframe and in the
  778. current one */
  779. if (wma_decode_frame(s, samples, samples_offset) < 0)
  780. goto fail;
  781. samples_offset += s->frame_len;
  782. nb_frames--;
  783. }
  784. /* read each frame starting from bit_offset */
  785. pos = bit_offset + 4 + 4 + s->byte_offset_bits + 3;
  786. if (pos >= MAX_CODED_SUPERFRAME_SIZE * 8 || pos > buf_size * 8)
  787. return AVERROR_INVALIDDATA;
  788. init_get_bits(&s->gb, buf + (pos >> 3), (buf_size - (pos >> 3))*8);
  789. len = pos & 7;
  790. if (len > 0)
  791. skip_bits(&s->gb, len);
  792. s->reset_block_lengths = 1;
  793. for(i=0;i<nb_frames;i++) {
  794. if (wma_decode_frame(s, samples, samples_offset) < 0)
  795. goto fail;
  796. samples_offset += s->frame_len;
  797. }
  798. /* we copy the end of the frame in the last frame buffer */
  799. pos = get_bits_count(&s->gb) + ((bit_offset + 4 + 4 + s->byte_offset_bits + 3) & ~7);
  800. s->last_bitoffset = pos & 7;
  801. pos >>= 3;
  802. len = buf_size - pos;
  803. if (len > MAX_CODED_SUPERFRAME_SIZE || len < 0) {
  804. av_log(s->avctx, AV_LOG_ERROR, "len %d invalid\n", len);
  805. goto fail;
  806. }
  807. s->last_superframe_len = len;
  808. memcpy(s->last_superframe, buf + pos, len);
  809. } else {
  810. /* single frame decode */
  811. if (wma_decode_frame(s, samples, samples_offset) < 0)
  812. goto fail;
  813. samples_offset += s->frame_len;
  814. }
  815. av_dlog(s->avctx, "%d %d %d %d outbytes:%td eaten:%d\n",
  816. s->frame_len_bits, s->block_len_bits, s->frame_len, s->block_len,
  817. (int8_t *)samples - (int8_t *)data, avctx->block_align);
  818. *got_frame_ptr = 1;
  819. *(AVFrame *)data = s->frame;
  820. return buf_size;
  821. fail:
  822. /* when error, we reset the bit reservoir */
  823. s->last_superframe_len = 0;
  824. return -1;
  825. }
  826. static av_cold void flush(AVCodecContext *avctx)
  827. {
  828. WMACodecContext *s = avctx->priv_data;
  829. s->last_bitoffset=
  830. s->last_superframe_len= 0;
  831. }
  832. #if CONFIG_WMAV1_DECODER
  833. AVCodec ff_wmav1_decoder = {
  834. .name = "wmav1",
  835. .type = AVMEDIA_TYPE_AUDIO,
  836. .id = AV_CODEC_ID_WMAV1,
  837. .priv_data_size = sizeof(WMACodecContext),
  838. .init = wma_decode_init,
  839. .close = ff_wma_end,
  840. .decode = wma_decode_superframe,
  841. .flush = flush,
  842. .capabilities = CODEC_CAP_DR1,
  843. .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 1"),
  844. .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
  845. AV_SAMPLE_FMT_NONE },
  846. };
  847. #endif
  848. #if CONFIG_WMAV2_DECODER
  849. AVCodec ff_wmav2_decoder = {
  850. .name = "wmav2",
  851. .type = AVMEDIA_TYPE_AUDIO,
  852. .id = AV_CODEC_ID_WMAV2,
  853. .priv_data_size = sizeof(WMACodecContext),
  854. .init = wma_decode_init,
  855. .close = ff_wma_end,
  856. .decode = wma_decode_superframe,
  857. .flush = flush,
  858. .capabilities = CODEC_CAP_DR1,
  859. .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 2"),
  860. .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
  861. AV_SAMPLE_FMT_NONE },
  862. };
  863. #endif