ef990bf693988a93a04a989442313074b8b1c496
[ffmpeg.git] / libavcodec / apedec.c
1 /*
2  * Monkey's Audio lossless audio decoder
3  * Copyright (c) 2007 Benjamin Zores <ben@geexbox.org>
4  *  based upon libdemac from Dave Chapman.
5  *
6  * This file is part of Libav.
7  *
8  * Libav is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * Libav is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with Libav; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 #define ALT_BITSTREAM_READER_LE
24 #include "avcodec.h"
25 #include "dsputil.h"
26 #include "get_bits.h"
27 #include "bytestream.h"
28 #include "libavutil/audioconvert.h"
29
30 /**
31  * @file
32  * Monkey's Audio lossless audio decoder
33  */
34
35 #define BLOCKS_PER_LOOP     4608
36 #define MAX_CHANNELS        2
37 #define MAX_BYTESPERSAMPLE  3
38
39 #define APE_FRAMECODE_MONO_SILENCE    1
40 #define APE_FRAMECODE_STEREO_SILENCE  3
41 #define APE_FRAMECODE_PSEUDO_STEREO   4
42
43 #define HISTORY_SIZE 512
44 #define PREDICTOR_ORDER 8
45 /** Total size of all predictor histories */
46 #define PREDICTOR_SIZE 50
47
48 #define YDELAYA (18 + PREDICTOR_ORDER*4)
49 #define YDELAYB (18 + PREDICTOR_ORDER*3)
50 #define XDELAYA (18 + PREDICTOR_ORDER*2)
51 #define XDELAYB (18 + PREDICTOR_ORDER)
52
53 #define YADAPTCOEFFSA 18
54 #define XADAPTCOEFFSA 14
55 #define YADAPTCOEFFSB 10
56 #define XADAPTCOEFFSB 5
57
58 /**
59  * Possible compression levels
60  * @{
61  */
62 enum APECompressionLevel {
63     COMPRESSION_LEVEL_FAST       = 1000,
64     COMPRESSION_LEVEL_NORMAL     = 2000,
65     COMPRESSION_LEVEL_HIGH       = 3000,
66     COMPRESSION_LEVEL_EXTRA_HIGH = 4000,
67     COMPRESSION_LEVEL_INSANE     = 5000
68 };
69 /** @} */
70
71 #define APE_FILTER_LEVELS 3
72
73 /** Filter orders depending on compression level */
74 static const uint16_t ape_filter_orders[5][APE_FILTER_LEVELS] = {
75     {  0,   0,    0 },
76     { 16,   0,    0 },
77     { 64,   0,    0 },
78     { 32, 256,    0 },
79     { 16, 256, 1280 }
80 };
81
82 /** Filter fraction bits depending on compression level */
83 static const uint8_t ape_filter_fracbits[5][APE_FILTER_LEVELS] = {
84     {  0,  0,  0 },
85     { 11,  0,  0 },
86     { 11,  0,  0 },
87     { 10, 13,  0 },
88     { 11, 13, 15 }
89 };
90
91
92 /** Filters applied to the decoded data */
93 typedef struct APEFilter {
94     int16_t *coeffs;        ///< actual coefficients used in filtering
95     int16_t *adaptcoeffs;   ///< adaptive filter coefficients used for correcting of actual filter coefficients
96     int16_t *historybuffer; ///< filter memory
97     int16_t *delay;         ///< filtered values
98
99     int avg;
100 } APEFilter;
101
102 typedef struct APERice {
103     uint32_t k;
104     uint32_t ksum;
105 } APERice;
106
107 typedef struct APERangecoder {
108     uint32_t low;           ///< low end of interval
109     uint32_t range;         ///< length of interval
110     uint32_t help;          ///< bytes_to_follow resp. intermediate value
111     unsigned int buffer;    ///< buffer for input/output
112 } APERangecoder;
113
114 /** Filter histories */
115 typedef struct APEPredictor {
116     int32_t *buf;
117
118     int32_t lastA[2];
119
120     int32_t filterA[2];
121     int32_t filterB[2];
122
123     int32_t coeffsA[2][4];  ///< adaption coefficients
124     int32_t coeffsB[2][5];  ///< adaption coefficients
125     int32_t historybuffer[HISTORY_SIZE + PREDICTOR_SIZE];
126 } APEPredictor;
127
128 /** Decoder context */
129 typedef struct APEContext {
130     AVCodecContext *avctx;
131     DSPContext dsp;
132     int channels;
133     int samples;                             ///< samples left to decode in current frame
134
135     int fileversion;                         ///< codec version, very important in decoding process
136     int compression_level;                   ///< compression levels
137     int fset;                                ///< which filter set to use (calculated from compression level)
138     int flags;                               ///< global decoder flags
139
140     uint32_t CRC;                            ///< frame CRC
141     int frameflags;                          ///< frame flags
142     int currentframeblocks;                  ///< samples (per channel) in current frame
143     int blocksdecoded;                       ///< count of decoded samples in current frame
144     APEPredictor predictor;                  ///< predictor used for final reconstruction
145
146     int32_t decoded0[BLOCKS_PER_LOOP];       ///< decoded data for the first channel
147     int32_t decoded1[BLOCKS_PER_LOOP];       ///< decoded data for the second channel
148
149     int16_t* filterbuf[APE_FILTER_LEVELS];   ///< filter memory
150
151     APERangecoder rc;                        ///< rangecoder used to decode actual values
152     APERice riceX;                           ///< rice code parameters for the second channel
153     APERice riceY;                           ///< rice code parameters for the first channel
154     APEFilter filters[APE_FILTER_LEVELS][2]; ///< filters used for reconstruction
155
156     uint8_t *data;                           ///< current frame data
157     uint8_t *data_end;                       ///< frame data end
158     const uint8_t *ptr;                      ///< current position in frame data
159     const uint8_t *last_ptr;                 ///< position where last 4608-sample block ended
160
161     int error;
162 } APEContext;
163
164 // TODO: dsputilize
165
166 static av_cold int ape_decode_close(AVCodecContext *avctx)
167 {
168     APEContext *s = avctx->priv_data;
169     int i;
170
171     for (i = 0; i < APE_FILTER_LEVELS; i++)
172         av_freep(&s->filterbuf[i]);
173
174     av_freep(&s->data);
175     return 0;
176 }
177
178 static av_cold int ape_decode_init(AVCodecContext *avctx)
179 {
180     APEContext *s = avctx->priv_data;
181     int i;
182
183     if (avctx->extradata_size != 6) {
184         av_log(avctx, AV_LOG_ERROR, "Incorrect extradata\n");
185         return AVERROR(EINVAL);
186     }
187     if (avctx->bits_per_coded_sample != 16) {
188         av_log(avctx, AV_LOG_ERROR, "Only 16-bit samples are supported\n");
189         return AVERROR(EINVAL);
190     }
191     if (avctx->channels > 2) {
192         av_log(avctx, AV_LOG_ERROR, "Only mono and stereo is supported\n");
193         return AVERROR(EINVAL);
194     }
195     s->avctx             = avctx;
196     s->channels          = avctx->channels;
197     s->fileversion       = AV_RL16(avctx->extradata);
198     s->compression_level = AV_RL16(avctx->extradata + 2);
199     s->flags             = AV_RL16(avctx->extradata + 4);
200
201     av_log(avctx, AV_LOG_DEBUG, "Compression Level: %d - Flags: %d\n",
202            s->compression_level, s->flags);
203     if (s->compression_level % 1000 || s->compression_level > COMPRESSION_LEVEL_INSANE) {
204         av_log(avctx, AV_LOG_ERROR, "Incorrect compression level %d\n",
205                s->compression_level);
206         return AVERROR_INVALIDDATA;
207     }
208     s->fset = s->compression_level / 1000 - 1;
209     for (i = 0; i < APE_FILTER_LEVELS; i++) {
210         if (!ape_filter_orders[s->fset][i])
211             break;
212         FF_ALLOC_OR_GOTO(avctx, s->filterbuf[i],
213                          (ape_filter_orders[s->fset][i] * 3 + HISTORY_SIZE) * 4,
214                          filter_alloc_fail);
215     }
216
217     dsputil_init(&s->dsp, avctx);
218     avctx->sample_fmt = AV_SAMPLE_FMT_S16;
219     avctx->channel_layout = (avctx->channels==2) ? AV_CH_LAYOUT_STEREO : AV_CH_LAYOUT_MONO;
220     return 0;
221 filter_alloc_fail:
222     ape_decode_close(avctx);
223     return AVERROR(ENOMEM);
224 }
225
226 /**
227  * @name APE range decoding functions
228  * @{
229  */
230
231 #define CODE_BITS    32
232 #define TOP_VALUE    ((unsigned int)1 << (CODE_BITS-1))
233 #define SHIFT_BITS   (CODE_BITS - 9)
234 #define EXTRA_BITS   ((CODE_BITS-2) % 8 + 1)
235 #define BOTTOM_VALUE (TOP_VALUE >> 8)
236
237 /** Start the decoder */
238 static inline void range_start_decoding(APEContext *ctx)
239 {
240     ctx->rc.buffer = bytestream_get_byte(&ctx->ptr);
241     ctx->rc.low    = ctx->rc.buffer >> (8 - EXTRA_BITS);
242     ctx->rc.range  = (uint32_t) 1 << EXTRA_BITS;
243 }
244
245 /** Perform normalization */
246 static inline void range_dec_normalize(APEContext *ctx)
247 {
248     while (ctx->rc.range <= BOTTOM_VALUE) {
249         ctx->rc.buffer <<= 8;
250         if(ctx->ptr < ctx->data_end)
251             ctx->rc.buffer += *ctx->ptr;
252         ctx->ptr++;
253         ctx->rc.low    = (ctx->rc.low << 8)    | ((ctx->rc.buffer >> 1) & 0xFF);
254         ctx->rc.range  <<= 8;
255     }
256 }
257
258 /**
259  * Calculate culmulative frequency for next symbol. Does NO update!
260  * @param ctx decoder context
261  * @param tot_f is the total frequency or (code_value)1<<shift
262  * @return the culmulative frequency
263  */
264 static inline int range_decode_culfreq(APEContext *ctx, int tot_f)
265 {
266     range_dec_normalize(ctx);
267     ctx->rc.help = ctx->rc.range / tot_f;
268     return ctx->rc.low / ctx->rc.help;
269 }
270
271 /**
272  * Decode value with given size in bits
273  * @param ctx decoder context
274  * @param shift number of bits to decode
275  */
276 static inline int range_decode_culshift(APEContext *ctx, int shift)
277 {
278     range_dec_normalize(ctx);
279     ctx->rc.help = ctx->rc.range >> shift;
280     return ctx->rc.low / ctx->rc.help;
281 }
282
283
284 /**
285  * Update decoding state
286  * @param ctx decoder context
287  * @param sy_f the interval length (frequency of the symbol)
288  * @param lt_f the lower end (frequency sum of < symbols)
289  */
290 static inline void range_decode_update(APEContext *ctx, int sy_f, int lt_f)
291 {
292     ctx->rc.low  -= ctx->rc.help * lt_f;
293     ctx->rc.range = ctx->rc.help * sy_f;
294 }
295
296 /** Decode n bits (n <= 16) without modelling */
297 static inline int range_decode_bits(APEContext *ctx, int n)
298 {
299     int sym = range_decode_culshift(ctx, n);
300     range_decode_update(ctx, 1, sym);
301     return sym;
302 }
303
304
305 #define MODEL_ELEMENTS 64
306
307 /**
308  * Fixed probabilities for symbols in Monkey Audio version 3.97
309  */
310 static const uint16_t counts_3970[22] = {
311         0, 14824, 28224, 39348, 47855, 53994, 58171, 60926,
312     62682, 63786, 64463, 64878, 65126, 65276, 65365, 65419,
313     65450, 65469, 65480, 65487, 65491, 65493,
314 };
315
316 /**
317  * Probability ranges for symbols in Monkey Audio version 3.97
318  */
319 static const uint16_t counts_diff_3970[21] = {
320     14824, 13400, 11124, 8507, 6139, 4177, 2755, 1756,
321     1104, 677, 415, 248, 150, 89, 54, 31,
322     19, 11, 7, 4, 2,
323 };
324
325 /**
326  * Fixed probabilities for symbols in Monkey Audio version 3.98
327  */
328 static const uint16_t counts_3980[22] = {
329         0, 19578, 36160, 48417, 56323, 60899, 63265, 64435,
330     64971, 65232, 65351, 65416, 65447, 65466, 65476, 65482,
331     65485, 65488, 65490, 65491, 65492, 65493,
332 };
333
334 /**
335  * Probability ranges for symbols in Monkey Audio version 3.98
336  */
337 static const uint16_t counts_diff_3980[21] = {
338     19578, 16582, 12257, 7906, 4576, 2366, 1170, 536,
339     261, 119, 65, 31, 19, 10, 6, 3,
340     3, 2, 1, 1, 1,
341 };
342
343 /**
344  * Decode symbol
345  * @param ctx decoder context
346  * @param counts probability range start position
347  * @param counts_diff probability range widths
348  */
349 static inline int range_get_symbol(APEContext *ctx,
350                                    const uint16_t counts[],
351                                    const uint16_t counts_diff[])
352 {
353     int symbol, cf;
354
355     cf = range_decode_culshift(ctx, 16);
356
357     if(cf > 65492){
358         symbol= cf - 65535 + 63;
359         range_decode_update(ctx, 1, cf);
360         if(cf > 65535)
361             ctx->error=1;
362         return symbol;
363     }
364     /* figure out the symbol inefficiently; a binary search would be much better */
365     for (symbol = 0; counts[symbol + 1] <= cf; symbol++);
366
367     range_decode_update(ctx, counts_diff[symbol], counts[symbol]);
368
369     return symbol;
370 }
371 /** @} */ // group rangecoder
372
373 static inline void update_rice(APERice *rice, int x)
374 {
375     int lim = rice->k ? (1 << (rice->k + 4)) : 0;
376     rice->ksum += ((x + 1) / 2) - ((rice->ksum + 16) >> 5);
377
378     if (rice->ksum < lim)
379         rice->k--;
380     else if (rice->ksum >= (1 << (rice->k + 5)))
381         rice->k++;
382 }
383
384 static inline int ape_decode_value(APEContext *ctx, APERice *rice)
385 {
386     int x, overflow;
387
388     if (ctx->fileversion < 3990) {
389         int tmpk;
390
391         overflow = range_get_symbol(ctx, counts_3970, counts_diff_3970);
392
393         if (overflow == (MODEL_ELEMENTS - 1)) {
394             tmpk = range_decode_bits(ctx, 5);
395             overflow = 0;
396         } else
397             tmpk = (rice->k < 1) ? 0 : rice->k - 1;
398
399         if (tmpk <= 16)
400             x = range_decode_bits(ctx, tmpk);
401         else {
402             x = range_decode_bits(ctx, 16);
403             x |= (range_decode_bits(ctx, tmpk - 16) << 16);
404         }
405         x += overflow << tmpk;
406     } else {
407         int base, pivot;
408
409         pivot = rice->ksum >> 5;
410         if (pivot == 0)
411             pivot = 1;
412
413         overflow = range_get_symbol(ctx, counts_3980, counts_diff_3980);
414
415         if (overflow == (MODEL_ELEMENTS - 1)) {
416             overflow  = range_decode_bits(ctx, 16) << 16;
417             overflow |= range_decode_bits(ctx, 16);
418         }
419
420         if (pivot < 0x10000) {
421             base = range_decode_culfreq(ctx, pivot);
422             range_decode_update(ctx, 1, base);
423         } else {
424             int base_hi = pivot, base_lo;
425             int bbits = 0;
426
427             while (base_hi & ~0xFFFF) {
428                 base_hi >>= 1;
429                 bbits++;
430             }
431             base_hi = range_decode_culfreq(ctx, base_hi + 1);
432             range_decode_update(ctx, 1, base_hi);
433             base_lo = range_decode_culfreq(ctx, 1 << bbits);
434             range_decode_update(ctx, 1, base_lo);
435
436             base = (base_hi << bbits) + base_lo;
437         }
438
439         x = base + overflow * pivot;
440     }
441
442     update_rice(rice, x);
443
444     /* Convert to signed */
445     if (x & 1)
446         return (x >> 1) + 1;
447     else
448         return -(x >> 1);
449 }
450
451 static void entropy_decode(APEContext *ctx, int blockstodecode, int stereo)
452 {
453     int32_t *decoded0 = ctx->decoded0;
454     int32_t *decoded1 = ctx->decoded1;
455
456     ctx->blocksdecoded = blockstodecode;
457
458     if (ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) {
459         /* We are pure silence, just memset the output buffer. */
460         memset(decoded0, 0, blockstodecode * sizeof(int32_t));
461         memset(decoded1, 0, blockstodecode * sizeof(int32_t));
462     } else {
463         while (blockstodecode--) {
464             *decoded0++ = ape_decode_value(ctx, &ctx->riceY);
465             if (stereo)
466                 *decoded1++ = ape_decode_value(ctx, &ctx->riceX);
467         }
468     }
469
470     if (ctx->blocksdecoded == ctx->currentframeblocks)
471         range_dec_normalize(ctx);   /* normalize to use up all bytes */
472 }
473
474 static int init_entropy_decoder(APEContext *ctx)
475 {
476     /* Read the CRC */
477     if (ctx->data_end - ctx->ptr < 6)
478         return AVERROR_INVALIDDATA;
479     ctx->CRC = bytestream_get_be32(&ctx->ptr);
480
481     /* Read the frame flags if they exist */
482     ctx->frameflags = 0;
483     if ((ctx->fileversion > 3820) && (ctx->CRC & 0x80000000)) {
484         ctx->CRC &= ~0x80000000;
485
486         if (ctx->data_end - ctx->ptr < 6)
487             return AVERROR_INVALIDDATA;
488         ctx->frameflags = bytestream_get_be32(&ctx->ptr);
489     }
490
491     /* Keep a count of the blocks decoded in this frame */
492     ctx->blocksdecoded = 0;
493
494     /* Initialize the rice structs */
495     ctx->riceX.k = 10;
496     ctx->riceX.ksum = (1 << ctx->riceX.k) * 16;
497     ctx->riceY.k = 10;
498     ctx->riceY.ksum = (1 << ctx->riceY.k) * 16;
499
500     /* The first 8 bits of input are ignored. */
501     ctx->ptr++;
502
503     range_start_decoding(ctx);
504
505     return 0;
506 }
507
508 static const int32_t initial_coeffs[4] = {
509     360, 317, -109, 98
510 };
511
512 static void init_predictor_decoder(APEContext *ctx)
513 {
514     APEPredictor *p = &ctx->predictor;
515
516     /* Zero the history buffers */
517     memset(p->historybuffer, 0, PREDICTOR_SIZE * sizeof(int32_t));
518     p->buf = p->historybuffer;
519
520     /* Initialize and zero the coefficients */
521     memcpy(p->coeffsA[0], initial_coeffs, sizeof(initial_coeffs));
522     memcpy(p->coeffsA[1], initial_coeffs, sizeof(initial_coeffs));
523     memset(p->coeffsB, 0, sizeof(p->coeffsB));
524
525     p->filterA[0] = p->filterA[1] = 0;
526     p->filterB[0] = p->filterB[1] = 0;
527     p->lastA[0]   = p->lastA[1]   = 0;
528 }
529
530 /** Get inverse sign of integer (-1 for positive, 1 for negative and 0 for zero) */
531 static inline int APESIGN(int32_t x) {
532     return (x < 0) - (x > 0);
533 }
534
535 static av_always_inline int predictor_update_filter(APEPredictor *p,
536                                                     const int decoded, const int filter,
537                                                     const int delayA,  const int delayB,
538                                                     const int adaptA,  const int adaptB)
539 {
540     int32_t predictionA, predictionB, sign;
541
542     p->buf[delayA]     = p->lastA[filter];
543     p->buf[adaptA]     = APESIGN(p->buf[delayA]);
544     p->buf[delayA - 1] = p->buf[delayA] - p->buf[delayA - 1];
545     p->buf[adaptA - 1] = APESIGN(p->buf[delayA - 1]);
546
547     predictionA = p->buf[delayA    ] * p->coeffsA[filter][0] +
548                   p->buf[delayA - 1] * p->coeffsA[filter][1] +
549                   p->buf[delayA - 2] * p->coeffsA[filter][2] +
550                   p->buf[delayA - 3] * p->coeffsA[filter][3];
551
552     /*  Apply a scaled first-order filter compression */
553     p->buf[delayB]     = p->filterA[filter ^ 1] - ((p->filterB[filter] * 31) >> 5);
554     p->buf[adaptB]     = APESIGN(p->buf[delayB]);
555     p->buf[delayB - 1] = p->buf[delayB] - p->buf[delayB - 1];
556     p->buf[adaptB - 1] = APESIGN(p->buf[delayB - 1]);
557     p->filterB[filter] = p->filterA[filter ^ 1];
558
559     predictionB = p->buf[delayB    ] * p->coeffsB[filter][0] +
560                   p->buf[delayB - 1] * p->coeffsB[filter][1] +
561                   p->buf[delayB - 2] * p->coeffsB[filter][2] +
562                   p->buf[delayB - 3] * p->coeffsB[filter][3] +
563                   p->buf[delayB - 4] * p->coeffsB[filter][4];
564
565     p->lastA[filter] = decoded + ((predictionA + (predictionB >> 1)) >> 10);
566     p->filterA[filter] = p->lastA[filter] + ((p->filterA[filter] * 31) >> 5);
567
568     sign = APESIGN(decoded);
569     p->coeffsA[filter][0] += p->buf[adaptA    ] * sign;
570     p->coeffsA[filter][1] += p->buf[adaptA - 1] * sign;
571     p->coeffsA[filter][2] += p->buf[adaptA - 2] * sign;
572     p->coeffsA[filter][3] += p->buf[adaptA - 3] * sign;
573     p->coeffsB[filter][0] += p->buf[adaptB    ] * sign;
574     p->coeffsB[filter][1] += p->buf[adaptB - 1] * sign;
575     p->coeffsB[filter][2] += p->buf[adaptB - 2] * sign;
576     p->coeffsB[filter][3] += p->buf[adaptB - 3] * sign;
577     p->coeffsB[filter][4] += p->buf[adaptB - 4] * sign;
578
579     return p->filterA[filter];
580 }
581
582 static void predictor_decode_stereo(APEContext *ctx, int count)
583 {
584     APEPredictor *p = &ctx->predictor;
585     int32_t *decoded0 = ctx->decoded0;
586     int32_t *decoded1 = ctx->decoded1;
587
588     while (count--) {
589         /* Predictor Y */
590         *decoded0 = predictor_update_filter(p, *decoded0, 0, YDELAYA, YDELAYB,
591                                             YADAPTCOEFFSA, YADAPTCOEFFSB);
592         decoded0++;
593         *decoded1 = predictor_update_filter(p, *decoded1, 1, XDELAYA, XDELAYB,
594                                             XADAPTCOEFFSA, XADAPTCOEFFSB);
595         decoded1++;
596
597         /* Combined */
598         p->buf++;
599
600         /* Have we filled the history buffer? */
601         if (p->buf == p->historybuffer + HISTORY_SIZE) {
602             memmove(p->historybuffer, p->buf, PREDICTOR_SIZE * sizeof(int32_t));
603             p->buf = p->historybuffer;
604         }
605     }
606 }
607
608 static void predictor_decode_mono(APEContext *ctx, int count)
609 {
610     APEPredictor *p = &ctx->predictor;
611     int32_t *decoded0 = ctx->decoded0;
612     int32_t predictionA, currentA, A, sign;
613
614     currentA = p->lastA[0];
615
616     while (count--) {
617         A = *decoded0;
618
619         p->buf[YDELAYA] = currentA;
620         p->buf[YDELAYA - 1] = p->buf[YDELAYA] - p->buf[YDELAYA - 1];
621
622         predictionA = p->buf[YDELAYA    ] * p->coeffsA[0][0] +
623                       p->buf[YDELAYA - 1] * p->coeffsA[0][1] +
624                       p->buf[YDELAYA - 2] * p->coeffsA[0][2] +
625                       p->buf[YDELAYA - 3] * p->coeffsA[0][3];
626
627         currentA = A + (predictionA >> 10);
628
629         p->buf[YADAPTCOEFFSA]     = APESIGN(p->buf[YDELAYA    ]);
630         p->buf[YADAPTCOEFFSA - 1] = APESIGN(p->buf[YDELAYA - 1]);
631
632         sign = APESIGN(A);
633         p->coeffsA[0][0] += p->buf[YADAPTCOEFFSA    ] * sign;
634         p->coeffsA[0][1] += p->buf[YADAPTCOEFFSA - 1] * sign;
635         p->coeffsA[0][2] += p->buf[YADAPTCOEFFSA - 2] * sign;
636         p->coeffsA[0][3] += p->buf[YADAPTCOEFFSA - 3] * sign;
637
638         p->buf++;
639
640         /* Have we filled the history buffer? */
641         if (p->buf == p->historybuffer + HISTORY_SIZE) {
642             memmove(p->historybuffer, p->buf, PREDICTOR_SIZE * sizeof(int32_t));
643             p->buf = p->historybuffer;
644         }
645
646         p->filterA[0] = currentA + ((p->filterA[0] * 31) >> 5);
647         *(decoded0++) = p->filterA[0];
648     }
649
650     p->lastA[0] = currentA;
651 }
652
653 static void do_init_filter(APEFilter *f, int16_t *buf, int order)
654 {
655     f->coeffs = buf;
656     f->historybuffer = buf + order;
657     f->delay       = f->historybuffer + order * 2;
658     f->adaptcoeffs = f->historybuffer + order;
659
660     memset(f->historybuffer, 0, (order * 2) * sizeof(int16_t));
661     memset(f->coeffs, 0, order * sizeof(int16_t));
662     f->avg = 0;
663 }
664
665 static void init_filter(APEContext *ctx, APEFilter *f, int16_t *buf, int order)
666 {
667     do_init_filter(&f[0], buf, order);
668     do_init_filter(&f[1], buf + order * 3 + HISTORY_SIZE, order);
669 }
670
671 static void do_apply_filter(APEContext *ctx, int version, APEFilter *f,
672                             int32_t *data, int count, int order, int fracbits)
673 {
674     int res;
675     int absres;
676
677     while (count--) {
678         /* round fixedpoint scalar product */
679         res = ctx->dsp.scalarproduct_and_madd_int16(f->coeffs, f->delay - order,
680                                                     f->adaptcoeffs - order,
681                                                     order, APESIGN(*data));
682         res = (res + (1 << (fracbits - 1))) >> fracbits;
683         res += *data;
684         *data++ = res;
685
686         /* Update the output history */
687         *f->delay++ = av_clip_int16(res);
688
689         if (version < 3980) {
690             /* Version ??? to < 3.98 files (untested) */
691             f->adaptcoeffs[0]  = (res == 0) ? 0 : ((res >> 28) & 8) - 4;
692             f->adaptcoeffs[-4] >>= 1;
693             f->adaptcoeffs[-8] >>= 1;
694         } else {
695             /* Version 3.98 and later files */
696
697             /* Update the adaption coefficients */
698             absres = FFABS(res);
699             if (absres)
700                 *f->adaptcoeffs = ((res & (1<<31)) - (1<<30)) >>
701                                   (25 + (absres <= f->avg*3) + (absres <= f->avg*4/3));
702             else
703                 *f->adaptcoeffs = 0;
704
705             f->avg += (absres - f->avg) / 16;
706
707             f->adaptcoeffs[-1] >>= 1;
708             f->adaptcoeffs[-2] >>= 1;
709             f->adaptcoeffs[-8] >>= 1;
710         }
711
712         f->adaptcoeffs++;
713
714         /* Have we filled the history buffer? */
715         if (f->delay == f->historybuffer + HISTORY_SIZE + (order * 2)) {
716             memmove(f->historybuffer, f->delay - (order * 2),
717                     (order * 2) * sizeof(int16_t));
718             f->delay = f->historybuffer + order * 2;
719             f->adaptcoeffs = f->historybuffer + order;
720         }
721     }
722 }
723
724 static void apply_filter(APEContext *ctx, APEFilter *f,
725                          int32_t *data0, int32_t *data1,
726                          int count, int order, int fracbits)
727 {
728     do_apply_filter(ctx, ctx->fileversion, &f[0], data0, count, order, fracbits);
729     if (data1)
730         do_apply_filter(ctx, ctx->fileversion, &f[1], data1, count, order, fracbits);
731 }
732
733 static void ape_apply_filters(APEContext *ctx, int32_t *decoded0,
734                               int32_t *decoded1, int count)
735 {
736     int i;
737
738     for (i = 0; i < APE_FILTER_LEVELS; i++) {
739         if (!ape_filter_orders[ctx->fset][i])
740             break;
741         apply_filter(ctx, ctx->filters[i], decoded0, decoded1, count,
742                      ape_filter_orders[ctx->fset][i],
743                      ape_filter_fracbits[ctx->fset][i]);
744     }
745 }
746
747 static int init_frame_decoder(APEContext *ctx)
748 {
749     int i, ret;
750     if ((ret = init_entropy_decoder(ctx)) < 0)
751         return ret;
752     init_predictor_decoder(ctx);
753
754     for (i = 0; i < APE_FILTER_LEVELS; i++) {
755         if (!ape_filter_orders[ctx->fset][i])
756             break;
757         init_filter(ctx, ctx->filters[i], ctx->filterbuf[i],
758                     ape_filter_orders[ctx->fset][i]);
759     }
760     return 0;
761 }
762
763 static void ape_unpack_mono(APEContext *ctx, int count)
764 {
765     int32_t *decoded0 = ctx->decoded0;
766     int32_t *decoded1 = ctx->decoded1;
767
768     if (ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) {
769         entropy_decode(ctx, count, 0);
770         /* We are pure silence, so we're done. */
771         av_log(ctx->avctx, AV_LOG_DEBUG, "pure silence mono\n");
772         return;
773     }
774
775     entropy_decode(ctx, count, 0);
776     ape_apply_filters(ctx, decoded0, NULL, count);
777
778     /* Now apply the predictor decoding */
779     predictor_decode_mono(ctx, count);
780
781     /* Pseudo-stereo - just copy left channel to right channel */
782     if (ctx->channels == 2) {
783         memcpy(decoded1, decoded0, count * sizeof(*decoded1));
784     }
785 }
786
787 static void ape_unpack_stereo(APEContext *ctx, int count)
788 {
789     int32_t left, right;
790     int32_t *decoded0 = ctx->decoded0;
791     int32_t *decoded1 = ctx->decoded1;
792
793     if (ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) {
794         /* We are pure silence, so we're done. */
795         av_log(ctx->avctx, AV_LOG_DEBUG, "pure silence stereo\n");
796         return;
797     }
798
799     entropy_decode(ctx, count, 1);
800     ape_apply_filters(ctx, decoded0, decoded1, count);
801
802     /* Now apply the predictor decoding */
803     predictor_decode_stereo(ctx, count);
804
805     /* Decorrelate and scale to output depth */
806     while (count--) {
807         left = *decoded1 - (*decoded0 / 2);
808         right = left + *decoded0;
809
810         *(decoded0++) = left;
811         *(decoded1++) = right;
812     }
813 }
814
815 static int ape_decode_frame(AVCodecContext *avctx,
816                             void *data, int *data_size,
817                             AVPacket *avpkt)
818 {
819     const uint8_t *buf = avpkt->data;
820     int buf_size = avpkt->size;
821     APEContext *s = avctx->priv_data;
822     int16_t *samples = data;
823     uint32_t nblocks;
824     int i;
825     int blockstodecode;
826     int bytes_used;
827
828     /* should not happen but who knows */
829     if (BLOCKS_PER_LOOP * 2 * avctx->channels > *data_size) {
830         av_log (avctx, AV_LOG_ERROR, "Output buffer is too small.\n");
831         return AVERROR(EINVAL);
832     }
833
834     if(!s->samples){
835         uint32_t offset;
836         void *tmp_data;
837
838         if (buf_size < 8) {
839             av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
840             return AVERROR_INVALIDDATA;
841         }
842
843         tmp_data = av_realloc(s->data, (buf_size + 3) & ~3);
844         if (!tmp_data)
845             return AVERROR(ENOMEM);
846         s->data = tmp_data;
847         s->dsp.bswap_buf((uint32_t*)s->data, (const uint32_t*)buf, buf_size >> 2);
848         s->ptr = s->last_ptr = s->data;
849         s->data_end = s->data + buf_size;
850
851         nblocks = bytestream_get_be32(&s->ptr);
852         offset  = bytestream_get_be32(&s->ptr);
853         if (offset > 3) {
854             av_log(avctx, AV_LOG_ERROR, "Incorrect offset passed\n");
855             s->data = NULL;
856             return AVERROR_INVALIDDATA;
857         }
858         if (s->data_end - s->ptr < offset) {
859             av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
860             return AVERROR_INVALIDDATA;
861         }
862         s->ptr += offset;
863
864         if (!nblocks || nblocks > INT_MAX) {
865             av_log(avctx, AV_LOG_ERROR, "Invalid sample count: %u.\n", nblocks);
866             return AVERROR_INVALIDDATA;
867         }
868         s->currentframeblocks = s->samples = nblocks;
869
870         memset(s->decoded0,  0, sizeof(s->decoded0));
871         memset(s->decoded1,  0, sizeof(s->decoded1));
872
873         /* Initialize the frame decoder */
874         if (init_frame_decoder(s) < 0) {
875             av_log(avctx, AV_LOG_ERROR, "Error reading frame header\n");
876             return AVERROR_INVALIDDATA;
877         }
878     }
879
880     if (!s->data) {
881         *data_size = 0;
882         return buf_size;
883     }
884
885     nblocks = s->samples;
886     blockstodecode = FFMIN(BLOCKS_PER_LOOP, nblocks);
887
888     s->error=0;
889
890     if ((s->channels == 1) || (s->frameflags & APE_FRAMECODE_PSEUDO_STEREO))
891         ape_unpack_mono(s, blockstodecode);
892     else
893         ape_unpack_stereo(s, blockstodecode);
894     emms_c();
895
896     if(s->error || s->ptr > s->data_end){
897         s->samples=0;
898         av_log(avctx, AV_LOG_ERROR, "Error decoding frame\n");
899         return AVERROR_INVALIDDATA;
900     }
901
902     for (i = 0; i < blockstodecode; i++) {
903         *samples++ = s->decoded0[i];
904         if(s->channels == 2)
905             *samples++ = s->decoded1[i];
906     }
907
908     s->samples -= blockstodecode;
909
910     *data_size = blockstodecode * 2 * s->channels;
911     bytes_used = s->samples ? s->ptr - s->last_ptr : buf_size;
912     s->last_ptr = s->ptr;
913     return bytes_used;
914 }
915
916 static void ape_flush(AVCodecContext *avctx)
917 {
918     APEContext *s = avctx->priv_data;
919     s->samples= 0;
920 }
921
922 AVCodec ff_ape_decoder = {
923     .name           = "ape",
924     .type           = AVMEDIA_TYPE_AUDIO,
925     .id             = CODEC_ID_APE,
926     .priv_data_size = sizeof(APEContext),
927     .init           = ape_decode_init,
928     .close          = ape_decode_close,
929     .decode         = ape_decode_frame,
930     .capabilities = CODEC_CAP_SUBFRAMES,
931     .flush = ape_flush,
932     .long_name = NULL_IF_CONFIG_SMALL("Monkey's Audio"),
933 };