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