fix issue 616 on roundup : decoding of short flac files
[ffmpeg.git] / libavcodec / flac.c
1 /*
2  * FLAC (Free Lossless Audio Codec) decoder
3  * Copyright (c) 2003 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
22 /**
23  * @file flac.c
24  * FLAC (Free Lossless Audio Codec) decoder
25  * @author Alex Beregszaszi
26  *
27  * For more information on the FLAC format, visit:
28  *  http://flac.sourceforge.net/
29  *
30  * This decoder can be used in 1 of 2 ways: Either raw FLAC data can be fed
31  * through, starting from the initial 'fLaC' signature; or by passing the
32  * 34-byte streaminfo structure through avctx->extradata[_size] followed
33  * by data starting with the 0xFFF8 marker.
34  */
35
36 #include <limits.h>
37
38 #define ALT_BITSTREAM_READER
39 #include "libavutil/crc.h"
40 #include "avcodec.h"
41 #include "bitstream.h"
42 #include "golomb.h"
43 #include "flac.h"
44
45 #undef NDEBUG
46 #include <assert.h>
47
48 #define MAX_CHANNELS 8
49 #define MAX_BLOCKSIZE 65535
50 #define FLAC_STREAMINFO_SIZE 34
51
52 enum decorrelation_type {
53     INDEPENDENT,
54     LEFT_SIDE,
55     RIGHT_SIDE,
56     MID_SIDE,
57 };
58
59 typedef struct FLACContext {
60     FLACSTREAMINFO
61
62     AVCodecContext *avctx;
63     GetBitContext gb;
64
65     int blocksize/*, last_blocksize*/;
66     int curr_bps;
67     enum decorrelation_type decorrelation;
68
69     int32_t *decoded[MAX_CHANNELS];
70     uint8_t *bitstream;
71     unsigned int bitstream_size;
72     unsigned int bitstream_index;
73     unsigned int allocated_bitstream_size;
74 } FLACContext;
75
76 #define METADATA_TYPE_STREAMINFO 0
77
78 static const int sample_rate_table[] =
79 { 0, 0, 0, 0,
80   8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000,
81   0, 0, 0, 0 };
82
83 static const int sample_size_table[] =
84 { 0, 8, 12, 0, 16, 20, 24, 0 };
85
86 static const int blocksize_table[] = {
87      0,    192, 576<<0, 576<<1, 576<<2, 576<<3,      0,      0,
88 256<<0, 256<<1, 256<<2, 256<<3, 256<<4, 256<<5, 256<<6, 256<<7
89 };
90
91 static int64_t get_utf8(GetBitContext *gb){
92     int64_t val;
93     GET_UTF8(val, get_bits(gb, 8), return -1;)
94     return val;
95 }
96
97 static void allocate_buffers(FLACContext *s);
98 static int metadata_parse(FLACContext *s);
99
100 static av_cold int flac_decode_init(AVCodecContext * avctx)
101 {
102     FLACContext *s = avctx->priv_data;
103     s->avctx = avctx;
104
105     if (avctx->extradata_size > 4) {
106         /* initialize based on the demuxer-supplied streamdata header */
107         if (avctx->extradata_size == FLAC_STREAMINFO_SIZE) {
108             ff_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, avctx->extradata);
109             allocate_buffers(s);
110         } else {
111             init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8);
112             metadata_parse(s);
113         }
114     }
115
116     avctx->sample_fmt = SAMPLE_FMT_S16;
117     return 0;
118 }
119
120 static void dump_headers(AVCodecContext *avctx, FLACStreaminfo *s)
121 {
122     av_log(avctx, AV_LOG_DEBUG, "  Blocksize: %d .. %d\n", s->min_blocksize, s->max_blocksize);
123     av_log(avctx, AV_LOG_DEBUG, "  Max Framesize: %d\n", s->max_framesize);
124     av_log(avctx, AV_LOG_DEBUG, "  Samplerate: %d\n", s->samplerate);
125     av_log(avctx, AV_LOG_DEBUG, "  Channels: %d\n", s->channels);
126     av_log(avctx, AV_LOG_DEBUG, "  Bits: %d\n", s->bps);
127 }
128
129 static void allocate_buffers(FLACContext *s){
130     int i;
131
132     assert(s->max_blocksize);
133
134     if(s->max_framesize == 0 && s->max_blocksize){
135         s->max_framesize= (s->channels * s->bps * s->max_blocksize + 7)/ 8; //FIXME header overhead
136     }
137
138     for (i = 0; i < s->channels; i++)
139     {
140         s->decoded[i] = av_realloc(s->decoded[i], sizeof(int32_t)*s->max_blocksize);
141     }
142
143     if(s->allocated_bitstream_size < s->max_framesize)
144         s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
145 }
146
147 void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
148                               const uint8_t *buffer)
149 {
150     GetBitContext gb;
151     init_get_bits(&gb, buffer, FLAC_STREAMINFO_SIZE*8);
152
153     /* mandatory streaminfo */
154     s->min_blocksize = get_bits(&gb, 16);
155     s->max_blocksize = get_bits(&gb, 16);
156
157     skip_bits(&gb, 24); /* skip min frame size */
158     s->max_framesize = get_bits_long(&gb, 24);
159
160     s->samplerate = get_bits_long(&gb, 20);
161     s->channels = get_bits(&gb, 3) + 1;
162     s->bps = get_bits(&gb, 5) + 1;
163
164     avctx->channels = s->channels;
165     avctx->sample_rate = s->samplerate;
166
167     skip_bits(&gb, 36); /* total num of samples */
168
169     skip_bits(&gb, 64); /* md5 sum */
170     skip_bits(&gb, 64); /* md5 sum */
171
172     dump_headers(avctx, s);
173 }
174
175 /**
176  * Parse a list of metadata blocks. This list of blocks must begin with
177  * the fLaC marker.
178  * @param s the flac decoding context containing the gb bit reader used to
179  *          parse metadata
180  * @return 1 if some metadata was read, 0 if no fLaC marker was found
181  */
182 static int metadata_parse(FLACContext *s)
183 {
184     int i, metadata_last, metadata_type, metadata_size, streaminfo_updated=0;
185     int initial_pos= get_bits_count(&s->gb);
186
187     if (show_bits_long(&s->gb, 32) == MKBETAG('f','L','a','C')) {
188         skip_bits(&s->gb, 32);
189
190         av_log(s->avctx, AV_LOG_DEBUG, "STREAM HEADER\n");
191         do {
192             metadata_last = get_bits1(&s->gb);
193             metadata_type = get_bits(&s->gb, 7);
194             metadata_size = get_bits_long(&s->gb, 24);
195
196             if(get_bits_count(&s->gb) + 8*metadata_size > s->gb.size_in_bits){
197                 skip_bits_long(&s->gb, initial_pos - get_bits_count(&s->gb));
198                 break;
199             }
200
201             av_log(s->avctx, AV_LOG_DEBUG,
202                    " metadata block: flag = %d, type = %d, size = %d\n",
203                    metadata_last, metadata_type, metadata_size);
204             if (metadata_size) {
205                 switch (metadata_type) {
206                 case METADATA_TYPE_STREAMINFO:
207                     ff_flac_parse_streaminfo(s->avctx, (FLACStreaminfo *)s, s->gb.buffer+get_bits_count(&s->gb)/8);
208                     streaminfo_updated = 1;
209
210                 default:
211                     for (i=0; i<metadata_size; i++)
212                         skip_bits(&s->gb, 8);
213                 }
214             }
215         } while (!metadata_last);
216
217         if (streaminfo_updated)
218             allocate_buffers(s);
219         return 1;
220     }
221     return 0;
222 }
223
224 static int decode_residuals(FLACContext *s, int channel, int pred_order)
225 {
226     int i, tmp, partition, method_type, rice_order;
227     int sample = 0, samples;
228
229     method_type = get_bits(&s->gb, 2);
230     if (method_type > 1){
231         av_log(s->avctx, AV_LOG_DEBUG, "illegal residual coding method %d\n", method_type);
232         return -1;
233     }
234
235     rice_order = get_bits(&s->gb, 4);
236
237     samples= s->blocksize >> rice_order;
238     if (pred_order > samples) {
239         av_log(s->avctx, AV_LOG_ERROR, "invalid predictor order: %i > %i\n", pred_order, samples);
240         return -1;
241     }
242
243     sample=
244     i= pred_order;
245     for (partition = 0; partition < (1 << rice_order); partition++)
246     {
247         tmp = get_bits(&s->gb, method_type == 0 ? 4 : 5);
248         if (tmp == (method_type == 0 ? 15 : 31))
249         {
250             av_log(s->avctx, AV_LOG_DEBUG, "fixed len partition\n");
251             tmp = get_bits(&s->gb, 5);
252             for (; i < samples; i++, sample++)
253                 s->decoded[channel][sample] = get_sbits(&s->gb, tmp);
254         }
255         else
256         {
257 //            av_log(s->avctx, AV_LOG_DEBUG, "rice coded partition k=%d\n", tmp);
258             for (; i < samples; i++, sample++){
259                 s->decoded[channel][sample] = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0);
260             }
261         }
262         i= 0;
263     }
264
265 //    av_log(s->avctx, AV_LOG_DEBUG, "partitions: %d, samples: %d\n", 1 << rice_order, sample);
266
267     return 0;
268 }
269
270 static int decode_subframe_fixed(FLACContext *s, int channel, int pred_order)
271 {
272     const int blocksize = s->blocksize;
273     int32_t *decoded = s->decoded[channel];
274     int a, b, c, d, i;
275
276 //    av_log(s->avctx, AV_LOG_DEBUG, "  SUBFRAME FIXED\n");
277
278     /* warm up samples */
279 //    av_log(s->avctx, AV_LOG_DEBUG, "   warm up samples: %d\n", pred_order);
280
281     for (i = 0; i < pred_order; i++)
282     {
283         decoded[i] = get_sbits(&s->gb, s->curr_bps);
284 //        av_log(s->avctx, AV_LOG_DEBUG, "    %d: %d\n", i, s->decoded[channel][i]);
285     }
286
287     if (decode_residuals(s, channel, pred_order) < 0)
288         return -1;
289
290     if(pred_order > 0)
291         a = decoded[pred_order-1];
292     if(pred_order > 1)
293         b = a - decoded[pred_order-2];
294     if(pred_order > 2)
295         c = b - decoded[pred_order-2] + decoded[pred_order-3];
296     if(pred_order > 3)
297         d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
298
299     switch(pred_order)
300     {
301         case 0:
302             break;
303         case 1:
304             for (i = pred_order; i < blocksize; i++)
305                 decoded[i] = a += decoded[i];
306             break;
307         case 2:
308             for (i = pred_order; i < blocksize; i++)
309                 decoded[i] = a += b += decoded[i];
310             break;
311         case 3:
312             for (i = pred_order; i < blocksize; i++)
313                 decoded[i] = a += b += c += decoded[i];
314             break;
315         case 4:
316             for (i = pred_order; i < blocksize; i++)
317                 decoded[i] = a += b += c += d += decoded[i];
318             break;
319         default:
320             av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
321             return -1;
322     }
323
324     return 0;
325 }
326
327 static int decode_subframe_lpc(FLACContext *s, int channel, int pred_order)
328 {
329     int i, j;
330     int coeff_prec, qlevel;
331     int coeffs[pred_order];
332     int32_t *decoded = s->decoded[channel];
333
334 //    av_log(s->avctx, AV_LOG_DEBUG, "  SUBFRAME LPC\n");
335
336     /* warm up samples */
337 //    av_log(s->avctx, AV_LOG_DEBUG, "   warm up samples: %d\n", pred_order);
338
339     for (i = 0; i < pred_order; i++)
340     {
341         decoded[i] = get_sbits(&s->gb, s->curr_bps);
342 //        av_log(s->avctx, AV_LOG_DEBUG, "    %d: %d\n", i, decoded[i]);
343     }
344
345     coeff_prec = get_bits(&s->gb, 4) + 1;
346     if (coeff_prec == 16)
347     {
348         av_log(s->avctx, AV_LOG_DEBUG, "invalid coeff precision\n");
349         return -1;
350     }
351 //    av_log(s->avctx, AV_LOG_DEBUG, "   qlp coeff prec: %d\n", coeff_prec);
352     qlevel = get_sbits(&s->gb, 5);
353 //    av_log(s->avctx, AV_LOG_DEBUG, "   quant level: %d\n", qlevel);
354     if(qlevel < 0){
355         av_log(s->avctx, AV_LOG_DEBUG, "qlevel %d not supported, maybe buggy stream\n", qlevel);
356         return -1;
357     }
358
359     for (i = 0; i < pred_order; i++)
360     {
361         coeffs[i] = get_sbits(&s->gb, coeff_prec);
362 //        av_log(s->avctx, AV_LOG_DEBUG, "    %d: %d\n", i, coeffs[i]);
363     }
364
365     if (decode_residuals(s, channel, pred_order) < 0)
366         return -1;
367
368     if (s->bps > 16) {
369         int64_t sum;
370         for (i = pred_order; i < s->blocksize; i++)
371         {
372             sum = 0;
373             for (j = 0; j < pred_order; j++)
374                 sum += (int64_t)coeffs[j] * decoded[i-j-1];
375             decoded[i] += sum >> qlevel;
376         }
377     } else {
378         for (i = pred_order; i < s->blocksize-1; i += 2)
379         {
380             int c;
381             int d = decoded[i-pred_order];
382             int s0 = 0, s1 = 0;
383             for (j = pred_order-1; j > 0; j--)
384             {
385                 c = coeffs[j];
386                 s0 += c*d;
387                 d = decoded[i-j];
388                 s1 += c*d;
389             }
390             c = coeffs[0];
391             s0 += c*d;
392             d = decoded[i] += s0 >> qlevel;
393             s1 += c*d;
394             decoded[i+1] += s1 >> qlevel;
395         }
396         if (i < s->blocksize)
397         {
398             int sum = 0;
399             for (j = 0; j < pred_order; j++)
400                 sum += coeffs[j] * decoded[i-j-1];
401             decoded[i] += sum >> qlevel;
402         }
403     }
404
405     return 0;
406 }
407
408 static inline int decode_subframe(FLACContext *s, int channel)
409 {
410     int type, wasted = 0;
411     int i, tmp;
412
413     s->curr_bps = s->bps;
414     if(channel == 0){
415         if(s->decorrelation == RIGHT_SIDE)
416             s->curr_bps++;
417     }else{
418         if(s->decorrelation == LEFT_SIDE || s->decorrelation == MID_SIDE)
419             s->curr_bps++;
420     }
421
422     if (get_bits1(&s->gb))
423     {
424         av_log(s->avctx, AV_LOG_ERROR, "invalid subframe padding\n");
425         return -1;
426     }
427     type = get_bits(&s->gb, 6);
428 //    wasted = get_bits1(&s->gb);
429
430 //    if (wasted)
431 //    {
432 //        while (!get_bits1(&s->gb))
433 //            wasted++;
434 //        if (wasted)
435 //            wasted++;
436 //        s->curr_bps -= wasted;
437 //    }
438 #if 0
439     wasted= 16 - av_log2(show_bits(&s->gb, 17));
440     skip_bits(&s->gb, wasted+1);
441     s->curr_bps -= wasted;
442 #else
443     if (get_bits1(&s->gb))
444     {
445         wasted = 1;
446         while (!get_bits1(&s->gb))
447             wasted++;
448         s->curr_bps -= wasted;
449         av_log(s->avctx, AV_LOG_DEBUG, "%d wasted bits\n", wasted);
450     }
451 #endif
452 //FIXME use av_log2 for types
453     if (type == 0)
454     {
455         av_log(s->avctx, AV_LOG_DEBUG, "coding type: constant\n");
456         tmp = get_sbits(&s->gb, s->curr_bps);
457         for (i = 0; i < s->blocksize; i++)
458             s->decoded[channel][i] = tmp;
459     }
460     else if (type == 1)
461     {
462         av_log(s->avctx, AV_LOG_DEBUG, "coding type: verbatim\n");
463         for (i = 0; i < s->blocksize; i++)
464             s->decoded[channel][i] = get_sbits(&s->gb, s->curr_bps);
465     }
466     else if ((type >= 8) && (type <= 12))
467     {
468 //        av_log(s->avctx, AV_LOG_DEBUG, "coding type: fixed\n");
469         if (decode_subframe_fixed(s, channel, type & ~0x8) < 0)
470             return -1;
471     }
472     else if (type >= 32)
473     {
474 //        av_log(s->avctx, AV_LOG_DEBUG, "coding type: lpc\n");
475         if (decode_subframe_lpc(s, channel, (type & ~0x20)+1) < 0)
476             return -1;
477     }
478     else
479     {
480         av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n");
481         return -1;
482     }
483
484     if (wasted)
485     {
486         int i;
487         for (i = 0; i < s->blocksize; i++)
488             s->decoded[channel][i] <<= wasted;
489     }
490
491     return 0;
492 }
493
494 static int decode_frame(FLACContext *s, int alloc_data_size)
495 {
496     int blocksize_code, sample_rate_code, sample_size_code, assignment, i, crc8;
497     int decorrelation, bps, blocksize, samplerate;
498
499     blocksize_code = get_bits(&s->gb, 4);
500
501     sample_rate_code = get_bits(&s->gb, 4);
502
503     assignment = get_bits(&s->gb, 4); /* channel assignment */
504     if (assignment < 8 && s->channels == assignment+1)
505         decorrelation = INDEPENDENT;
506     else if (assignment >=8 && assignment < 11 && s->channels == 2)
507         decorrelation = LEFT_SIDE + assignment - 8;
508     else
509     {
510         av_log(s->avctx, AV_LOG_ERROR, "unsupported channel assignment %d (channels=%d)\n", assignment, s->channels);
511         return -1;
512     }
513
514     sample_size_code = get_bits(&s->gb, 3);
515     if(sample_size_code == 0)
516         bps= s->bps;
517     else if((sample_size_code != 3) && (sample_size_code != 7))
518         bps = sample_size_table[sample_size_code];
519     else
520     {
521         av_log(s->avctx, AV_LOG_ERROR, "invalid sample size code (%d)\n", sample_size_code);
522         return -1;
523     }
524
525     if (get_bits1(&s->gb))
526     {
527         av_log(s->avctx, AV_LOG_ERROR, "broken stream, invalid padding\n");
528         return -1;
529     }
530
531     if(get_utf8(&s->gb) < 0){
532         av_log(s->avctx, AV_LOG_ERROR, "utf8 fscked\n");
533         return -1;
534     }
535 #if 0
536     if (/*((blocksize_code == 6) || (blocksize_code == 7)) &&*/
537         (s->min_blocksize != s->max_blocksize)){
538     }else{
539     }
540 #endif
541
542     if (blocksize_code == 0)
543         blocksize = s->min_blocksize;
544     else if (blocksize_code == 6)
545         blocksize = get_bits(&s->gb, 8)+1;
546     else if (blocksize_code == 7)
547         blocksize = get_bits(&s->gb, 16)+1;
548     else
549         blocksize = blocksize_table[blocksize_code];
550
551     if(blocksize > s->max_blocksize){
552         av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", blocksize, s->max_blocksize);
553         return -1;
554     }
555
556     if(blocksize * s->channels * sizeof(int16_t) > alloc_data_size)
557         return -1;
558
559     if (sample_rate_code == 0){
560         samplerate= s->samplerate;
561     }else if ((sample_rate_code > 3) && (sample_rate_code < 12))
562         samplerate = sample_rate_table[sample_rate_code];
563     else if (sample_rate_code == 12)
564         samplerate = get_bits(&s->gb, 8) * 1000;
565     else if (sample_rate_code == 13)
566         samplerate = get_bits(&s->gb, 16);
567     else if (sample_rate_code == 14)
568         samplerate = get_bits(&s->gb, 16) * 10;
569     else{
570         av_log(s->avctx, AV_LOG_ERROR, "illegal sample rate code %d\n", sample_rate_code);
571         return -1;
572     }
573
574     skip_bits(&s->gb, 8);
575     crc8 = av_crc(av_crc_get_table(AV_CRC_8_ATM), 0,
576                   s->gb.buffer, get_bits_count(&s->gb)/8);
577     if(crc8){
578         av_log(s->avctx, AV_LOG_ERROR, "header crc mismatch crc=%2X\n", crc8);
579         return -1;
580     }
581
582     s->blocksize    = blocksize;
583     s->samplerate   = samplerate;
584     s->bps          = bps;
585     s->decorrelation= decorrelation;
586
587 //    dump_headers(s->avctx, (FLACStreaminfo *)s);
588
589     /* subframes */
590     for (i = 0; i < s->channels; i++)
591     {
592 //        av_log(s->avctx, AV_LOG_DEBUG, "decoded: %x residual: %x\n", s->decoded[i], s->residual[i]);
593         if (decode_subframe(s, i) < 0)
594             return -1;
595     }
596
597     align_get_bits(&s->gb);
598
599     /* frame footer */
600     skip_bits(&s->gb, 16); /* data crc */
601
602     return 0;
603 }
604
605 static int flac_decode_frame(AVCodecContext *avctx,
606                             void *data, int *data_size,
607                             const uint8_t *buf, int buf_size)
608 {
609     FLACContext *s = avctx->priv_data;
610     int tmp = 0, i, j = 0, input_buf_size = 0;
611     int16_t *samples = data;
612     int alloc_data_size= *data_size;
613
614     *data_size=0;
615
616     if(s->max_framesize == 0){
617         s->max_framesize= FFMAX(4, buf_size); // should hopefully be enough for the first header
618         s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
619     }
620
621     if(1 && s->max_framesize){//FIXME truncated
622             if(s->bitstream_size < 4 || AV_RL32(s->bitstream) != MKTAG('f','L','a','C'))
623                 buf_size= FFMIN(buf_size, s->max_framesize - FFMIN(s->bitstream_size, s->max_framesize));
624             input_buf_size= buf_size;
625
626             if(s->bitstream_size + buf_size < buf_size || s->bitstream_index + s->bitstream_size + buf_size < s->bitstream_index)
627                 return -1;
628
629             if(s->allocated_bitstream_size < s->bitstream_size + buf_size)
630                 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->bitstream_size + buf_size);
631
632             if(s->bitstream_index + s->bitstream_size + buf_size > s->allocated_bitstream_size){
633 //                printf("memmove\n");
634                 memmove(s->bitstream, &s->bitstream[s->bitstream_index], s->bitstream_size);
635                 s->bitstream_index=0;
636             }
637             memcpy(&s->bitstream[s->bitstream_index + s->bitstream_size], buf, buf_size);
638             buf= &s->bitstream[s->bitstream_index];
639             buf_size += s->bitstream_size;
640             s->bitstream_size= buf_size;
641
642             if(buf_size < s->max_framesize && input_buf_size){
643 //                printf("wanna more data ...\n");
644                 return input_buf_size;
645             }
646     }
647
648     init_get_bits(&s->gb, buf, buf_size*8);
649
650     if(metadata_parse(s))
651         goto end;
652
653         tmp = show_bits(&s->gb, 16);
654         if((tmp & 0xFFFE) != 0xFFF8){
655             av_log(s->avctx, AV_LOG_ERROR, "FRAME HEADER not here\n");
656             while(get_bits_count(&s->gb)/8+2 < buf_size && (show_bits(&s->gb, 16) & 0xFFFE) != 0xFFF8)
657                 skip_bits(&s->gb, 8);
658             goto end; // we may not have enough bits left to decode a frame, so try next time
659         }
660         skip_bits(&s->gb, 16);
661         if (decode_frame(s, alloc_data_size) < 0){
662             av_log(s->avctx, AV_LOG_ERROR, "decode_frame() failed\n");
663             s->bitstream_size=0;
664             s->bitstream_index=0;
665             return -1;
666         }
667
668
669 #if 0
670     /* fix the channel order here */
671     if (s->order == MID_SIDE)
672     {
673         short *left = samples;
674         short *right = samples + s->blocksize;
675         for (i = 0; i < s->blocksize; i += 2)
676         {
677             uint32_t x = s->decoded[0][i];
678             uint32_t y = s->decoded[0][i+1];
679
680             right[i] = x - (y / 2);
681             left[i] = right[i] + y;
682         }
683         *data_size = 2 * s->blocksize;
684     }
685     else
686     {
687     for (i = 0; i < s->channels; i++)
688     {
689         switch(s->order)
690         {
691             case INDEPENDENT:
692                 for (j = 0; j < s->blocksize; j++)
693                     samples[(s->blocksize*i)+j] = s->decoded[i][j];
694                 break;
695             case LEFT_SIDE:
696             case RIGHT_SIDE:
697                 if (i == 0)
698                     for (j = 0; j < s->blocksize; j++)
699                         samples[(s->blocksize*i)+j] = s->decoded[0][j];
700                 else
701                     for (j = 0; j < s->blocksize; j++)
702                         samples[(s->blocksize*i)+j] = s->decoded[0][j] - s->decoded[i][j];
703                 break;
704 //            case MID_SIDE:
705 //                av_log(s->avctx, AV_LOG_DEBUG, "mid-side unsupported\n");
706         }
707         *data_size += s->blocksize;
708     }
709     }
710 #else
711 #define DECORRELATE(left, right)\
712             assert(s->channels == 2);\
713             for (i = 0; i < s->blocksize; i++)\
714             {\
715                 int a= s->decoded[0][i];\
716                 int b= s->decoded[1][i];\
717                 *samples++ = ((left)  << (24 - s->bps)) >> 8;\
718                 *samples++ = ((right) << (24 - s->bps)) >> 8;\
719             }\
720             break;
721
722     switch(s->decorrelation)
723     {
724         case INDEPENDENT:
725             for (j = 0; j < s->blocksize; j++)
726             {
727                 for (i = 0; i < s->channels; i++)
728                     *samples++ = (s->decoded[i][j] << (24 - s->bps)) >> 8;
729             }
730             break;
731         case LEFT_SIDE:
732             DECORRELATE(a,a-b)
733         case RIGHT_SIDE:
734             DECORRELATE(a+b,b)
735         case MID_SIDE:
736             DECORRELATE( (a-=b>>1) + b, a)
737     }
738 #endif
739
740     *data_size = (int8_t *)samples - (int8_t *)data;
741 //    av_log(s->avctx, AV_LOG_DEBUG, "data size: %d\n", *data_size);
742
743 //    s->last_blocksize = s->blocksize;
744 end:
745     i= (get_bits_count(&s->gb)+7)/8;
746     if(i > buf_size){
747         av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", i - buf_size);
748         s->bitstream_size=0;
749         s->bitstream_index=0;
750         return -1;
751     }
752
753     if(s->bitstream_size){
754         s->bitstream_index += i;
755         s->bitstream_size  -= i;
756         return input_buf_size;
757     }else
758         return i;
759 }
760
761 static av_cold int flac_decode_close(AVCodecContext *avctx)
762 {
763     FLACContext *s = avctx->priv_data;
764     int i;
765
766     for (i = 0; i < s->channels; i++)
767     {
768         av_freep(&s->decoded[i]);
769     }
770     av_freep(&s->bitstream);
771
772     return 0;
773 }
774
775 static void flac_flush(AVCodecContext *avctx){
776     FLACContext *s = avctx->priv_data;
777
778     s->bitstream_size=
779     s->bitstream_index= 0;
780 }
781
782 AVCodec flac_decoder = {
783     "flac",
784     CODEC_TYPE_AUDIO,
785     CODEC_ID_FLAC,
786     sizeof(FLACContext),
787     flac_decode_init,
788     NULL,
789     flac_decode_close,
790     flac_decode_frame,
791     CODEC_CAP_DELAY,
792     .flush= flac_flush,
793     .long_name= NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
794 };