Coverage Report

Created: 2026-02-14 06:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/wmalosslessdec.c
Line
Count
Source
1
/*
2
 * Windows Media Audio Lossless decoder
3
 * Copyright (c) 2007 Baptiste Coudurier, Benjamin Larsson, Ulion
4
 * Copyright (c) 2008 - 2011 Sascha Sommer, Benjamin Larsson
5
 * Copyright (c) 2011 Andreas Ă–man
6
 * Copyright (c) 2011 - 2012 Mashiat Sarker Shakkhar
7
 *
8
 * This file is part of FFmpeg.
9
 *
10
 * FFmpeg is free software; you can redistribute it and/or
11
 * modify it under the terms of the GNU Lesser General Public
12
 * License as published by the Free Software Foundation; either
13
 * version 2.1 of the License, or (at your option) any later version.
14
 *
15
 * FFmpeg is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18
 * Lesser General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU Lesser General Public
21
 * License along with FFmpeg; if not, write to the Free Software
22
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23
 */
24
25
#include <inttypes.h>
26
27
#include "libavutil/attributes.h"
28
#include "libavutil/avassert.h"
29
#include "libavutil/mem.h"
30
#include "libavutil/mem_internal.h"
31
32
#include "avcodec.h"
33
#include "codec_internal.h"
34
#include "decode.h"
35
#include "get_bits.h"
36
#include "put_bits.h"
37
#include "lossless_audiodsp.h"
38
#include "wma_common.h"
39
40
/** current decoder limitations */
41
1.50k
#define WMALL_MAX_CHANNELS      8                       ///< max number of handled channels
42
245k
#define MAX_SUBFRAMES          32                       ///< max number of subframes per channel
43
#define MAX_BANDS              29                       ///< max number of scale factor bands
44
1.46k
#define MAX_FRAMESIZE       32768                       ///< maximum compressed frame size
45
48.1k
#define MAX_ORDER             256
46
47
#define WMALL_BLOCK_MIN_BITS    6                       ///< log2 of min block size
48
#define WMALL_BLOCK_MAX_BITS   14                       ///< log2 of max block size
49
#define WMALL_BLOCK_MAX_SIZE (1 << WMALL_BLOCK_MAX_BITS)    ///< maximum block size
50
#define WMALL_BLOCK_SIZES    (WMALL_BLOCK_MAX_BITS - WMALL_BLOCK_MIN_BITS + 1) ///< possible block sizes
51
52
42.8k
#define WMALL_COEFF_PAD_SIZE   16                       ///< pad coef buffers with 0 for use with SIMD
53
54
/**
55
 * @brief frame-specific decoder context for a single channel
56
 */
57
typedef struct WmallChannelCtx {
58
    int16_t     prev_block_len;                         ///< length of the previous block
59
    uint8_t     transmit_coefs;
60
    uint8_t     num_subframes;
61
    uint16_t    subframe_len[MAX_SUBFRAMES];            ///< subframe length in samples
62
    uint16_t    subframe_offsets[MAX_SUBFRAMES];        ///< subframe positions in the current frame
63
    uint8_t     cur_subframe;                           ///< current subframe number
64
    uint16_t    decoded_samples;                        ///< number of already processed samples
65
    int         quant_step;                             ///< quantization step for the current subframe
66
    int         transient_counter;                      ///< number of transient samples from the beginning of the transient zone
67
} WmallChannelCtx;
68
69
/**
70
 * @brief main decoder context
71
 */
72
typedef struct WmallDecodeCtx {
73
    /* generic decoder variables */
74
    AVCodecContext  *avctx;
75
    AVFrame         *frame;
76
    LLAudDSPContext dsp;                           ///< accelerated DSP functions
77
    uint8_t         *frame_data;                    ///< compressed frame data
78
    int             max_frame_size;                 ///< max bitstream size
79
    PutBitContext   pb;                             ///< context for filling the frame_data buffer
80
81
    /* frame size dependent frame information (set during initialization) */
82
    uint32_t        decode_flags;                   ///< used compression features
83
    int             len_prefix;                     ///< frame is prefixed with its length
84
    int             dynamic_range_compression;      ///< frame contains DRC data
85
    uint8_t         bits_per_sample;                ///< integer audio sample size for the unscaled IMDCT output (used to scale to [-1.0, 1.0])
86
    uint16_t        samples_per_frame;              ///< number of samples to output
87
    uint16_t        log2_frame_size;
88
    int8_t          num_channels;                   ///< number of channels in the stream (same as AVCodecContext.num_channels)
89
    int8_t          lfe_channel;                    ///< lfe channel index
90
    uint8_t         max_num_subframes;
91
    uint8_t         subframe_len_bits;              ///< number of bits used for the subframe length
92
    uint8_t         max_subframe_len_bit;           ///< flag indicating that the subframe is of maximum size when the first subframe length bit is 1
93
    uint16_t        min_samples_per_subframe;
94
95
    /* packet decode state */
96
    GetBitContext   pgb;                            ///< bitstream reader context for the packet
97
    int             next_packet_start;              ///< start offset of the next WMA packet in the demuxer packet
98
    uint8_t         packet_offset;                  ///< offset to the frame in the packet
99
    uint8_t         packet_sequence_number;         ///< current packet number
100
    int             num_saved_bits;                 ///< saved number of bits
101
    int             frame_offset;                   ///< frame offset in the bit reservoir
102
    int             subframe_offset;                ///< subframe offset in the bit reservoir
103
    uint8_t         packet_loss;                    ///< set in case of bitstream error
104
    uint8_t         packet_done;                    ///< set when a packet is fully decoded
105
106
    /* frame decode state */
107
    uint32_t        frame_num;                      ///< current frame number (not used for decoding)
108
    GetBitContext   gb;                             ///< bitstream reader context
109
    int             buf_bit_size;                   ///< buffer size in bits
110
    int16_t         *samples_16[WMALL_MAX_CHANNELS]; ///< current sample buffer pointer (16-bit)
111
    int32_t         *samples_32[WMALL_MAX_CHANNELS]; ///< current sample buffer pointer (24-bit)
112
    uint8_t         drc_gain;                       ///< gain for the DRC tool
113
    int8_t          skip_frame;                     ///< skip output step
114
    int8_t          parsed_all_subframes;           ///< all subframes decoded?
115
116
    /* subframe/block decode state */
117
    int16_t         subframe_len;                   ///< current subframe length
118
    int8_t          channels_for_cur_subframe;      ///< number of channels that contain the subframe
119
    int8_t          channel_indexes_for_cur_subframe[WMALL_MAX_CHANNELS];
120
121
    WmallChannelCtx channel[WMALL_MAX_CHANNELS];    ///< per channel data
122
123
    // WMA Lossless-specific
124
125
    uint8_t do_arith_coding;
126
    uint8_t do_ac_filter;
127
    uint8_t do_inter_ch_decorr;
128
    uint8_t do_mclms;
129
    uint8_t do_lpc;
130
131
    int8_t  acfilter_order;
132
    int8_t  acfilter_scaling;
133
    int16_t acfilter_coeffs[16];
134
    int     acfilter_prevvalues[WMALL_MAX_CHANNELS][16];
135
136
    int8_t  mclms_order;
137
    int8_t  mclms_scaling;
138
    int16_t mclms_coeffs[WMALL_MAX_CHANNELS * WMALL_MAX_CHANNELS * 32];
139
    int16_t mclms_coeffs_cur[WMALL_MAX_CHANNELS * WMALL_MAX_CHANNELS];
140
    int32_t mclms_prevvalues[WMALL_MAX_CHANNELS * 2 * 32];
141
    int32_t mclms_updates[WMALL_MAX_CHANNELS * 2 * 32];
142
    int     mclms_recent;
143
144
    int     movave_scaling;
145
    int     quant_stepsize;
146
147
    struct {
148
        int order;
149
        int scaling;
150
        int coefsend;
151
        int bitsend;
152
        DECLARE_ALIGNED(16, int16_t, coefs)[MAX_ORDER + WMALL_COEFF_PAD_SIZE/sizeof(int16_t)];
153
        DECLARE_ALIGNED(16, int32_t, lms_prevvalues)[MAX_ORDER * 2 + WMALL_COEFF_PAD_SIZE/sizeof(int16_t)];
154
        DECLARE_ALIGNED(16, int16_t, lms_updates)[MAX_ORDER * 2 + WMALL_COEFF_PAD_SIZE/sizeof(int16_t)];
155
        int recent;
156
    } cdlms[WMALL_MAX_CHANNELS][9];
157
158
    int cdlms_ttl[WMALL_MAX_CHANNELS];
159
160
    int bV3RTM;
161
162
    int is_channel_coded[WMALL_MAX_CHANNELS];
163
    int update_speed[WMALL_MAX_CHANNELS];
164
165
    int transient[WMALL_MAX_CHANNELS];
166
    int transient_pos[WMALL_MAX_CHANNELS];
167
    int seekable_tile;
168
169
    unsigned ave_sum[WMALL_MAX_CHANNELS];
170
171
    int channel_residues[WMALL_MAX_CHANNELS][WMALL_BLOCK_MAX_SIZE];
172
173
    int lpc_coefs[WMALL_MAX_CHANNELS][40];
174
    int lpc_order;
175
    int lpc_scaling;
176
    int lpc_intbits;
177
} WmallDecodeCtx;
178
179
/** Get sign of integer (1 for positive, -1 for negative and 0 for zero) */
180
217M
#define WMASIGN(x) (((x) > 0) - ((x) < 0))
181
182
static av_cold int decode_init(AVCodecContext *avctx)
183
1.67k
{
184
1.67k
    WmallDecodeCtx *s  = avctx->priv_data;
185
1.67k
    uint8_t *edata_ptr = avctx->extradata;
186
1.67k
    unsigned int channel_mask;
187
1.67k
    int i, log2_max_num_subframes;
188
189
1.67k
    if (avctx->block_align <= 0 || avctx->block_align > (1<<21)) {
190
112
        av_log(avctx, AV_LOG_ERROR, "block_align is not set or invalid\n");
191
112
        return AVERROR(EINVAL);
192
112
    }
193
194
1.56k
    if (avctx->extradata_size >= 18) {
195
1.52k
        s->decode_flags    = AV_RL16(edata_ptr + 14);
196
1.52k
        channel_mask       = AV_RL32(edata_ptr +  2);
197
1.52k
        s->bits_per_sample = AV_RL16(edata_ptr);
198
1.52k
        if (s->bits_per_sample == 16)
199
797
            avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
200
724
        else if (s->bits_per_sample == 24) {
201
708
            avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
202
708
            avctx->bits_per_raw_sample = 24;
203
708
        } else {
204
16
            av_log(avctx, AV_LOG_ERROR, "Unknown bit-depth: %"PRIu8"\n",
205
16
                   s->bits_per_sample);
206
16
            return AVERROR_INVALIDDATA;
207
16
        }
208
        /* dump the extradata */
209
1.18M
        for (i = 0; i < avctx->extradata_size; i++)
210
1.18M
            ff_dlog(avctx, "[%x] ", avctx->extradata[i]);
211
1.50k
        ff_dlog(avctx, "\n");
212
213
1.50k
    } else {
214
41
        avpriv_request_sample(avctx, "Unsupported extradata size");
215
41
        return AVERROR_PATCHWELCOME;
216
41
    }
217
218
1.50k
    if (channel_mask) {
219
1.30k
        av_channel_layout_uninit(&avctx->ch_layout);
220
1.30k
        av_channel_layout_from_mask(&avctx->ch_layout, channel_mask);
221
1.30k
    }
222
1.50k
    av_assert0(avctx->ch_layout.nb_channels >= 0);
223
1.50k
    if (avctx->ch_layout.nb_channels > WMALL_MAX_CHANNELS) {
224
41
        avpriv_request_sample(avctx,
225
41
                            "More than " AV_STRINGIFY(WMALL_MAX_CHANNELS) " channels");
226
41
        return AVERROR_PATCHWELCOME;
227
41
    }
228
229
1.46k
    s->num_channels = avctx->ch_layout.nb_channels;
230
231
    /* extract lfe channel position */
232
1.46k
    s->lfe_channel = -1;
233
234
1.46k
    if (channel_mask & 8) {
235
156
        unsigned int mask;
236
780
        for (mask = 1; mask < 16; mask <<= 1)
237
624
            if (channel_mask & mask)
238
300
                ++s->lfe_channel;
239
156
    }
240
241
1.46k
    s->max_frame_size = MAX_FRAMESIZE * avctx->ch_layout.nb_channels;
242
1.46k
    s->frame_data = av_mallocz(s->max_frame_size + AV_INPUT_BUFFER_PADDING_SIZE);
243
1.46k
    if (!s->frame_data)
244
0
        return AVERROR(ENOMEM);
245
246
1.46k
    s->avctx = avctx;
247
1.46k
    ff_llauddsp_init(&s->dsp);
248
1.46k
    init_put_bits(&s->pb, s->frame_data, s->max_frame_size);
249
250
    /* generic init */
251
1.46k
    s->log2_frame_size = av_log2(avctx->block_align) + 4;
252
253
    /* frame info */
254
1.46k
    s->skip_frame  = 1; /* skip first frame */
255
1.46k
    s->packet_loss = 1;
256
1.46k
    s->len_prefix  = s->decode_flags & 0x40;
257
258
    /* get frame len */
259
1.46k
    s->samples_per_frame = 1 << ff_wma_get_frame_len_bits(avctx->sample_rate,
260
1.46k
                                                          3, s->decode_flags);
261
1.46k
    av_assert0(s->samples_per_frame <= WMALL_BLOCK_MAX_SIZE);
262
263
    /* init previous block len */
264
7.88k
    for (i = 0; i < avctx->ch_layout.nb_channels; i++)
265
6.42k
        s->channel[i].prev_block_len = s->samples_per_frame;
266
267
    /* subframe info */
268
1.46k
    log2_max_num_subframes  = (s->decode_flags & 0x38) >> 3;
269
1.46k
    s->max_num_subframes    = 1 << log2_max_num_subframes;
270
1.46k
    s->max_subframe_len_bit = 0;
271
1.46k
    s->subframe_len_bits    = av_log2(log2_max_num_subframes) + 1;
272
273
1.46k
    s->min_samples_per_subframe  = s->samples_per_frame / s->max_num_subframes;
274
1.46k
    s->dynamic_range_compression = s->decode_flags & 0x80;
275
1.46k
    s->bV3RTM                    = s->decode_flags & 0x100;
276
277
1.46k
    if (s->max_num_subframes > MAX_SUBFRAMES) {
278
1
        av_log(avctx, AV_LOG_ERROR, "invalid number of subframes %"PRIu8"\n",
279
1
               s->max_num_subframes);
280
1
        return AVERROR_INVALIDDATA;
281
1
    }
282
283
1.46k
    s->frame = av_frame_alloc();
284
1.46k
    if (!s->frame)
285
0
        return AVERROR(ENOMEM);
286
287
1.46k
    return 0;
288
1.46k
}
289
290
/**
291
 * @brief Decode the subframe length.
292
 * @param s      context
293
 * @param offset sample offset in the frame
294
 * @return decoded subframe length on success, < 0 in case of an error
295
 */
