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