FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
wmaprodec.c
Go to the documentation of this file.
1 /*
2  * Wmapro compatible decoder
3  * Copyright (c) 2007 Baptiste Coudurier, Benjamin Larsson, Ulion
4  * Copyright (c) 2008 - 2011 Sascha Sommer, Benjamin Larsson
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 /**
24  * @file
25  * @brief wmapro decoder implementation
26  * Wmapro is an MDCT based codec comparable to wma standard or AAC.
27  * The decoding therefore consists of the following steps:
28  * - bitstream decoding
29  * - reconstruction of per-channel data
30  * - rescaling and inverse quantization
31  * - IMDCT
32  * - windowing and overlapp-add
33  *
34  * The compressed wmapro bitstream is split into individual packets.
35  * Every such packet contains one or more wma frames.
36  * The compressed frames may have a variable length and frames may
37  * cross packet boundaries.
38  * Common to all wmapro frames is the number of samples that are stored in
39  * a frame.
40  * The number of samples and a few other decode flags are stored
41  * as extradata that has to be passed to the decoder.
42  *
43  * The wmapro frames themselves are again split into a variable number of
44  * subframes. Every subframe contains the data for 2^N time domain samples
45  * where N varies between 7 and 12.
46  *
47  * Example wmapro bitstream (in samples):
48  *
49  * || packet 0 || packet 1 || packet 2 packets
50  * ---------------------------------------------------
51  * || frame 0 || frame 1 || frame 2 || frames
52  * ---------------------------------------------------
53  * || | | || | | | || || subframes of channel 0
54  * ---------------------------------------------------
55  * || | | || | | | || || subframes of channel 1
56  * ---------------------------------------------------
57  *
58  * The frame layouts for the individual channels of a wma frame does not need
59  * to be the same.
60  *
61  * However, if the offsets and lengths of several subframes of a frame are the
62  * same, the subframes of the channels can be grouped.
63  * Every group may then use special coding techniques like M/S stereo coding
64  * to improve the compression ratio. These channel transformations do not
65  * need to be applied to a whole subframe. Instead, they can also work on
66  * individual scale factor bands (see below).
67  * The coefficients that carry the audio signal in the frequency domain
68  * are transmitted as huffman-coded vectors with 4, 2 and 1 elements.
69  * In addition to that, the encoder can switch to a runlevel coding scheme
70  * by transmitting subframe_length / 128 zero coefficients.
71  *
72  * Before the audio signal can be converted to the time domain, the
73  * coefficients have to be rescaled and inverse quantized.
74  * A subframe is therefore split into several scale factor bands that get
75  * scaled individually.
76  * Scale factors are submitted for every frame but they might be shared
77  * between the subframes of a channel. Scale factors are initially DPCM-coded.
78  * Once scale factors are shared, the differences are transmitted as runlevel
79  * codes.
80  * Every subframe length and offset combination in the frame layout shares a
81  * common quantization factor that can be adjusted for every channel by a
82  * modifier.
83  * After the inverse quantization, the coefficients get processed by an IMDCT.
84  * The resulting values are then windowed with a sine window and the first half
85  * of the values are added to the second half of the output from the previous
86  * subframe in order to reconstruct the output samples.
87  */
88 
89 #include "libavutil/float_dsp.h"
90 #include "libavutil/intfloat.h"
91 #include "libavutil/intreadwrite.h"
92 #include "avcodec.h"
93 #include "internal.h"
94 #include "get_bits.h"
95 #include "put_bits.h"
96 #include "wmaprodata.h"
97 #include "dsputil.h"
98 #include "sinewin.h"
99 #include "wma.h"
100 #include "wma_common.h"
101 
102 /** current decoder limitations */
103 #define WMAPRO_MAX_CHANNELS 8 ///< max number of handled channels
104 #define MAX_SUBFRAMES 32 ///< max number of subframes per channel
105 #define MAX_BANDS 29 ///< max number of scale factor bands
106 #define MAX_FRAMESIZE 32768 ///< maximum compressed frame size
107 
108 #define WMAPRO_BLOCK_MIN_BITS 6 ///< log2 of min block size
109 #define WMAPRO_BLOCK_MAX_BITS 13 ///< log2 of max block size
110 #define WMAPRO_BLOCK_MAX_SIZE (1 << WMAPRO_BLOCK_MAX_BITS) ///< maximum block size
111 #define WMAPRO_BLOCK_SIZES (WMAPRO_BLOCK_MAX_BITS - WMAPRO_BLOCK_MIN_BITS + 1) ///< possible block sizes
112 
113 
114 #define VLCBITS 9
115 #define SCALEVLCBITS 8
116 #define VEC4MAXDEPTH ((HUFF_VEC4_MAXBITS+VLCBITS-1)/VLCBITS)
117 #define VEC2MAXDEPTH ((HUFF_VEC2_MAXBITS+VLCBITS-1)/VLCBITS)
118 #define VEC1MAXDEPTH ((HUFF_VEC1_MAXBITS+VLCBITS-1)/VLCBITS)
119 #define SCALEMAXDEPTH ((HUFF_SCALE_MAXBITS+SCALEVLCBITS-1)/SCALEVLCBITS)
120 #define SCALERLMAXDEPTH ((HUFF_SCALE_RL_MAXBITS+VLCBITS-1)/VLCBITS)
121 
122 static VLC sf_vlc; ///< scale factor DPCM vlc
123 static VLC sf_rl_vlc; ///< scale factor run length vlc
124 static VLC vec4_vlc; ///< 4 coefficients per symbol
125 static VLC vec2_vlc; ///< 2 coefficients per symbol
126 static VLC vec1_vlc; ///< 1 coefficient per symbol
127 static VLC coef_vlc[2]; ///< coefficient run length vlc codes
128 static float sin64[33]; ///< sinus table for decorrelation
129 
130 /**
131  * @brief frame specific decoder context for a single channel
132  */
133 typedef struct {
134  int16_t prev_block_len; ///< length of the previous block
137  uint16_t subframe_len[MAX_SUBFRAMES]; ///< subframe length in samples
138  uint16_t subframe_offset[MAX_SUBFRAMES]; ///< subframe positions in the current frame
139  uint8_t cur_subframe; ///< current subframe number
140  uint16_t decoded_samples; ///< number of already processed samples
141  uint8_t grouped; ///< channel is part of a group
142  int quant_step; ///< quantization step for the current subframe
143  int8_t reuse_sf; ///< share scale factors between subframes
144  int8_t scale_factor_step; ///< scaling step for the current subframe
145  int max_scale_factor; ///< maximum scale factor for the current subframe
146  int saved_scale_factors[2][MAX_BANDS]; ///< resampled and (previously) transmitted scale factor values
147  int8_t scale_factor_idx; ///< index for the transmitted scale factor values (used for resampling)
148  int* scale_factors; ///< pointer to the scale factor values used for decoding
149  uint8_t table_idx; ///< index in sf_offsets for the scale factor reference block
150  float* coeffs; ///< pointer to the subframe decode buffer
151  uint16_t num_vec_coeffs; ///< number of vector coded coefficients
152  DECLARE_ALIGNED(32, float, out)[WMAPRO_BLOCK_MAX_SIZE + WMAPRO_BLOCK_MAX_SIZE / 2]; ///< output buffer
154 
155 /**
156  * @brief channel group for channel transformations
157  */
158 typedef struct {
159  uint8_t num_channels; ///< number of channels in the group
160  int8_t transform; ///< transform on / off
161  int8_t transform_band[MAX_BANDS]; ///< controls if the transform is enabled for a certain band
162  float decorrelation_matrix[WMAPRO_MAX_CHANNELS*WMAPRO_MAX_CHANNELS];
163  float* channel_data[WMAPRO_MAX_CHANNELS]; ///< transformation coefficients
165 
166 /**
167  * @brief main decoder context
168  */
169 typedef struct WMAProDecodeCtx {
170  /* generic decoder variables */
171  AVCodecContext* avctx; ///< codec context for av_log
172  AVFrame frame; ///< AVFrame for decoded output
173  DSPContext dsp; ///< accelerated DSP functions
176  FF_INPUT_BUFFER_PADDING_SIZE];///< compressed frame data
177  PutBitContext pb; ///< context for filling the frame_data buffer
178  FFTContext mdct_ctx[WMAPRO_BLOCK_SIZES]; ///< MDCT context per block size
179  DECLARE_ALIGNED(32, float, tmp)[WMAPRO_BLOCK_MAX_SIZE]; ///< IMDCT output buffer
180  float* windows[WMAPRO_BLOCK_SIZES]; ///< windows for the different block sizes
181 
182  /* frame size dependent frame information (set during initialization) */
183  uint32_t decode_flags; ///< used compression features
184  uint8_t len_prefix; ///< frame is prefixed with its length
185  uint8_t dynamic_range_compression; ///< frame contains DRC data
186  uint8_t bits_per_sample; ///< integer audio sample size for the unscaled IMDCT output (used to scale to [-1.0, 1.0])
187  uint16_t samples_per_frame; ///< number of samples to output
188  uint16_t log2_frame_size;
189  int8_t lfe_channel; ///< lfe channel index
191  uint8_t subframe_len_bits; ///< number of bits used for the subframe length
192  uint8_t max_subframe_len_bit; ///< flag indicating that the subframe is of maximum size when the first subframe length bit is 1
194  int8_t num_sfb[WMAPRO_BLOCK_SIZES]; ///< scale factor bands per block size
195  int16_t sfb_offsets[WMAPRO_BLOCK_SIZES][MAX_BANDS]; ///< scale factor band offsets (multiples of 4)
196  int8_t sf_offsets[WMAPRO_BLOCK_SIZES][WMAPRO_BLOCK_SIZES][MAX_BANDS]; ///< scale factor resample matrix
197  int16_t subwoofer_cutoffs[WMAPRO_BLOCK_SIZES]; ///< subwoofer cutoff values
198 
199  /* packet decode state */
200  GetBitContext pgb; ///< bitstream reader context for the packet
201  int next_packet_start; ///< start offset of the next wma packet in the demuxer packet
202  uint8_t packet_offset; ///< frame offset in the packet
203  uint8_t packet_sequence_number; ///< current packet number
204  int num_saved_bits; ///< saved number of bits
205  int frame_offset; ///< frame offset in the bit reservoir
206  int subframe_offset; ///< subframe offset in the bit reservoir
207  uint8_t packet_loss; ///< set in case of bitstream error
208  uint8_t packet_done; ///< set when a packet is fully decoded
209 
210  /* frame decode state */
211  uint32_t frame_num; ///< current frame number (not used for decoding)
212  GetBitContext gb; ///< bitstream reader context
213  int buf_bit_size; ///< buffer size in bits
214  uint8_t drc_gain; ///< gain for the DRC tool
215  int8_t skip_frame; ///< skip output step
216  int8_t parsed_all_subframes; ///< all subframes decoded?
217 
218  /* subframe/block decode state */
219  int16_t subframe_len; ///< current subframe length
220  int8_t channels_for_cur_subframe; ///< number of channels that contain the subframe
222  int8_t num_bands; ///< number of scale factor bands
223  int8_t transmit_num_vec_coeffs; ///< number of vector coded coefficients is part of the bitstream
224  int16_t* cur_sfb_offsets; ///< sfb offsets for the current block
225  uint8_t table_idx; ///< index for the num_sfb, sfb_offsets, sf_offsets and subwoofer_cutoffs tables
226  int8_t esc_len; ///< length of escaped coefficients
227 
228  uint8_t num_chgroups; ///< number of channel groups
229  WMAProChannelGrp chgroup[WMAPRO_MAX_CHANNELS]; ///< channel group information
230 
233 
234 
235 /**
236  *@brief helper function to print the most important members of the context
237  *@param s context
238  */
240 {
241 #define PRINT(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %d\n", a, b);
242 #define PRINT_HEX(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %x\n", a, b);
243 
244  PRINT("ed sample bit depth", s->bits_per_sample);
245  PRINT_HEX("ed decode flags", s->decode_flags);
246  PRINT("samples per frame", s->samples_per_frame);
247  PRINT("log2 frame size", s->log2_frame_size);
248  PRINT("max num subframes", s->max_num_subframes);
249  PRINT("len prefix", s->len_prefix);
250  PRINT("num channels", s->avctx->channels);
251 }
252 
253 /**
254  *@brief Uninitialize the decoder and free all resources.
255  *@param avctx codec context
256  *@return 0 on success, < 0 otherwise
257  */
259 {
260  WMAProDecodeCtx *s = avctx->priv_data;
261  int i;
262 
263  for (i = 0; i < WMAPRO_BLOCK_SIZES; i++)
264  ff_mdct_end(&s->mdct_ctx[i]);
265 
266  return 0;
267 }
268 
269 /**
270  *@brief Initialize the decoder.
271  *@param avctx codec context
272  *@return 0 on success, -1 otherwise
273  */
275 {
276  WMAProDecodeCtx *s = avctx->priv_data;
277  uint8_t *edata_ptr = avctx->extradata;
278  unsigned int channel_mask;
279  int i, bits;
280  int log2_max_num_subframes;
281  int num_possible_block_sizes;
282 
283  if (!avctx->block_align) {
284  av_log(avctx, AV_LOG_ERROR, "block_align is not set\n");
285  return AVERROR(EINVAL);
286  }
287 
288  s->avctx = avctx;
289  ff_dsputil_init(&s->dsp, avctx);
291 
293 
295 
296  if (avctx->extradata_size >= 18) {
297  s->decode_flags = AV_RL16(edata_ptr+14);
298  channel_mask = AV_RL32(edata_ptr+2);
299  s->bits_per_sample = AV_RL16(edata_ptr);
300  /** dump the extradata */
301  for (i = 0; i < avctx->extradata_size; i++)
302  av_dlog(avctx, "[%x] ", avctx->extradata[i]);
303  av_dlog(avctx, "\n");
304 
305  } else {
306  av_log_ask_for_sample(avctx, "Unknown extradata size\n");
307  return AVERROR_PATCHWELCOME;
308  }
309 
310  /** generic init */
311  s->log2_frame_size = av_log2(avctx->block_align) + 4;
312 
313  /** frame info */
314  s->skip_frame = 1; /* skip first frame */
315  s->packet_loss = 1;
316  s->len_prefix = (s->decode_flags & 0x40);
317 
318  /** get frame len */
319  bits = ff_wma_get_frame_len_bits(avctx->sample_rate, 3, s->decode_flags);
320  if (bits > WMAPRO_BLOCK_MAX_BITS) {
321  av_log_missing_feature(avctx, "14-bits block sizes", 1);
322  return AVERROR_PATCHWELCOME;
323  }
324  s->samples_per_frame = 1 << bits;
325 
326  /** subframe info */
327  log2_max_num_subframes = ((s->decode_flags & 0x38) >> 3);
328  s->max_num_subframes = 1 << log2_max_num_subframes;
329  if (s->max_num_subframes == 16 || s->max_num_subframes == 4)
330  s->max_subframe_len_bit = 1;
331  s->subframe_len_bits = av_log2(log2_max_num_subframes) + 1;
332 
333  num_possible_block_sizes = log2_max_num_subframes + 1;
335  s->dynamic_range_compression = (s->decode_flags & 0x80);
336 
337  if (s->max_num_subframes > MAX_SUBFRAMES) {
338  av_log(avctx, AV_LOG_ERROR, "invalid number of subframes %i\n",
339  s->max_num_subframes);
340  return AVERROR_INVALIDDATA;
341  }
342 
344  av_log(avctx, AV_LOG_ERROR, "min_samples_per_subframe of %d too small\n",
346  return AVERROR_INVALIDDATA;
347  }
348 
349  if (s->avctx->sample_rate <= 0) {
350  av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
351  return AVERROR_INVALIDDATA;
352  }
353 
354  if (avctx->channels < 0) {
355  av_log(avctx, AV_LOG_ERROR, "invalid number of channels %d\n",
356  avctx->channels);
357  return AVERROR_INVALIDDATA;
358  } else if (avctx->channels > WMAPRO_MAX_CHANNELS) {
359  av_log_ask_for_sample(avctx, "unsupported number of channels\n");
360  return AVERROR_PATCHWELCOME;
361  }
362 
363  /** init previous block len */
364  for (i = 0; i < avctx->channels; i++)
366 
367  /** extract lfe channel position */
368  s->lfe_channel = -1;
369 
370  if (channel_mask & 8) {
371  unsigned int mask;
372  for (mask = 1; mask < 16; mask <<= 1) {
373  if (channel_mask & mask)
374  ++s->lfe_channel;
375  }
376  }
377 
379  scale_huffbits, 1, 1,
380  scale_huffcodes, 2, 2, 616);
381 
383  scale_rl_huffbits, 1, 1,
384  scale_rl_huffcodes, 4, 4, 1406);
385 
386  INIT_VLC_STATIC(&coef_vlc[0], VLCBITS, HUFF_COEF0_SIZE,
387  coef0_huffbits, 1, 1,
388  coef0_huffcodes, 4, 4, 2108);
389 
390  INIT_VLC_STATIC(&coef_vlc[1], VLCBITS, HUFF_COEF1_SIZE,
391  coef1_huffbits, 1, 1,
392  coef1_huffcodes, 4, 4, 3912);
393 
395  vec4_huffbits, 1, 1,
396  vec4_huffcodes, 2, 2, 604);
397 
399  vec2_huffbits, 1, 1,
400  vec2_huffcodes, 2, 2, 562);
401 
403  vec1_huffbits, 1, 1,
404  vec1_huffcodes, 2, 2, 562);
405 
406  /** calculate number of scale factor bands and their offsets
407  for every possible block size */
408  for (i = 0; i < num_possible_block_sizes; i++) {
409  int subframe_len = s->samples_per_frame >> i;
410  int x;
411  int band = 1;
412 
413  s->sfb_offsets[i][0] = 0;
414 
415  for (x = 0; x < MAX_BANDS-1 && s->sfb_offsets[i][band - 1] < subframe_len; x++) {
416  int offset = (subframe_len * 2 * critical_freq[x])
417  / s->avctx->sample_rate + 2;
418  offset &= ~3;
419  if (offset > s->sfb_offsets[i][band - 1])
420  s->sfb_offsets[i][band++] = offset;
421  }
422  s->sfb_offsets[i][band - 1] = subframe_len;
423  s->num_sfb[i] = band - 1;
424  if (s->num_sfb[i] <= 0) {
425  av_log(avctx, AV_LOG_ERROR, "num_sfb invalid\n");
426  return AVERROR_INVALIDDATA;
427  }
428  }
429 
430 
431  /** Scale factors can be shared between blocks of different size
432  as every block has a different scale factor band layout.
433  The matrix sf_offsets is needed to find the correct scale factor.
434  */
435 
436  for (i = 0; i < num_possible_block_sizes; i++) {
437  int b;
438  for (b = 0; b < s->num_sfb[i]; b++) {
439  int x;
440  int offset = ((s->sfb_offsets[i][b]
441  + s->sfb_offsets[i][b + 1] - 1) << i) >> 1;
442  for (x = 0; x < num_possible_block_sizes; x++) {
443  int v = 0;
444  while (s->sfb_offsets[x][v + 1] << x < offset)
445  ++v;
446  s->sf_offsets[i][x][b] = v;
447  }
448  }
449  }
450 
451  /** init MDCT, FIXME: only init needed sizes */
452  for (i = 0; i < WMAPRO_BLOCK_SIZES; i++)
454  1.0 / (1 << (WMAPRO_BLOCK_MIN_BITS + i - 1))
455  / (1 << (s->bits_per_sample - 1)));
456 
457  /** init MDCT windows: simple sinus window */
458  for (i = 0; i < WMAPRO_BLOCK_SIZES; i++) {
459  const int win_idx = WMAPRO_BLOCK_MAX_BITS - i;
460  ff_init_ff_sine_windows(win_idx);
461  s->windows[WMAPRO_BLOCK_SIZES - i - 1] = ff_sine_windows[win_idx];
462  }
463 
464  /** calculate subwoofer cutoff values */
465  for (i = 0; i < num_possible_block_sizes; i++) {
466  int block_size = s->samples_per_frame >> i;
467  int cutoff = (440*block_size + 3 * (s->avctx->sample_rate >> 1) - 1)
468  / s->avctx->sample_rate;
469  s->subwoofer_cutoffs[i] = av_clip(cutoff, 4, block_size);
470  }
471 
472  /** calculate sine values for the decorrelation matrix */
473  for (i = 0; i < 33; i++)
474  sin64[i] = sin(i*M_PI / 64.0);
475 
476  if (avctx->debug & FF_DEBUG_BITSTREAM)
477  dump_context(s);
478 
479  avctx->channel_layout = channel_mask;
480 
482  avctx->coded_frame = &s->frame;
483 
484  return 0;
485 }
486 
487 /**
488  *@brief Decode the subframe length.
489  *@param s context
490  *@param offset sample offset in the frame
491  *@return decoded subframe length on success, < 0 in case of an error
492  */
494 {
495  int frame_len_shift = 0;
496  int subframe_len;
497 
498  /** no need to read from the bitstream when only one length is possible */
499  if (offset == s->samples_per_frame - s->min_samples_per_subframe)
500  return s->min_samples_per_subframe;
501 
502  /** 1 bit indicates if the subframe is of maximum length */
503  if (s->max_subframe_len_bit) {
504  if (get_bits1(&s->gb))
505  frame_len_shift = 1 + get_bits(&s->gb, s->subframe_len_bits-1);
506  } else
507  frame_len_shift = get_bits(&s->gb, s->subframe_len_bits);
508 
509  subframe_len = s->samples_per_frame >> frame_len_shift;
510 
511  /** sanity check the length */
512  if (subframe_len < s->min_samples_per_subframe ||
513  subframe_len > s->samples_per_frame) {
514  av_log(s->avctx, AV_LOG_ERROR, "broken frame: subframe_len %i\n",
515  subframe_len);
516  return AVERROR_INVALIDDATA;
517  }
518  return subframe_len;
519 }
520 
521 /**
522  *@brief Decode how the data in the frame is split into subframes.
523  * Every WMA frame contains the encoded data for a fixed number of
524  * samples per channel. The data for every channel might be split
525  * into several subframes. This function will reconstruct the list of
526  * subframes for every channel.
527  *
528  * If the subframes are not evenly split, the algorithm estimates the
529  * channels with the lowest number of total samples.
530  * Afterwards, for each of these channels a bit is read from the
531  * bitstream that indicates if the channel contains a subframe with the
532  * next subframe size that is going to be read from the bitstream or not.
533  * If a channel contains such a subframe, the subframe size gets added to
534  * the channel's subframe list.
535  * The algorithm repeats these steps until the frame is properly divided
536  * between the individual channels.
537  *
538  *@param s context
539  *@return 0 on success, < 0 in case of an error
540  */
542 {
543  uint16_t num_samples[WMAPRO_MAX_CHANNELS] = { 0 };/**< sum of samples for all currently known subframes of a channel */
544  uint8_t contains_subframe[WMAPRO_MAX_CHANNELS]; /**< flag indicating if a channel contains the current subframe */
545  int channels_for_cur_subframe = s->avctx->channels; /**< number of channels that contain the current subframe */
546  int fixed_channel_layout = 0; /**< flag indicating that all channels use the same subframe offsets and sizes */
547  int min_channel_len = 0; /**< smallest sum of samples (channels with this length will be processed first) */
548  int c;
549 
550  /* Should never consume more than 3073 bits (256 iterations for the
551  * while loop when always the minimum amount of 128 samples is subtracted
552  * from missing samples in the 8 channel case).
553  * 1 + BLOCK_MAX_SIZE * MAX_CHANNELS / BLOCK_MIN_SIZE * (MAX_CHANNELS + 4)
554  */
555 
556  /** reset tiling information */
557  for (c = 0; c < s->avctx->channels; c++)
558  s->channel[c].num_subframes = 0;
559 
560  if (s->max_num_subframes == 1 || get_bits1(&s->gb))
561  fixed_channel_layout = 1;
562 
563  /** loop until the frame data is split between the subframes */
564  do {
565  int subframe_len;
566 
567  /** check which channels contain the subframe */
568  for (c = 0; c < s->avctx->channels; c++) {
569  if (num_samples[c] == min_channel_len) {
570  if (fixed_channel_layout || channels_for_cur_subframe == 1 ||
571  (min_channel_len == s->samples_per_frame - s->min_samples_per_subframe))
572  contains_subframe[c] = 1;
573  else
574  contains_subframe[c] = get_bits1(&s->gb);
575  } else
576  contains_subframe[c] = 0;
577  }
578 
579  /** get subframe length, subframe_len == 0 is not allowed */
580  if ((subframe_len = decode_subframe_length(s, min_channel_len)) <= 0)
581  return AVERROR_INVALIDDATA;
582 
583  /** add subframes to the individual channels and find new min_channel_len */
584  min_channel_len += subframe_len;
585  for (c = 0; c < s->avctx->channels; c++) {
586  WMAProChannelCtx* chan = &s->channel[c];
587 
588  if (contains_subframe[c]) {
589  if (chan->num_subframes >= MAX_SUBFRAMES) {
591  "broken frame: num subframes > 31\n");
592  return AVERROR_INVALIDDATA;
593  }
594  chan->subframe_len[chan->num_subframes] = subframe_len;
595  num_samples[c] += subframe_len;
596  ++chan->num_subframes;
597  if (num_samples[c] > s->samples_per_frame) {
598  av_log(s->avctx, AV_LOG_ERROR, "broken frame: "
599  "channel len > samples_per_frame\n");
600  return AVERROR_INVALIDDATA;
601  }
602  } else if (num_samples[c] <= min_channel_len) {
603  if (num_samples[c] < min_channel_len) {
604  channels_for_cur_subframe = 0;
605  min_channel_len = num_samples[c];
606  }
607  ++channels_for_cur_subframe;
608  }
609  }
610  } while (min_channel_len < s->samples_per_frame);
611 
612  for (c = 0; c < s->avctx->channels; c++) {
613  int i;
614  int offset = 0;
615  for (i = 0; i < s->channel[c].num_subframes; i++) {
616  av_dlog(s->avctx, "frame[%i] channel[%i] subframe[%i]"
617  " len %i\n", s->frame_num, c, i,
618  s->channel[c].subframe_len[i]);
619  s->channel[c].subframe_offset[i] = offset;
620  offset += s->channel[c].subframe_len[i];
621  }
622  }
623 
624  return 0;
625 }
626 
627 /**
628  *@brief Calculate a decorrelation matrix from the bitstream parameters.
629  *@param s codec context
630  *@param chgroup channel group for which the matrix needs to be calculated
631  */
633  WMAProChannelGrp *chgroup)
634 {
635  int i;
636  int offset = 0;
637  int8_t rotation_offset[WMAPRO_MAX_CHANNELS * WMAPRO_MAX_CHANNELS];
638  memset(chgroup->decorrelation_matrix, 0, s->avctx->channels *
639  s->avctx->channels * sizeof(*chgroup->decorrelation_matrix));
640 
641  for (i = 0; i < chgroup->num_channels * (chgroup->num_channels - 1) >> 1; i++)
642  rotation_offset[i] = get_bits(&s->gb, 6);
643 
644  for (i = 0; i < chgroup->num_channels; i++)
645  chgroup->decorrelation_matrix[chgroup->num_channels * i + i] =
646  get_bits1(&s->gb) ? 1.0 : -1.0;
647 
648  for (i = 1; i < chgroup->num_channels; i++) {
649  int x;
650  for (x = 0; x < i; x++) {
651  int y;
652  for (y = 0; y < i + 1; y++) {
653  float v1 = chgroup->decorrelation_matrix[x * chgroup->num_channels + y];
654  float v2 = chgroup->decorrelation_matrix[i * chgroup->num_channels + y];
655  int n = rotation_offset[offset + x];
656  float sinv;
657  float cosv;
658 
659  if (n < 32) {
660  sinv = sin64[n];
661  cosv = sin64[32 - n];
662  } else {
663  sinv = sin64[64 - n];
664  cosv = -sin64[n - 32];
665  }
666 
667  chgroup->decorrelation_matrix[y + x * chgroup->num_channels] =
668  (v1 * sinv) - (v2 * cosv);
669  chgroup->decorrelation_matrix[y + i * chgroup->num_channels] =
670  (v1 * cosv) + (v2 * sinv);
671  }
672  }
673  offset += i;
674  }
675 }
676 
677 /**
678  *@brief Decode channel transformation parameters
679  *@param s codec context
680  *@return 0 in case of success, < 0 in case of bitstream errors
681  */
683 {
684  int i;
685  /* should never consume more than 1921 bits for the 8 channel case
686  * 1 + MAX_CHANNELS * (MAX_CHANNELS + 2 + 3 * MAX_CHANNELS * MAX_CHANNELS
687  * + MAX_CHANNELS + MAX_BANDS + 1)
688  */
689 
690  /** in the one channel case channel transforms are pointless */
691  s->num_chgroups = 0;
692  if (s->avctx->channels > 1) {
693  int remaining_channels = s->channels_for_cur_subframe;
694 
695  if (get_bits1(&s->gb)) {
697  "unsupported channel transform bit\n");
698  return AVERROR_PATCHWELCOME;
699  }
700 
701  for (s->num_chgroups = 0; remaining_channels &&
703  WMAProChannelGrp* chgroup = &s->chgroup[s->num_chgroups];
704  float** channel_data = chgroup->channel_data;
705  chgroup->num_channels = 0;
706  chgroup->transform = 0;
707 
708  /** decode channel mask */
709  if (remaining_channels > 2) {
710  for (i = 0; i < s->channels_for_cur_subframe; i++) {
711  int channel_idx = s->channel_indexes_for_cur_subframe[i];
712  if (!s->channel[channel_idx].grouped
713  && get_bits1(&s->gb)) {
714  ++chgroup->num_channels;
715  s->channel[channel_idx].grouped = 1;
716  *channel_data++ = s->channel[channel_idx].coeffs;
717  }
718  }
719  } else {
720  chgroup->num_channels = remaining_channels;
721  for (i = 0; i < s->channels_for_cur_subframe; i++) {
722  int channel_idx = s->channel_indexes_for_cur_subframe[i];
723  if (!s->channel[channel_idx].grouped)
724  *channel_data++ = s->channel[channel_idx].coeffs;
725  s->channel[channel_idx].grouped = 1;
726  }
727  }
728 
729  /** decode transform type */
730  if (chgroup->num_channels == 2) {
731  if (get_bits1(&s->gb)) {
732  if (get_bits1(&s->gb)) {
734  "unsupported channel transform type\n");
735  }
736  } else {
737  chgroup->transform = 1;
738  if (s->avctx->channels == 2) {
739  chgroup->decorrelation_matrix[0] = 1.0;
740  chgroup->decorrelation_matrix[1] = -1.0;
741  chgroup->decorrelation_matrix[2] = 1.0;
742  chgroup->decorrelation_matrix[3] = 1.0;
743  } else {
744  /** cos(pi/4) */
745  chgroup->decorrelation_matrix[0] = 0.70703125;
746  chgroup->decorrelation_matrix[1] = -0.70703125;
747  chgroup->decorrelation_matrix[2] = 0.70703125;
748  chgroup->decorrelation_matrix[3] = 0.70703125;
749  }
750  }
751  } else if (chgroup->num_channels > 2) {
752  if (get_bits1(&s->gb)) {
753  chgroup->transform = 1;
754  if (get_bits1(&s->gb)) {
755  decode_decorrelation_matrix(s, chgroup);
756  } else {
757  /** FIXME: more than 6 coupled channels not supported */
758  if (chgroup->num_channels > 6) {
760  "coupled channels > 6\n");
761  } else {
762  memcpy(chgroup->decorrelation_matrix,
764  chgroup->num_channels * chgroup->num_channels *
765  sizeof(*chgroup->decorrelation_matrix));
766  }
767  }
768  }
769  }
770 
771  /** decode transform on / off */
772  if (chgroup->transform) {
773  if (!get_bits1(&s->gb)) {
774  int i;
775  /** transform can be enabled for individual bands */
776  for (i = 0; i < s->num_bands; i++) {
777  chgroup->transform_band[i] = get_bits1(&s->gb);
778  }
779  } else {
780  memset(chgroup->transform_band, 1, s->num_bands);
781  }
782  }
783  remaining_channels -= chgroup->num_channels;
784  }
785  }
786  return 0;
787 }
788 
789 /**
790  *@brief Extract the coefficients from the bitstream.
791  *@param s codec context
792  *@param c current channel number
793  *@return 0 on success, < 0 in case of bitstream errors
794  */
795 static int decode_coeffs(WMAProDecodeCtx *s, int c)
796 {
797  /* Integers 0..15 as single-precision floats. The table saves a
798  costly int to float conversion, and storing the values as
799  integers allows fast sign-flipping. */
800  static const uint32_t fval_tab[16] = {
801  0x00000000, 0x3f800000, 0x40000000, 0x40400000,
802  0x40800000, 0x40a00000, 0x40c00000, 0x40e00000,
803  0x41000000, 0x41100000, 0x41200000, 0x41300000,
804  0x41400000, 0x41500000, 0x41600000, 0x41700000,
805  };
806  int vlctable;
807  VLC* vlc;
808  WMAProChannelCtx* ci = &s->channel[c];
809  int rl_mode = 0;
810  int cur_coeff = 0;
811  int num_zeros = 0;
812  const uint16_t* run;
813  const float* level;
814 
815  av_dlog(s->avctx, "decode coefficients for channel %i\n", c);
816 
817  vlctable = get_bits1(&s->gb);
818  vlc = &coef_vlc[vlctable];
819 
820  if (vlctable) {
821  run = coef1_run;
822  level = coef1_level;
823  } else {
824  run = coef0_run;
825  level = coef0_level;
826  }
827 
828  /** decode vector coefficients (consumes up to 167 bits per iteration for
829  4 vector coded large values) */
830  while ((s->transmit_num_vec_coeffs || !rl_mode) &&
831  (cur_coeff + 3 < ci->num_vec_coeffs)) {
832  uint32_t vals[4];
833  int i;
834  unsigned int idx;
835 
836  idx = get_vlc2(&s->gb, vec4_vlc.table, VLCBITS, VEC4MAXDEPTH);
837 
838  if (idx == HUFF_VEC4_SIZE - 1) {
839  for (i = 0; i < 4; i += 2) {
840  idx = get_vlc2(&s->gb, vec2_vlc.table, VLCBITS, VEC2MAXDEPTH);
841  if (idx == HUFF_VEC2_SIZE - 1) {
842  uint32_t v0, v1;
843  v0 = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
844  if (v0 == HUFF_VEC1_SIZE - 1)
845  v0 += ff_wma_get_large_val(&s->gb);
846  v1 = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
847  if (v1 == HUFF_VEC1_SIZE - 1)
848  v1 += ff_wma_get_large_val(&s->gb);
849  vals[i ] = av_float2int(v0);
850  vals[i+1] = av_float2int(v1);
851  } else {
852  vals[i] = fval_tab[symbol_to_vec2[idx] >> 4 ];
853  vals[i+1] = fval_tab[symbol_to_vec2[idx] & 0xF];
854  }
855  }
856  } else {
857  vals[0] = fval_tab[ symbol_to_vec4[idx] >> 12 ];
858  vals[1] = fval_tab[(symbol_to_vec4[idx] >> 8) & 0xF];
859  vals[2] = fval_tab[(symbol_to_vec4[idx] >> 4) & 0xF];
860  vals[3] = fval_tab[ symbol_to_vec4[idx] & 0xF];
861  }
862 
863  /** decode sign */
864  for (i = 0; i < 4; i++) {
865  if (vals[i]) {
866  uint32_t sign = get_bits1(&s->gb) - 1;
867  AV_WN32A(&ci->coeffs[cur_coeff], vals[i] ^ sign << 31);
868  num_zeros = 0;
869  } else {
870  ci->coeffs[cur_coeff] = 0;
871  /** switch to run level mode when subframe_len / 128 zeros
872  were found in a row */
873  rl_mode |= (++num_zeros > s->subframe_len >> 8);
874  }
875  ++cur_coeff;
876  }
877  }
878 
879  /** decode run level coded coefficients */
880  if (cur_coeff < s->subframe_len) {
881  memset(&ci->coeffs[cur_coeff], 0,
882  sizeof(*ci->coeffs) * (s->subframe_len - cur_coeff));
883  if (ff_wma_run_level_decode(s->avctx, &s->gb, vlc,
884  level, run, 1, ci->coeffs,
885  cur_coeff, s->subframe_len,
886  s->subframe_len, s->esc_len, 0))
887  return AVERROR_INVALIDDATA;
888  }
889 
890  return 0;
891 }
892 
893 /**
894  *@brief Extract scale factors from the bitstream.
895  *@param s codec context
896  *@return 0 on success, < 0 in case of bitstream errors
897  */
899 {
900  int i;
901 
902  /** should never consume more than 5344 bits
903  * MAX_CHANNELS * (1 + MAX_BANDS * 23)
904  */
905 
906  for (i = 0; i < s->channels_for_cur_subframe; i++) {
908  int* sf;
909  int* sf_end;
911  sf_end = s->channel[c].scale_factors + s->num_bands;
912 
913  /** resample scale factors for the new block size
914  * as the scale factors might need to be resampled several times
915  * before some new values are transmitted, a backup of the last
916  * transmitted scale factors is kept in saved_scale_factors
917  */
918  if (s->channel[c].reuse_sf) {
919  const int8_t* sf_offsets = s->sf_offsets[s->table_idx][s->channel[c].table_idx];
920  int b;
921  for (b = 0; b < s->num_bands; b++)
922  s->channel[c].scale_factors[b] =
923  s->channel[c].saved_scale_factors[s->channel[c].scale_factor_idx][*sf_offsets++];
924  }
925 
926  if (!s->channel[c].cur_subframe || get_bits1(&s->gb)) {
927 
928  if (!s->channel[c].reuse_sf) {
929  int val;
930  /** decode DPCM coded scale factors */
931  s->channel[c].scale_factor_step = get_bits(&s->gb, 2) + 1;
932  val = 45 / s->channel[c].scale_factor_step;
933  for (sf = s->channel[c].scale_factors; sf < sf_end; sf++) {
934  val += get_vlc2(&s->gb, sf_vlc.table, SCALEVLCBITS, SCALEMAXDEPTH) - 60;
935  *sf = val;
936  }
937  } else {
938  int i;
939  /** run level decode differences to the resampled factors */
940  for (i = 0; i < s->num_bands; i++) {
941  int idx;
942  int skip;
943  int val;
944  int sign;
945 
946  idx = get_vlc2(&s->gb, sf_rl_vlc.table, VLCBITS, SCALERLMAXDEPTH);
947 
948  if (!idx) {
949  uint32_t code = get_bits(&s->gb, 14);
950  val = code >> 6;
951  sign = (code & 1) - 1;
952  skip = (code & 0x3f) >> 1;
953  } else if (idx == 1) {
954  break;
955  } else {
956  skip = scale_rl_run[idx];
957  val = scale_rl_level[idx];
958  sign = get_bits1(&s->gb)-1;
959  }
960 
961  i += skip;
962  if (i >= s->num_bands) {
964  "invalid scale factor coding\n");
965  return AVERROR_INVALIDDATA;
966  }
967  s->channel[c].scale_factors[i] += (val ^ sign) - sign;
968  }
969  }
970  /** swap buffers */
972  s->channel[c].table_idx = s->table_idx;
973  s->channel[c].reuse_sf = 1;
974  }
975 
976  /** calculate new scale factor maximum */
978  for (sf = s->channel[c].scale_factors + 1; sf < sf_end; sf++) {
980  FFMAX(s->channel[c].max_scale_factor, *sf);
981  }
982 
983  }
984  return 0;
985 }
986 
987 /**
988  *@brief Reconstruct the individual channel data.
989  *@param s codec context
990  */
992 {
993  int i;
994 
995  for (i = 0; i < s->num_chgroups; i++) {
996  if (s->chgroup[i].transform) {
997  float data[WMAPRO_MAX_CHANNELS];
998  const int num_channels = s->chgroup[i].num_channels;
999  float** ch_data = s->chgroup[i].channel_data;
1000  float** ch_end = ch_data + num_channels;
1001  const int8_t* tb = s->chgroup[i].transform_band;
1002  int16_t* sfb;
1003 
1004  /** multichannel decorrelation */
1005  for (sfb = s->cur_sfb_offsets;
1006  sfb < s->cur_sfb_offsets + s->num_bands; sfb++) {
1007  int y;
1008  if (*tb++ == 1) {
1009  /** multiply values with the decorrelation_matrix */
1010  for (y = sfb[0]; y < FFMIN(sfb[1], s->subframe_len); y++) {
1011  const float* mat = s->chgroup[i].decorrelation_matrix;
1012  const float* data_end = data + num_channels;
1013  float* data_ptr = data;
1014  float** ch;
1015 
1016  for (ch = ch_data; ch < ch_end; ch++)
1017  *data_ptr++ = (*ch)[y];
1018 
1019  for (ch = ch_data; ch < ch_end; ch++) {
1020  float sum = 0;
1021  data_ptr = data;
1022  while (data_ptr < data_end)
1023  sum += *data_ptr++ * *mat++;
1024 
1025  (*ch)[y] = sum;
1026  }
1027  }
1028  } else if (s->avctx->channels == 2) {
1029  int len = FFMIN(sfb[1], s->subframe_len) - sfb[0];
1030  s->fdsp.vector_fmul_scalar(ch_data[0] + sfb[0],
1031  ch_data[0] + sfb[0],
1032  181.0 / 128, len);
1033  s->fdsp.vector_fmul_scalar(ch_data[1] + sfb[0],
1034  ch_data[1] + sfb[0],
1035  181.0 / 128, len);
1036  }
1037  }
1038  }
1039  }
1040 }
1041 
1042 /**
1043  *@brief Apply sine window and reconstruct the output buffer.
1044  *@param s codec context
1045  */
1047 {
1048  int i;
1049  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1050  int c = s->channel_indexes_for_cur_subframe[i];
1051  float* window;
1052  int winlen = s->channel[c].prev_block_len;
1053  float* start = s->channel[c].coeffs - (winlen >> 1);
1054 
1055  if (s->subframe_len < winlen) {
1056  start += (winlen - s->subframe_len) >> 1;
1057  winlen = s->subframe_len;
1058  }
1059 
1060  window = s->windows[av_log2(winlen) - WMAPRO_BLOCK_MIN_BITS];
1061 
1062  winlen >>= 1;
1063 
1064  s->dsp.vector_fmul_window(start, start, start + winlen,
1065  window, winlen);
1066 
1068  }
1069 }
1070 
1071 /**
1072  *@brief Decode a single subframe (block).
1073  *@param s codec context
1074  *@return 0 on success, < 0 when decoding failed
1075  */
1077 {
1078  int offset = s->samples_per_frame;
1079  int subframe_len = s->samples_per_frame;
1080  int i;
1081  int total_samples = s->samples_per_frame * s->avctx->channels;
1082  int transmit_coeffs = 0;
1083  int cur_subwoofer_cutoff;
1084 
1085  s->subframe_offset = get_bits_count(&s->gb);
1086 
1087  /** reset channel context and find the next block offset and size
1088  == the next block of the channel with the smallest number of
1089  decoded samples
1090  */
1091  for (i = 0; i < s->avctx->channels; i++) {
1092  s->channel[i].grouped = 0;
1093  if (offset > s->channel[i].decoded_samples) {
1094  offset = s->channel[i].decoded_samples;
1095  subframe_len =
1097  }
1098  }
1099 
1100  av_dlog(s->avctx,
1101  "processing subframe with offset %i len %i\n", offset, subframe_len);
1102 
1103  /** get a list of all channels that contain the estimated block */
1105  for (i = 0; i < s->avctx->channels; i++) {
1106  const int cur_subframe = s->channel[i].cur_subframe;
1107  /** subtract already processed samples */
1108  total_samples -= s->channel[i].decoded_samples;
1109 
1110  /** and count if there are multiple subframes that match our profile */
1111  if (offset == s->channel[i].decoded_samples &&
1112  subframe_len == s->channel[i].subframe_len[cur_subframe]) {
1113  total_samples -= s->channel[i].subframe_len[cur_subframe];
1114  s->channel[i].decoded_samples +=
1115  s->channel[i].subframe_len[cur_subframe];
1118  }
1119  }
1120 
1121  /** check if the frame will be complete after processing the
1122  estimated block */
1123  if (!total_samples)
1124  s->parsed_all_subframes = 1;
1125 
1126 
1127  av_dlog(s->avctx, "subframe is part of %i channels\n",
1129 
1130  /** calculate number of scale factor bands and their offsets */
1131  s->table_idx = av_log2(s->samples_per_frame/subframe_len);
1132  s->num_bands = s->num_sfb[s->table_idx];
1134  cur_subwoofer_cutoff = s->subwoofer_cutoffs[s->table_idx];
1135 
1136  /** configure the decoder for the current subframe */
1137  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1138  int c = s->channel_indexes_for_cur_subframe[i];
1139 
1140  s->channel[c].coeffs = &s->channel[c].out[(s->samples_per_frame >> 1)
1141  + offset];
1142  }
1143 
1144  s->subframe_len = subframe_len;
1145  s->esc_len = av_log2(s->subframe_len - 1) + 1;
1146 
1147  /** skip extended header if any */
1148  if (get_bits1(&s->gb)) {
1149  int num_fill_bits;
1150  if (!(num_fill_bits = get_bits(&s->gb, 2))) {
1151  int len = get_bits(&s->gb, 4);
1152  num_fill_bits = (len ? get_bits(&s->gb, len) : 0) + 1;
1153  }
1154 
1155  if (num_fill_bits >= 0) {
1156  if (get_bits_count(&s->gb) + num_fill_bits > s->num_saved_bits) {
1157  av_log(s->avctx, AV_LOG_ERROR, "invalid number of fill bits\n");
1158  return AVERROR_INVALIDDATA;
1159  }
1160 
1161  skip_bits_long(&s->gb, num_fill_bits);
1162  }
1163  }
1164 
1165  /** no idea for what the following bit is used */
1166  if (get_bits1(&s->gb)) {
1167  av_log_ask_for_sample(s->avctx, "reserved bit set\n");
1168  return AVERROR_PATCHWELCOME;
1169  }
1170 
1171 
1172  if (decode_channel_transform(s) < 0)
1173  return AVERROR_INVALIDDATA;
1174 
1175 
1176  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1177  int c = s->channel_indexes_for_cur_subframe[i];
1178  if ((s->channel[c].transmit_coefs = get_bits1(&s->gb)))
1179  transmit_coeffs = 1;
1180  }
1181 
1183  if (transmit_coeffs) {
1184  int step;
1185  int quant_step = 90 * s->bits_per_sample >> 4;
1186 
1187  /** decode number of vector coded coefficients */
1188  if ((s->transmit_num_vec_coeffs = get_bits1(&s->gb))) {
1189  int num_bits = av_log2((s->subframe_len + 3)/4) + 1;
1190  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1191  int c = s->channel_indexes_for_cur_subframe[i];
1192  int num_vec_coeffs = get_bits(&s->gb, num_bits) << 2;
1193  if (num_vec_coeffs > s->subframe_len) {
1194  av_log(s->avctx, AV_LOG_ERROR, "num_vec_coeffs %d is too large\n", num_vec_coeffs);
1195  return AVERROR_INVALIDDATA;
1196  }
1197  s->channel[c].num_vec_coeffs = num_vec_coeffs;
1198  }
1199  } else {
1200  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1201  int c = s->channel_indexes_for_cur_subframe[i];
1203  }
1204  }
1205  /** decode quantization step */
1206  step = get_sbits(&s->gb, 6);
1207  quant_step += step;
1208  if (step == -32 || step == 31) {
1209  const int sign = (step == 31) - 1;
1210  int quant = 0;
1211  while (get_bits_count(&s->gb) + 5 < s->num_saved_bits &&
1212  (step = get_bits(&s->gb, 5)) == 31) {
1213  quant += 31;
1214  }
1215  quant_step += ((quant + step) ^ sign) - sign;
1216  }
1217  if (quant_step < 0) {
1218  av_log(s->avctx, AV_LOG_DEBUG, "negative quant step\n");
1219  }
1220 
1221  /** decode quantization step modifiers for every channel */
1222 
1223  if (s->channels_for_cur_subframe == 1) {
1224  s->channel[s->channel_indexes_for_cur_subframe[0]].quant_step = quant_step;
1225  } else {
1226  int modifier_len = get_bits(&s->gb, 3);
1227  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1228  int c = s->channel_indexes_for_cur_subframe[i];
1229  s->channel[c].quant_step = quant_step;
1230  if (get_bits1(&s->gb)) {
1231  if (modifier_len) {
1232  s->channel[c].quant_step += get_bits(&s->gb, modifier_len) + 1;
1233  } else
1234  ++s->channel[c].quant_step;
1235  }
1236  }
1237  }
1238 
1239  /** decode scale factors */
1240  if (decode_scale_factors(s) < 0)
1241  return AVERROR_INVALIDDATA;
1242  }
1243 
1244  av_dlog(s->avctx, "BITSTREAM: subframe header length was %i\n",
1245  get_bits_count(&s->gb) - s->subframe_offset);
1246 
1247  /** parse coefficients */
1248  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1249  int c = s->channel_indexes_for_cur_subframe[i];
1250  if (s->channel[c].transmit_coefs &&
1251  get_bits_count(&s->gb) < s->num_saved_bits) {
1252  decode_coeffs(s, c);
1253  } else
1254  memset(s->channel[c].coeffs, 0,
1255  sizeof(*s->channel[c].coeffs) * subframe_len);
1256  }
1257 
1258  av_dlog(s->avctx, "BITSTREAM: subframe length was %i\n",
1259  get_bits_count(&s->gb) - s->subframe_offset);
1260 
1261  if (transmit_coeffs) {
1262  FFTContext *mdct = &s->mdct_ctx[av_log2(subframe_len) - WMAPRO_BLOCK_MIN_BITS];
1263  /** reconstruct the per channel data */
1265  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1266  int c = s->channel_indexes_for_cur_subframe[i];
1267  const int* sf = s->channel[c].scale_factors;
1268  int b;
1269 
1270  if (c == s->lfe_channel)
1271  memset(&s->tmp[cur_subwoofer_cutoff], 0, sizeof(*s->tmp) *
1272  (subframe_len - cur_subwoofer_cutoff));
1273 
1274  /** inverse quantization and rescaling */
1275  for (b = 0; b < s->num_bands; b++) {
1276  const int end = FFMIN(s->cur_sfb_offsets[b+1], s->subframe_len);
1277  const int exp = s->channel[c].quant_step -
1278  (s->channel[c].max_scale_factor - *sf++) *
1279  s->channel[c].scale_factor_step;
1280  const float quant = pow(10.0, exp / 20.0);
1281  int start = s->cur_sfb_offsets[b];
1282  s->fdsp.vector_fmul_scalar(s->tmp + start,
1283  s->channel[c].coeffs + start,
1284  quant, end - start);
1285  }
1286 
1287  /** apply imdct (imdct_half == DCTIV with reverse) */
1288  mdct->imdct_half(mdct, s->channel[c].coeffs, s->tmp);
1289  }
1290  }
1291 
1292  /** window and overlapp-add */
1293  wmapro_window(s);
1294 
1295  /** handled one subframe */
1296  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1297  int c = s->channel_indexes_for_cur_subframe[i];
1298  if (s->channel[c].cur_subframe >= s->channel[c].num_subframes) {
1299  av_log(s->avctx, AV_LOG_ERROR, "broken subframe\n");
1300  return AVERROR_INVALIDDATA;
1301  }
1302  ++s->channel[c].cur_subframe;
1303  }
1304 
1305  return 0;
1306 }
1307 
1308 /**
1309  *@brief Decode one WMA frame.
1310  *@param s codec context
1311  *@return 0 if the trailer bit indicates that this is the last frame,
1312  * 1 if there are additional frames
1313  */
1314 static int decode_frame(WMAProDecodeCtx *s, int *got_frame_ptr)
1315 {
1316  AVCodecContext *avctx = s->avctx;
1317  GetBitContext* gb = &s->gb;
1318  int more_frames = 0;
1319  int len = 0;
1320  int i, ret;
1321 
1322  /** get frame length */
1323  if (s->len_prefix)
1324  len = get_bits(gb, s->log2_frame_size);
1325 
1326  av_dlog(s->avctx, "decoding frame with length %x\n", len);
1327 
1328  /** decode tile information */
1329  if (decode_tilehdr(s)) {
1330  s->packet_loss = 1;
1331  return 0;
1332  }
1333 
1334  /** read postproc transform */
1335  if (s->avctx->channels > 1 && get_bits1(gb)) {
1336  if (get_bits1(gb)) {
1337  for (i = 0; i < avctx->channels * avctx->channels; i++)
1338  skip_bits(gb, 4);
1339  }
1340  }
1341 
1342  /** read drc info */
1343  if (s->dynamic_range_compression) {
1344  s->drc_gain = get_bits(gb, 8);
1345  av_dlog(s->avctx, "drc_gain %i\n", s->drc_gain);
1346  }
1347 
1348  /** no idea what these are for, might be the number of samples
1349  that need to be skipped at the beginning or end of a stream */
1350  if (get_bits1(gb)) {
1351  int av_unused skip;
1352 
1353  /** usually true for the first frame */
1354  if (get_bits1(gb)) {
1355  skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
1356  av_dlog(s->avctx, "start skip: %i\n", skip);
1357  }
1358 
1359  /** sometimes true for the last frame */
1360  if (get_bits1(gb)) {
1361  skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
1362  av_dlog(s->avctx, "end skip: %i\n", skip);
1363  }
1364 
1365  }
1366 
1367  av_dlog(s->avctx, "BITSTREAM: frame header length was %i\n",
1368  get_bits_count(gb) - s->frame_offset);
1369 
1370  /** reset subframe states */
1371  s->parsed_all_subframes = 0;
1372  for (i = 0; i < avctx->channels; i++) {
1373  s->channel[i].decoded_samples = 0;
1374  s->channel[i].cur_subframe = 0;
1375  s->channel[i].reuse_sf = 0;
1376  }
1377 
1378  /** decode all subframes */
1379  while (!s->parsed_all_subframes) {
1380  if (decode_subframe(s) < 0) {
1381  s->packet_loss = 1;
1382  return 0;
1383  }
1384  }
1385 
1386  /* get output buffer */
1388  if ((ret = ff_get_buffer(avctx, &s->frame)) < 0) {
1389  av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1390  s->packet_loss = 1;
1391  return 0;
1392  }
1393 
1394  /** copy samples to the output buffer */
1395  for (i = 0; i < avctx->channels; i++)
1396  memcpy(s->frame.extended_data[i], s->channel[i].out,
1397  s->samples_per_frame * sizeof(*s->channel[i].out));
1398 
1399  for (i = 0; i < avctx->channels; i++) {
1400  /** reuse second half of the IMDCT output for the next frame */
1401  memcpy(&s->channel[i].out[0],
1402  &s->channel[i].out[s->samples_per_frame],
1403  s->samples_per_frame * sizeof(*s->channel[i].out) >> 1);
1404  }
1405 
1406  if (s->skip_frame) {
1407  s->skip_frame = 0;
1408  *got_frame_ptr = 0;
1409  } else {
1410  *got_frame_ptr = 1;
1411  }
1412 
1413  if (s->len_prefix) {
1414  if (len != (get_bits_count(gb) - s->frame_offset) + 2) {
1415  /** FIXME: not sure if this is always an error */
1417  "frame[%i] would have to skip %i bits\n", s->frame_num,
1418  len - (get_bits_count(gb) - s->frame_offset) - 1);
1419  s->packet_loss = 1;
1420  return 0;
1421  }
1422 
1423  /** skip the rest of the frame data */
1424  skip_bits_long(gb, len - (get_bits_count(gb) - s->frame_offset) - 1);
1425  } else {
1426  while (get_bits_count(gb) < s->num_saved_bits && get_bits1(gb) == 0) {
1427  }
1428  }
1429 
1430  /** decode trailer bit */
1431  more_frames = get_bits1(gb);
1432 
1433  ++s->frame_num;
1434  return more_frames;
1435 }
1436 
1437 /**
1438  *@brief Calculate remaining input buffer length.
1439  *@param s codec context
1440  *@param gb bitstream reader context
1441  *@return remaining size in bits
1442  */
1444 {
1445  return s->buf_bit_size - get_bits_count(gb);
1446 }
1447 
1448 /**
1449  *@brief Fill the bit reservoir with a (partial) frame.
1450  *@param s codec context
1451  *@param gb bitstream reader context
1452  *@param len length of the partial frame
1453  *@param append decides whether to reset the buffer or not
1454  */
1455 static void save_bits(WMAProDecodeCtx *s, GetBitContext* gb, int len,
1456  int append)
1457 {
1458  int buflen;
1459 
1460  /** when the frame data does not need to be concatenated, the input buffer
1461  is reset and additional bits from the previous frame are copied
1462  and skipped later so that a fast byte copy is possible */
1463 
1464  if (!append) {
1465  s->frame_offset = get_bits_count(gb) & 7;
1466  s->num_saved_bits = s->frame_offset;
1468  }
1469 
1470  buflen = (put_bits_count(&s->pb) + len + 8) >> 3;
1471 
1472  if (len <= 0 || buflen > MAX_FRAMESIZE) {
1473  av_log_ask_for_sample(s->avctx, "input buffer too small\n");
1474  s->packet_loss = 1;
1475  return;
1476  }
1477 
1478  s->num_saved_bits += len;
1479  if (!append) {
1480  avpriv_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3),
1481  s->num_saved_bits);
1482  } else {
1483  int align = 8 - (get_bits_count(gb) & 7);
1484  align = FFMIN(align, len);
1485  put_bits(&s->pb, align, get_bits(gb, align));
1486  len -= align;
1487  avpriv_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3), len);
1488  }
1489  skip_bits_long(gb, len);
1490 
1491  {
1492  PutBitContext tmp = s->pb;
1493  flush_put_bits(&tmp);
1494  }
1495 
1497  skip_bits(&s->gb, s->frame_offset);
1498 }
1499 
1500 /**
1501  *@brief Decode a single WMA packet.
1502  *@param avctx codec context
1503  *@param data the output buffer
1504  *@param avpkt input packet
1505  *@return number of bytes that were read from the input buffer
1506  */
1507 static int decode_packet(AVCodecContext *avctx, void *data,
1508  int *got_frame_ptr, AVPacket* avpkt)
1509 {
1510  WMAProDecodeCtx *s = avctx->priv_data;
1511  GetBitContext* gb = &s->pgb;
1512  const uint8_t* buf = avpkt->data;
1513  int buf_size = avpkt->size;
1514  int num_bits_prev_frame;
1515  int packet_sequence_number;
1516 
1517  *got_frame_ptr = 0;
1518 
1519  if (s->packet_done || s->packet_loss) {
1520  s->packet_done = 0;
1521 
1522  /** sanity check for the buffer length */
1523  if (buf_size < avctx->block_align) {
1524  av_log(avctx, AV_LOG_ERROR, "Input packet too small (%d < %d)\n",
1525  buf_size, avctx->block_align);
1526  return AVERROR_INVALIDDATA;
1527  }
1528 
1529  s->next_packet_start = buf_size - avctx->block_align;
1530  buf_size = avctx->block_align;
1531  s->buf_bit_size = buf_size << 3;
1532 
1533  /** parse packet header */
1534  init_get_bits(gb, buf, s->buf_bit_size);
1535  packet_sequence_number = get_bits(gb, 4);
1536  skip_bits(gb, 2);
1537 
1538  /** get number of bits that need to be added to the previous frame */
1539  num_bits_prev_frame = get_bits(gb, s->log2_frame_size);
1540  av_dlog(avctx, "packet[%d]: nbpf %x\n", avctx->frame_number,
1541  num_bits_prev_frame);
1542 
1543  /** check for packet loss */
1544  if (!s->packet_loss &&
1545  ((s->packet_sequence_number + 1) & 0xF) != packet_sequence_number) {
1546  s->packet_loss = 1;
1547  av_log(avctx, AV_LOG_ERROR, "Packet loss detected! seq %x vs %x\n",
1548  s->packet_sequence_number, packet_sequence_number);
1549  }
1550  s->packet_sequence_number = packet_sequence_number;
1551 
1552  if (num_bits_prev_frame > 0) {
1553  int remaining_packet_bits = s->buf_bit_size - get_bits_count(gb);
1554  if (num_bits_prev_frame >= remaining_packet_bits) {
1555  num_bits_prev_frame = remaining_packet_bits;
1556  s->packet_done = 1;
1557  }
1558 
1559  /** append the previous frame data to the remaining data from the
1560  previous packet to create a full frame */
1561  save_bits(s, gb, num_bits_prev_frame, 1);
1562  av_dlog(avctx, "accumulated %x bits of frame data\n",
1563  s->num_saved_bits - s->frame_offset);
1564 
1565  /** decode the cross packet frame if it is valid */
1566  if (!s->packet_loss)
1567  decode_frame(s, got_frame_ptr);
1568  } else if (s->num_saved_bits - s->frame_offset) {
1569  av_dlog(avctx, "ignoring %x previously saved bits\n",
1570  s->num_saved_bits - s->frame_offset);
1571  }
1572 
1573  if (s->packet_loss) {
1574  /** reset number of saved bits so that the decoder
1575  does not start to decode incomplete frames in the
1576  s->len_prefix == 0 case */
1577  s->num_saved_bits = 0;
1578  s->packet_loss = 0;
1579  }
1580 
1581  } else {
1582  int frame_size;
1583  s->buf_bit_size = (avpkt->size - s->next_packet_start) << 3;
1584  init_get_bits(gb, avpkt->data, s->buf_bit_size);
1585  skip_bits(gb, s->packet_offset);
1586  if (s->len_prefix && remaining_bits(s, gb) > s->log2_frame_size &&
1587  (frame_size = show_bits(gb, s->log2_frame_size)) &&
1588  frame_size <= remaining_bits(s, gb)) {
1589  save_bits(s, gb, frame_size, 0);
1590  s->packet_done = !decode_frame(s, got_frame_ptr);
1591  } else if (!s->len_prefix
1592  && s->num_saved_bits > get_bits_count(&s->gb)) {
1593  /** when the frames do not have a length prefix, we don't know
1594  the compressed length of the individual frames
1595  however, we know what part of a new packet belongs to the
1596  previous frame
1597  therefore we save the incoming packet first, then we append
1598  the "previous frame" data from the next packet so that
1599  we get a buffer that only contains full frames */
1600  s->packet_done = !decode_frame(s, got_frame_ptr);
1601  } else
1602  s->packet_done = 1;
1603  }
1604 
1605  if (s->packet_done && !s->packet_loss &&
1606  remaining_bits(s, gb) > 0) {
1607  /** save the rest of the data so that it can be decoded
1608  with the next packet */
1609  save_bits(s, gb, remaining_bits(s, gb), 0);
1610  }
1611 
1612  s->packet_offset = get_bits_count(gb) & 7;
1613  if (s->packet_loss)
1614  return AVERROR_INVALIDDATA;
1615 
1616  if (*got_frame_ptr)
1617  *(AVFrame *)data = s->frame;
1618 
1619  return get_bits_count(gb) >> 3;
1620 }
1621 
1622 /**
1623  *@brief Clear decoder buffers (for seeking).
1624  *@param avctx codec context
1625  */
1626 static void flush(AVCodecContext *avctx)
1627 {
1628  WMAProDecodeCtx *s = avctx->priv_data;
1629  int i;
1630  /** reset output buffer as a part of it is used during the windowing of a
1631  new frame */
1632  for (i = 0; i < avctx->channels; i++)
1633  memset(s->channel[i].out, 0, s->samples_per_frame *
1634  sizeof(*s->channel[i].out));
1635  s->packet_loss = 1;
1636 }
1637 
1638 
1639 /**
1640  *@brief wmapro decoder
1641  */
1643  .name = "wmapro",
1644  .type = AVMEDIA_TYPE_AUDIO,
1645  .id = AV_CODEC_ID_WMAPRO,
1646  .priv_data_size = sizeof(WMAProDecodeCtx),
1647  .init = decode_init,
1648  .close = decode_end,
1649  .decode = decode_packet,
1650  .capabilities = CODEC_CAP_SUBFRAMES | CODEC_CAP_DR1,
1651  .flush = flush,
1652  .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 9 Professional"),
1653  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
1655 };