296
static int decode_subframe_length(WmallDecodeCtx *s, int offset)
297
134k
{
298
134k
    int frame_len_ratio, subframe_len, len;
299
300
    /* no need to read from the bitstream when only one length is possible */
301
134k
    if (offset == s->samples_per_frame - s->min_samples_per_subframe)
302
89.6k
        return s->min_samples_per_subframe;
303
304
44.8k
    len             = av_log2(s->max_num_subframes - 1) + 1;
305
44.8k
    frame_len_ratio = get_bits(&s->gb, len);
306
44.8k
    subframe_len    = s->min_samples_per_subframe * (frame_len_ratio + 1);
307
308
    /* sanity check the length */
309
44.8k
    if (subframe_len < s->min_samples_per_subframe ||
310
44.8k
        subframe_len > s->samples_per_frame) {
311
0
        av_log(s->avctx, AV_LOG_ERROR, "broken frame: subframe_len %i\n",
312
0
               subframe_len);
313
0
        return AVERROR_INVALIDDATA;
314
0
    }
315
44.8k
    return subframe_len;
316
44.8k
}
317
318
/**
319
 * @brief Decode how the data in the frame is split into subframes.
320
 *       Every WMA frame contains the encoded data for a fixed number of
321
 *       samples per channel. The data for every channel might be split
322
 *       into several subframes. This function will reconstruct the list of
323
 *       subframes for every channel.
324
 *
325
 *       If the subframes are not evenly split, the algorithm estimates the
326
 *       channels with the lowest number of total samples.
327
 *       Afterwards, for each of these channels a bit is read from the
328
 *       bitstream that indicates if the channel contains a subframe with the
329
 *       next subframe size that is going to be read from the bitstream or not.
330
 *       If a channel contains such a subframe, the subframe size gets added to
331
 *       the channel's subframe list.
332
 *       The algorithm repeats these steps until the frame is properly divided
333
 *       between the individual channels.
334
 *
335
 * @param s context
336
 * @return 0 on success, < 0 in case of an error
337
 */
