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