Coverage Report

Created: 2026-04-01 07:42

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