338
static int decode_tilehdr(WmallDecodeCtx *s)
339
93.6k
{
340
93.6k
    uint16_t num_samples[WMALL_MAX_CHANNELS] = { 0 }; /* sum of samples for all currently known subframes of a channel */
341
93.6k
    uint8_t  contains_subframe[WMALL_MAX_CHANNELS];   /* flag indicating if a channel contains the current subframe */
342
93.6k
    int channels_for_cur_subframe = s->num_channels;  /* number of channels that contain the current subframe */
343
93.6k
    int fixed_channel_layout = 0;                     /* flag indicating that all channels use the same subfra2me offsets and sizes */
344
93.6k
    int min_channel_len = 0;                          /* smallest sum of samples (channels with this length will be processed first) */
345
93.6k
    int c, tile_aligned;
346
347
    /* reset tiling information */
348
273k
    for (c = 0; c < s->num_channels; c++)
349
179k
        s->channel[c].num_subframes = 0;
350
351
93.6k
    tile_aligned = get_bits1(&s->gb);
352
93.6k
    if (s->max_num_subframes == 1 || tile_aligned)
353
87.4k
        fixed_channel_layout = 1;
354
355
    /* loop until the frame data is split between the subframes */
356
136k
    do {
357
136k
        int subframe_len, in_use = 0;
358
359
        /* check which channels contain the subframe */
360
428k
        for (c = 0; c < s->num_channels; c++) {
361
291k
            if (num_samples[c] == min_channel_len) {
362
265k
                if (fixed_channel_layout || channels_for_cur_subframe == 1 ||
363
231k
                   (min_channel_len == s->samples_per_frame - s->min_samples_per_subframe)) {
364
231k
                    contains_subframe[c] = 1;
365
231k
                } else {
366
33.9k
                    contains_subframe[c] = get_bits1(&s->gb);
367
33.9k
                }
368
265k
                in_use |= contains_subframe[c];
369
265k
            } else
370
26.0k
                contains_subframe[c] = 0;
371
291k
        }
372
373
136k
        if (!in_use) {
374
2.00k
            av_log(s->avctx, AV_LOG_ERROR,
375
2.00k
                   "Found empty subframe\n");
376
2.00k
            return AVERROR_INVALIDDATA;
377
2.00k
        }
378
379
        /* get subframe length, subframe_len == 0 is not allowed */
380
134k
        if ((subframe_len = decode_subframe_length(s, min_channel_len)) <= 0)
381
0
            return AVERROR_INVALIDDATA;
382
        /* add subframes to the individual channels and find new min_channel_len */
383
134k
        min_channel_len += subframe_len;
384
415k
        for (c = 0; c < s->num_channels; c++) {
385
281k
            WmallChannelCtx *chan = &s->channel[c];
386
387
281k
            if (contains_subframe[c]) {
388
244k
                if (chan->num_subframes >= MAX_SUBFRAMES) {
389
0
                    av_log(s->avctx, AV_LOG_ERROR,
390
0
                           "broken frame: num subframes > 31\n");
391
0
                    return AVERROR_INVALIDDATA;
392
0
                }
393
244k
                chan->subframe_len[chan->num_subframes] = subframe_len;
394
244k
                num_samples[c] += subframe_len;
395
244k
                ++chan->num_subframes;
396
244k
                if (num_samples[c] > s->samples_per_frame) {
397
461
                    av_log(s->avctx, AV_LOG_ERROR, "broken frame: "
398
461
                           "channel len(%"PRIu16") > samples_per_frame(%"PRIu16")\n",
399
461
                           num_samples[c], s->samples_per_frame);
400
461
                    return AVERROR_INVALIDDATA;
401
461
                }
402
244k
            } else if (num_samples[c] <= min_channel_len) {
403
30.3k
                if (num_samples[c] < min_channel_len) {
404
8.09k
                    channels_for_cur_subframe = 0;
405
8.09k
                    min_channel_len = num_samples[c];
406
8.09k
                }
407
30.3k
                ++channels_for_cur_subframe;
408
30.3k
            }
409
281k
        }
410
134k
    } while (min_channel_len < s->samples_per_frame);
411
412
260k
    for (c = 0; c < s->num_channels; c++) {
413
168k
        int i, offset = 0;
414
401k
        for (i = 0; i < s->channel[c].num_subframes; i++) {
415
232k
            s->channel[c].subframe_offsets[i] = offset;
416
232k
            offset += s->channel[c].subframe_len[i];
417
232k
        }
418
168k
    }
419
420
91.2k
    return 0;
421
93.6k
}
422
423
static void decode_ac_filter(WmallDecodeCtx *s)
424
8.01k
{
425
8.01k
    int i;
426
8.01k
    s->acfilter_order   = get_bits(&s->gb, 4) + 1;
427
8.01k
    s->acfilter_scaling = get_bits(&s->gb, 4);
428
429
67.8k
    for (i = 0; i < s->acfilter_order; i++)
430
59.8k
        s->acfilter_coeffs[i] = get_bitsz(&s->gb, s->acfilter_scaling) + 1;
431
8.01k
}
432
433
static void decode_mclms(WmallDecodeCtx *s)
434
5.58k
{
435
5.58k
    s->mclms_order   = (get_bits(&s->gb, 4) + 1) * 2;
436
5.58k
    s->mclms_scaling = get_bits(&s->gb, 4);
437
5.58k
    if (get_bits1(&s->gb)) {
438
2.06k
        int i, send_coef_bits;
439
2.06k
        int cbits = av_log2(s->mclms_scaling + 1);
440
2.06k
        if (1 << cbits < s->mclms_scaling + 1)
441
1.26k
            cbits++;
442
443
2.06k
        send_coef_bits = get_bitsz(&s->gb, cbits) + 2;
444
445
821k
        for (i = 0; i < s->mclms_order * s->num_channels * s->num_channels; i++)
446
819k
            s->mclms_coeffs[i] = get_bits(&s->gb, send_coef_bits);
447
448
9.35k
        for (i = 0; i < s->num_channels; i++) {
449
7.29k
            int c;
450
21.6k
            for (c = 0; c < i; c++)
451
14.4k
                s->mclms_coeffs_cur[i * s->num_channels + c] = get_bits(&s->gb, send_coef_bits);
452
7.29k
        }
453
2.06k
    }
454
5.58k
}
455
456
static int decode_cdlms(WmallDecodeCtx *s)
457
10.2k
{
458
10.2k
    int c, i;
459
10.2k
    int cdlms_send_coef = get_bits1(&s->gb);
460
461
34.0k
    for (c = 0; c < s->num_channels; c++) {
462
26.2k
        s->cdlms_ttl[c] = get_bits(&s->gb, 3) + 1;
463
69.4k
        for (i = 0; i < s->cdlms_ttl[c]; i++) {
464
45.6k
            s->cdlms[c][i].order = (get_bits(&s->gb, 7) + 1) * 8;
465
45.6k
            if (s->cdlms[c][i].order > MAX_ORDER) {
466
2.47k
                av_log(s->avctx, AV_LOG_ERROR,
467
2.47k
                       "Order[%d][%d] %d > max (%d), not supported\n",
468
2.47k
                       c, i, s->cdlms[c][i].order, MAX_ORDER);
469
2.47k
                s->cdlms[0][0].order = 0;
470
2.47k
                return AVERROR_INVALIDDATA;
471
2.47k
            }
472
43.2k
            if(s->cdlms[c][i].order & 8 && s->bits_per_sample == 16) {
473
13.3k
                static int warned;
474
13.3k
                if(!warned)
475
1
                    avpriv_request_sample(s->avctx, "CDLMS of order %d",
476
1
                                          s->cdlms[c][i].order);
477
13.3k
                warned = 1;
478
13.3k
            }
479
43.2k
        }
480
481
66.5k
        for (i = 0; i < s->cdlms_ttl[c]; i++)
482
42.8k
            s->cdlms[c][i].scaling = get_bits(&s->gb, 4);
483
484
23.7k
        if (cdlms_send_coef) {
485
35.7k
            for (i = 0; i < s->cdlms_ttl[c]; i++) {
486
26.4k
                int cbits, shift_l, shift_r, j;
487
26.4k
                cbits = av_log2(s->cdlms[c][i].order);
488
26.4k
                if ((1 << cbits) < s->cdlms[c][i].order)
489
7.69k
                    cbits++;
490
26.4k
                s->cdlms[c][i].coefsend = get_bits(&s->gb, cbits) + 1;
491
492
26.4k
                cbits = av_log2(s->cdlms[c][i].scaling + 1);
493
26.4k
                if ((1 << cbits) < s->cdlms[c][i].scaling + 1)
494
4.25k
                    cbits++;
495
496
26.4k
                s->cdlms[c][i].bitsend = get_bitsz(&s->gb, cbits) + 2;
497
26.4k
                shift_l = 32 - s->cdlms[c][i].bitsend;
498
26.4k
                shift_r = 32 - s->cdlms[c][i].scaling - 2;
499
200k
                for (j = 0; j < s->cdlms[c][i].coefsend; j++)
500
174k
                    s->cdlms[c][i].coefs[j] =
501
174k
                        (get_bits(&s->gb, s->cdlms[c][i].bitsend) << shift_l) >> shift_r;
502
26.4k
            }
503
9.26k
        }
504
505
66.5k
        for (i = 0; i < s->cdlms_ttl[c]; i++)
506
42.8k
            memset(s->cdlms[c][i].coefs + s->cdlms[c][i].order,
507
42.8k
                   0, WMALL_COEFF_PAD_SIZE);
508
23.7k
    }
509
510
7.79k
    return 0;
511
10.2k
}
512
513
static int decode_channel_residues(WmallDecodeCtx *s, int ch, int tile_size)
514
9.70k
{
515
9.70k
    int i = 0;
516
9.70k
    unsigned int ave_mean;
517
9.70k
    s->transient[ch] = get_bits1(&s->gb);
518
9.70k
    if (s->transient[ch]) {
519
4.16k
        s->transient_pos[ch] = get_bits(&s->gb, av_log2(tile_size));
520
4.16k
        if (s->transient_pos[ch])
521
3.77k
            s->transient[ch] = 0;
522
4.16k
        s->channel[ch].transient_counter =
523
4.16k
            FFMAX(s->channel[ch].transient_counter, s->samples_per_frame / 2);
524
5.54k
    } else if (s->channel[ch].transient_counter)
525
5.54k
        s->transient[ch] = 1;
526
527
9.70k
    if (s->seekable_tile) {
528
4.64k
        ave_mean = get_bits(&s->gb, s->bits_per_sample);
529
4.64k
        s->ave_sum[ch] = ave_mean << (s->movave_scaling + 1);
530
4.64k
    }
531
532
9.70k
    if (s->seekable_tile) {
533
4.64k
        if (s->do_inter_ch_decorr)
534
1.63k
            s->channel_residues[ch][0] = get_sbits_long(&s->gb, s->bits_per_sample + 1);
535
3.01k
        else
536
3.01k
            s->channel_residues[ch][0] = get_sbits_long(&s->gb, s->bits_per_sample);
537
4.64k
        i++;
538
4.64k
    }
539
20.0M
    for (; i < tile_size; i++) {
540
20.0M
        int rem, rem_bits;
541
20.0M
        unsigned quo = 0, residue;
542
47.8M
        while(get_bits1(&s->gb)) {
543
27.8M
            quo++;
544
27.8M
            if (get_bits_left(&s->gb) <= 0)
545
4.10k
                return -1;
546
27.8M
        }
547
20.0M
        if (quo >= 32)
548
348k
            quo += get_bits_long(&s->gb, get_bits(&s->gb, 5) + 1);
549
550
20.0M
        ave_mean = (s->ave_sum[ch] + (1 << s->movave_scaling)) >> (s->movave_scaling + 1);
551
20.0M
        if (ave_mean <= 1)
552
17.6M
            residue = quo;
553
2.36M
        else {
554
2.36M
            rem_bits = av_ceil_log2(ave_mean);
555
2.36M
            rem      = get_bits_long(&s->gb, rem_bits);
556
2.36M
            residue  = (quo << rem_bits) + rem;
557
2.36M
        }
558
559
20.0M
        s->ave_sum[ch] = residue + s->ave_sum[ch] -
560
20.0M
                         (s->ave_sum[ch] >> s->movave_scaling);
561
562
20.0M
        residue = (residue >> 1) ^ -(residue & 1);
563
20.0M
        s->channel_residues[ch][i] = residue;
564
20.0M
    }
565
566
5.60k
    return 0;
567
568
9.70k
}
569
570
static void decode_lpc(WmallDecodeCtx *s)
571
1.20k
{
572
1.20k
    int ch, i, cbits;
573
1.20k
    s->lpc_order   = get_bits(&s->gb, 5) + 1;
574
1.20k
    s->lpc_scaling = get_bits(&s->gb, 4);
575
1.20k
    s->lpc_intbits = get_bits(&s->gb, 3) + 1;
576
1.20k
    cbits = s->lpc_scaling + s->lpc_intbits;
577
7.57k
    for (ch = 0; ch < s->num_channels; ch++)
578
161k
        for (i = 0; i < s->lpc_order; i++)
579
154k
            s->lpc_coefs[ch][i] = get_sbits(&s->gb, cbits);
580
1.20k
}
581
582
static void clear_codec_buffers(WmallDecodeCtx *s)
583
11.8k
{
584
11.8k
    int ich, ilms;
585
586
11.8k
    memset(s->acfilter_coeffs,     0, sizeof(s->acfilter_coeffs));
587
11.8k
    memset(s->acfilter_prevvalues, 0, sizeof(s->acfilter_prevvalues));
588
11.8k
    memset(s->lpc_coefs,           0, sizeof(s->lpc_coefs));
589
590
11.8k
    memset(s->mclms_coeffs,     0, sizeof(s->mclms_coeffs));
591
11.8k
    memset(s->mclms_coeffs_cur, 0, sizeof(s->mclms_coeffs_cur));
592
11.8k
    memset(s->mclms_prevvalues, 0, sizeof(s->mclms_prevvalues));
593
11.8k
    memset(s->mclms_updates,    0, sizeof(s->mclms_updates));
594
595
48.4k
    for (ich = 0; ich < s->num_channels; ich++) {
596
98.1k
        for (ilms = 0; ilms < s->cdlms_ttl[ich]; ilms++) {
597
61.5k
            memset(s->cdlms[ich][ilms].coefs, 0,
598
61.5k
                   sizeof(s->cdlms[ich][ilms].coefs));
599
61.5k
            memset(s->cdlms[ich][ilms].lms_prevvalues, 0,
600
61.5k
                   sizeof(s->cdlms[ich][ilms].lms_prevvalues));
601
61.5k
            memset(s->cdlms[ich][ilms].lms_updates, 0,
602
61.5k
                   sizeof(s->cdlms[ich][ilms].lms_updates));
603
61.5k
        }
604
36.5k
        s->ave_sum[ich] = 0;
605
36.5k
    }
606
11.8k
}
607
608
/**
609
 * @brief Reset filter parameters and transient area at new seekable tile.
610
 */
