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