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