611
static void reset_codec(WmallDecodeCtx *s)
612
7.79k
{
613
7.79k
    int ich, ilms;
614
7.79k
    s->mclms_recent = s->mclms_order * s->num_channels;
615
31.3k
    for (ich = 0; ich < s->num_channels; ich++) {
616
66.0k
        for (ilms = 0; ilms < s->cdlms_ttl[ich]; ilms++)
617
42.5k
            s->cdlms[ich][ilms].recent = s->cdlms[ich][ilms].order;
618
        /* first sample of a seekable subframe is considered as the starting of
619
            a transient area which is samples_per_frame samples long */
620
23.5k
        s->channel[ich].transient_counter = s->samples_per_frame;
621
23.5k
        s->transient[ich]     = 1;
622
23.5k
        s->transient_pos[ich] = 0;
623
23.5k
    }
624
7.79k
}
625
626
static void mclms_update(WmallDecodeCtx *s, int icoef, int *pred)
627
19.6M
{
628
19.6M
    int i, j, ich, pred_error;
629
19.6M
    int order        = s->mclms_order;
630
19.6M
    int num_channels = s->num_channels;
631
19.6M
    int range        = 1 << (s->bits_per_sample - 1);
632
633
91.9M
    for (ich = 0; ich < num_channels; ich++) {
634
72.2M
        pred_error = s->channel_residues[ich][icoef] - (unsigned)pred[ich];
635
72.2M
        if (pred_error > 0) {
636
448M
            for (i = 0; i < order * num_channels; i++)
637
444M
                s->mclms_coeffs[i + ich * order * num_channels] +=
638
444M
                    s->mclms_updates[s->mclms_recent + i];
639
18.7M
            for (j = 0; j < ich; j++)
640
14.1M
                s->mclms_coeffs_cur[ich * num_channels + j] += WMASIGN(s->channel_residues[j][icoef]);
641
67.5M
        } else if (pred_error < 0) {
642
558M
            for (i = 0; i < order * num_channels; i++)
643
553M
                s->mclms_coeffs[i + ich * order * num_channels] -=
644
553M
                    s->mclms_updates[s->mclms_recent + i];
645
19.1M
            for (j = 0; j < ich; j++)
646
14.3M
                s->mclms_coeffs_cur[ich * num_channels + j] -= WMASIGN(s->channel_residues[j][icoef]);
647
4.78M
        }
648
72.2M
    }
649
650
91.9M
    for (ich = num_channels - 1; ich >= 0; ich--) {
651
72.2M
        s->mclms_recent--;
652
72.2M
        s->mclms_prevvalues[s->mclms_recent] = av_clip(s->channel_residues[ich][icoef],
653
72.2M
            -range, range - 1);
654
72.2M
        s->mclms_updates[s->mclms_recent] = WMASIGN(s->channel_residues[ich][icoef]);
655
72.2M
    }
656
657
19.6M
    if (s->mclms_recent == 0) {
658
6.17M
        memcpy(&s->mclms_prevvalues[order * num_channels],
659
6.17M
               s->mclms_prevvalues,
660
6.17M
               sizeof(int32_t) * order * num_channels);
661
6.17M
        memcpy(&s->mclms_updates[order * num_channels],
662
6.17M
               s->mclms_updates,
663
6.17M
               sizeof(int32_t) * order * num_channels);
664
6.17M
        s->mclms_recent = num_channels * order;
665
6.17M
    }
666
19.6M
}
667
668
static void mclms_predict(WmallDecodeCtx *s, int icoef, int *pred)
669
19.6M
{
670
19.6M
    int ich, i;
671
19.6M
    int order        = s->mclms_order;
672
19.6M
    int num_channels = s->num_channels;
673
674
91.9M
    for (ich = 0; ich < num_channels; ich++) {
675
72.2M
        pred[ich] = 0;
676
72.2M
        if (!s->is_channel_coded[ich])
677
42.8M
            continue;
678
2.30G
        for (i = 0; i < order * num_channels; i++)
679
2.27G
            pred[ich] += (uint32_t)s->mclms_prevvalues[i + s->mclms_recent] *
680
2.27G
                         s->mclms_coeffs[i + order * num_channels * ich];
681
117M
        for (i = 0; i < ich; i++)
682
88.2M
            pred[ich] += (uint32_t)s->channel_residues[i][icoef] *
683
88.2M
                         s->mclms_coeffs_cur[i + num_channels * ich];
684
29.3M
        pred[ich] += (1U << s->mclms_scaling) >> 1;
685
29.3M
        pred[ich] >>= s->mclms_scaling;
686
29.3M
        s->channel_residues[ich][icoef] += (unsigned)pred[ich];
687
29.3M
    }
688
19.6M
}
689
690
static void revert_mclms(WmallDecodeCtx *s, int tile_size)
691
3.51k
{
692
3.51k
    int icoef, pred[WMALL_MAX_CHANNELS] = { 0 };
693
19.6M
    for (icoef = 0; icoef < tile_size; icoef++) {
694
19.6M
        mclms_predict(s, icoef, pred);
695
19.6M
        mclms_update(s, icoef, pred);
696
19.6M
    }
697
3.51k
}
698
699
static void use_high_update_speed(WmallDecodeCtx *s, int ich)
700
4.64k
{
701
4.64k
    int ilms, recent, icoef;
702
20.0k
    for (ilms = s->cdlms_ttl[ich] - 1; ilms >= 0; ilms--) {
703
15.4k
        recent = s->cdlms[ich][ilms].recent;
704
15.4k
        if (s->update_speed[ich] == 16)
705
10.5k
            continue;
706
4.87k
        if (s->bV3RTM) {
707
50.5k
            for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
708
48.1k
                s->cdlms[ich][ilms].lms_updates[icoef + recent] *= 2;
709
2.50k
        } else {
710
96.5k
            for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
711
94.0k
                s->cdlms[ich][ilms].lms_updates[icoef] *= 2;
712
2.50k
        }
713
4.87k
    }
714
4.64k
    s->update_speed[ich] = 16;
715
4.64k
}
716
717
static void use_normal_update_speed(WmallDecodeCtx *s, int ich)
718
5.05k
{
719
5.05k
    int ilms, recent, icoef;
720
15.4k
    for (ilms = s->cdlms_ttl[ich] - 1; ilms >= 0; ilms--) {
721
10.4k
        recent = s->cdlms[ich][ilms].recent;
722
10.4k
        if (s->update_speed[ich] == 8)
723
7.18k
            continue;
724
3.22k
        if (s->bV3RTM)
725
37.4k
            for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
726
36.7k
                s->cdlms[ich][ilms].lms_updates[icoef + recent] /= 2;
727
2.50k
        else
728
156k
            for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
729
154k
                s->cdlms[ich][ilms].lms_updates[icoef] /= 2;
730
3.22k
    }
731
5.05k
    s->update_speed[ich] = 8;
732
5.05k
}
733
734
#define CD_LMS(bits, ROUND) \
735
58.4M
static void lms_update ## bits (WmallDecodeCtx *s, int ich, int ilms, int input) \
736
58.4M
{ \
737
58.4M
    int recent = s->cdlms[ich][ilms].recent; \
738
58.4M
    int range  = 1 << s->bits_per_sample - 1; \
739
58.4M
    int order  = s->cdlms[ich][ilms].order; \
740
58.4M
    int ##bits##_t *prev = (int##bits##_t *)s->cdlms[ich][ilms].lms_prevvalues; \
741
58.4M
 \
742
58.4M
    if (recent) \
743
58.4M
        recent--; \
744
58.4M
    else { \
745
3.59M
        memcpy(prev + order, prev, (bits/8) * order); \
746
3.59M
        memcpy(s->cdlms[ich][ilms].lms_updates + order, \
747
3.59M
               s->cdlms[ich][ilms].lms_updates, \
748
3.59M
               sizeof(*s->cdlms[ich][ilms].lms_updates) * order); \
749
3.59M
        recent = order - 1; \
750
3.59M
    } \
751
58.4M
 \
752
58.4M
    prev[recent] = av_clip(input, -range, range - 1); \
753
58.4M
    s->cdlms[ich][ilms].lms_updates[recent] = WMASIGN(input) * s->update_speed[ich]; \
754
58.4M
 \
755
58.4M
    s->cdlms[ich][ilms].lms_updates[recent + (order >> 4)] >>= 2; \
756
58.4M
    s->cdlms[ich][ilms].lms_updates[recent + (order >> 3)] >>= 1; \
757
58.4M
    s->cdlms[ich][ilms].recent = recent; \
758
58.4M
    memset(s->cdlms[ich][ilms].lms_updates + recent + order, 0, \
759
58.4M
           sizeof(s->cdlms[ich][ilms].lms_updates) - \
760
58.4M
           sizeof(*s->cdlms[ich][ilms].lms_updates)*(recent+order)); \
761
58.4M
} \
wmalosslessdec.c:lms_update32
Line
Count
Source
735
18.3M
static void lms_update ## bits (WmallDecodeCtx *s, int ich, int ilms, int input) \
736
18.3M
{ \
737
18.3M
    int recent = s->cdlms[ich][ilms].recent; \
738
18.3M
    int range  = 1 << s->bits_per_sample - 1; \
739
18.3M
    int order  = s->cdlms[ich][ilms].order; \
740
18.3M
    int ##bits##_t *prev = (int##bits##_t *)s->cdlms[ich][ilms].lms_prevvalues; \
741
18.3M
 \
742
18.3M
    if (recent) \
743
18.3M
        recent--; \
744
18.3M
    else { \
745
921k
        memcpy(prev + order, prev, (bits/8) * order); \
746
921k
        memcpy(s->cdlms[ich][ilms].lms_updates + order, \
747
921k
               s->cdlms[ich][ilms].lms_updates, \
748
921k
               sizeof(*s->cdlms[ich][ilms].lms_updates) * order); \
749
921k
        recent = order - 1; \
750
921k
    } \
751
18.3M
 \
752
18.3M
    prev[recent] = av_clip(input, -range, range - 1); \
753
18.3M
    s->cdlms[ich][ilms].lms_updates[recent] = WMASIGN(input) * s->update_speed[ich]; \
754
18.3M
 \
755
18.3M
    s->cdlms[ich][ilms].lms_updates[recent + (order >> 4)] >>= 2; \
756
18.3M
    s->cdlms[ich][ilms].lms_updates[recent + (order >> 3)] >>= 1; \
757
18.3M
    s->cdlms[ich][ilms].recent = recent; \
758
18.3M
    memset(s->cdlms[ich][ilms].lms_updates + recent + order, 0, \
759
18.3M
           sizeof(s->cdlms[ich][ilms].lms_updates) - \
760
18.3M
           sizeof(*s->cdlms[ich][ilms].lms_updates)*(recent+order)); \
761
18.3M
} \
wmalosslessdec.c:lms_update16
Line
Count
Source
735
40.0M
static void lms_update ## bits (WmallDecodeCtx *s, int ich, int ilms, int input) \
736
40.0M
{ \
737
40.0M
    int recent = s->cdlms[ich][ilms].recent; \
738
40.0M
    int range  = 1 << s->bits_per_sample - 1; \
739
40.0M
    int order  = s->cdlms[ich][ilms].order; \
740
40.0M
    int ##bits##_t *prev = (int##bits##_t *)s->cdlms[ich][ilms].lms_prevvalues; \
741
40.0M
 \
742
40.0M
    if (recent) \
743
40.0M
        recent--; \
744
40.0M
    else { \
745
2.67M
        memcpy(prev + order, prev, (bits/8) * order); \
746
2.67M
        memcpy(s->cdlms[ich][ilms].lms_updates + order, \
747
2.67M
               s->cdlms[ich][ilms].lms_updates, \
748
2.67M
               sizeof(*s->cdlms[ich][ilms].lms_updates) * order); \
749
2.67M
        recent = order - 1; \
750
2.67M
    } \
751
40.0M
 \
752
40.0M
    prev[recent] = av_clip(input, -range, range - 1); \
753
40.0M
    s->cdlms[ich][ilms].lms_updates[recent] = WMASIGN(input) * s->update_speed[ich]; \
754
40.0M
 \
755
40.0M
    s->cdlms[ich][ilms].lms_updates[recent + (order >> 4)] >>= 2; \
756
40.0M
    s->cdlms[ich][ilms].lms_updates[recent + (order >> 3)] >>= 1; \
757
40.0M
    s->cdlms[ich][ilms].recent = recent; \
758
40.0M
    memset(s->cdlms[ich][ilms].lms_updates + recent + order, 0, \
759
40.0M
           sizeof(s->cdlms[ich][ilms].lms_updates) - \
760
40.0M
           sizeof(*s->cdlms[ich][ilms].lms_updates)*(recent+order)); \
761
40.0M
} \
762
 \
