]> git.sesse.net Git - ffmpeg/blob - libavcodec/sonic.c
doc/decoders: Document libcelt
[ffmpeg] / libavcodec / sonic.c
1 /*
2  * Simple free lossless/lossy audio codec
3  * Copyright (c) 2004 Alex Beregszaszi
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 #include "avcodec.h"
22 #include "get_bits.h"
23 #include "golomb.h"
24 #include "internal.h"
25
26 /**
27  * @file
28  * Simple free lossless/lossy audio codec
29  * Based on Paul Francis Harrison's Bonk (http://www.logarithmic.net/pfh/bonk)
30  * Written and designed by Alex Beregszaszi
31  *
32  * TODO:
33  *  - CABAC put/get_symbol
34  *  - independent quantizer for channels
35  *  - >2 channels support
36  *  - more decorrelation types
37  *  - more tap_quant tests
38  *  - selectable intlist writers/readers (bonk-style, golomb, cabac)
39  */
40
41 #define MAX_CHANNELS 2
42
43 #define MID_SIDE 0
44 #define LEFT_SIDE 1
45 #define RIGHT_SIDE 2
46
47 typedef struct SonicContext {
48     int lossless, decorrelation;
49
50     int num_taps, downsampling;
51     double quantization;
52
53     int channels, samplerate, block_align, frame_size;
54
55     int *tap_quant;
56     int *int_samples;
57     int *coded_samples[MAX_CHANNELS];
58
59     // for encoding
60     int *tail;
61     int tail_size;
62     int *window;
63     int window_size;
64
65     // for decoding
66     int *predictor_k;
67     int *predictor_state[MAX_CHANNELS];
68 } SonicContext;
69
70 #define LATTICE_SHIFT   10
71 #define SAMPLE_SHIFT    4
72 #define LATTICE_FACTOR  (1 << LATTICE_SHIFT)
73 #define SAMPLE_FACTOR   (1 << SAMPLE_SHIFT)
74
75 #define BASE_QUANT      0.6
76 #define RATE_VARIATION  3.0
77
78 static inline int divide(int a, int b)
79 {
80     if (a < 0)
81         return -( (-a + b/2)/b );
82     else
83         return (a + b/2)/b;
84 }
85
86 static inline int shift(int a,int b)
87 {
88     return (a+(1<<(b-1))) >> b;
89 }
90
91 static inline int shift_down(int a,int b)
92 {
93     return (a>>b)+((a<0)?1:0);
94 }
95
96 #if 1
97 static inline int intlist_write(PutBitContext *pb, int *buf, int entries, int base_2_part)
98 {
99     int i;
100
101     for (i = 0; i < entries; i++)
102         set_se_golomb(pb, buf[i]);
103
104     return 1;
105 }
106
107 static inline int intlist_read(GetBitContext *gb, int *buf, int entries, int base_2_part)
108 {
109     int i;
110
111     for (i = 0; i < entries; i++)
112         buf[i] = get_se_golomb(gb);
113
114     return 1;
115 }
116
117 #else
118
119 #define ADAPT_LEVEL 8
120
121 static int bits_to_store(uint64_t x)
122 {
123     int res = 0;
124
125     while(x)
126     {
127         res++;
128         x >>= 1;
129     }
130     return res;
131 }
132
133 static void write_uint_max(PutBitContext *pb, unsigned int value, unsigned int max)
134 {
135     int i, bits;
136
137     if (!max)
138         return;
139
140     bits = bits_to_store(max);
141
142     for (i = 0; i < bits-1; i++)
143         put_bits(pb, 1, value & (1 << i));
144
145     if ( (value | (1 << (bits-1))) <= max)
146         put_bits(pb, 1, value & (1 << (bits-1)));
147 }
148
149 static unsigned int read_uint_max(GetBitContext *gb, int max)
150 {
151     int i, bits, value = 0;
152
153     if (!max)
154         return 0;
155
156     bits = bits_to_store(max);
157
158     for (i = 0; i < bits-1; i++)
159         if (get_bits1(gb))
160             value += 1 << i;
161
162     if ( (value | (1<<(bits-1))) <= max)
163         if (get_bits1(gb))
164             value += 1 << (bits-1);
165
166     return value;
167 }
168
169 static int intlist_write(PutBitContext *pb, int *buf, int entries, int base_2_part)
170 {
171     int i, j, x = 0, low_bits = 0, max = 0;
172     int step = 256, pos = 0, dominant = 0, any = 0;
173     int *copy, *bits;
174
175     copy = av_mallocz(4* entries);
176     if (!copy)
177         return -1;
178
179     if (base_2_part)
180     {
181         int energy = 0;
182
183         for (i = 0; i < entries; i++)
184             energy += abs(buf[i]);
185
186         low_bits = bits_to_store(energy / (entries * 2));
187         if (low_bits > 15)
188             low_bits = 15;
189
190         put_bits(pb, 4, low_bits);
191     }
192
193     for (i = 0; i < entries; i++)
194     {
195         put_bits(pb, low_bits, abs(buf[i]));
196         copy[i] = abs(buf[i]) >> low_bits;
197         if (copy[i] > max)
198             max = abs(copy[i]);
199     }
200
201     bits = av_mallocz(4* entries*max);
202     if (!bits)
203     {
204 //        av_free(copy);
205         return -1;
206     }
207
208     for (i = 0; i <= max; i++)
209     {
210         for (j = 0; j < entries; j++)
211             if (copy[j] >= i)
212                 bits[x++] = copy[j] > i;
213     }
214
215     // store bitstream
216     while (pos < x)
217     {
218         int steplet = step >> 8;
219
220         if (pos + steplet > x)
221             steplet = x - pos;
222
223         for (i = 0; i < steplet; i++)
224             if (bits[i+pos] != dominant)
225                 any = 1;
226
227         put_bits(pb, 1, any);
228
229         if (!any)
230         {
231             pos += steplet;
232             step += step / ADAPT_LEVEL;
233         }
234         else
235         {
236             int interloper = 0;
237
238             while (((pos + interloper) < x) && (bits[pos + interloper] == dominant))
239                 interloper++;
240
241             // note change
242             write_uint_max(pb, interloper, (step >> 8) - 1);
243
244             pos += interloper + 1;
245             step -= step / ADAPT_LEVEL;
246         }
247
248         if (step < 256)
249         {
250             step = 65536 / step;
251             dominant = !dominant;
252         }
253     }
254
255     // store signs
256     for (i = 0; i < entries; i++)
257         if (buf[i])
258             put_bits(pb, 1, buf[i] < 0);
259
260 //    av_free(bits);
261 //    av_free(copy);
262
263     return 0;
264 }
265
266 static int intlist_read(GetBitContext *gb, int *buf, int entries, int base_2_part)
267 {
268     int i, low_bits = 0, x = 0;
269     int n_zeros = 0, step = 256, dominant = 0;
270     int pos = 0, level = 0;
271     int *bits = av_mallocz(4* entries);
272
273     if (!bits)
274         return -1;
275
276     if (base_2_part)
277     {
278         low_bits = get_bits(gb, 4);
279
280         if (low_bits)
281             for (i = 0; i < entries; i++)
282                 buf[i] = get_bits(gb, low_bits);
283     }
284
285 //    av_log(NULL, AV_LOG_INFO, "entries: %d, low bits: %d\n", entries, low_bits);
286
287     while (n_zeros < entries)
288     {
289         int steplet = step >> 8;
290
291         if (!get_bits1(gb))
292         {
293             for (i = 0; i < steplet; i++)
294                 bits[x++] = dominant;
295
296             if (!dominant)
297                 n_zeros += steplet;
298
299             step += step / ADAPT_LEVEL;
300         }
301         else
302         {
303             int actual_run = read_uint_max(gb, steplet-1);
304
305 //            av_log(NULL, AV_LOG_INFO, "actual run: %d\n", actual_run);
306
307             for (i = 0; i < actual_run; i++)
308                 bits[x++] = dominant;
309
310             bits[x++] = !dominant;
311
312             if (!dominant)
313                 n_zeros += actual_run;
314             else
315                 n_zeros++;
316
317             step -= step / ADAPT_LEVEL;
318         }
319
320         if (step < 256)
321         {
322             step = 65536 / step;
323             dominant = !dominant;
324         }
325     }
326
327     // reconstruct unsigned values
328     n_zeros = 0;
329     for (i = 0; n_zeros < entries; i++)
330     {
331         while(1)
332         {
333             if (pos >= entries)
334             {
335                 pos = 0;
336                 level += 1 << low_bits;
337             }
338
339             if (buf[pos] >= level)
340                 break;
341
342             pos++;
343         }
344
345         if (bits[i])
346             buf[pos] += 1 << low_bits;
347         else
348             n_zeros++;
349
350         pos++;
351     }
352 //    av_free(bits);
353
354     // read signs
355     for (i = 0; i < entries; i++)
356         if (buf[i] && get_bits1(gb))
357             buf[i] = -buf[i];
358
359 //    av_log(NULL, AV_LOG_INFO, "zeros: %d pos: %d\n", n_zeros, pos);
360
361     return 0;
362 }
363 #endif
364
365 static void predictor_init_state(int *k, int *state, int order)
366 {
367     int i;
368
369     for (i = order-2; i >= 0; i--)
370     {
371         int j, p, x = state[i];
372
373         for (j = 0, p = i+1; p < order; j++,p++)
374             {
375             int tmp = x + shift_down(k[j] * state[p], LATTICE_SHIFT);
376             state[p] += shift_down(k[j]*x, LATTICE_SHIFT);
377             x = tmp;
378         }
379     }
380 }
381
382 static int predictor_calc_error(int *k, int *state, int order, int error)
383 {
384     int i, x = error - shift_down(k[order-1] * state[order-1], LATTICE_SHIFT);
385
386 #if 1
387     int *k_ptr = &(k[order-2]),
388         *state_ptr = &(state[order-2]);
389     for (i = order-2; i >= 0; i--, k_ptr--, state_ptr--)
390     {
391         int k_value = *k_ptr, state_value = *state_ptr;
392         x -= shift_down(k_value * state_value, LATTICE_SHIFT);
393         state_ptr[1] = state_value + shift_down(k_value * x, LATTICE_SHIFT);
394     }
395 #else
396     for (i = order-2; i >= 0; i--)
397     {
398         x -= shift_down(k[i] * state[i], LATTICE_SHIFT);
399         state[i+1] = state[i] + shift_down(k[i] * x, LATTICE_SHIFT);
400     }
401 #endif
402
403     // don't drift too far, to avoid overflows
404     if (x >  (SAMPLE_FACTOR<<16)) x =  (SAMPLE_FACTOR<<16);
405     if (x < -(SAMPLE_FACTOR<<16)) x = -(SAMPLE_FACTOR<<16);
406
407     state[0] = x;
408
409     return x;
410 }
411
412 #if CONFIG_SONIC_ENCODER || CONFIG_SONIC_LS_ENCODER
413 // Heavily modified Levinson-Durbin algorithm which
414 // copes better with quantization, and calculates the
415 // actual whitened result as it goes.
416
417 static void modified_levinson_durbin(int *window, int window_entries,
418         int *out, int out_entries, int channels, int *tap_quant)
419 {
420     int i;
421     int *state = av_mallocz(4* window_entries);
422
423     memcpy(state, window, 4* window_entries);
424
425     for (i = 0; i < out_entries; i++)
426     {
427         int step = (i+1)*channels, k, j;
428         double xx = 0.0, xy = 0.0;
429 #if 1
430         int *x_ptr = &(window[step]), *state_ptr = &(state[0]);
431         j = window_entries - step;
432         for (;j>=0;j--,x_ptr++,state_ptr++)
433         {
434             double x_value = *x_ptr, state_value = *state_ptr;
435             xx += state_value*state_value;
436             xy += x_value*state_value;
437         }
438 #else
439         for (j = 0; j <= (window_entries - step); j++);
440         {
441             double stepval = window[step+j], stateval = window[j];
442 //            xx += (double)window[j]*(double)window[j];
443 //            xy += (double)window[step+j]*(double)window[j];
444             xx += stateval*stateval;
445             xy += stepval*stateval;
446         }
447 #endif
448         if (xx == 0.0)
449             k = 0;
450         else
451             k = (int)(floor(-xy/xx * (double)LATTICE_FACTOR / (double)(tap_quant[i]) + 0.5));
452
453         if (k > (LATTICE_FACTOR/tap_quant[i]))
454             k = LATTICE_FACTOR/tap_quant[i];
455         if (-k > (LATTICE_FACTOR/tap_quant[i]))
456             k = -(LATTICE_FACTOR/tap_quant[i]);
457
458         out[i] = k;
459         k *= tap_quant[i];
460
461 #if 1
462         x_ptr = &(window[step]);
463         state_ptr = &(state[0]);
464         j = window_entries - step;
465         for (;j>=0;j--,x_ptr++,state_ptr++)
466         {
467             int x_value = *x_ptr, state_value = *state_ptr;
468             *x_ptr = x_value + shift_down(k*state_value,LATTICE_SHIFT);
469             *state_ptr = state_value + shift_down(k*x_value, LATTICE_SHIFT);
470         }
471 #else
472         for (j=0; j <= (window_entries - step); j++)
473         {
474             int stepval = window[step+j], stateval=state[j];
475             window[step+j] += shift_down(k * stateval, LATTICE_SHIFT);
476             state[j] += shift_down(k * stepval, LATTICE_SHIFT);
477         }
478 #endif
479     }
480
481     av_free(state);
482 }
483
484 static inline int code_samplerate(int samplerate)
485 {
486     switch (samplerate)
487     {
488         case 44100: return 0;
489         case 22050: return 1;
490         case 11025: return 2;
491         case 96000: return 3;
492         case 48000: return 4;
493         case 32000: return 5;
494         case 24000: return 6;
495         case 16000: return 7;
496         case 8000: return 8;
497     }
498     return -1;
499 }
500
501 static av_cold int sonic_encode_init(AVCodecContext *avctx)
502 {
503     SonicContext *s = avctx->priv_data;
504     PutBitContext pb;
505     int i, version = 0;
506
507     if (avctx->channels > MAX_CHANNELS)
508     {
509         av_log(avctx, AV_LOG_ERROR, "Only mono and stereo streams are supported by now\n");
510         return -1; /* only stereo or mono for now */
511     }
512
513     if (avctx->channels == 2)
514         s->decorrelation = MID_SIDE;
515     else
516         s->decorrelation = 3;
517
518     if (avctx->codec->id == AV_CODEC_ID_SONIC_LS)
519     {
520         s->lossless = 1;
521         s->num_taps = 32;
522         s->downsampling = 1;
523         s->quantization = 0.0;
524     }
525     else
526     {
527         s->num_taps = 128;
528         s->downsampling = 2;
529         s->quantization = 1.0;
530     }
531
532     // max tap 2048
533     if ((s->num_taps < 32) || (s->num_taps > 1024) ||
534         ((s->num_taps>>5)<<5 != s->num_taps))
535     {
536         av_log(avctx, AV_LOG_ERROR, "Invalid number of taps\n");
537         return -1;
538     }
539
540     // generate taps
541     s->tap_quant = av_mallocz(4* s->num_taps);
542     for (i = 0; i < s->num_taps; i++)
543         s->tap_quant[i] = (int)(sqrt(i+1));
544
545     s->channels = avctx->channels;
546     s->samplerate = avctx->sample_rate;
547
548     s->block_align = (int)(2048.0*s->samplerate/44100)/s->downsampling;
549     s->frame_size = s->channels*s->block_align*s->downsampling;
550
551     s->tail_size = s->num_taps*s->channels;
552     s->tail = av_mallocz(4 * s->tail_size);
553     if (!s->tail)
554         return -1;
555
556     s->predictor_k = av_mallocz(4 * s->num_taps);
557     if (!s->predictor_k)
558         return -1;
559
560     for (i = 0; i < s->channels; i++)
561     {
562         s->coded_samples[i] = av_mallocz(4* s->block_align);
563         if (!s->coded_samples[i])
564             return -1;
565     }
566
567     s->int_samples = av_mallocz(4* s->frame_size);
568
569     s->window_size = ((2*s->tail_size)+s->frame_size);
570     s->window = av_mallocz(4* s->window_size);
571     if (!s->window)
572         return -1;
573
574     avctx->extradata = av_mallocz(16);
575     if (!avctx->extradata)
576         return -1;
577     init_put_bits(&pb, avctx->extradata, 16*8);
578
579     put_bits(&pb, 2, version); // version
580     if (version == 1)
581     {
582         put_bits(&pb, 2, s->channels);
583         put_bits(&pb, 4, code_samplerate(s->samplerate));
584     }
585     put_bits(&pb, 1, s->lossless);
586     if (!s->lossless)
587         put_bits(&pb, 3, SAMPLE_SHIFT); // XXX FIXME: sample precision
588     put_bits(&pb, 2, s->decorrelation);
589     put_bits(&pb, 2, s->downsampling);
590     put_bits(&pb, 5, (s->num_taps >> 5)-1); // 32..1024
591     put_bits(&pb, 1, 0); // XXX FIXME: no custom tap quant table
592
593     flush_put_bits(&pb);
594     avctx->extradata_size = put_bits_count(&pb)/8;
595
596     av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %d\n",
597         version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling);
598
599     avctx->frame_size = s->block_align*s->downsampling;
600
601     return 0;
602 }
603
604 static av_cold int sonic_encode_close(AVCodecContext *avctx)
605 {
606     SonicContext *s = avctx->priv_data;
607     int i;
608
609     for (i = 0; i < s->channels; i++)
610         av_free(s->coded_samples[i]);
611
612     av_free(s->predictor_k);
613     av_free(s->tail);
614     av_free(s->tap_quant);
615     av_free(s->window);
616     av_free(s->int_samples);
617
618     return 0;
619 }
620
621 static int sonic_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
622                               const AVFrame *frame, int *got_packet_ptr)
623 {
624     SonicContext *s = avctx->priv_data;
625     PutBitContext pb;
626     int i, j, ch, quant = 0, x = 0;
627     int ret;
628     const short *samples = (const int16_t*)frame->data[0];
629
630     if ((ret = ff_alloc_packet2(avctx, avpkt, s->frame_size * 5 + 1000)) < 0)
631         return ret;
632
633     init_put_bits(&pb, avpkt->data, avpkt->size);
634
635     // short -> internal
636     for (i = 0; i < s->frame_size; i++)
637         s->int_samples[i] = samples[i];
638
639     if (!s->lossless)
640         for (i = 0; i < s->frame_size; i++)
641             s->int_samples[i] = s->int_samples[i] << SAMPLE_SHIFT;
642
643     switch(s->decorrelation)
644     {
645         case MID_SIDE:
646             for (i = 0; i < s->frame_size; i += s->channels)
647             {
648                 s->int_samples[i] += s->int_samples[i+1];
649                 s->int_samples[i+1] -= shift(s->int_samples[i], 1);
650             }
651             break;
652         case LEFT_SIDE:
653             for (i = 0; i < s->frame_size; i += s->channels)
654                 s->int_samples[i+1] -= s->int_samples[i];
655             break;
656         case RIGHT_SIDE:
657             for (i = 0; i < s->frame_size; i += s->channels)
658                 s->int_samples[i] -= s->int_samples[i+1];
659             break;
660     }
661
662     memset(s->window, 0, 4* s->window_size);
663
664     for (i = 0; i < s->tail_size; i++)
665         s->window[x++] = s->tail[i];
666
667     for (i = 0; i < s->frame_size; i++)
668         s->window[x++] = s->int_samples[i];
669
670     for (i = 0; i < s->tail_size; i++)
671         s->window[x++] = 0;
672
673     for (i = 0; i < s->tail_size; i++)
674         s->tail[i] = s->int_samples[s->frame_size - s->tail_size + i];
675
676     // generate taps
677     modified_levinson_durbin(s->window, s->window_size,
678                 s->predictor_k, s->num_taps, s->channels, s->tap_quant);
679     if (intlist_write(&pb, s->predictor_k, s->num_taps, 0) < 0)
680         return -1;
681
682     for (ch = 0; ch < s->channels; ch++)
683     {
684         x = s->tail_size+ch;
685         for (i = 0; i < s->block_align; i++)
686         {
687             int sum = 0;
688             for (j = 0; j < s->downsampling; j++, x += s->channels)
689                 sum += s->window[x];
690             s->coded_samples[ch][i] = sum;
691         }
692     }
693
694     // simple rate control code
695     if (!s->lossless)
696     {
697         double energy1 = 0.0, energy2 = 0.0;
698         for (ch = 0; ch < s->channels; ch++)
699         {
700             for (i = 0; i < s->block_align; i++)
701             {
702                 double sample = s->coded_samples[ch][i];
703                 energy2 += sample*sample;
704                 energy1 += fabs(sample);
705             }
706         }
707
708         energy2 = sqrt(energy2/(s->channels*s->block_align));
709         energy1 = sqrt(2.0)*energy1/(s->channels*s->block_align);
710
711         // increase bitrate when samples are like a gaussian distribution
712         // reduce bitrate when samples are like a two-tailed exponential distribution
713
714         if (energy2 > energy1)
715             energy2 += (energy2-energy1)*RATE_VARIATION;
716
717         quant = (int)(BASE_QUANT*s->quantization*energy2/SAMPLE_FACTOR);
718 //        av_log(avctx, AV_LOG_DEBUG, "quant: %d energy: %f / %f\n", quant, energy1, energy2);
719
720         if (quant < 1)
721             quant = 1;
722         if (quant > 65534)
723             quant = 65534;
724
725         set_ue_golomb(&pb, quant);
726
727         quant *= SAMPLE_FACTOR;
728     }
729
730     // write out coded samples
731     for (ch = 0; ch < s->channels; ch++)
732     {
733         if (!s->lossless)
734             for (i = 0; i < s->block_align; i++)
735                 s->coded_samples[ch][i] = divide(s->coded_samples[ch][i], quant);
736
737         if (intlist_write(&pb, s->coded_samples[ch], s->block_align, 1) < 0)
738             return -1;
739     }
740
741 //    av_log(avctx, AV_LOG_DEBUG, "used bytes: %d\n", (put_bits_count(&pb)+7)/8);
742
743     flush_put_bits(&pb);
744     avpkt->size = (put_bits_count(&pb)+7)/8;
745     *got_packet_ptr = 1;
746     return 0;
747 }
748 #endif /* CONFIG_SONIC_ENCODER || CONFIG_SONIC_LS_ENCODER */
749
750 #if CONFIG_SONIC_DECODER
751 static const int samplerate_table[] =
752     { 44100, 22050, 11025, 96000, 48000, 32000, 24000, 16000, 8000 };
753
754 static av_cold int sonic_decode_init(AVCodecContext *avctx)
755 {
756     SonicContext *s = avctx->priv_data;
757     GetBitContext gb;
758     int i, version;
759
760     s->channels = avctx->channels;
761     s->samplerate = avctx->sample_rate;
762
763     if (!avctx->extradata)
764     {
765         av_log(avctx, AV_LOG_ERROR, "No mandatory headers present\n");
766         return -1;
767     }
768
769     init_get_bits(&gb, avctx->extradata, avctx->extradata_size);
770
771     version = get_bits(&gb, 2);
772     if (version > 1)
773     {
774         av_log(avctx, AV_LOG_ERROR, "Unsupported Sonic version, please report\n");
775         return -1;
776     }
777
778     if (version == 1)
779     {
780         s->channels = get_bits(&gb, 2);
781         s->samplerate = samplerate_table[get_bits(&gb, 4)];
782         av_log(avctx, AV_LOG_INFO, "Sonicv2 chans: %d samprate: %d\n",
783             s->channels, s->samplerate);
784     }
785
786     if (s->channels > MAX_CHANNELS)
787     {
788         av_log(avctx, AV_LOG_ERROR, "Only mono and stereo streams are supported by now\n");
789         return -1;
790     }
791
792     s->lossless = get_bits1(&gb);
793     if (!s->lossless)
794         skip_bits(&gb, 3); // XXX FIXME
795     s->decorrelation = get_bits(&gb, 2);
796     if (s->decorrelation != 3 && s->channels != 2) {
797         av_log(avctx, AV_LOG_ERROR, "invalid decorrelation %d\n", s->decorrelation);
798         return AVERROR_INVALIDDATA;
799     }
800
801     s->downsampling = get_bits(&gb, 2);
802     if (!s->downsampling) {
803         av_log(avctx, AV_LOG_ERROR, "invalid downsampling value\n");
804         return AVERROR_INVALIDDATA;
805     }
806
807     s->num_taps = (get_bits(&gb, 5)+1)<<5;
808     if (get_bits1(&gb)) // XXX FIXME
809         av_log(avctx, AV_LOG_INFO, "Custom quant table\n");
810
811     s->block_align = (int)(2048.0*s->samplerate/44100)/s->downsampling;
812     s->frame_size = s->channels*s->block_align*s->downsampling;
813 //    avctx->frame_size = s->block_align;
814
815     av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %d\n",
816         version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling);
817
818     // generate taps
819     s->tap_quant = av_mallocz(4* s->num_taps);
820     for (i = 0; i < s->num_taps; i++)
821         s->tap_quant[i] = (int)(sqrt(i+1));
822
823     s->predictor_k = av_mallocz(4* s->num_taps);
824
825     for (i = 0; i < s->channels; i++)
826     {
827         s->predictor_state[i] = av_mallocz(4* s->num_taps);
828         if (!s->predictor_state[i])
829             return -1;
830     }
831
832     for (i = 0; i < s->channels; i++)
833     {
834         s->coded_samples[i] = av_mallocz(4* s->block_align);
835         if (!s->coded_samples[i])
836             return -1;
837     }
838     s->int_samples = av_mallocz(4* s->frame_size);
839
840     avctx->sample_fmt = AV_SAMPLE_FMT_S16;
841     return 0;
842 }
843
844 static av_cold int sonic_decode_close(AVCodecContext *avctx)
845 {
846     SonicContext *s = avctx->priv_data;
847     int i;
848
849     av_free(s->int_samples);
850     av_free(s->tap_quant);
851     av_free(s->predictor_k);
852
853     for (i = 0; i < s->channels; i++)
854     {
855         av_free(s->predictor_state[i]);
856         av_free(s->coded_samples[i]);
857     }
858
859     return 0;
860 }
861
862 static int sonic_decode_frame(AVCodecContext *avctx,
863                             void *data, int *got_frame_ptr,
864                             AVPacket *avpkt)
865 {
866     const uint8_t *buf = avpkt->data;
867     int buf_size = avpkt->size;
868     SonicContext *s = avctx->priv_data;
869     GetBitContext gb;
870     int i, quant, ch, j, ret;
871     int16_t *samples;
872     AVFrame *frame = data;
873
874     if (buf_size == 0) return 0;
875
876     frame->nb_samples = s->frame_size / avctx->channels;
877     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
878         return ret;
879     samples = (int16_t *)frame->data[0];
880
881 //    av_log(NULL, AV_LOG_INFO, "buf_size: %d\n", buf_size);
882
883     init_get_bits(&gb, buf, buf_size*8);
884
885     intlist_read(&gb, s->predictor_k, s->num_taps, 0);
886
887     // dequantize
888     for (i = 0; i < s->num_taps; i++)
889         s->predictor_k[i] *= s->tap_quant[i];
890
891     if (s->lossless)
892         quant = 1;
893     else
894         quant = get_ue_golomb(&gb) * SAMPLE_FACTOR;
895
896 //    av_log(NULL, AV_LOG_INFO, "quant: %d\n", quant);
897
898     for (ch = 0; ch < s->channels; ch++)
899     {
900         int x = ch;
901
902         predictor_init_state(s->predictor_k, s->predictor_state[ch], s->num_taps);
903
904         intlist_read(&gb, s->coded_samples[ch], s->block_align, 1);
905
906         for (i = 0; i < s->block_align; i++)
907         {
908             for (j = 0; j < s->downsampling - 1; j++)
909             {
910                 s->int_samples[x] = predictor_calc_error(s->predictor_k, s->predictor_state[ch], s->num_taps, 0);
911                 x += s->channels;
912             }
913
914             s->int_samples[x] = predictor_calc_error(s->predictor_k, s->predictor_state[ch], s->num_taps, s->coded_samples[ch][i] * quant);
915             x += s->channels;
916         }
917
918         for (i = 0; i < s->num_taps; i++)
919             s->predictor_state[ch][i] = s->int_samples[s->frame_size - s->channels + ch - i*s->channels];
920     }
921
922     switch(s->decorrelation)
923     {
924         case MID_SIDE:
925             for (i = 0; i < s->frame_size; i += s->channels)
926             {
927                 s->int_samples[i+1] += shift(s->int_samples[i], 1);
928                 s->int_samples[i] -= s->int_samples[i+1];
929             }
930             break;
931         case LEFT_SIDE:
932             for (i = 0; i < s->frame_size; i += s->channels)
933                 s->int_samples[i+1] += s->int_samples[i];
934             break;
935         case RIGHT_SIDE:
936             for (i = 0; i < s->frame_size; i += s->channels)
937                 s->int_samples[i] += s->int_samples[i+1];
938             break;
939     }
940
941     if (!s->lossless)
942         for (i = 0; i < s->frame_size; i++)
943             s->int_samples[i] = shift(s->int_samples[i], SAMPLE_SHIFT);
944
945     // internal -> short
946     for (i = 0; i < s->frame_size; i++)
947         samples[i] = av_clip_int16(s->int_samples[i]);
948
949     align_get_bits(&gb);
950
951     *got_frame_ptr = 1;
952
953     return (get_bits_count(&gb)+7)/8;
954 }
955
956 AVCodec ff_sonic_decoder = {
957     .name           = "sonic",
958     .type           = AVMEDIA_TYPE_AUDIO,
959     .id             = AV_CODEC_ID_SONIC,
960     .priv_data_size = sizeof(SonicContext),
961     .init           = sonic_decode_init,
962     .close          = sonic_decode_close,
963     .decode         = sonic_decode_frame,
964     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_EXPERIMENTAL,
965     .long_name = NULL_IF_CONFIG_SMALL("Sonic"),
966 };
967 #endif /* CONFIG_SONIC_DECODER */
968
969 #if CONFIG_SONIC_ENCODER
970 AVCodec ff_sonic_encoder = {
971     .name           = "sonic",
972     .type           = AVMEDIA_TYPE_AUDIO,
973     .id             = AV_CODEC_ID_SONIC,
974     .priv_data_size = sizeof(SonicContext),
975     .init           = sonic_encode_init,
976     .encode2        = sonic_encode_frame,
977     .capabilities   = CODEC_CAP_EXPERIMENTAL,
978     .close          = sonic_encode_close,
979     .long_name = NULL_IF_CONFIG_SMALL("Sonic"),
980 };
981 #endif
982
983 #if CONFIG_SONIC_LS_ENCODER
984 AVCodec ff_sonic_ls_encoder = {
985     .name           = "sonicls",
986     .type           = AVMEDIA_TYPE_AUDIO,
987     .id             = AV_CODEC_ID_SONIC_LS,
988     .priv_data_size = sizeof(SonicContext),
989     .init           = sonic_encode_init,
990     .encode2        = sonic_encode_frame,
991     .capabilities   = CODEC_CAP_EXPERIMENTAL,
992     .close          = sonic_encode_close,
993     .long_name = NULL_IF_CONFIG_SMALL("Sonic lossless"),
994 };
995 #endif