FFmpeg
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 <inttypes.h>
90 
91 #include "libavutil/ffmath.h"
92 #include "libavutil/float_dsp.h"
93 #include "libavutil/intfloat.h"
94 #include "libavutil/intreadwrite.h"
95 #include "libavutil/mem_internal.h"
96 
97 #include "avcodec.h"
98 #include "internal.h"
99 #include "get_bits.h"
100 #include "put_bits.h"
101 #include "wmaprodata.h"
102 #include "sinewin.h"
103 #include "wma.h"
104 #include "wma_common.h"
105 
106 /** current decoder limitations */
107 #define WMAPRO_MAX_CHANNELS 8 ///< max number of handled channels
108 #define MAX_SUBFRAMES 32 ///< max number of subframes per channel
109 #define MAX_BANDS 29 ///< max number of scale factor bands
110 #define MAX_FRAMESIZE 32768 ///< maximum compressed frame size
111 #define XMA_MAX_STREAMS 8
112 #define XMA_MAX_CHANNELS_STREAM 2
113 #define XMA_MAX_CHANNELS (XMA_MAX_STREAMS * XMA_MAX_CHANNELS_STREAM)
114 
115 #define WMAPRO_BLOCK_MIN_BITS 6 ///< log2 of min block size
116 #define WMAPRO_BLOCK_MAX_BITS 13 ///< log2 of max block size
117 #define WMAPRO_BLOCK_MIN_SIZE (1 << WMAPRO_BLOCK_MIN_BITS) ///< minimum block size
118 #define WMAPRO_BLOCK_MAX_SIZE (1 << WMAPRO_BLOCK_MAX_BITS) ///< maximum block size
119 #define WMAPRO_BLOCK_SIZES (WMAPRO_BLOCK_MAX_BITS - WMAPRO_BLOCK_MIN_BITS + 1) ///< possible block sizes
120 
121 
122 #define VLCBITS 9
123 #define SCALEVLCBITS 8
124 #define VEC4MAXDEPTH ((HUFF_VEC4_MAXBITS+VLCBITS-1)/VLCBITS)
125 #define VEC2MAXDEPTH ((HUFF_VEC2_MAXBITS+VLCBITS-1)/VLCBITS)
126 #define VEC1MAXDEPTH ((HUFF_VEC1_MAXBITS+VLCBITS-1)/VLCBITS)
127 #define SCALEMAXDEPTH ((HUFF_SCALE_MAXBITS+SCALEVLCBITS-1)/SCALEVLCBITS)
128 #define SCALERLMAXDEPTH ((HUFF_SCALE_RL_MAXBITS+VLCBITS-1)/VLCBITS)
129 
130 static VLC sf_vlc; ///< scale factor DPCM vlc
131 static VLC sf_rl_vlc; ///< scale factor run length vlc
132 static VLC vec4_vlc; ///< 4 coefficients per symbol
133 static VLC vec2_vlc; ///< 2 coefficients per symbol
134 static VLC vec1_vlc; ///< 1 coefficient per symbol
135 static VLC coef_vlc[2]; ///< coefficient run length vlc codes
136 static float sin64[33]; ///< sine table for decorrelation
137 
138 /**
139  * @brief frame specific decoder context for a single channel
140  */
141 typedef struct WMAProChannelCtx {
142  int16_t prev_block_len; ///< length of the previous block
145  uint16_t subframe_len[MAX_SUBFRAMES]; ///< subframe length in samples
146  uint16_t subframe_offset[MAX_SUBFRAMES]; ///< subframe positions in the current frame
147  uint8_t cur_subframe; ///< current subframe number
148  uint16_t decoded_samples; ///< number of already processed samples
149  uint8_t grouped; ///< channel is part of a group
150  int quant_step; ///< quantization step for the current subframe
151  int8_t reuse_sf; ///< share scale factors between subframes
152  int8_t scale_factor_step; ///< scaling step for the current subframe
153  int max_scale_factor; ///< maximum scale factor for the current subframe
154  int saved_scale_factors[2][MAX_BANDS]; ///< resampled and (previously) transmitted scale factor values
155  int8_t scale_factor_idx; ///< index for the transmitted scale factor values (used for resampling)
156  int* scale_factors; ///< pointer to the scale factor values used for decoding
157  uint8_t table_idx; ///< index in sf_offsets for the scale factor reference block
158  float* coeffs; ///< pointer to the subframe decode buffer
159  uint16_t num_vec_coeffs; ///< number of vector coded coefficients
160  DECLARE_ALIGNED(32, float, out)[WMAPRO_BLOCK_MAX_SIZE + WMAPRO_BLOCK_MAX_SIZE / 2]; ///< output buffer
162 
163 /**
164  * @brief channel group for channel transformations
165  */
166 typedef struct WMAProChannelGrp {
167  uint8_t num_channels; ///< number of channels in the group
168  int8_t transform; ///< transform on / off
169  int8_t transform_band[MAX_BANDS]; ///< controls if the transform is enabled for a certain band
170  float decorrelation_matrix[WMAPRO_MAX_CHANNELS*WMAPRO_MAX_CHANNELS];
171  float* channel_data[WMAPRO_MAX_CHANNELS]; ///< transformation coefficients
173 
174 /**
175  * @brief main decoder context
176  */
177 typedef struct WMAProDecodeCtx {
178  /* generic decoder variables */
179  AVCodecContext* avctx; ///< codec context for av_log
181  uint8_t frame_data[MAX_FRAMESIZE +
182  AV_INPUT_BUFFER_PADDING_SIZE];///< compressed frame data
183  PutBitContext pb; ///< context for filling the frame_data buffer
184  FFTContext mdct_ctx[WMAPRO_BLOCK_SIZES]; ///< MDCT context per block size
185  DECLARE_ALIGNED(32, float, tmp)[WMAPRO_BLOCK_MAX_SIZE]; ///< IMDCT output buffer
186  const float* windows[WMAPRO_BLOCK_SIZES]; ///< windows for the different block sizes
187 
188  /* frame size dependent frame information (set during initialization) */
189  uint32_t decode_flags; ///< used compression features
190  uint8_t len_prefix; ///< frame is prefixed with its length
191  uint8_t dynamic_range_compression; ///< frame contains DRC data
192  uint8_t bits_per_sample; ///< integer audio sample size for the unscaled IMDCT output (used to scale to [-1.0, 1.0])
193  uint16_t samples_per_frame; ///< number of samples to output
194  uint16_t log2_frame_size;
195  int8_t lfe_channel; ///< lfe channel index
197  uint8_t subframe_len_bits; ///< number of bits used for the subframe length
198  uint8_t max_subframe_len_bit; ///< flag indicating that the subframe is of maximum size when the first subframe length bit is 1
200  int8_t num_sfb[WMAPRO_BLOCK_SIZES]; ///< scale factor bands per block size
201  int16_t sfb_offsets[WMAPRO_BLOCK_SIZES][MAX_BANDS]; ///< scale factor band offsets (multiples of 4)
202  int8_t sf_offsets[WMAPRO_BLOCK_SIZES][WMAPRO_BLOCK_SIZES][MAX_BANDS]; ///< scale factor resample matrix
203  int16_t subwoofer_cutoffs[WMAPRO_BLOCK_SIZES]; ///< subwoofer cutoff values
204 
205  /* packet decode state */
206  GetBitContext pgb; ///< bitstream reader context for the packet
207  int next_packet_start; ///< start offset of the next wma packet in the demuxer packet
208  uint8_t packet_offset; ///< frame offset in the packet
209  uint8_t packet_sequence_number; ///< current packet number
210  int num_saved_bits; ///< saved number of bits
211  int frame_offset; ///< frame offset in the bit reservoir
212  int subframe_offset; ///< subframe offset in the bit reservoir
213  uint8_t packet_loss; ///< set in case of bitstream error
214  uint8_t packet_done; ///< set when a packet is fully decoded
215  uint8_t eof_done; ///< set when EOF reached and extra subframe is written (XMA1/2)
216 
217  /* frame decode state */
218  uint32_t frame_num; ///< current frame number (not used for decoding)
219  GetBitContext gb; ///< bitstream reader context
220  int buf_bit_size; ///< buffer size in bits
221  uint8_t drc_gain; ///< gain for the DRC tool
222  int8_t skip_frame; ///< skip output step
223  int8_t parsed_all_subframes; ///< all subframes decoded?
224  uint8_t skip_packets; ///< packets to skip to find next packet in a stream (XMA1/2)
225 
226  /* subframe/block decode state */
227  int16_t subframe_len; ///< current subframe length
228  int8_t nb_channels; ///< number of channels in stream (XMA1/2)
229  int8_t channels_for_cur_subframe; ///< number of channels that contain the subframe
230  int8_t channel_indexes_for_cur_subframe[WMAPRO_MAX_CHANNELS];
231  int8_t num_bands; ///< number of scale factor bands
232  int8_t transmit_num_vec_coeffs; ///< number of vector coded coefficients is part of the bitstream
233  int16_t* cur_sfb_offsets; ///< sfb offsets for the current block
234  uint8_t table_idx; ///< index for the num_sfb, sfb_offsets, sf_offsets and subwoofer_cutoffs tables
235  int8_t esc_len; ///< length of escaped coefficients
236 
237  uint8_t num_chgroups; ///< number of channel groups
238  WMAProChannelGrp chgroup[WMAPRO_MAX_CHANNELS]; ///< channel group information
239 
242 
243 typedef struct XMADecodeCtx {
248  float samples[XMA_MAX_CHANNELS][512 * 64];
250  int start_channel[XMA_MAX_STREAMS];
251 } XMADecodeCtx;
252 
253 /**
254  *@brief helper function to print the most important members of the context
255  *@param s context
256  */
258 {
259 #define PRINT(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %d\n", a, b);
260 #define PRINT_HEX(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %"PRIx32"\n", a, b);
261 
262  PRINT("ed sample bit depth", s->bits_per_sample);
263  PRINT_HEX("ed decode flags", s->decode_flags);
264  PRINT("samples per frame", s->samples_per_frame);
265  PRINT("log2 frame size", s->log2_frame_size);
266  PRINT("max num subframes", s->max_num_subframes);
267  PRINT("len prefix", s->len_prefix);
268  PRINT("num channels", s->nb_channels);
269 }
270 
271 /**
272  *@brief Uninitialize the decoder and free all resources.
273  *@param avctx codec context
274  *@return 0 on success, < 0 otherwise
275  */
277 {
278  int i;
279 
280  av_freep(&s->fdsp);
281 
282  for (i = 0; i < WMAPRO_BLOCK_SIZES; i++)
283  ff_mdct_end(&s->mdct_ctx[i]);
284 
285  return 0;
286 }
287 
289 {
290  WMAProDecodeCtx *s = avctx->priv_data;
291 
292  decode_end(s);
293 
294  return 0;
295 }
296 
297 static av_cold int get_rate(AVCodecContext *avctx)
298 {
299  if (avctx->codec_id != AV_CODEC_ID_WMAPRO) { // XXX: is this really only for XMA?
300  if (avctx->sample_rate > 44100)
301  return 48000;
302  else if (avctx->sample_rate > 32000)
303  return 44100;
304  else if (avctx->sample_rate > 24000)
305  return 32000;
306  return 24000;
307  }
308 
309  return avctx->sample_rate;
310 }
311 
312 /**
313  *@brief Initialize the decoder.
314  *@param avctx codec context
315  *@return 0 on success, -1 otherwise
316  */
317 static av_cold int decode_init(WMAProDecodeCtx *s, AVCodecContext *avctx, int num_stream)
318 {
319  uint8_t *edata_ptr = avctx->extradata;
320  unsigned int channel_mask;
321  int i, bits;
322  int log2_max_num_subframes;
323  int num_possible_block_sizes;
324 
325  if (avctx->codec_id == AV_CODEC_ID_XMA1 || avctx->codec_id == AV_CODEC_ID_XMA2)
326  avctx->block_align = 2048;
327 
328  if (!avctx->block_align) {
329  av_log(avctx, AV_LOG_ERROR, "block_align is not set\n");
330  return AVERROR(EINVAL);
331  }
332 
333  s->avctx = avctx;
334 
336 
338 
339  /** dump the extradata */
340  av_log(avctx, AV_LOG_DEBUG, "extradata:\n");
341  for (i = 0; i < avctx->extradata_size; i++)
342  av_log(avctx, AV_LOG_DEBUG, "[%x] ", avctx->extradata[i]);
343  av_log(avctx, AV_LOG_DEBUG, "\n");
344 
345  if (avctx->codec_id == AV_CODEC_ID_XMA2 && avctx->extradata_size == 34) { /* XMA2WAVEFORMATEX */
346  s->decode_flags = 0x10d6;
347  s->bits_per_sample = 16;
348  channel_mask = 0; //AV_RL32(edata_ptr+2); /* not always in expected order */
349  if ((num_stream+1) * XMA_MAX_CHANNELS_STREAM > avctx->channels) /* stream config is 2ch + 2ch + ... + 1/2ch */
350  s->nb_channels = 1;
351  else
352  s->nb_channels = 2;
353  } else if (avctx->codec_id == AV_CODEC_ID_XMA2) { /* XMA2WAVEFORMAT */
354  s->decode_flags = 0x10d6;
355  s->bits_per_sample = 16;
356  channel_mask = 0; /* would need to aggregate from all streams */
357  s->nb_channels = edata_ptr[32 + ((edata_ptr[0]==3)?0:8) + 4*num_stream + 0]; /* nth stream config */
358  } else if (avctx->codec_id == AV_CODEC_ID_XMA1) { /* XMAWAVEFORMAT */
359  s->decode_flags = 0x10d6;
360  s->bits_per_sample = 16;
361  channel_mask = 0; /* would need to aggregate from all streams */
362  s->nb_channels = edata_ptr[8 + 20*num_stream + 17]; /* nth stream config */
363  } else if (avctx->codec_id == AV_CODEC_ID_WMAPRO && avctx->extradata_size >= 18) {
364  s->decode_flags = AV_RL16(edata_ptr+14);
365  channel_mask = AV_RL32(edata_ptr+2);
366  s->bits_per_sample = AV_RL16(edata_ptr);
367  s->nb_channels = avctx->channels;
368 
369  if (s->bits_per_sample > 32 || s->bits_per_sample < 1) {
370  avpriv_request_sample(avctx, "bits per sample is %d", s->bits_per_sample);
371  return AVERROR_PATCHWELCOME;
372  }
373  } else {
374  avpriv_request_sample(avctx, "Unknown extradata size");
375  return AVERROR_PATCHWELCOME;
376  }
377 
378  /** generic init */
379  s->log2_frame_size = av_log2(avctx->block_align) + 4;
380  if (s->log2_frame_size > 25) {
381  avpriv_request_sample(avctx, "Large block align");
382  return AVERROR_PATCHWELCOME;
383  }
384 
385  /** frame info */
386  if (avctx->codec_id != AV_CODEC_ID_WMAPRO)
387  s->skip_frame = 0;
388  else
389  s->skip_frame = 1; /* skip first frame */
390 
391  s->packet_loss = 1;
392  s->len_prefix = (s->decode_flags & 0x40);
393 
394  /** get frame len */
395  if (avctx->codec_id == AV_CODEC_ID_WMAPRO) {
396  bits = ff_wma_get_frame_len_bits(avctx->sample_rate, 3, s->decode_flags);
397  if (bits > WMAPRO_BLOCK_MAX_BITS) {
398  avpriv_request_sample(avctx, "14-bit block sizes");
399  return AVERROR_PATCHWELCOME;
400  }
401  s->samples_per_frame = 1 << bits;
402  } else {
403  s->samples_per_frame = 512;
404  }
405 
406  /** subframe info */
407  log2_max_num_subframes = ((s->decode_flags & 0x38) >> 3);
408  s->max_num_subframes = 1 << log2_max_num_subframes;
409  if (s->max_num_subframes == 16 || s->max_num_subframes == 4)
410  s->max_subframe_len_bit = 1;
411  s->subframe_len_bits = av_log2(log2_max_num_subframes) + 1;
412 
413  num_possible_block_sizes = log2_max_num_subframes + 1;
415  s->dynamic_range_compression = (s->decode_flags & 0x80);
416 
417  if (s->max_num_subframes > MAX_SUBFRAMES) {
418  av_log(avctx, AV_LOG_ERROR, "invalid number of subframes %"PRId8"\n",
419  s->max_num_subframes);
420  return AVERROR_INVALIDDATA;
421  }
422 
424  av_log(avctx, AV_LOG_ERROR, "min_samples_per_subframe of %d too small\n",
426  return AVERROR_INVALIDDATA;
427  }
428 
429  if (s->avctx->sample_rate <= 0) {
430  av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
431  return AVERROR_INVALIDDATA;
432  }
433 
434  if (s->nb_channels <= 0) {
435  av_log(avctx, AV_LOG_ERROR, "invalid number of channels %d\n",
436  s->nb_channels);
437  return AVERROR_INVALIDDATA;
438  } else if (avctx->codec_id != AV_CODEC_ID_WMAPRO && s->nb_channels > XMA_MAX_CHANNELS_STREAM) {
439  av_log(avctx, AV_LOG_ERROR, "invalid number of channels per XMA stream %d\n",
440  s->nb_channels);
441  return AVERROR_INVALIDDATA;
442  } else if (s->nb_channels > WMAPRO_MAX_CHANNELS || s->nb_channels > avctx->channels) {
443  avpriv_request_sample(avctx,
444  "More than %d channels", WMAPRO_MAX_CHANNELS);
445  return AVERROR_PATCHWELCOME;
446  }
447 
448  /** init previous block len */
449  for (i = 0; i < s->nb_channels; i++)
451 
452  /** extract lfe channel position */
453  s->lfe_channel = -1;
454 
455  if (channel_mask & 8) {
456  unsigned int mask;
457  for (mask = 1; mask < 16; mask <<= 1) {
458  if (channel_mask & mask)
459  ++s->lfe_channel;
460  }
461  }
462 
464  scale_huffbits, 1, 1,
465  scale_huffcodes, 2, 2, 616);
466 
468  scale_rl_huffbits, 1, 1,
469  scale_rl_huffcodes, 4, 4, 1406);
470 
471  INIT_VLC_STATIC(&coef_vlc[0], VLCBITS, HUFF_COEF0_SIZE,
472  coef0_huffbits, 1, 1,
473  coef0_huffcodes, 4, 4, 2108);
474 
475  INIT_VLC_STATIC(&coef_vlc[1], VLCBITS, HUFF_COEF1_SIZE,
476  coef1_huffbits, 1, 1,
477  coef1_huffcodes, 4, 4, 3912);
478 
480  vec4_huffbits, 1, 1,
481  vec4_huffcodes, 2, 2, 604);
482 
484  vec2_huffbits, 1, 1,
485  vec2_huffcodes, 2, 2, 562);
486 
488  vec1_huffbits, 1, 1,
489  vec1_huffcodes, 2, 2, 562);
490 
491  /** calculate number of scale factor bands and their offsets
492  for every possible block size */
493  for (i = 0; i < num_possible_block_sizes; i++) {
494  int subframe_len = s->samples_per_frame >> i;
495  int x;
496  int band = 1;
497  int rate = get_rate(avctx);
498 
499  s->sfb_offsets[i][0] = 0;
500 
501  for (x = 0; x < MAX_BANDS-1 && s->sfb_offsets[i][band - 1] < subframe_len; x++) {
502  int offset = (subframe_len * 2 * critical_freq[x]) / rate + 2;
503  offset &= ~3;
504  if (offset > s->sfb_offsets[i][band - 1])
505  s->sfb_offsets[i][band++] = offset;
506 
507  if (offset >= subframe_len)
508  break;
509  }
510  s->sfb_offsets[i][band - 1] = subframe_len;
511  s->num_sfb[i] = band - 1;
512  if (s->num_sfb[i] <= 0) {
513  av_log(avctx, AV_LOG_ERROR, "num_sfb invalid\n");
514  return AVERROR_INVALIDDATA;
515  }
516  }
517 
518 
519  /** Scale factors can be shared between blocks of different size
520  as every block has a different scale factor band layout.
521  The matrix sf_offsets is needed to find the correct scale factor.
522  */
523 
524  for (i = 0; i < num_possible_block_sizes; i++) {
525  int b;
526  for (b = 0; b < s->num_sfb[i]; b++) {
527  int x;
528  int offset = ((s->sfb_offsets[i][b]
529  + s->sfb_offsets[i][b + 1] - 1) << i) >> 1;
530  for (x = 0; x < num_possible_block_sizes; x++) {
531  int v = 0;
532  while (s->sfb_offsets[x][v + 1] << x < offset) {
533  v++;
534  av_assert0(v < MAX_BANDS);
535  }
536  s->sf_offsets[i][x][b] = v;
537  }
538  }
539  }
540 
542  if (!s->fdsp)
543  return AVERROR(ENOMEM);
544 
545  /** init MDCT, FIXME: only init needed sizes */
546  for (i = 0; i < WMAPRO_BLOCK_SIZES; i++)
548  1.0 / (1 << (WMAPRO_BLOCK_MIN_BITS + i - 1))
549  / (1ll << (s->bits_per_sample - 1)));
550 
551  /** init MDCT windows: simple sine window */
552  for (i = 0; i < WMAPRO_BLOCK_SIZES; i++) {
553  const int win_idx = WMAPRO_BLOCK_MAX_BITS - i;
554  ff_init_ff_sine_windows(win_idx);
555  s->windows[WMAPRO_BLOCK_SIZES - i - 1] = ff_sine_windows[win_idx];
556  }
557 
558  /** calculate subwoofer cutoff values */
559  for (i = 0; i < num_possible_block_sizes; i++) {
560  int block_size = s->samples_per_frame >> i;
561  int cutoff = (440*block_size + 3LL * (s->avctx->sample_rate >> 1) - 1)
562  / s->avctx->sample_rate;
563  s->subwoofer_cutoffs[i] = av_clip(cutoff, 4, block_size);
564  }
565 
566  /** calculate sine values for the decorrelation matrix */
567  for (i = 0; i < 33; i++)
568  sin64[i] = sin(i*M_PI / 64.0);
569 
570  if (avctx->debug & FF_DEBUG_BITSTREAM)
571  dump_context(s);
572 
573  avctx->channel_layout = channel_mask;
574 
575  return 0;
576 }
577 
578 /**
579  *@brief Initialize the decoder.
580  *@param avctx codec context
581  *@return 0 on success, -1 otherwise
582  */
584 {
585  WMAProDecodeCtx *s = avctx->priv_data;
586 
587  return decode_init(s, avctx, 0);
588 }
589 
590 /**
591  *@brief Decode the subframe length.
592  *@param s context
593  *@param offset sample offset in the frame
594  *@return decoded subframe length on success, < 0 in case of an error
595  */
597 {
598  int frame_len_shift = 0;
599  int subframe_len;
600 
601  /** no need to read from the bitstream when only one length is possible */
602  if (offset == s->samples_per_frame - s->min_samples_per_subframe)
603  return s->min_samples_per_subframe;
604 
605  if (get_bits_left(&s->gb) < 1)
606  return AVERROR_INVALIDDATA;
607 
608  /** 1 bit indicates if the subframe is of maximum length */
609  if (s->max_subframe_len_bit) {
610  if (get_bits1(&s->gb))
611  frame_len_shift = 1 + get_bits(&s->gb, s->subframe_len_bits-1);
612  } else
613  frame_len_shift = get_bits(&s->gb, s->subframe_len_bits);
614 
615  subframe_len = s->samples_per_frame >> frame_len_shift;
616 
617  /** sanity check the length */
618  if (subframe_len < s->min_samples_per_subframe ||
619  subframe_len > s->samples_per_frame) {
620  av_log(s->avctx, AV_LOG_ERROR, "broken frame: subframe_len %i\n",
621  subframe_len);
622  return AVERROR_INVALIDDATA;
623  }
624  return subframe_len;
625 }
626 
627 /**
628  *@brief Decode how the data in the frame is split into subframes.
629  * Every WMA frame contains the encoded data for a fixed number of
630  * samples per channel. The data for every channel might be split
631  * into several subframes. This function will reconstruct the list of
632  * subframes for every channel.
633  *
634  * If the subframes are not evenly split, the algorithm estimates the
635  * channels with the lowest number of total samples.
636  * Afterwards, for each of these channels a bit is read from the
637  * bitstream that indicates if the channel contains a subframe with the
638  * next subframe size that is going to be read from the bitstream or not.
639  * If a channel contains such a subframe, the subframe size gets added to
640  * the channel's subframe list.
641  * The algorithm repeats these steps until the frame is properly divided
642  * between the individual channels.
643  *
644  *@param s context
645  *@return 0 on success, < 0 in case of an error
646  */
648 {
649  uint16_t num_samples[WMAPRO_MAX_CHANNELS] = { 0 };/**< sum of samples for all currently known subframes of a channel */
650  uint8_t contains_subframe[WMAPRO_MAX_CHANNELS]; /**< flag indicating if a channel contains the current subframe */
651  int channels_for_cur_subframe = s->nb_channels; /**< number of channels that contain the current subframe */
652  int fixed_channel_layout = 0; /**< flag indicating that all channels use the same subframe offsets and sizes */
653  int min_channel_len = 0; /**< smallest sum of samples (channels with this length will be processed first) */
654  int c;
655 
656  /* Should never consume more than 3073 bits (256 iterations for the
657  * while loop when always the minimum amount of 128 samples is subtracted
658  * from missing samples in the 8 channel case).
659  * 1 + BLOCK_MAX_SIZE * MAX_CHANNELS / BLOCK_MIN_SIZE * (MAX_CHANNELS + 4)
660  */
661 
662  /** reset tiling information */
663  for (c = 0; c < s->nb_channels; c++)
664  s->channel[c].num_subframes = 0;
665 
666  if (s->max_num_subframes == 1 || get_bits1(&s->gb))
667  fixed_channel_layout = 1;
668 
669  /** loop until the frame data is split between the subframes */
670  do {
671  int subframe_len;
672 
673  /** check which channels contain the subframe */
674  for (c = 0; c < s->nb_channels; c++) {
675  if (num_samples[c] == min_channel_len) {
676  if (fixed_channel_layout || channels_for_cur_subframe == 1 ||
677  (min_channel_len == s->samples_per_frame - s->min_samples_per_subframe))
678  contains_subframe[c] = 1;
679  else
680  contains_subframe[c] = get_bits1(&s->gb);
681  } else
682  contains_subframe[c] = 0;
683  }
684 
685  /** get subframe length, subframe_len == 0 is not allowed */
686  if ((subframe_len = decode_subframe_length(s, min_channel_len)) <= 0)
687  return AVERROR_INVALIDDATA;
688 
689  /** add subframes to the individual channels and find new min_channel_len */
690  min_channel_len += subframe_len;
691  for (c = 0; c < s->nb_channels; c++) {
692  WMAProChannelCtx* chan = &s->channel[c];
693 
694  if (contains_subframe[c]) {
695  if (chan->num_subframes >= MAX_SUBFRAMES) {
697  "broken frame: num subframes > 31\n");
698  return AVERROR_INVALIDDATA;
699  }
700  chan->subframe_len[chan->num_subframes] = subframe_len;
701  num_samples[c] += subframe_len;
702  ++chan->num_subframes;
703  if (num_samples[c] > s->samples_per_frame) {
704  av_log(s->avctx, AV_LOG_ERROR, "broken frame: "
705  "channel len > samples_per_frame\n");
706  return AVERROR_INVALIDDATA;
707  }
708  } else if (num_samples[c] <= min_channel_len) {
709  if (num_samples[c] < min_channel_len) {
710  channels_for_cur_subframe = 0;
711  min_channel_len = num_samples[c];
712  }
713  ++channels_for_cur_subframe;
714  }
715  }
716  } while (min_channel_len < s->samples_per_frame);
717 
718  for (c = 0; c < s->nb_channels; c++) {
719  int i;
720  int offset = 0;
721  for (i = 0; i < s->channel[c].num_subframes; i++) {
722  ff_dlog(s->avctx, "frame[%"PRIu32"] channel[%i] subframe[%i]"
723  " len %i\n", s->frame_num, c, i,
724  s->channel[c].subframe_len[i]);
726  offset += s->channel[c].subframe_len[i];
727  }
728  }
729 
730  return 0;
731 }
732 
733 /**
734  *@brief Calculate a decorrelation matrix from the bitstream parameters.
735  *@param s codec context
736  *@param chgroup channel group for which the matrix needs to be calculated
737  */
739  WMAProChannelGrp *chgroup)
740 {
741  int i;
742  int offset = 0;
743  int8_t rotation_offset[WMAPRO_MAX_CHANNELS * WMAPRO_MAX_CHANNELS];
744  memset(chgroup->decorrelation_matrix, 0, s->nb_channels *
745  s->nb_channels * sizeof(*chgroup->decorrelation_matrix));
746 
747  for (i = 0; i < chgroup->num_channels * (chgroup->num_channels - 1) >> 1; i++)
748  rotation_offset[i] = get_bits(&s->gb, 6);
749 
750  for (i = 0; i < chgroup->num_channels; i++)
751  chgroup->decorrelation_matrix[chgroup->num_channels * i + i] =
752  get_bits1(&s->gb) ? 1.0 : -1.0;
753 
754  for (i = 1; i < chgroup->num_channels; i++) {
755  int x;
756  for (x = 0; x < i; x++) {
757  int y;
758  for (y = 0; y < i + 1; y++) {
759  float v1 = chgroup->decorrelation_matrix[x * chgroup->num_channels + y];
760  float v2 = chgroup->decorrelation_matrix[i * chgroup->num_channels + y];
761  int n = rotation_offset[offset + x];
762  float sinv;
763  float cosv;
764 
765  if (n < 32) {
766  sinv = sin64[n];
767  cosv = sin64[32 - n];
768  } else {
769  sinv = sin64[64 - n];
770  cosv = -sin64[n - 32];
771  }
772 
773  chgroup->decorrelation_matrix[y + x * chgroup->num_channels] =
774  (v1 * sinv) - (v2 * cosv);
775  chgroup->decorrelation_matrix[y + i * chgroup->num_channels] =
776  (v1 * cosv) + (v2 * sinv);
777  }
778  }
779  offset += i;
780  }
781 }
782 
783 /**
784  *@brief Decode channel transformation parameters
785  *@param s codec context
786  *@return >= 0 in case of success, < 0 in case of bitstream errors
787  */
789 {
790  int i;
791  /* should never consume more than 1921 bits for the 8 channel case
792  * 1 + MAX_CHANNELS * (MAX_CHANNELS + 2 + 3 * MAX_CHANNELS * MAX_CHANNELS
793  * + MAX_CHANNELS + MAX_BANDS + 1)
794  */
795 
796  /** in the one channel case channel transforms are pointless */
797  s->num_chgroups = 0;
798  if (s->nb_channels > 1) {
799  int remaining_channels = s->channels_for_cur_subframe;
800 
801  if (get_bits1(&s->gb)) {
803  "Channel transform bit");
804  return AVERROR_PATCHWELCOME;
805  }
806 
807  for (s->num_chgroups = 0; remaining_channels &&
809  WMAProChannelGrp* chgroup = &s->chgroup[s->num_chgroups];
810  float** channel_data = chgroup->channel_data;
811  chgroup->num_channels = 0;
812  chgroup->transform = 0;
813 
814  /** decode channel mask */
815  if (remaining_channels > 2) {
816  for (i = 0; i < s->channels_for_cur_subframe; i++) {
817  int channel_idx = s->channel_indexes_for_cur_subframe[i];
818  if (!s->channel[channel_idx].grouped
819  && get_bits1(&s->gb)) {
820  ++chgroup->num_channels;
821  s->channel[channel_idx].grouped = 1;
822  *channel_data++ = s->channel[channel_idx].coeffs;
823  }
824  }
825  } else {
826  chgroup->num_channels = remaining_channels;
827  for (i = 0; i < s->channels_for_cur_subframe; i++) {
828  int channel_idx = s->channel_indexes_for_cur_subframe[i];
829  if (!s->channel[channel_idx].grouped)
830  *channel_data++ = s->channel[channel_idx].coeffs;
831  s->channel[channel_idx].grouped = 1;
832  }
833  }
834 
835  /** decode transform type */
836  if (chgroup->num_channels == 2) {
837  if (get_bits1(&s->gb)) {
838  if (get_bits1(&s->gb)) {
840  "Unknown channel transform type");
841  return AVERROR_PATCHWELCOME;
842  }
843  } else {
844  chgroup->transform = 1;
845  if (s->nb_channels == 2) {
846  chgroup->decorrelation_matrix[0] = 1.0;
847  chgroup->decorrelation_matrix[1] = -1.0;
848  chgroup->decorrelation_matrix[2] = 1.0;
849  chgroup->decorrelation_matrix[3] = 1.0;
850  } else {
851  /** cos(pi/4) */
852  chgroup->decorrelation_matrix[0] = 0.70703125;
853  chgroup->decorrelation_matrix[1] = -0.70703125;
854  chgroup->decorrelation_matrix[2] = 0.70703125;
855  chgroup->decorrelation_matrix[3] = 0.70703125;
856  }
857  }
858  } else if (chgroup->num_channels > 2) {
859  if (get_bits1(&s->gb)) {
860  chgroup->transform = 1;
861  if (get_bits1(&s->gb)) {
862  decode_decorrelation_matrix(s, chgroup);
863  } else {
864  /** FIXME: more than 6 coupled channels not supported */
865  if (chgroup->num_channels > 6) {
867  "Coupled channels > 6");
868  } else {
869  memcpy(chgroup->decorrelation_matrix,
871  chgroup->num_channels * chgroup->num_channels *
872  sizeof(*chgroup->decorrelation_matrix));
873  }
874  }
875  }
876  }
877 
878  /** decode transform on / off */
879  if (chgroup->transform) {
880  if (!get_bits1(&s->gb)) {
881  int i;
882  /** transform can be enabled for individual bands */
883  for (i = 0; i < s->num_bands; i++) {
884  chgroup->transform_band[i] = get_bits1(&s->gb);
885  }
886  } else {
887  memset(chgroup->transform_band, 1, s->num_bands);
888  }
889  }
890  remaining_channels -= chgroup->num_channels;
891  }
892  }
893  return 0;
894 }
895 
896 /**
897  *@brief Extract the coefficients from the bitstream.
898  *@param s codec context
899  *@param c current channel number
900  *@return 0 on success, < 0 in case of bitstream errors
901  */
902 static int decode_coeffs(WMAProDecodeCtx *s, int c)
903 {
904  /* Integers 0..15 as single-precision floats. The table saves a
905  costly int to float conversion, and storing the values as
906  integers allows fast sign-flipping. */
907  static const uint32_t fval_tab[16] = {
908  0x00000000, 0x3f800000, 0x40000000, 0x40400000,
909  0x40800000, 0x40a00000, 0x40c00000, 0x40e00000,
910  0x41000000, 0x41100000, 0x41200000, 0x41300000,
911  0x41400000, 0x41500000, 0x41600000, 0x41700000,
912  };
913  int vlctable;
914  VLC* vlc;
915  WMAProChannelCtx* ci = &s->channel[c];
916  int rl_mode = 0;
917  int cur_coeff = 0;
918  int num_zeros = 0;
919  const uint16_t* run;
920  const float* level;
921 
922  ff_dlog(s->avctx, "decode coefficients for channel %i\n", c);
923 
924  vlctable = get_bits1(&s->gb);
925  vlc = &coef_vlc[vlctable];
926 
927  if (vlctable) {
928  run = coef1_run;
929  level = coef1_level;
930  } else {
931  run = coef0_run;
932  level = coef0_level;
933  }
934 
935  /** decode vector coefficients (consumes up to 167 bits per iteration for
936  4 vector coded large values) */
937  while ((s->transmit_num_vec_coeffs || !rl_mode) &&
938  (cur_coeff + 3 < ci->num_vec_coeffs)) {
939  uint32_t vals[4];
940  int i;
941  unsigned int idx;
942 
943  idx = get_vlc2(&s->gb, vec4_vlc.table, VLCBITS, VEC4MAXDEPTH);
944 
945  if (idx == HUFF_VEC4_SIZE - 1) {
946  for (i = 0; i < 4; i += 2) {
947  idx = get_vlc2(&s->gb, vec2_vlc.table, VLCBITS, VEC2MAXDEPTH);
948  if (idx == HUFF_VEC2_SIZE - 1) {
949  uint32_t v0, v1;
950  v0 = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
951  if (v0 == HUFF_VEC1_SIZE - 1)
952  v0 += ff_wma_get_large_val(&s->gb);
953  v1 = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
954  if (v1 == HUFF_VEC1_SIZE - 1)
955  v1 += ff_wma_get_large_val(&s->gb);
956  vals[i ] = av_float2int(v0);
957  vals[i+1] = av_float2int(v1);
958  } else {
959  vals[i] = fval_tab[symbol_to_vec2[idx] >> 4 ];
960  vals[i+1] = fval_tab[symbol_to_vec2[idx] & 0xF];
961  }
962  }
963  } else {
964  vals[0] = fval_tab[ symbol_to_vec4[idx] >> 12 ];
965  vals[1] = fval_tab[(symbol_to_vec4[idx] >> 8) & 0xF];
966  vals[2] = fval_tab[(symbol_to_vec4[idx] >> 4) & 0xF];
967  vals[3] = fval_tab[ symbol_to_vec4[idx] & 0xF];
968  }
969 
970  /** decode sign */
971  for (i = 0; i < 4; i++) {
972  if (vals[i]) {
973  uint32_t sign = get_bits1(&s->gb) - 1;
974  AV_WN32A(&ci->coeffs[cur_coeff], vals[i] ^ sign << 31);
975  num_zeros = 0;
976  } else {
977  ci->coeffs[cur_coeff] = 0;
978  /** switch to run level mode when subframe_len / 128 zeros
979  were found in a row */
980  rl_mode |= (++num_zeros > s->subframe_len >> 8);
981  }
982  ++cur_coeff;
983  }
984  }
985 
986  /** decode run level coded coefficients */
987  if (cur_coeff < s->subframe_len) {
988  memset(&ci->coeffs[cur_coeff], 0,
989  sizeof(*ci->coeffs) * (s->subframe_len - cur_coeff));
990  if (ff_wma_run_level_decode(s->avctx, &s->gb, vlc,
991  level, run, 1, ci->coeffs,
992  cur_coeff, s->subframe_len,
993  s->subframe_len, s->esc_len, 0))
994  return AVERROR_INVALIDDATA;
995  }
996 
997  return 0;
998 }
999 
1000 /**
1001  *@brief Extract scale factors from the bitstream.
1002  *@param s codec context
1003  *@return 0 on success, < 0 in case of bitstream errors
1004  */
1006 {
1007  int i;
1008 
1009  /** should never consume more than 5344 bits
1010  * MAX_CHANNELS * (1 + MAX_BANDS * 23)
1011  */
1012 
1013  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1015  int* sf;
1016  int* sf_end;
1018  sf_end = s->channel[c].scale_factors + s->num_bands;
1019 
1020  /** resample scale factors for the new block size
1021  * as the scale factors might need to be resampled several times
1022  * before some new values are transmitted, a backup of the last
1023  * transmitted scale factors is kept in saved_scale_factors
1024  */
1025  if (s->channel[c].reuse_sf) {
1026  const int8_t* sf_offsets = s->sf_offsets[s->table_idx][s->channel[c].table_idx];
1027  int b;
1028  for (b = 0; b < s->num_bands; b++)
1029  s->channel[c].scale_factors[b] =
1030  s->channel[c].saved_scale_factors[s->channel[c].scale_factor_idx][*sf_offsets++];
1031  }
1032 
1033  if (!s->channel[c].cur_subframe || get_bits1(&s->gb)) {
1034 
1035  if (!s->channel[c].reuse_sf) {
1036  int val;
1037  /** decode DPCM coded scale factors */
1038  s->channel[c].scale_factor_step = get_bits(&s->gb, 2) + 1;
1039  val = 45 / s->channel[c].scale_factor_step;
1040  for (sf = s->channel[c].scale_factors; sf < sf_end; sf++) {
1041  val += get_vlc2(&s->gb, sf_vlc.table, SCALEVLCBITS, SCALEMAXDEPTH) - 60;
1042  *sf = val;
1043  }
1044  } else {
1045  int i;
1046  /** run level decode differences to the resampled factors */
1047  for (i = 0; i < s->num_bands; i++) {
1048  int idx;
1049  int skip;
1050  int val;
1051  int sign;
1052 
1053  idx = get_vlc2(&s->gb, sf_rl_vlc.table, VLCBITS, SCALERLMAXDEPTH);
1054 
1055  if (!idx) {
1056  uint32_t code = get_bits(&s->gb, 14);
1057  val = code >> 6;
1058  sign = (code & 1) - 1;
1059  skip = (code & 0x3f) >> 1;
1060  } else if (idx == 1) {
1061  break;
1062  } else {
1063  skip = scale_rl_run[idx];
1064  val = scale_rl_level[idx];
1065  sign = get_bits1(&s->gb)-1;
1066  }
1067 
1068  i += skip;
1069  if (i >= s->num_bands) {
1071  "invalid scale factor coding\n");
1072  return AVERROR_INVALIDDATA;
1073  }
1074  s->channel[c].scale_factors[i] += (val ^ sign) - sign;
1075  }
1076  }
1077  /** swap buffers */
1079  s->channel[c].table_idx = s->table_idx;
1080  s->channel[c].reuse_sf = 1;
1081  }
1082 
1083  /** calculate new scale factor maximum */
1085  for (sf = s->channel[c].scale_factors + 1; sf < sf_end; sf++) {
1086  s->channel[c].max_scale_factor =
1087  FFMAX(s->channel[c].max_scale_factor, *sf);
1088  }
1089 
1090  }
1091  return 0;
1092 }
1093 
1094 /**
1095  *@brief Reconstruct the individual channel data.
1096  *@param s codec context
1097  */
1099 {
1100  int i;
1101 
1102  for (i = 0; i < s->num_chgroups; i++) {
1103  if (s->chgroup[i].transform) {
1104  float data[WMAPRO_MAX_CHANNELS];
1105  const int num_channels = s->chgroup[i].num_channels;
1106  float** ch_data = s->chgroup[i].channel_data;
1107  float** ch_end = ch_data + num_channels;
1108  const int8_t* tb = s->chgroup[i].transform_band;
1109  int16_t* sfb;
1110 
1111  /** multichannel decorrelation */
1112  for (sfb = s->cur_sfb_offsets;
1113  sfb < s->cur_sfb_offsets + s->num_bands; sfb++) {
1114  int y;
1115  if (*tb++ == 1) {
1116  /** multiply values with the decorrelation_matrix */
1117  for (y = sfb[0]; y < FFMIN(sfb[1], s->subframe_len); y++) {
1118  const float* mat = s->chgroup[i].decorrelation_matrix;
1119  const float* data_end = data + num_channels;
1120  float* data_ptr = data;
1121  float** ch;
1122 
1123  for (ch = ch_data; ch < ch_end; ch++)
1124  *data_ptr++ = (*ch)[y];
1125 
1126  for (ch = ch_data; ch < ch_end; ch++) {
1127  float sum = 0;
1128  data_ptr = data;
1129  while (data_ptr < data_end)
1130  sum += *data_ptr++ * *mat++;
1131 
1132  (*ch)[y] = sum;
1133  }
1134  }
1135  } else if (s->nb_channels == 2) {
1136  int len = FFMIN(sfb[1], s->subframe_len) - sfb[0];
1137  s->fdsp->vector_fmul_scalar(ch_data[0] + sfb[0],
1138  ch_data[0] + sfb[0],
1139  181.0 / 128, len);
1140  s->fdsp->vector_fmul_scalar(ch_data[1] + sfb[0],
1141  ch_data[1] + sfb[0],
1142  181.0 / 128, len);
1143  }
1144  }
1145  }
1146  }
1147 }
1148 
1149 /**
1150  *@brief Apply sine window and reconstruct the output buffer.
1151  *@param s codec context
1152  */
1154 {
1155  int i;
1156  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1158  const float* window;
1159  int winlen = s->channel[c].prev_block_len;
1160  float* start = s->channel[c].coeffs - (winlen >> 1);
1161 
1162  if (s->subframe_len < winlen) {
1163  start += (winlen - s->subframe_len) >> 1;
1164  winlen = s->subframe_len;
1165  }
1166 
1167  window = s->windows[av_log2(winlen) - WMAPRO_BLOCK_MIN_BITS];
1168 
1169  winlen >>= 1;
1170 
1171  s->fdsp->vector_fmul_window(start, start, start + winlen,
1172  window, winlen);
1173 
1175  }
1176 }
1177 
1178 /**
1179  *@brief Decode a single subframe (block).
1180  *@param s codec context
1181  *@return 0 on success, < 0 when decoding failed
1182  */
1184 {
1185  int offset = s->samples_per_frame;
1187  int i;
1188  int total_samples = s->samples_per_frame * s->nb_channels;
1189  int transmit_coeffs = 0;
1190  int cur_subwoofer_cutoff;
1191 
1192  s->subframe_offset = get_bits_count(&s->gb);
1193 
1194  /** reset channel context and find the next block offset and size
1195  == the next block of the channel with the smallest number of
1196  decoded samples
1197  */
1198  for (i = 0; i < s->nb_channels; i++) {
1199  s->channel[i].grouped = 0;
1200  if (offset > s->channel[i].decoded_samples) {
1201  offset = s->channel[i].decoded_samples;
1202  subframe_len =
1204  }
1205  }
1206 
1207  ff_dlog(s->avctx,
1208  "processing subframe with offset %i len %i\n", offset, subframe_len);
1209 
1210  /** get a list of all channels that contain the estimated block */
1212  for (i = 0; i < s->nb_channels; i++) {
1213  const int cur_subframe = s->channel[i].cur_subframe;
1214  /** subtract already processed samples */
1215  total_samples -= s->channel[i].decoded_samples;
1216 
1217  /** and count if there are multiple subframes that match our profile */
1218  if (offset == s->channel[i].decoded_samples &&
1219  subframe_len == s->channel[i].subframe_len[cur_subframe]) {
1220  total_samples -= s->channel[i].subframe_len[cur_subframe];
1221  s->channel[i].decoded_samples +=
1225  }
1226  }
1227 
1228  /** check if the frame will be complete after processing the
1229  estimated block */
1230  if (!total_samples)
1231  s->parsed_all_subframes = 1;
1232 
1233 
1234  ff_dlog(s->avctx, "subframe is part of %i channels\n",
1236 
1237  /** calculate number of scale factor bands and their offsets */
1238  s->table_idx = av_log2(s->samples_per_frame/subframe_len);
1239  s->num_bands = s->num_sfb[s->table_idx];
1241  cur_subwoofer_cutoff = s->subwoofer_cutoffs[s->table_idx];
1242 
1243  /** configure the decoder for the current subframe */
1244  offset += s->samples_per_frame >> 1;
1245 
1246  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1248 
1249  s->channel[c].coeffs = &s->channel[c].out[offset];
1250  }
1251 
1253  s->esc_len = av_log2(s->subframe_len - 1) + 1;
1254 
1255  /** skip extended header if any */
1256  if (get_bits1(&s->gb)) {
1257  int num_fill_bits;
1258  if (!(num_fill_bits = get_bits(&s->gb, 2))) {
1259  int len = get_bits(&s->gb, 4);
1260  num_fill_bits = get_bitsz(&s->gb, len) + 1;
1261  }
1262 
1263  if (num_fill_bits >= 0) {
1264  if (get_bits_count(&s->gb) + num_fill_bits > s->num_saved_bits) {
1265  av_log(s->avctx, AV_LOG_ERROR, "invalid number of fill bits\n");
1266  return AVERROR_INVALIDDATA;
1267  }
1268 
1269  skip_bits_long(&s->gb, num_fill_bits);
1270  }
1271  }
1272 
1273  /** no idea for what the following bit is used */
1274  if (get_bits1(&s->gb)) {
1275  avpriv_request_sample(s->avctx, "Reserved bit");
1276  return AVERROR_PATCHWELCOME;
1277  }
1278 
1279 
1280  if (decode_channel_transform(s) < 0)
1281  return AVERROR_INVALIDDATA;
1282 
1283 
1284  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1286  if ((s->channel[c].transmit_coefs = get_bits1(&s->gb)))
1287  transmit_coeffs = 1;
1288  }
1289 
1291  if (transmit_coeffs) {
1292  int step;
1293  int quant_step = 90 * s->bits_per_sample >> 4;
1294 
1295  /** decode number of vector coded coefficients */
1296  if ((s->transmit_num_vec_coeffs = get_bits1(&s->gb))) {
1297  int num_bits = av_log2((s->subframe_len + 3)/4) + 1;
1298  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1300  int num_vec_coeffs = get_bits(&s->gb, num_bits) << 2;
1301  if (num_vec_coeffs > s->subframe_len) {
1302  av_log(s->avctx, AV_LOG_ERROR, "num_vec_coeffs %d is too large\n", num_vec_coeffs);
1303  return AVERROR_INVALIDDATA;
1304  }
1305  av_assert0(num_vec_coeffs + offset <= FF_ARRAY_ELEMS(s->channel[c].out));
1307  }
1308  } else {
1309  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1312  }
1313  }
1314  /** decode quantization step */
1315  step = get_sbits(&s->gb, 6);
1316  quant_step += step;
1317  if (step == -32 || step == 31) {
1318  const int sign = (step == 31) - 1;
1319  int quant = 0;
1320  while (get_bits_count(&s->gb) + 5 < s->num_saved_bits &&
1321  (step = get_bits(&s->gb, 5)) == 31) {
1322  quant += 31;
1323  }
1324  quant_step += ((quant + step) ^ sign) - sign;
1325  }
1326  if (quant_step < 0) {
1327  av_log(s->avctx, AV_LOG_DEBUG, "negative quant step\n");
1328  }
1329 
1330  /** decode quantization step modifiers for every channel */
1331 
1332  if (s->channels_for_cur_subframe == 1) {
1334  } else {
1335  int modifier_len = get_bits(&s->gb, 3);
1336  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1339  if (get_bits1(&s->gb)) {
1340  if (modifier_len) {
1341  s->channel[c].quant_step += get_bits(&s->gb, modifier_len) + 1;
1342  } else
1343  ++s->channel[c].quant_step;
1344  }
1345  }
1346  }
1347 
1348  /** decode scale factors */
1349  if (decode_scale_factors(s) < 0)
1350  return AVERROR_INVALIDDATA;
1351  }
1352 
1353  ff_dlog(s->avctx, "BITSTREAM: subframe header length was %i\n",
1354  get_bits_count(&s->gb) - s->subframe_offset);
1355 
1356  /** parse coefficients */
1357  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1359  if (s->channel[c].transmit_coefs &&
1360  get_bits_count(&s->gb) < s->num_saved_bits) {
1361  decode_coeffs(s, c);
1362  } else
1363  memset(s->channel[c].coeffs, 0,
1364  sizeof(*s->channel[c].coeffs) * subframe_len);
1365  }
1366 
1367  ff_dlog(s->avctx, "BITSTREAM: subframe length was %i\n",
1368  get_bits_count(&s->gb) - s->subframe_offset);
1369 
1370  if (transmit_coeffs) {
1371  FFTContext *mdct = &s->mdct_ctx[av_log2(subframe_len) - WMAPRO_BLOCK_MIN_BITS];
1372  /** reconstruct the per channel data */
1374  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1376  const int* sf = s->channel[c].scale_factors;
1377  int b;
1378 
1379  if (c == s->lfe_channel)
1380  memset(&s->tmp[cur_subwoofer_cutoff], 0, sizeof(*s->tmp) *
1381  (subframe_len - cur_subwoofer_cutoff));
1382 
1383  /** inverse quantization and rescaling */
1384  for (b = 0; b < s->num_bands; b++) {
1385  const int end = FFMIN(s->cur_sfb_offsets[b+1], s->subframe_len);
1386  const int exp = s->channel[c].quant_step -
1387  (s->channel[c].max_scale_factor - *sf++) *
1388  s->channel[c].scale_factor_step;
1389  const float quant = ff_exp10(exp / 20.0);
1390  int start = s->cur_sfb_offsets[b];
1391  s->fdsp->vector_fmul_scalar(s->tmp + start,
1392  s->channel[c].coeffs + start,
1393  quant, end - start);
1394  }
1395 
1396  /** apply imdct (imdct_half == DCTIV with reverse) */
1397  mdct->imdct_half(mdct, s->channel[c].coeffs, s->tmp);
1398  }
1399  }
1400 
1401  /** window and overlapp-add */
1402  wmapro_window(s);
1403 
1404  /** handled one subframe */
1405  for (i = 0; i < s->channels_for_cur_subframe; i++) {
1407  if (s->channel[c].cur_subframe >= s->channel[c].num_subframes) {
1408  av_log(s->avctx, AV_LOG_ERROR, "broken subframe\n");
1409  return AVERROR_INVALIDDATA;
1410  }
1411  ++s->channel[c].cur_subframe;
1412  }
1413 
1414  return 0;
1415 }
1416 
1417 /**
1418  *@brief Decode one WMA frame.
1419  *@param s codec context
1420  *@return 0 if the trailer bit indicates that this is the last frame,
1421  * 1 if there are additional frames
1422  */
1423 static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
1424 {
1425  GetBitContext* gb = &s->gb;
1426  int more_frames = 0;
1427  int len = 0;
1428  int i;
1429 
1430  /** get frame length */
1431  if (s->len_prefix)
1432  len = get_bits(gb, s->log2_frame_size);
1433 
1434  ff_dlog(s->avctx, "decoding frame with length %x\n", len);
1435 
1436  /** decode tile information */
1437  if (decode_tilehdr(s)) {
1438  s->packet_loss = 1;
1439  return 0;
1440  }
1441 
1442  /** read postproc transform */
1443  if (s->nb_channels > 1 && get_bits1(gb)) {
1444  if (get_bits1(gb)) {
1445  for (i = 0; i < s->nb_channels * s->nb_channels; i++)
1446  skip_bits(gb, 4);
1447  }
1448  }
1449 
1450  /** read drc info */
1451  if (s->dynamic_range_compression) {
1452  s->drc_gain = get_bits(gb, 8);
1453  ff_dlog(s->avctx, "drc_gain %i\n", s->drc_gain);
1454  }
1455 
1456  /** no idea what these are for, might be the number of samples
1457  that need to be skipped at the beginning or end of a stream */
1458  if (get_bits1(gb)) {
1459  int av_unused skip;
1460 
1461  /** usually true for the first frame */
1462  if (get_bits1(gb)) {
1463  skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
1464  ff_dlog(s->avctx, "start skip: %i\n", skip);
1465  }
1466 
1467  /** sometimes true for the last frame */
1468  if (get_bits1(gb)) {
1469  skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
1470  ff_dlog(s->avctx, "end skip: %i\n", skip);
1471  }
1472 
1473  }
1474 
1475  ff_dlog(s->avctx, "BITSTREAM: frame header length was %i\n",
1476  get_bits_count(gb) - s->frame_offset);
1477 
1478  /** reset subframe states */
1479  s->parsed_all_subframes = 0;
1480  for (i = 0; i < s->nb_channels; i++) {
1481  s->channel[i].decoded_samples = 0;
1482  s->channel[i].cur_subframe = 0;
1483  s->channel[i].reuse_sf = 0;
1484  }
1485 
1486  /** decode all subframes */
1487  while (!s->parsed_all_subframes) {
1488  if (decode_subframe(s) < 0) {
1489  s->packet_loss = 1;
1490  return 0;
1491  }
1492  }
1493 
1494  /** copy samples to the output buffer */
1495  for (i = 0; i < s->nb_channels; i++)
1496  memcpy(frame->extended_data[i], s->channel[i].out,
1497  s->samples_per_frame * sizeof(*s->channel[i].out));
1498 
1499  for (i = 0; i < s->nb_channels; i++) {
1500  /** reuse second half of the IMDCT output for the next frame */
1501  memcpy(&s->channel[i].out[0],
1502  &s->channel[i].out[s->samples_per_frame],
1503  s->samples_per_frame * sizeof(*s->channel[i].out) >> 1);
1504  }
1505 
1506  if (s->skip_frame) {
1507  s->skip_frame = 0;
1508  *got_frame_ptr = 0;
1509  av_frame_unref(frame);
1510  } else {
1511  *got_frame_ptr = 1;
1512  }
1513 
1514  if (s->len_prefix) {
1515  if (len != (get_bits_count(gb) - s->frame_offset) + 2) {
1516  /** FIXME: not sure if this is always an error */
1518  "frame[%"PRIu32"] would have to skip %i bits\n",
1519  s->frame_num,
1520  len - (get_bits_count(gb) - s->frame_offset) - 1);
1521  s->packet_loss = 1;
1522  return 0;
1523  }
1524 
1525  /** skip the rest of the frame data */
1526  skip_bits_long(gb, len - (get_bits_count(gb) - s->frame_offset) - 1);
1527  } else {
1528  while (get_bits_count(gb) < s->num_saved_bits && get_bits1(gb) == 0) {
1529  }
1530  }
1531 
1532  /** decode trailer bit */
1533  more_frames = get_bits1(gb);
1534 
1535  ++s->frame_num;
1536  return more_frames;
1537 }
1538 
1539 /**
1540  *@brief Calculate remaining input buffer length.
1541  *@param s codec context
1542  *@param gb bitstream reader context
1543  *@return remaining size in bits
1544  */
1546 {
1547  return s->buf_bit_size - get_bits_count(gb);
1548 }
1549 
1550 /**
1551  *@brief Fill the bit reservoir with a (partial) frame.
1552  *@param s codec context
1553  *@param gb bitstream reader context
1554  *@param len length of the partial frame
1555  *@param append decides whether to reset the buffer or not
1556  */
1558  int append)
1559 {
1560  int buflen;
1561 
1562  /** when the frame data does not need to be concatenated, the input buffer
1563  is reset and additional bits from the previous frame are copied
1564  and skipped later so that a fast byte copy is possible */
1565 
1566  if (!append) {
1567  s->frame_offset = get_bits_count(gb) & 7;
1568  s->num_saved_bits = s->frame_offset;
1570  buflen = (s->num_saved_bits + len + 7) >> 3;
1571  } else
1572  buflen = (put_bits_count(&s->pb) + len + 7) >> 3;
1573 
1574  if (len <= 0 || buflen > MAX_FRAMESIZE) {
1575  avpriv_request_sample(s->avctx, "Too small input buffer");
1576  s->packet_loss = 1;
1577  return;
1578  }
1579 
1580  av_assert0(len <= put_bits_left(&s->pb));
1581 
1582  s->num_saved_bits += len;
1583  if (!append) {
1584  ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3),
1585  s->num_saved_bits);
1586  } else {
1587  int align = 8 - (get_bits_count(gb) & 7);
1588  align = FFMIN(align, len);
1589  put_bits(&s->pb, align, get_bits(gb, align));
1590  len -= align;
1591  ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3), len);
1592  }
1593  skip_bits_long(gb, len);
1594 
1595  {
1596  PutBitContext tmp = s->pb;
1597  flush_put_bits(&tmp);
1598  }
1599 
1601  skip_bits(&s->gb, s->frame_offset);
1602 }
1603 
1605  void *data, int *got_frame_ptr, AVPacket *avpkt)
1606 {
1607  GetBitContext* gb = &s->pgb;
1608  const uint8_t* buf = avpkt->data;
1609  int buf_size = avpkt->size;
1610  int num_bits_prev_frame;
1611  int packet_sequence_number;
1612 
1613  *got_frame_ptr = 0;
1614 
1615  if (!buf_size) {
1616  AVFrame *frame = data;
1617  int i;
1618 
1619  /** Must output remaining samples after stream end. WMAPRO 5.1 created
1620  * by XWMA encoder don't though (maybe only 1/2ch streams need it). */
1621  s->packet_done = 0;
1622  if (s->eof_done)
1623  return 0;
1624 
1625  /** clean output buffer and copy last IMDCT samples */
1626  for (i = 0; i < s->nb_channels; i++) {
1627  memset(frame->extended_data[i], 0,
1628  s->samples_per_frame * sizeof(*s->channel[i].out));
1629 
1630  memcpy(frame->extended_data[i], s->channel[i].out,
1631  s->samples_per_frame * sizeof(*s->channel[i].out) >> 1);
1632  }
1633 
1634  /* TODO: XMA should output 128 samples only (instead of 512) and WMAPRO
1635  * maybe 768 (with 2048), XMA needs changes in multi-stream handling though. */
1636 
1637  s->eof_done = 1;
1638  s->packet_done = 1;
1639  *got_frame_ptr = 1;
1640  return 0;
1641  }
1642  else if (s->packet_done || s->packet_loss) {
1643  s->packet_done = 0;
1644 
1645  /** sanity check for the buffer length */
1646  if (avctx->codec_id == AV_CODEC_ID_WMAPRO && buf_size < avctx->block_align) {
1647  av_log(avctx, AV_LOG_ERROR, "Input packet too small (%d < %d)\n",
1648  buf_size, avctx->block_align);
1649  s->packet_loss = 1;
1650  return AVERROR_INVALIDDATA;
1651  }
1652 
1653  if (avctx->codec_id == AV_CODEC_ID_WMAPRO) {
1654  s->next_packet_start = buf_size - avctx->block_align;
1655  buf_size = avctx->block_align;
1656  } else {
1657  s->next_packet_start = buf_size - FFMIN(buf_size, avctx->block_align);
1658  buf_size = FFMIN(buf_size, avctx->block_align);
1659  }
1660  s->buf_bit_size = buf_size << 3;
1661 
1662  /** parse packet header */
1663  init_get_bits(gb, buf, s->buf_bit_size);
1664  if (avctx->codec_id != AV_CODEC_ID_XMA2) {
1665  packet_sequence_number = get_bits(gb, 4);
1666  skip_bits(gb, 2);
1667  } else {
1668  int num_frames = get_bits(gb, 6);
1669  ff_dlog(avctx, "packet[%d]: number of frames %d\n", avctx->frame_number, num_frames);
1670  packet_sequence_number = 0;
1671  }
1672 
1673  /** get number of bits that need to be added to the previous frame */
1674  num_bits_prev_frame = get_bits(gb, s->log2_frame_size);
1675  if (avctx->codec_id != AV_CODEC_ID_WMAPRO) {
1676  skip_bits(gb, 3);
1677  s->skip_packets = get_bits(gb, 8);
1678  ff_dlog(avctx, "packet[%d]: skip packets %d\n", avctx->frame_number, s->skip_packets);
1679  }
1680 
1681  ff_dlog(avctx, "packet[%d]: nbpf %x\n", avctx->frame_number,
1682  num_bits_prev_frame);
1683 
1684  /** check for packet loss */
1685  if (avctx->codec_id == AV_CODEC_ID_WMAPRO && !s->packet_loss &&
1686  ((s->packet_sequence_number + 1) & 0xF) != packet_sequence_number) {
1687  s->packet_loss = 1;
1688  av_log(avctx, AV_LOG_ERROR,
1689  "Packet loss detected! seq %"PRIx8" vs %x\n",
1690  s->packet_sequence_number, packet_sequence_number);
1691  }
1692  s->packet_sequence_number = packet_sequence_number;
1693 
1694  if (num_bits_prev_frame > 0) {
1695  int remaining_packet_bits = s->buf_bit_size - get_bits_count(gb);
1696  if (num_bits_prev_frame >= remaining_packet_bits) {
1697  num_bits_prev_frame = remaining_packet_bits;
1698  s->packet_done = 1;
1699  }
1700 
1701  /** append the previous frame data to the remaining data from the
1702  previous packet to create a full frame */
1703  save_bits(s, gb, num_bits_prev_frame, 1);
1704  ff_dlog(avctx, "accumulated %x bits of frame data\n",
1705  s->num_saved_bits - s->frame_offset);
1706 
1707  /** decode the cross packet frame if it is valid */
1708  if (!s->packet_loss)
1709  decode_frame(s, data, got_frame_ptr);
1710  } else if (s->num_saved_bits - s->frame_offset) {
1711  ff_dlog(avctx, "ignoring %x previously saved bits\n",
1712  s->num_saved_bits - s->frame_offset);
1713  }
1714 
1715  if (s->packet_loss) {
1716  /** reset number of saved bits so that the decoder
1717  does not start to decode incomplete frames in the
1718  s->len_prefix == 0 case */
1719  s->num_saved_bits = 0;
1720  s->packet_loss = 0;
1721  }
1722  } else {
1723  int frame_size;
1724 
1725  if (avpkt->size < s->next_packet_start) {
1726  s->packet_loss = 1;
1727  return AVERROR_INVALIDDATA;
1728  }
1729 
1730  s->buf_bit_size = (avpkt->size - s->next_packet_start) << 3;
1731  init_get_bits(gb, avpkt->data, s->buf_bit_size);
1732  skip_bits(gb, s->packet_offset);
1733  if (s->len_prefix && remaining_bits(s, gb) > s->log2_frame_size &&
1734  (frame_size = show_bits(gb, s->log2_frame_size)) &&
1735  frame_size <= remaining_bits(s, gb)) {
1736  save_bits(s, gb, frame_size, 0);
1737  if (!s->packet_loss)
1738  s->packet_done = !decode_frame(s, data, got_frame_ptr);
1739  } else if (!s->len_prefix
1740  && s->num_saved_bits > get_bits_count(&s->gb)) {
1741  /** when the frames do not have a length prefix, we don't know
1742  the compressed length of the individual frames
1743  however, we know what part of a new packet belongs to the
1744  previous frame
1745  therefore we save the incoming packet first, then we append
1746  the "previous frame" data from the next packet so that
1747  we get a buffer that only contains full frames */
1748  s->packet_done = !decode_frame(s, data, got_frame_ptr);
1749  } else {
1750  s->packet_done = 1;
1751  }
1752  }
1753 
1754  if (remaining_bits(s, gb) < 0) {
1755  av_log(avctx, AV_LOG_ERROR, "Overread %d\n", -remaining_bits(s, gb));
1756  s->packet_loss = 1;
1757  }
1758 
1759  if (s->packet_done && !s->packet_loss &&
1760  remaining_bits(s, gb) > 0) {
1761  /** save the rest of the data so that it can be decoded
1762  with the next packet */
1763  save_bits(s, gb, remaining_bits(s, gb), 0);
1764  }
1765 
1766  s->packet_offset = get_bits_count(gb) & 7;
1767  if (s->packet_loss)
1768  return AVERROR_INVALIDDATA;
1769 
1770  return get_bits_count(gb) >> 3;
1771 }
1772 
1773 /**
1774  *@brief Decode a single WMA packet.
1775  *@param avctx codec context
1776  *@param data the output buffer
1777  *@param avpkt input packet
1778  *@return number of bytes that were read from the input buffer
1779  */
1780 static int wmapro_decode_packet(AVCodecContext *avctx, void *data,
1781  int *got_frame_ptr, AVPacket *avpkt)
1782 {
1783  WMAProDecodeCtx *s = avctx->priv_data;
1784  AVFrame *frame = data;
1785  int ret;
1786 
1787  /* get output buffer */
1788  frame->nb_samples = s->samples_per_frame;
1789  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
1790  s->packet_loss = 1;
1791  return 0;
1792  }
1793 
1794  return decode_packet(avctx, s, data, got_frame_ptr, avpkt);
1795 }
1796 
1797 static int xma_decode_packet(AVCodecContext *avctx, void *data,
1798  int *got_frame_ptr, AVPacket *avpkt)
1799 {
1800  XMADecodeCtx *s = avctx->priv_data;
1801  int got_stream_frame_ptr = 0;
1802  AVFrame *frame = data;
1803  int i, ret, offset = INT_MAX;
1804 
1805  if (!s->frames[s->current_stream]->data[0]) {
1806  s->frames[s->current_stream]->nb_samples = 512;
1807  if ((ret = ff_get_buffer(avctx, s->frames[s->current_stream], 0)) < 0) {
1808  return ret;
1809  }
1810  }
1811  /* decode current stream packet */
1812  ret = decode_packet(avctx, &s->xma[s->current_stream], s->frames[s->current_stream],
1813  &got_stream_frame_ptr, avpkt);
1814 
1815  if (got_stream_frame_ptr && s->offset[s->current_stream] >= 64) {
1816  got_stream_frame_ptr = 0;
1817  ret = AVERROR_INVALIDDATA;
1818  }
1819 
1820  /* copy stream samples (1/2ch) to sample buffer (Nch) */
1821  if (got_stream_frame_ptr) {
1822  int start_ch = s->start_channel[s->current_stream];
1823  memcpy(&s->samples[start_ch + 0][s->offset[s->current_stream] * 512],
1824  s->frames[s->current_stream]->extended_data[0], 512 * 4);
1825  if (s->xma[s->current_stream].nb_channels > 1)
1826  memcpy(&s->samples[start_ch + 1][s->offset[s->current_stream] * 512],
1827  s->frames[s->current_stream]->extended_data[1], 512 * 4);
1828  s->offset[s->current_stream]++;
1829  } else if (ret < 0) {
1830  memset(s->offset, 0, sizeof(s->offset));
1831  s->current_stream = 0;
1832  return ret;
1833  }
1834 
1835  /* find next XMA packet's owner stream, and update.
1836  * XMA streams find their packets following packet_skips
1837  * (at start there is one packet per stream, then interleave non-linearly). */
1838  if (s->xma[s->current_stream].packet_done ||
1839  s->xma[s->current_stream].packet_loss) {
1840 
1841  /* select stream with 0 skip_packets (= uses next packet) */
1842  if (s->xma[s->current_stream].skip_packets != 0) {
1843  int min[2];
1844 
1845  min[0] = s->xma[0].skip_packets;
1846  min[1] = i = 0;
1847 
1848  for (i = 1; i < s->num_streams; i++) {
1849  if (s->xma[i].skip_packets < min[0]) {
1850  min[0] = s->xma[i].skip_packets;
1851  min[1] = i;
1852  }
1853  }
1854 
1855  s->current_stream = min[1];
1856  }
1857 
1858  /* all other streams skip next packet */
1859  for (i = 0; i < s->num_streams; i++) {
1860  s->xma[i].skip_packets = FFMAX(0, s->xma[i].skip_packets - 1);
1861  }
1862 
1863  /* copy samples from buffer to output if possible */
1864  for (i = 0; i < s->num_streams; i++) {
1865  offset = FFMIN(offset, s->offset[i]);
1866  }
1867  if (offset > 0) {
1868  int bret;
1869 
1870  frame->nb_samples = 512 * offset;
1871  if ((bret = ff_get_buffer(avctx, frame, 0)) < 0)
1872  return bret;
1873 
1874  /* copy samples buffer (Nch) to frame samples (Nch), move unconsumed samples */
1875  for (i = 0; i < s->num_streams; i++) {
1876  int start_ch = s->start_channel[i];
1877  memcpy(frame->extended_data[start_ch + 0], s->samples[start_ch + 0], frame->nb_samples * 4);
1878  if (s->xma[i].nb_channels > 1)
1879  memcpy(frame->extended_data[start_ch + 1], s->samples[start_ch + 1], frame->nb_samples * 4);
1880 
1881  s->offset[i] -= offset;
1882  if (s->offset[i]) {
1883  memmove(s->samples[start_ch + 0], s->samples[start_ch + 0] + frame->nb_samples, s->offset[i] * 4 * 512);
1884  if (s->xma[i].nb_channels > 1)
1885  memmove(s->samples[start_ch + 1], s->samples[start_ch + 1] + frame->nb_samples, s->offset[i] * 4 * 512);
1886  }
1887  }
1888 
1889  *got_frame_ptr = 1;
1890  }
1891  }
1892 
1893  return ret;
1894 }
1895 
1897 {
1898  XMADecodeCtx *s = avctx->priv_data;
1899  int i, ret, start_channels = 0;
1900 
1901  if (avctx->channels <= 0 || avctx->extradata_size == 0)
1902  return AVERROR_INVALIDDATA;
1903 
1904  /* get stream config */
1905  if (avctx->codec_id == AV_CODEC_ID_XMA2 && avctx->extradata_size == 34) { /* XMA2WAVEFORMATEX */
1906  s->num_streams = (avctx->channels + 1) / 2;
1907  } else if (avctx->codec_id == AV_CODEC_ID_XMA2 && avctx->extradata_size >= 2) { /* XMA2WAVEFORMAT */
1908  s->num_streams = avctx->extradata[1];
1909  if (avctx->extradata_size != (32 + ((avctx->extradata[0]==3)?0:8) + 4*s->num_streams)) {
1910  av_log(avctx, AV_LOG_ERROR, "Incorrect XMA2 extradata size\n");
1911  s->num_streams = 0;
1912  return AVERROR(EINVAL);
1913  }
1914  } else if (avctx->codec_id == AV_CODEC_ID_XMA1 && avctx->extradata_size >= 4) { /* XMAWAVEFORMAT */
1915  s->num_streams = avctx->extradata[4];
1916  if (avctx->extradata_size != (8 + 20*s->num_streams)) {
1917  av_log(avctx, AV_LOG_ERROR, "Incorrect XMA1 extradata size\n");
1918  s->num_streams = 0;
1919  return AVERROR(EINVAL);
1920  }
1921  } else {
1922  av_log(avctx, AV_LOG_ERROR, "Incorrect XMA config\n");
1923  return AVERROR(EINVAL);
1924  }
1925 
1926  /* encoder supports up to 64 streams / 64*2 channels (would have to alloc arrays) */
1927  if (avctx->channels > XMA_MAX_CHANNELS || s->num_streams > XMA_MAX_STREAMS ||
1928  s->num_streams <= 0
1929  ) {
1930  avpriv_request_sample(avctx, "More than %d channels in %d streams", XMA_MAX_CHANNELS, s->num_streams);
1931  s->num_streams = 0;
1932  return AVERROR_PATCHWELCOME;
1933  }
1934 
1935  /* init all streams (several streams of 1/2ch make Nch files) */
1936  for (i = 0; i < s->num_streams; i++) {
1937  ret = decode_init(&s->xma[i], avctx, i);
1938  if (ret < 0)
1939  return ret;
1940  s->frames[i] = av_frame_alloc();
1941  if (!s->frames[i])
1942  return AVERROR(ENOMEM);
1943 
1944  s->start_channel[i] = start_channels;
1945  start_channels += s->xma[i].nb_channels;
1946  }
1947  if (start_channels != avctx->channels)
1948  return AVERROR_INVALIDDATA;
1949 
1950  return ret;
1951 }
1952 
1954 {
1955  XMADecodeCtx *s = avctx->priv_data;
1956  int i;
1957 
1958  for (i = 0; i < s->num_streams; i++) {
1959  decode_end(&s->xma[i]);
1960  av_frame_free(&s->frames[i]);
1961  }
1962  s->num_streams = 0;
1963 
1964  return 0;
1965 }
1966 
1967 static void flush(WMAProDecodeCtx *s)
1968 {
1969  int i;
1970  /** reset output buffer as a part of it is used during the windowing of a
1971  new frame */
1972  for (i = 0; i < s->nb_channels; i++)
1973  memset(s->channel[i].out, 0, s->samples_per_frame *
1974  sizeof(*s->channel[i].out));
1975  s->packet_loss = 1;
1976  s->skip_packets = 0;
1977  s->eof_done = 0;
1978 }
1979 
1980 
1981 /**
1982  *@brief Clear decoder buffers (for seeking).
1983  *@param avctx codec context
1984  */
1985 static void wmapro_flush(AVCodecContext *avctx)
1986 {
1987  WMAProDecodeCtx *s = avctx->priv_data;
1988 
1989  flush(s);
1990 }
1991 
1992 static void xma_flush(AVCodecContext *avctx)
1993 {
1994  XMADecodeCtx *s = avctx->priv_data;
1995  int i;
1996 
1997  for (i = 0; i < s->num_streams; i++)
1998  flush(&s->xma[i]);
1999 
2000  memset(s->offset, 0, sizeof(s->offset));
2001  s->current_stream = 0;
2002 }
2003 
2004 
2005 /**
2006  *@brief wmapro decoder
2007  */
2009  .name = "wmapro",
2010  .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 9 Professional"),
2011  .type = AVMEDIA_TYPE_AUDIO,
2012  .id = AV_CODEC_ID_WMAPRO,
2013  .priv_data_size = sizeof(WMAProDecodeCtx),
2015  .close = wmapro_decode_end,
2017  .capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1,
2018  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2019  .flush = wmapro_flush,
2020  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
2022 };
2023 
2025  .name = "xma1",
2026  .long_name = NULL_IF_CONFIG_SMALL("Xbox Media Audio 1"),
2027  .type = AVMEDIA_TYPE_AUDIO,
2028  .id = AV_CODEC_ID_XMA1,
2029  .priv_data_size = sizeof(XMADecodeCtx),
2030  .init = xma_decode_init,
2031  .close = xma_decode_end,
2034  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2035  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
2037 };
2038 
2040  .name = "xma2",
2041  .long_name = NULL_IF_CONFIG_SMALL("Xbox Media Audio 2"),
2042  .type = AVMEDIA_TYPE_AUDIO,
2043  .id = AV_CODEC_ID_XMA2,
2044  .priv_data_size = sizeof(XMADecodeCtx),
2045  .init = xma_decode_init,
2046  .close = xma_decode_end,
2048  .flush = xma_flush,
2050  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2051  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
2053 };
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: internal.h:48
float, planar
Definition: samplefmt.h:69
float * channel_data[WMAPRO_MAX_CHANNELS]
transformation coefficients
Definition: wmaprodec.c:171
uint8_t max_num_subframes
Definition: wmaprodec.c:196
static const uint16_t critical_freq[]
frequencies to divide the frequency spectrum into scale factor bands
Definition: wmaprodata.h:37
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
static int decode_tilehdr(WMAProDecodeCtx *s)
Decode how the data in the frame is split into subframes.
Definition: wmaprodec.c:647
#define XMA_MAX_CHANNELS_STREAM
Definition: wmaprodec.c:112
This structure describes decoded (raw) audio or video data.
Definition: frame.h:314
#define VEC2MAXDEPTH
Definition: wmaprodec.c:125
float samples[XMA_MAX_CHANNELS][512 *64]
Definition: wmaprodec.c:248
int subframe_offset
subframe offset in the bit reservoir
Definition: wmaprodec.c:212
static const uint16_t vec1_huffcodes[HUFF_VEC1_SIZE]
Definition: wmaprodata.h:507
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
static const float coef0_level[HUFF_COEF0_SIZE]
Definition: wmaprodata.h:355
uint8_t table_idx
index for the num_sfb, sfb_offsets, sf_offsets and subwoofer_cutoffs tables
Definition: wmaprodec.c:234
static const uint32_t scale_rl_huffcodes[HUFF_SCALE_RL_SIZE]
Definition: wmaprodata.h:97
uint16_t num_vec_coeffs
number of vector coded coefficients
Definition: wmaprodec.c:159
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
Definition: j2kenc.c:218
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:379
#define WMAPRO_BLOCK_MIN_SIZE
minimum block size
Definition: wmaprodec.c:117
uint16_t min_samples_per_subframe
Definition: wmaprodec.c:199
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:291
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:31
AVCodecContext * avctx
codec context for av_log
Definition: wmaprodec.c:179
int offset[XMA_MAX_STREAMS]
Definition: wmaprodec.c:249
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
Definition: vlc.h:120
uint32_t decode_flags
used compression features
Definition: wmaprodec.c:189
#define avpriv_request_sample(...)
int start_channel[XMA_MAX_STREAMS]
Definition: wmaprodec.c:250
#define FF_DEBUG_BITSTREAM
Definition: avcodec.h:1621
int size
Definition: packet.h:364
static const uint16_t vec4_huffcodes[HUFF_VEC4_SIZE]
Definition: wmaprodata.h:421
int8_t scale_factor_step
scaling step for the current subframe
Definition: wmaprodec.c:152
const uint8_t * buffer
Definition: get_bits.h:62
int av_log2(unsigned v)
Definition: intmath.c:26
static void wmapro_flush(AVCodecContext *avctx)
Clear decoder buffers (for seeking).
Definition: wmaprodec.c:1985
int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb, VLC *vlc, const float *level_table, const uint16_t *run_table, int version, WMACoef *ptr, int offset, int num_coefs, int block_len, int frame_len_bits, int coef_nb_bits)
Decode run level compressed coefficients.
Definition: wma.c:424
uint16_t log2_frame_size
Definition: wmaprodec.c:194
static const uint8_t scale_huffbits[HUFF_SCALE_SIZE]
Definition: wmaprodata.h:70
uint8_t table_idx
index in sf_offsets for the scale factor reference block
Definition: wmaprodec.c:157
#define FF_ARRAY_ELEMS(a)
int16_t * cur_sfb_offsets
sfb offsets for the current block
Definition: wmaprodec.c:233
GLfloat v0
Definition: opengl_enc.c:106
#define VLCBITS
Definition: wmaprodec.c:122
uint8_t run
Definition: svq3.c:205
WMAProChannelGrp chgroup[WMAPRO_MAX_CHANNELS]
channel group information
Definition: wmaprodec.c:238
PutBitContext pb
context for filling the frame_data buffer
Definition: wmaprodec.c:183
#define SCALEVLCBITS
Definition: wmaprodec.c:123
AVCodec.
Definition: codec.h:190
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_RL16
Definition: bytestream.h:91
if it could not because there are no more frames
#define WMAPRO_MAX_CHANNELS
current decoder limitations
Definition: wmaprodec.c:107
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
Definition: avcodec.h:1228
#define AV_WN32A(p, v)
Definition: intreadwrite.h:538
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:359
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:71
static VLC vec1_vlc
1 coefficient per symbol
Definition: wmaprodec.c:134
static av_cold void dump_context(WMAProDecodeCtx *s)
helper function to print the most important members of the context
Definition: wmaprodec.c:257
SINETABLE_CONST float *const ff_sine_windows[]
static av_cold int xma_decode_init(AVCodecContext *avctx)
Definition: wmaprodec.c:1896
static const uint8_t scale_rl_run[HUFF_SCALE_RL_SIZE]
Definition: wmaprodata.h:140
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:75
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
int frame_offset
frame offset in the bit reservoir
Definition: wmaprodec.c:211
AVFloatDSPContext * fdsp
Definition: wmaprodec.c:180
static const float coef1_level[HUFF_COEF1_SIZE]
Definition: wmaprodata.h:396
uint16_t subframe_offset[MAX_SUBFRAMES]
subframe positions in the current frame
Definition: wmaprodec.c:146
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1199
static void inverse_channel_transform(WMAProDecodeCtx *s)
Reconstruct the individual channel data.
Definition: wmaprodec.c:1098
int16_t sfb_offsets[WMAPRO_BLOCK_SIZES][MAX_BANDS]
scale factor band offsets (multiples of 4)
Definition: wmaprodec.c:201
uint8_t
#define av_cold
Definition: attributes.h:88
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:190
#define HUFF_COEF1_SIZE
Definition: wmaprodata.h:253
#define HUFF_VEC2_SIZE
Definition: wmaprodata.h:460
int8_t num_bands
number of scale factor bands
Definition: wmaprodec.c:231
#define SCALEMAXDEPTH
Definition: wmaprodec.c:127
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
static av_cold int xma_decode_end(AVCodecContext *avctx)
Definition: wmaprodec.c:1953
void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
Definition: bitstream.c:69
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:632
uint8_t packet_sequence_number
current packet number
Definition: wmaprodec.c:209
uint8_t drc_gain
gain for the DRC tool
Definition: wmaprodec.c:221
uint8_t dynamic_range_compression
frame contains DRC data
Definition: wmaprodec.c:191
static uint8_t * append(uint8_t *buf, const uint8_t *src, int size)
#define MAX_FRAMESIZE
maximum compressed frame size
Definition: wmaprodec.c:110
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition: mem.h:117
int16_t prev_block_len
length of the previous block
Definition: wmaprodec.c:142
#define av_clip
Definition: common.h:122
WMAProChannelCtx channel[WMAPRO_MAX_CHANNELS]
per channel data
Definition: wmaprodec.c:240
GetBitContext gb
bitstream reader context
Definition: wmaprodec.c:219
uint8_t * data
Definition: packet.h:363
uint8_t grouped
channel is part of a group
Definition: wmaprodec.c:149
static av_cold int wmapro_decode_end(AVCodecContext *avctx)
Definition: wmaprodec.c:288
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:219
#define WMAPRO_BLOCK_MAX_BITS
log2 of max block size
Definition: wmaprodec.c:116
#define ff_dlog(a,...)
#define HUFF_COEF0_SIZE
Definition: wmaprodata.h:166
int * scale_factors
pointer to the scale factor values used for decoding
Definition: wmaprodec.c:156
bitstream reader API header.
#define HUFF_VEC1_SIZE
Definition: wmaprodata.h:505
int next_packet_start
start offset of the next wma packet in the demuxer packet
Definition: wmaprodec.c:207
int num_saved_bits
saved number of bits
Definition: wmaprodec.c:210
static const uint16_t scale_huffcodes[HUFF_SCALE_SIZE]
Definition: wmaprodata.h:51
int buf_bit_size
buffer size in bits
Definition: wmaprodec.c:220
static const uint32_t coef1_huffcodes[555]
Definition: wmadata.h:258
#define av_log(a,...)
#define SCALERLMAXDEPTH
Definition: wmaprodec.c:128
static VLC vec4_vlc
4 coefficients per symbol
Definition: wmaprodec.c:132
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:849
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function.
Definition: float_dsp.h:119
static av_always_inline double ff_exp10(double x)
Compute 10^x for floating point values.
Definition: ffmath.h:42
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:194
static int decode_subframe(WMAProDecodeCtx *s)
Decode a single subframe (block).
Definition: wmaprodec.c:1183
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
Definition: float_dsp.c:135
uint8_t packet_loss
set in case of bitstream error
Definition: wmaprodec.c:213
static int put_bits_left(PutBitContext *s)
Definition: put_bits.h:109
static const uint16_t mask[17]
Definition: lzw.c:38
#define MAX_SUBFRAMES
max number of subframes per channel
Definition: wmaprodec.c:108
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:203
#define HUFF_VEC4_SIZE
Definition: wmaprodata.h:419
static av_cold int decode_end(WMAProDecodeCtx *s)
Uninitialize the decoder and free all resources.
Definition: wmaprodec.c:276
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:115
int8_t channel_indexes_for_cur_subframe[WMAPRO_MAX_CHANNELS]
Definition: wmaprodec.c:230
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:215
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:611
static const uint8_t coef0_huffbits[666]
Definition: wmadata.h:171
static float sin64[33]
sine table for decorrelation
Definition: wmaprodec.c:136
AVCodec ff_xma1_decoder
Definition: wmaprodec.c:2024
#define HUFF_SCALE_SIZE
Definition: wmaprodata.h:49
int max_scale_factor
maximum scale factor for the current subframe
Definition: wmaprodec.c:153
const char * name
Name of the codec implementation.
Definition: codec.h:197
uint8_t bits
Definition: vp3data.h:141
#define ff_mdct_init
Definition: fft.h:161
int8_t channels_for_cur_subframe
number of channels that contain the subframe
Definition: wmaprodec.c:229
AVCodec ff_wmapro_decoder
wmapro decoder
Definition: wmaprodec.c:2008
#define FFMAX(a, b)
Definition: common.h:103
static int decode_subframe_length(WMAProDecodeCtx *s, int offset)
Decode the subframe length.
Definition: wmaprodec.c:596
int8_t nb_channels
number of channels in stream (XMA1/2)
Definition: wmaprodec.c:228
static const uint8_t coef1_huffbits[555]
Definition: wmadata.h:331
int current_stream
Definition: wmaprodec.c:246
int8_t exp
Definition: eval.c:72
float out[WMAPRO_BLOCK_MAX_SIZE+WMAPRO_BLOCK_MAX_SIZE/2]
output buffer
Definition: wmaprodec.c:160
int quant_step
quantization step for the current subframe
Definition: wmaprodec.c:150
static const uint16_t coef1_run[HUFF_COEF1_SIZE]
Definition: wmaprodata.h:379
Definition: vlc.h:26
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:1242
frame specific decoder context for a single channel
Definition: wmaprodec.c:141
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:83
static int decode_packet(AVCodecContext *avctx, WMAProDecodeCtx *s, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: wmaprodec.c:1604
static VLC sf_vlc
scale factor DPCM vlc
Definition: wmaprodec.c:130
uint8_t bits_per_sample
integer audio sample size for the unscaled IMDCT output (used to scale to [-1.0, 1.0])
Definition: wmaprodec.c:192
static const uint8_t scale_rl_huffbits[HUFF_SCALE_RL_SIZE]
Definition: wmaprodata.h:118
static const uint16_t symbol_to_vec4[HUFF_VEC4_SIZE]
Definition: wmaprodata.h:540
static SDL_Window * window
Definition: ffplay.c:366
static int decode_coeffs(WMAProDecodeCtx *s, int c)
Extract the coefficients from the bitstream.
Definition: wmaprodec.c:902
uint8_t num_subframes
Definition: wmaprodec.c:144
#define b
Definition: input.c:41
Definition: fft.h:83
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition: avcodec.h:333
uint8_t skip_packets
packets to skip to find next packet in a stream (XMA1/2)
Definition: wmaprodec.c:224
int num_streams
Definition: wmaprodec.c:247
#define FFMIN(a, b)
Definition: common.h:105
uint32_t frame_num
current frame number (not used for decoding)
Definition: wmaprodec.c:218
static void xma_flush(AVCodecContext *avctx)
Definition: wmaprodec.c:1992
static void flush(WMAProDecodeCtx *s)
Definition: wmaprodec.c:1967
int8_t transform
transform on / off
Definition: wmaprodec.c:168
float tmp[WMAPRO_BLOCK_MAX_SIZE]
IMDCT output buffer.
Definition: wmaprodec.c:185
main decoder context
Definition: wmaprodec.c:177
int8_t sf_offsets[WMAPRO_BLOCK_SIZES][WMAPRO_BLOCK_SIZES][MAX_BANDS]
scale factor resample matrix
Definition: wmaprodec.c:202
static av_cold int decode_init(WMAProDecodeCtx *s, AVCodecContext *avctx, int num_stream)
Initialize the decoder.
Definition: wmaprodec.c:317
AVCodec ff_xma2_decoder
Definition: wmaprodec.c:2039
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:446
uint16_t decoded_samples
number of already processed samples
Definition: wmaprodec.c:148
AVFrame * frames[XMA_MAX_STREAMS]
Definition: wmaprodec.c:245
uint8_t frame_data[MAX_FRAMESIZE+AV_INPUT_BUFFER_PADDING_SIZE]
compressed frame data
Definition: wmaprodec.c:182
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
#define s(width, name)
Definition: cbs_vp9.c:257
static const float *const default_decorrelation[]
default decorrelation matrix offsets
Definition: wmaprodata.h:594
static void save_bits(WMAProDecodeCtx *s, GetBitContext *gb, int len, int append)
Fill the bit reservoir with a (partial) frame.
Definition: wmaprodec.c:1557
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:797
int8_t transmit_num_vec_coeffs
number of vector coded coefficients is part of the bitstream
Definition: wmaprodec.c:232
uint8_t eof_done
set when EOF reached and extra subframe is written (XMA1/2)
Definition: wmaprodec.c:215
#define MAX_BANDS
max number of scale factor bands
Definition: wmaprodec.c:109
const float * windows[WMAPRO_BLOCK_SIZES]
windows for the different block sizes
Definition: wmaprodec.c:186
uint8_t subframe_len_bits
number of bits used for the subframe length
Definition: wmaprodec.c:197
int8_t transform_band[MAX_BANDS]
controls if the transform is enabled for a certain band
Definition: wmaprodec.c:169
if(ret)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
int8_t lfe_channel
lfe channel index
Definition: wmaprodec.c:195
int16_t subwoofer_cutoffs[WMAPRO_BLOCK_SIZES]
subwoofer cutoff values
Definition: wmaprodec.c:203
#define XMA_MAX_STREAMS
Definition: wmaprodec.c:111
int frame_size
Definition: mxfenc.c:2205
static VLC vec2_vlc
2 coefficients per symbol
Definition: wmaprodec.c:133
int8_t parsed_all_subframes
all subframes decoded?
Definition: wmaprodec.c:223
Libavcodec external API header.
channel group for channel transformations
Definition: wmaprodec.c:166
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:58
static av_cold int wmapro_decode_init(AVCodecContext *avctx)
Initialize the decoder.
Definition: wmaprodec.c:583
#define VEC1MAXDEPTH
Definition: wmaprodec.c:126
enum AVCodecID codec_id
Definition: avcodec.h:541
int16_t subframe_len
current subframe length
Definition: wmaprodec.c:227
int sample_rate
samples per second
Definition: avcodec.h:1191
#define WMAPRO_BLOCK_SIZES
possible block sizes
Definition: wmaprodec.c:119
int debug
debug
Definition: avcodec.h:1618
static const uint8_t vec4_huffbits[HUFF_VEC4_SIZE]
Definition: wmaprodata.h:440
main external API structure.
Definition: avcodec.h:531
static const uint8_t symbol_to_vec2[HUFF_VEC2_SIZE]
Definition: wmaprodata.h:557
tables for wmapro decoding
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1884
#define VEC4MAXDEPTH
Definition: wmaprodec.c:124
int extradata_size
Definition: avcodec.h:633
static VLC coef_vlc[2]
coefficient run length vlc codes
Definition: wmaprodec.c:135
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:498
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:467
int8_t reuse_sf
share scale factors between subframes
Definition: wmaprodec.c:151
#define AV_CODEC_CAP_SUBFRAMES
Codec can output multiple frames per AVPacket Normally demuxers return one frame at a time...
Definition: codec.h:93
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:659
uint8_t packet_offset
frame offset in the packet
Definition: wmaprodec.c:208
static int decode_scale_factors(WMAProDecodeCtx *s)
Extract scale factors from the bitstream.
Definition: wmaprodec.c:1005
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
Definition: float_dsp.h:85
int saved_scale_factors[2][MAX_BANDS]
resampled and (previously) transmitted scale factor values
Definition: wmaprodec.c:154
uint8_t num_channels
number of channels in the group
Definition: wmaprodec.c:167
static av_cold int get_rate(AVCodecContext *avctx)
Definition: wmaprodec.c:297
uint8_t transmit_coefs
Definition: wmaprodec.c:143
static VLC sf_rl_vlc
scale factor run length vlc
Definition: wmaprodec.c:131
float * coeffs
pointer to the subframe decode buffer
Definition: wmaprodec.c:158
uint8_t cur_subframe
current subframe number
Definition: wmaprodec.c:147
static av_always_inline uint32_t av_float2int(float f)
Reinterpret a float as a 32-bit integer.
Definition: intfloat.h:50
static int remaining_bits(WMAProDecodeCtx *s, GetBitContext *gb)
Calculate remaining input buffer length.
Definition: wmaprodec.c:1545
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
Definition: fft.h:103
const uint8_t * quant
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:553
static int decode_channel_transform(WMAProDecodeCtx *s)
Decode channel transformation parameters.
Definition: wmaprodec.c:788
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
av_cold int ff_wma_get_frame_len_bits(int sample_rate, int version, unsigned int decode_flags)
Get the samples per frame for this stream.
Definition: wma_common.c:32
FFTContext mdct_ctx[WMAPRO_BLOCK_SIZES]
MDCT context per block size.
Definition: wmaprodec.c:184
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:328
int8_t scale_factor_idx
index for the transmitted scale factor values (used for resampling)
Definition: wmaprodec.c:155
uint8_t level
Definition: svq3.c:206
#define PRINT(a, b)
#define XMA_MAX_CHANNELS
Definition: wmaprodec.c:113
#define WMAPRO_BLOCK_MAX_SIZE
maximum block size
Definition: wmaprodec.c:118
#define PRINT_HEX(a, b)
uint16_t subframe_len[MAX_SUBFRAMES]
subframe length in samples
Definition: wmaprodec.c:145
internal math functions header
int8_t num_sfb[WMAPRO_BLOCK_SIZES]
scale factor bands per block size
Definition: wmaprodec.c:200
common internal api header.
static void decode_decorrelation_matrix(WMAProDecodeCtx *s, WMAProChannelGrp *chgroup)
Calculate a decorrelation matrix from the bitstream parameters.
Definition: wmaprodec.c:738
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:117
#define ff_mdct_end
Definition: fft.h:162
channel
Use these values when setting the channel map with ebur128_set_channel().
Definition: ebur128.h:39
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:64
static void wmapro_window(WMAProDecodeCtx *s)
Apply sine window and reconstruct the output buffer.
Definition: wmaprodec.c:1153
#define WMAPRO_BLOCK_MIN_BITS
log2 of min block size
Definition: wmaprodec.c:115
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:215
static const uint8_t scale_rl_level[HUFF_SCALE_RL_SIZE]
Definition: wmaprodata.h:150
void * priv_data
Definition: avcodec.h:558
int len
GetBitContext pgb
bitstream reader context for the packet
Definition: wmaprodec.c:206
int channels
number of audio channels
Definition: avcodec.h:1192
VLC_TYPE(* table)[2]
code, bits
Definition: vlc.h:28
WMAProDecodeCtx xma[XMA_MAX_STREAMS]
Definition: wmaprodec.c:244
unsigned int ff_wma_get_large_val(GetBitContext *gb)
Decode an uncompressed coefficient.
Definition: wma.c:392
static const uint32_t coef0_huffcodes[666]
Definition: wmadata.h:84
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:940
static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
Decode one WMA frame.
Definition: wmaprodec.c:1423
int frame_number
Frame counter, set by libavcodec.
Definition: avcodec.h:1222
Filter the word “frame” indicates either a video frame or a group of audio samples
uint16_t samples_per_frame
number of samples to output
Definition: wmaprodec.c:193
static const uint8_t vec1_huffbits[HUFF_VEC1_SIZE]
Definition: wmaprodata.h:523
#define av_freep(p)
static const uint16_t coef0_run[HUFF_COEF0_SIZE]
Definition: wmaprodata.h:332
static const uint16_t vec2_huffcodes[HUFF_VEC2_SIZE]
Definition: wmaprodata.h:462
int8_t esc_len
length of escaped coefficients
Definition: wmaprodec.c:235
#define M_PI
Definition: mathematics.h:52
uint8_t len_prefix
frame is prefixed with its length
Definition: wmaprodec.c:190
float decorrelation_matrix[WMAPRO_MAX_CHANNELS *WMAPRO_MAX_CHANNELS]
Definition: wmaprodec.c:170
static int wmapro_decode_packet(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Decode a single WMA packet.
Definition: wmaprodec.c:1780
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:361
float min
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:91
static double val(void *priv, double ch)
Definition: aeval.c:76
This structure stores compressed data.
Definition: packet.h:340
#define HUFF_SCALE_RL_SIZE
Definition: wmaprodata.h:95
uint8_t max_subframe_len_bit
flag indicating that the subframe is of maximum size when the first subframe length bit is 1 ...
Definition: wmaprodec.c:198
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:380
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:50
int8_t skip_frame
skip output step
Definition: wmaprodec.c:222
void ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
int i
Definition: input.c:407
static av_always_inline int get_bitsz(GetBitContext *s, int n)
Read 0-25 bits.
Definition: get_bits.h:415
#define av_unused
Definition: attributes.h:131
#define tb
Definition: regdef.h:68
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
static const uint8_t vec2_huffbits[HUFF_VEC2_SIZE]
Definition: wmaprodata.h:483
uint8_t num_chgroups
number of channel groups
Definition: wmaprodec.c:237
uint8_t packet_done
set when a packet is fully decoded
Definition: wmaprodec.c:214
static int xma_decode_packet(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: wmaprodec.c:1797
static uint8_t tmp[11]
Definition: aes_ctr.c:27
bitstream writer API