763
static void revert_cdlms ## bits (WmallDecodeCtx *s, int ch, \
764
9.70k
                                  int coef_begin, int coef_end) \
765
9.70k
{ \
766
9.70k
    int icoef, ilms, num_lms, residue, input; \
767
9.70k
    unsigned pred;\
768
9.70k
 \
769
9.70k
    num_lms = s->cdlms_ttl[ch]; \
770
35.5k
    for (ilms = num_lms - 1; ilms >= 0; ilms--) { \
771
58.4M
        for (icoef = coef_begin; icoef < coef_end; icoef++) { \
772
58.4M
            int##bits##_t *prevvalues = (int##bits##_t *)s->cdlms[ch][ilms].lms_prevvalues; \
773
58.4M
            pred = (1 << s->cdlms[ch][ilms].scaling) >> 1; \
774
58.4M
            residue = s->channel_residues[ch][icoef]; \
775
58.4M
            pred += s->dsp.scalarproduct_and_madd_int## bits (s->cdlms[ch][ilms].coefs, \
776
58.4M
                                                        prevvalues + s->cdlms[ch][ilms].recent, \
777
58.4M
                                                        s->cdlms[ch][ilms].lms_updates + \
778
58.4M
                                                        s->cdlms[ch][ilms].recent, \
779
58.4M
                                                        FFALIGN(s->cdlms[ch][ilms].order, ROUND), \
780
58.4M
                                                        WMASIGN(residue)); \
781
58.4M
            input = residue + (unsigned)((int)pred >> s->cdlms[ch][ilms].scaling); \
782
58.4M
            lms_update ## bits(s, ch, ilms, input); \
783
58.4M
            s->channel_residues[ch][icoef] = input; \
784
58.4M
        } \
785
25.8k
    } \
786
9.70k
}
wmalosslessdec.c:revert_cdlms32
Line
Count
Source
764
3.42k
                                  int coef_begin, int coef_end) \
765
3.42k
{ \
766
3.42k
    int icoef, ilms, num_lms, residue, input; \
767
3.42k
    unsigned pred;\
768
3.42k
 \
769
3.42k
    num_lms = s->cdlms_ttl[ch]; \
770
19.0k
    for (ilms = num_lms - 1; ilms >= 0; ilms--) { \
771
18.3M
        for (icoef = coef_begin; icoef < coef_end; icoef++) { \
772
18.3M
            int##bits##_t *prevvalues = (int##bits##_t *)s->cdlms[ch][ilms].lms_prevvalues; \
773
18.3M
            pred = (1 << s->cdlms[ch][ilms].scaling) >> 1; \
774
18.3M
            residue = s->channel_residues[ch][icoef]; \
775
18.3M
            pred += s->dsp.scalarproduct_and_madd_int## bits (s->cdlms[ch][ilms].coefs, \
776
18.3M
                                                        prevvalues + s->cdlms[ch][ilms].recent, \
777
18.3M
                                                        s->cdlms[ch][ilms].lms_updates + \
778
18.3M
                                                        s->cdlms[ch][ilms].recent, \
779
18.3M
                                                        FFALIGN(s->cdlms[ch][ilms].order, ROUND), \
780
18.3M
                                                        WMASIGN(residue)); \
781
18.3M
            input = residue + (unsigned)((int)pred >> s->cdlms[ch][ilms].scaling); \
782
18.3M
            lms_update ## bits(s, ch, ilms, input); \
783
18.3M
            s->channel_residues[ch][icoef] = input; \
784
18.3M
        } \
785
15.6k
    } \
786
3.42k
}
wmalosslessdec.c:revert_cdlms16
Line
Count
Source
764
6.28k
                                  int coef_begin, int coef_end) \
765
6.28k
{ \
766
6.28k
    int icoef, ilms, num_lms, residue, input; \
767
6.28k
    unsigned pred;\
768
6.28k
 \
769
6.28k
    num_lms = s->cdlms_ttl[ch]; \
770
16.4k
    for (ilms = num_lms - 1; ilms >= 0; ilms--) { \
771
40.0M
        for (icoef = coef_begin; icoef < coef_end; icoef++) { \
772
40.0M
            int##bits##_t *prevvalues = (int##bits##_t *)s->cdlms[ch][ilms].lms_prevvalues; \
773
40.0M
            pred = (1 << s->cdlms[ch][ilms].scaling) >> 1; \
774
40.0M
            residue = s->channel_residues[ch][icoef]; \
775
40.0M
            pred += s->dsp.scalarproduct_and_madd_int## bits (s->cdlms[ch][ilms].coefs, \
776
40.0M
                                                        prevvalues + s->cdlms[ch][ilms].recent, \
777
40.0M
                                                        s->cdlms[ch][ilms].lms_updates + \
778
40.0M
                                                        s->cdlms[ch][ilms].recent, \
779
40.0M
                                                        FFALIGN(s->cdlms[ch][ilms].order, ROUND), \
780
40.0M
                                                        WMASIGN(residue)); \
781
40.0M
            input = residue + (unsigned)((int)pred >> s->cdlms[ch][ilms].scaling); \
782
40.0M
            lms_update ## bits(s, ch, ilms, input); \
783
40.0M
            s->channel_residues[ch][icoef] = input; \
784
40.0M
        } \
785
10.1k
    } \
786
6.28k
}
787
788
CD_LMS(16, WMALL_COEFF_PAD_SIZE)
789
CD_LMS(32, 8)
790
791
static void revert_inter_ch_decorr(WmallDecodeCtx *s, int tile_size)
792
67.8k
{
793
67.8k
    if (s->num_channels != 2)
794
66.2k
        return;
795
1.55k
    else if (s->is_channel_coded[0] || s->is_channel_coded[1]) {
796
1.23k
        int icoef;
797
8.85M
        for (icoef = 0; icoef < tile_size; icoef++) {
798
8.85M
            s->channel_residues[0][icoef] -= (unsigned)(s->channel_residues[1][icoef] >> 1);
799
8.85M
            s->channel_residues[1][icoef] += (unsigned) s->channel_residues[0][icoef];
800
8.85M
        }
801
1.23k
    }
802
67.8k
}
803
804
static void revert_acfilter(WmallDecodeCtx *s, int tile_size)
805
71.6k
{
806
71.6k
    int ich, pred, i, j;
807
71.6k
    int16_t *filter_coeffs = s->acfilter_coeffs;
808
71.6k
    int scaling            = s->acfilter_scaling;
809
71.6k
    int order              = s->acfilter_order;
810
811
149k
    for (ich = 0; ich < s->num_channels; ich++) {
812
78.2k
        int *prevvalues = s->acfilter_prevvalues[ich];
813
706k
        for (i = 0; i < order; i++) {
814
628k
            pred = 0;
815
5.94M
            for (j = 0; j < order; j++) {
816
5.31M
                if (i <= j)
817
2.97M
                    pred += (uint32_t)filter_coeffs[j] * prevvalues[j - i];
818
2.34M
                else
819
2.34M
                    pred += (uint32_t)s->channel_residues[ich][i - j - 1] * filter_coeffs[j];
820
5.31M
            }
821
628k
            pred >>= scaling;
822
628k
            s->channel_residues[ich][i] += (unsigned)pred;
823
628k
        }
824
658M
        for (i = order; i < tile_size; i++) {
825
658M
            pred = 0;
826
6.01G
            for (j = 0; j < order; j++)
827
5.35G
                pred += (uint32_t)s->channel_residues[ich][i - j - 1] * filter_coeffs[j];
828
658M
            pred >>= scaling;
829
658M
            s->channel_residues[ich][i] += (unsigned)pred;
830
658M
        }
831
706k
        for (j = order - 1; j >= 0; j--)
832
628k
            if (tile_size <= j) {
833
1.52k
                prevvalues[j] = prevvalues[j - tile_size];
834
1.52k
            }else
835
626k
                prevvalues[j] = s->channel_residues[ich][tile_size - j - 1];
836
78.2k
    }
837
71.6k
}
838
839
static int decode_subframe(WmallDecodeCtx *s)
840
95.0k
{
841
95.0k
    int offset        = s->samples_per_frame;
842
95.0k
    int subframe_len  = s->samples_per_frame;
843
95.0k
    int total_samples = s->samples_per_frame * s->num_channels;
844
95.0k
    int i, j, rawpcm_tile, padding_zeroes, res;
845
846
95.0k
    s->subframe_offset = get_bits_count(&s->gb);
847
848
    /* reset channel context and find the next block offset and size
849
        == the next block of the channel with the smallest number of
850
        decoded samples */
851
261k
    for (i = 0; i < s->num_channels; i++) {
852
166k
        if (offset > s->channel[i].decoded_samples) {
853
95.5k
            offset = s->channel[i].decoded_samples;
854
95.5k
            subframe_len =
855
95.5k
                s->channel[i].subframe_len[s->channel[i].cur_subframe];
856
95.5k
        }
857
166k
    }
858
859
    /* get a list of all channels that contain the estimated block */
860
95.0k
    s->channels_for_cur_subframe = 0;
861
261k
    for (i = 0; i < s->num_channels; i++) {
862
166k
        const int cur_subframe = s->channel[i].cur_subframe;
863
        /* subtract already processed samples */
864
166k
        total_samples -= s->channel[i].decoded_samples;
865
866
        /* and count if there are multiple subframes that match our profile */
867
166k
        if (offset == s->channel[i].decoded_samples &&
868
164k
            subframe_len == s->channel[i].subframe_len[cur_subframe]) {
869
164k
            total_samples -= s->channel[i].subframe_len[cur_subframe];
870
164k
            s->channel[i].decoded_samples +=
871
164k
                s->channel[i].subframe_len[cur_subframe];
872
164k
            s->channel_indexes_for_cur_subframe[s->channels_for_cur_subframe] = i;
873
164k
            ++s->channels_for_cur_subframe;
874
164k
        }
875
166k
    }
876
877
    /* check if the frame will be complete after processing the
878
        estimated block */
879
95.0k
    if (!total_samples)
880
79.5k
        s->parsed_all_subframes = 1;
881
882
883
95.0k
    s->seekable_tile = get_bits1(&s->gb);
884
95.0k
    if (s->seekable_tile) {
885
11.8k
        clear_codec_buffers(s);
886
887
11.8k
        s->do_arith_coding    = get_bits1(&s->gb);
888
11.8k
        if (s->do_arith_coding) {
889
1.61k
            avpriv_request_sample(s->avctx, "Arithmetic coding");
890
1.61k
            return AVERROR_PATCHWELCOME;
891
1.61k
        }
892
10.2k
        s->do_ac_filter       = get_bits1(&s->gb);
893
10.2k
        s->do_inter_ch_decorr = get_bits1(&s->gb);
894
10.2k
        s->do_mclms           = get_bits1(&s->gb);
895
896
10.2k
        if (s->do_ac_filter)
897
8.01k
            decode_ac_filter(s);
898
899
10.2k
        if (s->do_mclms)
900
5.58k
            decode_mclms(s);
901
902
10.2k
        if ((res = decode_cdlms(s)) < 0)
903
2.47k
            return res;
904
7.79k
        s->movave_scaling = get_bits(&s->gb, 3);
905
7.79k
        s->quant_stepsize = get_bits(&s->gb, 8) + 1;
906
907
7.79k
        reset_codec(s);
908
7.79k
    }
909
910
91.0k
    rawpcm_tile = get_bits1(&s->gb);
911
912
91.0k
    if (!rawpcm_tile && !s->cdlms[0][0].order) {
913
6.64k
        av_log(s->avctx, AV_LOG_DEBUG,
914
6.64k
               "Waiting for seekable tile\n");
915
6.64k
        av_frame_unref(s->frame);
916
6.64k
        return -1;
917
6.64k
    }
918
919
920
210k
    for (i = 0; i < s->num_channels; i++)
921
125k
        s->is_channel_coded[i] = 1;
922
923
84.3k
    if (!rawpcm_tile) {
924
195k
        for (i = 0; i < s->num_channels; i++)
925
114k
            s->is_channel_coded[i] = get_bits1(&s->gb);
926
927
81.5k
        if (s->bV3RTM) {
928
            // LPC
929
68.2k
            s->do_lpc = get_bits1(&s->gb);
930
68.2k
            if (s->do_lpc) {
931
1.20k
                decode_lpc(s);
932
1.20k
                avpriv_request_sample(s->avctx, "Expect wrong output since "
933
1.20k
                                      "inverse LPC filter");
934
1.20k
            }
935
68.2k
        } else
936
13.3k
            s->do_lpc = 0;
937
81.5k
    }
938
939
84.3k
    if (get_bits_left(&s->gb) < 1)
940
6.86k
        return AVERROR_INVALIDDATA;
941
942
77.4k
    if (get_bits1(&s->gb))
943
2.06k
        padding_zeroes = get_bits(&s->gb, 5);
944
75.4k
    else
945
75.4k
        padding_zeroes = 0;
946
947
77.4k
    if (rawpcm_tile) {
948
2.62k
        int bits = s->bits_per_sample - padding_zeroes;
949
2.62k
        if (bits <= 0) {
950
282
            av_log(s->avctx, AV_LOG_ERROR,
951
282
                   "Invalid number of padding bits in raw PCM tile\n");
952
282
            return AVERROR_INVALIDDATA;
953
282
        }
954
2.34k
        ff_dlog(s->avctx, "RAWPCM %d bits per sample. "
955
2.34k
                "total %d bits, remain=%d\n", bits,
956
2.34k
                bits * s->num_channels * subframe_len, get_bits_count(&s->gb));
957
11.6k
        for (i = 0; i < s->num_channels; i++)
958
62.0M
            for (j = 0; j < subframe_len; j++)
959
61.9M
                s->channel_residues[i][j] = get_sbits_long(&s->gb, bits);
960
74.8k
    } else {
961
74.8k
        if (s->bits_per_sample < padding_zeroes)
962
300
            return AVERROR_INVALIDDATA;
963
162k
        for (i = 0; i < s->num_channels; i++) {
964
88.3k
            if (s->is_channel_coded[i]) {
965
9.70k
                decode_channel_residues(s, i, subframe_len);
966
9.70k
                if (s->seekable_tile)
967
4.64k
                    use_high_update_speed(s, i);
968
5.05k
                else
969
5.05k
                    use_normal_update_speed(s, i);
970
9.70k
                if (s->bits_per_sample > 16)
971
3.42k
                    revert_cdlms32(s, i, 0, subframe_len);
972
6.28k
                else
973
6.28k
                    revert_cdlms16(s, i, 0, subframe_len);
974
78.6k
            } else {
975
78.6k
                memset(s->channel_residues[i], 0, sizeof(**s->channel_residues) * subframe_len);
976
78.6k
            }
977
88.3k
        }
978
979
74.5k
        if (s->do_mclms)
980
3.51k
            revert_mclms(s, subframe_len);
981
74.5k
        if (s->do_inter_ch_decorr)
982
67.8k
            revert_inter_ch_decorr(s, subframe_len);
983
74.5k
        if (s->do_ac_filter)
984
71.6k
            revert_acfilter(s, subframe_len);
985
986
        /* Dequantize */
987
74.5k
        if (s->quant_stepsize != 1)
988
145k
            for (i = 0; i < s->num_channels; i++)
989
674M
                for (j = 0; j < subframe_len; j++)
990
674M
                    s->channel_residues[i][j] *= (unsigned)s->quant_stepsize;
991
74.5k
    }
992
993
    /* Write to proper output buffer depending on bit-depth */
994
173k
    for (i = 0; i < s->channels_for_cur_subframe; i++) {
995
97.0k
        int c = s->channel_indexes_for_cur_subframe[i];
996
97.0k
        int subframe_len = s->channel[c].subframe_len[s->channel[c].cur_subframe];
997
998
772M
        for (j = 0; j < subframe_len; j++) {
999
772M
            if (s->bits_per_sample == 16) {
1000
111M
                *s->samples_16[c]++ = (int16_t) s->channel_residues[c][j] * (1 << padding_zeroes);
1001
660M
            } else {
1002
660M
                *s->samples_32[c]++ = s->channel_residues[c][j] * (256U << padding_zeroes);
1003
660M
            }
1004
772M
        }
1005
97.0k
    }
1006
1007
    /* handled one subframe */
1008
173k
    for (i = 0; i < s->channels_for_cur_subframe; i++) {
1009
97.0k
        int c = s->channel_indexes_for_cur_subframe[i];
1010
97.0k
        if (s->channel[c].cur_subframe >= s->channel[c].num_subframes) {
1011
0
            av_log(s->avctx, AV_LOG_ERROR, "broken subframe\n");
1012
0
            return AVERROR_INVALIDDATA;
1013
0
        }
1014
97.0k
        ++s->channel[c].cur_subframe;
1015
97.0k
    }
1016
76.9k
    return 0;
1017
76.9k
}
1018
1019
/**
1020
 * @brief Decode one WMA frame.
1021
 * @param s codec context
1022
 * @return 0 if the trailer bit indicates that this is the last frame,
1023
 *         1 if there are additional frames
1024
 */
1025
static int decode_frame(WmallDecodeCtx *s)
1026
93.6k
{
1027
93.6k
    GetBitContext* gb = &s->gb;
1028
93.6k
    int more_frames = 0, len = 0, i, ret;
1029
1030
93.6k
    s->frame->nb_samples = s->samples_per_frame;
1031
93.6k
    if ((ret = ff_get_buffer(s->avctx, s->frame, 0)) < 0) {
1032
        /* return an error if no frame could be decoded at all */
1033
0
        s->packet_loss = 1;
1034
0
        s->frame->nb_samples = 0;
1035
0
        return ret;
1036
0
    }
1037
273k
    for (i = 0; i < s->num_channels; i++) {
1038
179k
        s->samples_16[i] = (int16_t *)s->frame->extended_data[i];
1039
179k
        s->samples_32[i] = (int32_t *)s->frame->extended_data[i];
1040
179k
    }
1041
1042
    /* get frame length */
1043
93.6k
    if (s->len_prefix)
1044
9.82k
        len = get_bits(gb, s->log2_frame_size);
1045
1046
    /* decode tile information */
1047
93.6k
    if ((ret = decode_tilehdr(s))) {
1048
2.46k
        s->packet_loss = 1;
1049
2.46k
        av_frame_unref(s->frame);
1050
2.46k
        return ret;
1051
2.46k
    }
1052
1053
    /* read drc info */
1054
91.2k
    if (s->dynamic_range_compression)
1055
4.39k
        s->drc_gain = get_bits(gb, 8);
1056
1057
    /* no idea what these are for, might be the number of samples
1058
       that need to be skipped at the beginning or end of a stream */
1059
91.2k
    if (get_bits1(gb)) {
1060
4.97k
        av_unused int skip;
1061
1062
        /* usually true for the first frame */
1063
4.97k
        if (get_bits1(gb)) {
1064
3.18k
            skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
1065
3.18k
            ff_dlog(s->avctx, "start skip: %i\n", skip);
1066
3.18k
        }
1067
1068
        /* sometimes true for the last frame */
1069
4.97k
        if (get_bits1(gb)) {
1070
3.33k
            skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
1071
3.33k
            ff_dlog(s->avctx, "end skip: %i\n", skip);
1072
3.33k
            s->frame->nb_samples -= skip;
1073
3.33k
            if (s->frame->nb_samples <= 0)
1074
2.64k
                return AVERROR_INVALIDDATA;
1075
3.33k
        }
1076
1077
4.97k
    }
1078
1079
    /* reset subframe states */
1080
88.5k
    s->parsed_all_subframes = 0;
1081
245k
    for (i = 0; i < s->num_channels; i++) {
1082
157k
        s->channel[i].decoded_samples = 0;
1083
157k
        s->channel[i].cur_subframe    = 0;
1084
157k
    }
1085
1086
    /* decode all subframes */
1087
165k
    while (!s->parsed_all_subframes) {
1088
95.0k
        int decoded_samples = s->channel[0].decoded_samples;
1089
95.0k
        if (decode_subframe(s) < 0) {
1090
18.1k
            s->packet_loss = 1;
1091
18.1k
            if (s->frame->nb_samples)
1092
11.5k
                s->frame->nb_samples = decoded_samples;
1093
18.1k
            return 0;
1094
18.1k
        }
1095
95.0k
    }
1096
1097
70.3k
    ff_dlog(s->avctx, "Frame done\n");
1098
1099
70.3k
    s->skip_frame = 0;
1100
1101
70.3k
    if (s->len_prefix) {
1102
1.89k
        if (len != (get_bits_count(gb) - s->frame_offset) + 2) {
1103
            /* FIXME: not sure if this is always an error */
1104
641
            av_log(s->avctx, AV_LOG_ERROR,
1105
641
                   "frame[%"PRIu32"] would have to skip %i bits\n",
1106
641
                   s->frame_num,
1107
641
                   len - (get_bits_count(gb) - s->frame_offset) - 1);
1108
641
            s->packet_loss = 1;
1109
641
            return 0;
1110
641
        }
1111
1112
        /* skip the rest of the frame data */
1113
1.25k
        skip_bits_long(gb, len - (get_bits_count(gb) - s->frame_offset) - 1);
1114
1.25k
    }
1115
1116
    /* decode trailer bit */
1117
69.7k
    more_frames = get_bits1(gb);
1118
69.7k
    ++s->frame_num;
1119
69.7k
    return more_frames;
1120
70.3k
}
1121
1122
/**
1123
 * @brief Calculate remaining input buffer length.
1124
 * @param s  codec context
1125
 * @param gb bitstream reader context
1126
 * @return remaining size in bits
1127
 */
1128
static int remaining_bits(WmallDecodeCtx *s, GetBitContext *gb)
1129
850k
{
1130
850k
    return s->buf_bit_size - get_bits_count(gb);
1131
850k
}
1132
1133
/**
1134
 * @brief Fill the bit reservoir with a (partial) frame.
1135
 * @param s      codec context
1136
 * @param gb     bitstream reader context
1137
 * @param len    length of the partial frame
1138
 * @param append decides whether to reset the buffer or not
1139
 */
1140
static void save_bits(WmallDecodeCtx *s, GetBitContext* gb, int len,
1141
                      int append)
1142
308k
{
1143
308k
    int buflen;
1144
308k
    PutBitContext tmp;
1145
1146
    /* when the frame data does not need to be concatenated, the input buffer
1147
        is reset and additional bits from the previous frame are copied
1148
        and skipped later so that a fast byte copy is possible */
1149
1150
308k
    if (!append) {
1151
95.3k
        s->frame_offset   = get_bits_count(gb) & 7;
1152
95.3k
        s->num_saved_bits = s->frame_offset;
1153
95.3k
        init_put_bits(&s->pb, s->frame_data, s->max_frame_size);
1154
95.3k
    }
1155
1156
308k
    buflen = (s->num_saved_bits + len + 8) >> 3;
1157
1158
308k
    if (len <= 0 || buflen > s->max_frame_size) {
1159
55.1k
        avpriv_request_sample(s->avctx, "Too small input buffer");
1160
55.1k
        s->packet_loss = 1;
1161
55.1k
        s->num_saved_bits = 0;
1162
55.1k
        return;
1163
55.1k
    }
1164
1165
253k
    s->num_saved_bits += len;
1166
253k
    if (!append) {
1167
95.2k
        ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3),
1168
95.2k
                         s->num_saved_bits);
1169
157k
    } else {
1170
157k
        int align = 8 - (get_bits_count(gb) & 7);
1171
157k
        align = FFMIN(align, len);
1172
157k
        put_bits(&s->pb, align, get_bits(gb, align));
1173
157k
        len -= align;
1174
157k
        ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3), len);
1175
157k
    }
1176
253k
    skip_bits_long(gb, len);
1177
1178
253k
    tmp = s->pb;
1179
253k
    flush_put_bits(&tmp);
1180
1181
253k
    init_get_bits(&s->gb, s->frame_data, s->num_saved_bits);
1182
253k
    skip_bits(&s->gb, s->frame_offset);
1183
253k
}
1184
1185
static int decode_packet(AVCodecContext *avctx, AVFrame *rframe,
1186
                         int *got_frame_ptr, AVPacket* avpkt)
1187
450k
{
1188
450k
    WmallDecodeCtx *s = avctx->priv_data;
1189
450k
    GetBitContext* gb  = &s->pgb;
1190
450k
    const uint8_t* buf = avpkt->data;
1191
450k
    int buf_size       = avpkt->size;
1192
450k
    int num_bits_prev_frame, packet_sequence_number, spliced_packet;
1193
1194
450k
    s->frame->nb_samples = 0;
1195
1196
450k
    if (!buf_size) {
1197
7.90k
        s->packet_done = 0;
1198
7.90k
        if (s->num_saved_bits <= get_bits_count(&s->gb))
1199
757
            return 0;
1200
7.14k
        if (!decode_frame(s))
1201
878
            s->num_saved_bits = 0;
1202
442k
    } else if (s->packet_done || s->packet_loss) {
1203
285k
        s->packet_done = 0;
1204
1205
285k
        s->next_packet_start = buf_size - FFMIN(avctx->block_align, buf_size);
1206
285k
        buf_size             = FFMIN(avctx->block_align, buf_size);
1207
285k
        s->buf_bit_size      = buf_size << 3;
1208
1209
        /* parse packet header */
1210
285k
        init_get_bits(gb, buf, s->buf_bit_size);
1211
285k
        packet_sequence_number = get_bits(gb, 4);
1212
285k
        skip_bits(gb, 1);   // Skip seekable_frame_in_packet, currently unused
1213
285k
        spliced_packet = get_bits1(gb);
1214
285k
        if (spliced_packet)
1215
165k
            avpriv_request_sample(avctx, "Bitstream splicing");
1216
1217
        /* get number of bits that need to be added to the previous frame */
1218
285k
        num_bits_prev_frame = get_bits(gb, s->log2_frame_size);
1219
1220
        /* check for packet loss */
1221
285k
        if (!s->packet_loss &&
1222
134k
            ((s->packet_sequence_number + 1) & 0xF) != packet_sequence_number) {
1223
110k
            s->packet_loss = 1;
1224
110k
            av_log(avctx, AV_LOG_ERROR,
1225
110k
                   "Packet loss detected! seq %"PRIx8" vs %x\n",
1226
110k
                   s->packet_sequence_number, packet_sequence_number);
1227
110k
        }
1228
285k
        s->packet_sequence_number = packet_sequence_number;
1229
1230
285k
        if (num_bits_prev_frame > 0) {
1231
212k
            int remaining_packet_bits = s->buf_bit_size - get_bits_count(gb);
1232
212k
            if (num_bits_prev_frame >= remaining_packet_bits) {
1233
174k
                num_bits_prev_frame = remaining_packet_bits;
1234
174k
                s->packet_done = 1;
1235
174k
            }
1236
1237
            /* Append the previous frame data to the remaining data from the
1238
             * previous packet to create a full frame. */
1239
212k
            save_bits(s, gb, num_bits_prev_frame, 1);
1240
1241
            /* decode the cross packet frame if it is valid */
1242
212k
            if (num_bits_prev_frame < remaining_packet_bits && !s->packet_loss)
1243
16.3k
                decode_frame(s);
1244
212k
        } else if (s->num_saved_bits - s->frame_offset) {
1245
50.7k
            ff_dlog(avctx, "ignoring %x previously saved bits\n",
1246
50.7k
                    s->num_saved_bits - s->frame_offset);
1247
50.7k
        }
1248
1249
285k
        if (s->packet_loss) {
1250
            /* Reset number of saved bits so that the decoder does not start
1251
             * to decode incomplete frames in the s->len_prefix == 0 case. */
1252
275k
            s->num_saved_bits = 0;
1253
275k
            s->packet_loss    = 0;
1254
275k
            init_put_bits(&s->pb, s->frame_data, s->max_frame_size);
1255
275k
        }
1256
1257
285k
    } else {
1258
156k
        int frame_size;
1259
1260
156k
        s->buf_bit_size = (avpkt->size - s->next_packet_start) << 3;
1261
156k
        init_get_bits(gb, avpkt->data, s->buf_bit_size);
1262
156k
        skip_bits(gb, s->packet_offset);
1263
1264
156k
        if (s->len_prefix && remaining_bits(s, gb) > s->log2_frame_size &&
1265
16.7k
            (frame_size = show_bits(gb, s->log2_frame_size)) &&
1266
13.2k
            frame_size <= remaining_bits(s, gb)) {
1267
7.43k
            save_bits(s, gb, frame_size, 0);
1268
1269
7.43k
            if (!s->packet_loss)
1270
7.40k
                s->packet_done = !decode_frame(s);
1271
149k
        } else if (!s->len_prefix
1272
134k
                   && s->num_saved_bits > get_bits_count(&s->gb)) {
1273
            /* when the frames do not have a length prefix, we don't know the
1274
             * compressed length of the individual frames however, we know what
1275
             * part of a new packet belongs to the previous frame therefore we
1276
             * save the incoming packet first, then we append the "previous
1277
             * frame" data from the next packet so that we get a buffer that
1278
             * only contains full frames */
1279
62.7k
            s->packet_done = !decode_frame(s);
1280
86.5k
        } else {
1281
86.5k
            s->packet_done = 1;
1282
86.5k
        }
1283
156k
    }
1284
1285
449k
    if (remaining_bits(s, gb) < 0) {
1286
66.9k
        av_log(avctx, AV_LOG_ERROR, "Overread %d\n", -remaining_bits(s, gb));
1287
66.9k
        s->packet_loss = 1;
1288
66.9k
    }
1289
1290
449k
    if (s->packet_done && !s->packet_loss &&
1291
210k
        remaining_bits(s, gb) > 0) {
1292
        /* save the rest of the data so that it can be decoded
1293
         * with the next packet */
1294
87.8k
        save_bits(s, gb, remaining_bits(s, gb), 0);
1295
87.8k
    }
1296
1297
449k
    *got_frame_ptr   = s->frame->nb_samples > 0;
1298
449k
    av_frame_move_ref(rframe, s->frame);
1299
1300
449k
    s->packet_offset = get_bits_count(gb) & 7;
1301
1302
449k
    return (s->packet_loss) ? AVERROR_INVALIDDATA : get_bits_count(gb) >> 3;
1303
450k
}
1304
1305
static av_cold void flush(AVCodecContext *avctx)
1306
108k
{
1307
108k
    WmallDecodeCtx *s    = avctx->priv_data;
1308
108k
    s->packet_loss       = 1;
1309
108k
    s->packet_done       = 0;
1310
108k
    s->num_saved_bits    = 0;
1311
108k
    s->frame_offset      = 0;
1312
108k
    s->next_packet_start = 0;
1313
108k
    s->cdlms[0][0].order = 0;
1314
108k
    s->frame->nb_samples = 0;
1315
108k
    init_put_bits(&s->pb, s->frame_data, s->max_frame_size);
1316
108k
}
1317
1318
static av_cold int decode_close(AVCodecContext *avctx)
1319
1.67k
{
1320
1.67k
    WmallDecodeCtx *s = avctx->priv_data;
1321
1322
1.67k
    av_frame_free(&s->frame);
1323
1.67k
    av_freep(&s->frame_data);
1324
1325
1.67k
    return 0;
1326
1.67k
}
1327
1328
const FFCodec ff_wmalossless_decoder = {
1329
    .p.name         = "wmalossless",
1330
    CODEC_LONG_NAME("Windows Media Audio Lossless"),
1331
    .p.type         = AVMEDIA_TYPE_AUDIO,
1332
    .p.id           = AV_CODEC_ID_WMALOSSLESS,
1333
    .priv_data_size = sizeof(WmallDecodeCtx),
1334
    .init           = decode_init,
1335
    .close          = decode_close,
1336
    FF_CODEC_DECODE_CB(decode_packet),
1337
    .flush          = flush,
1338
    .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
1339
    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
1340
};