2 * FLAC (Free Lossless Audio Codec) decoder
3 * Copyright (c) 2003 Alex Beregszaszi
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 * FLAC (Free Lossless Audio Codec) decoder
23 * @author Alex Beregszaszi
34 #define MAX_CHANNELS 8
35 #define MAX_BLOCKSIZE 65535
37 enum decorrelation_type {
44 typedef struct FLACContext {
45 AVCodecContext *avctx;
48 int min_blocksize, max_blocksize;
49 int min_framesize, max_framesize;
50 int samplerate, channels;
51 int blocksize/*, last_blocksize*/;
53 enum decorrelation_type decorrelation;
55 int32_t *decoded[MAX_CHANNELS];
59 int allocated_bitstream_size;
62 #define METADATA_TYPE_STREAMINFO 0
64 static int sample_rate_table[] =
66 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000,
69 static int sample_size_table[] =
70 { 0, 8, 12, 0, 16, 20, 24, 0 };
72 static int blocksize_table[] = {
73 0, 192, 576<<0, 576<<1, 576<<2, 576<<3, 0, 0,
74 256<<0, 256<<1, 256<<2, 256<<3, 256<<4, 256<<5, 256<<6, 256<<7
77 static const uint8_t table_crc8[256] = {
78 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15,
79 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
80 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
81 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
82 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5,
83 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
84 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85,
85 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
86 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
87 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
88 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2,
89 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
90 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32,
91 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
92 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
93 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
94 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c,
95 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
96 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec,
97 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
98 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
99 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
100 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c,
101 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
102 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b,
103 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63,
104 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
105 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
106 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb,
107 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
108 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb,
109 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
112 static int64_t get_utf8(GetBitContext *gb)
120 if (ones==0) bytes=0;
121 else if(ones==1) return -1;
122 else bytes= ones - 1;
124 val= get_bits(gb, 7-ones);
126 const int tmp = get_bits(gb, 8);
136 static int get_crc8(uint8_t *buf, int count){
140 for(i=0; i<count; i++){
141 crc = table_crc8[crc ^ buf[i]];
147 static int flac_decode_init(AVCodecContext * avctx)
152 static void dump_headers(FLACContext *s)
154 av_log(s->avctx, AV_LOG_DEBUG, " Blocksize: %d .. %d (%d)\n", s->min_blocksize, s->max_blocksize, s->blocksize);
155 av_log(s->avctx, AV_LOG_DEBUG, " Framesize: %d .. %d\n", s->min_framesize, s->max_framesize);
156 av_log(s->avctx, AV_LOG_DEBUG, " Samplerate: %d\n", s->samplerate);
157 av_log(s->avctx, AV_LOG_DEBUG, " Channels: %d\n", s->channels);
158 av_log(s->avctx, AV_LOG_DEBUG, " Bits: %d\n", s->bps);
161 static void allocate_buffers(FLACContext *s){
164 assert(s->max_blocksize);
166 if(s->max_framesize == 0 && s->max_blocksize){
167 s->max_framesize= (s->channels * s->bps * s->max_blocksize + 7)/ 8; //FIXME header overhead
170 for (i = 0; i < s->channels; i++)
172 s->decoded[i] = av_realloc(s->decoded[i], sizeof(int32_t)*s->max_blocksize);
175 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
178 static void metadata_streaminfo(FLACContext *s)
180 /* mandatory streaminfo */
181 s->min_blocksize = get_bits(&s->gb, 16);
182 s->max_blocksize = get_bits(&s->gb, 16);
184 s->min_framesize = get_bits_long(&s->gb, 24);
185 s->max_framesize = get_bits_long(&s->gb, 24);
187 s->samplerate = get_bits_long(&s->gb, 20);
188 s->channels = get_bits(&s->gb, 3) + 1;
189 s->bps = get_bits(&s->gb, 5) + 1;
191 s->avctx->channels = s->channels;
192 s->avctx->sample_rate = s->samplerate;
194 skip_bits(&s->gb, 36); /* total num of samples */
196 skip_bits(&s->gb, 64); /* md5 sum */
197 skip_bits(&s->gb, 64); /* md5 sum */
202 static int decode_residuals(FLACContext *s, int channel, int pred_order)
204 int i, tmp, partition, method_type, rice_order;
205 int sample = 0, samples;
207 method_type = get_bits(&s->gb, 2);
208 if (method_type != 0){
209 av_log(s->avctx, AV_LOG_DEBUG, "illegal residual coding method %d\n", method_type);
213 rice_order = get_bits(&s->gb, 4);
215 samples= s->blocksize >> rice_order;
219 for (partition = 0; partition < (1 << rice_order); partition++)
221 tmp = get_bits(&s->gb, 4);
224 av_log(s->avctx, AV_LOG_DEBUG, "fixed len partition\n");
225 tmp = get_bits(&s->gb, 5);
226 for (; i < samples; i++, sample++)
227 s->decoded[channel][sample] = get_sbits(&s->gb, tmp);
231 // av_log(s->avctx, AV_LOG_DEBUG, "rice coded partition k=%d\n", tmp);
232 for (; i < samples; i++, sample++){
233 s->decoded[channel][sample] = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0);
239 // av_log(s->avctx, AV_LOG_DEBUG, "partitions: %d, samples: %d\n", 1 << rice_order, sample);
244 static int decode_subframe_fixed(FLACContext *s, int channel, int pred_order)
248 // av_log(s->avctx, AV_LOG_DEBUG, " SUBFRAME FIXED\n");
250 /* warm up samples */
251 // av_log(s->avctx, AV_LOG_DEBUG, " warm up samples: %d\n", pred_order);
253 for (i = 0; i < pred_order; i++)
255 s->decoded[channel][i] = get_sbits(&s->gb, s->curr_bps);
256 // av_log(s->avctx, AV_LOG_DEBUG, " %d: %d\n", i, s->decoded[channel][i]);
259 if (decode_residuals(s, channel, pred_order) < 0)
267 for (i = pred_order; i < s->blocksize; i++)
268 s->decoded[channel][i] += s->decoded[channel][i-1];
271 for (i = pred_order; i < s->blocksize; i++)
272 s->decoded[channel][i] += 2*s->decoded[channel][i-1]
273 - s->decoded[channel][i-2];
276 for (i = pred_order; i < s->blocksize; i++)
277 s->decoded[channel][i] += 3*s->decoded[channel][i-1]
278 - 3*s->decoded[channel][i-2]
279 + s->decoded[channel][i-3];
282 for (i = pred_order; i < s->blocksize; i++)
283 s->decoded[channel][i] += 4*s->decoded[channel][i-1]
284 - 6*s->decoded[channel][i-2]
285 + 4*s->decoded[channel][i-3]
286 - s->decoded[channel][i-4];
289 av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
296 static int decode_subframe_lpc(FLACContext *s, int channel, int pred_order)
299 int coeff_prec, qlevel;
300 int coeffs[pred_order];
302 // av_log(s->avctx, AV_LOG_DEBUG, " SUBFRAME LPC\n");
304 /* warm up samples */
305 // av_log(s->avctx, AV_LOG_DEBUG, " warm up samples: %d\n", pred_order);
307 for (i = 0; i < pred_order; i++)
309 s->decoded[channel][i] = get_sbits(&s->gb, s->curr_bps);
310 // av_log(s->avctx, AV_LOG_DEBUG, " %d: %d\n", i, s->decoded[channel][i]);
313 coeff_prec = get_bits(&s->gb, 4) + 1;
314 if (coeff_prec == 16)
316 av_log(s->avctx, AV_LOG_DEBUG, "invalid coeff precision\n");
319 // av_log(s->avctx, AV_LOG_DEBUG, " qlp coeff prec: %d\n", coeff_prec);
320 qlevel = get_sbits(&s->gb, 5);
321 // av_log(s->avctx, AV_LOG_DEBUG, " quant level: %d\n", qlevel);
323 av_log(s->avctx, AV_LOG_DEBUG, "qlevel %d not supported, maybe buggy stream\n", qlevel);
327 for (i = 0; i < pred_order; i++)
329 coeffs[i] = get_sbits(&s->gb, coeff_prec);
330 // av_log(s->avctx, AV_LOG_DEBUG, " %d: %d\n", i, coeffs[i]);
333 if (decode_residuals(s, channel, pred_order) < 0)
336 for (i = pred_order; i < s->blocksize; i++)
339 for (j = 0; j < pred_order; j++)
340 sum += coeffs[j] * s->decoded[channel][i-j-1];
341 s->decoded[channel][i] += sum >> qlevel;
347 static inline int decode_subframe(FLACContext *s, int channel)
349 int type, wasted = 0;
352 s->curr_bps = s->bps;
354 if(s->decorrelation == RIGHT_SIDE)
357 if(s->decorrelation == LEFT_SIDE || s->decorrelation == MID_SIDE)
361 if (get_bits1(&s->gb))
363 av_log(s->avctx, AV_LOG_DEBUG, "invalid subframe padding\n");
366 type = get_bits(&s->gb, 6);
367 // wasted = get_bits1(&s->gb);
371 // while (!get_bits1(&s->gb))
375 // s->curr_bps -= wasted;
378 wasted= 16 - av_log2(show_bits(&s->gb, 17));
379 skip_bits(&s->gb, wasted+1);
380 s->curr_bps -= wasted;
382 if (get_bits1(&s->gb))
385 while (!get_bits1(&s->gb))
387 s->curr_bps -= wasted;
388 av_log(s->avctx, AV_LOG_DEBUG, "%d wasted bits\n", wasted);
391 //FIXME use av_log2 for types
394 av_log(s->avctx, AV_LOG_DEBUG, "coding type: constant\n");
395 tmp = get_sbits(&s->gb, s->curr_bps);
396 for (i = 0; i < s->blocksize; i++)
397 s->decoded[channel][i] = tmp;
401 av_log(s->avctx, AV_LOG_DEBUG, "coding type: verbatim\n");
402 for (i = 0; i < s->blocksize; i++)
403 s->decoded[channel][i] = get_sbits(&s->gb, s->curr_bps);
405 else if ((type >= 8) && (type <= 12))
407 // av_log(s->avctx, AV_LOG_DEBUG, "coding type: fixed\n");
408 if (decode_subframe_fixed(s, channel, type & ~0x8) < 0)
413 // av_log(s->avctx, AV_LOG_DEBUG, "coding type: lpc\n");
414 if (decode_subframe_lpc(s, channel, (type & ~0x20)+1) < 0)
419 av_log(s->avctx, AV_LOG_DEBUG, "invalid coding type\n");
426 for (i = 0; i < s->blocksize; i++)
427 s->decoded[channel][i] <<= wasted;
433 static int decode_frame(FLACContext *s)
435 int blocksize_code, sample_rate_code, sample_size_code, assignment, i, crc8;
436 int decorrelation, bps, blocksize, samplerate;
438 blocksize_code = get_bits(&s->gb, 4);
440 sample_rate_code = get_bits(&s->gb, 4);
442 assignment = get_bits(&s->gb, 4); /* channel assignment */
443 if (assignment < 8 && s->channels == assignment+1)
444 decorrelation = INDEPENDENT;
445 else if (assignment >=8 && assignment < 11 && s->channels == 2)
446 decorrelation = LEFT_SIDE + assignment - 8;
449 av_log(s->avctx, AV_LOG_DEBUG, "unsupported channel assignment %d (channels=%d)\n", assignment, s->channels);
453 sample_size_code = get_bits(&s->gb, 3);
454 if(sample_size_code == 0)
456 else if((sample_size_code != 3) && (sample_size_code != 7))
457 bps = sample_size_table[sample_size_code];
460 av_log(s->avctx, AV_LOG_DEBUG, "invalid sample size code (%d)\n", sample_size_code);
464 if (get_bits1(&s->gb))
466 av_log(s->avctx, AV_LOG_DEBUG, "broken stream, invalid padding\n");
470 if(get_utf8(&s->gb) < 0){
471 av_log(s->avctx, AV_LOG_ERROR, "utf8 fscked\n");
475 if (/*((blocksize_code == 6) || (blocksize_code == 7)) &&*/
476 (s->min_blocksize != s->max_blocksize)){
481 if (blocksize_code == 0)
482 blocksize = s->min_blocksize;
483 else if (blocksize_code == 6)
484 blocksize = get_bits(&s->gb, 8)+1;
485 else if (blocksize_code == 7)
486 blocksize = get_bits(&s->gb, 16)+1;
488 blocksize = blocksize_table[blocksize_code];
490 if(blocksize > s->max_blocksize){
491 av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", blocksize, s->max_blocksize);
495 if (sample_rate_code == 0){
496 samplerate= s->samplerate;
497 }else if ((sample_rate_code > 3) && (sample_rate_code < 12))
498 samplerate = sample_rate_table[sample_rate_code];
499 else if (sample_rate_code == 12)
500 samplerate = get_bits(&s->gb, 8) * 1000;
501 else if (sample_rate_code == 13)
502 samplerate = get_bits(&s->gb, 16);
503 else if (sample_rate_code == 14)
504 samplerate = get_bits(&s->gb, 16) * 10;
506 av_log(s->avctx, AV_LOG_ERROR, "illegal sample rate code %d\n", sample_rate_code);
510 skip_bits(&s->gb, 8);
511 crc8= get_crc8(s->gb.buffer, get_bits_count(&s->gb)/8);
513 av_log(s->avctx, AV_LOG_ERROR, "header crc missmatch crc=%2X\n", crc8);
517 s->blocksize = blocksize;
518 s->samplerate = samplerate;
520 s->decorrelation= decorrelation;
525 for (i = 0; i < s->channels; i++)
527 // av_log(s->avctx, AV_LOG_DEBUG, "decoded: %x residual: %x\n", s->decoded[i], s->residual[i]);
528 if (decode_subframe(s, i) < 0)
532 align_get_bits(&s->gb);
535 skip_bits(&s->gb, 16); /* data crc */
540 static int flac_decode_frame(AVCodecContext *avctx,
541 void *data, int *data_size,
542 uint8_t *buf, int buf_size)
544 FLACContext *s = avctx->priv_data;
545 int metadata_last, metadata_type, metadata_size;
546 int tmp = 0, i, j = 0, input_buf_size;
547 int16_t *samples = data, *left, *right;
553 if(s->max_framesize == 0){
554 s->max_framesize= 8192; // should hopefully be enough for the first header
555 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
558 if(1 && s->max_framesize){//FIXME truncated
559 buf_size= FFMIN(buf_size, s->max_framesize - s->bitstream_size);
560 input_buf_size= buf_size;
562 if(s->bitstream_index + s->bitstream_size + buf_size > s->allocated_bitstream_size){
563 // printf("memmove\n");
564 memmove(s->bitstream, &s->bitstream[s->bitstream_index], s->bitstream_size);
565 s->bitstream_index=0;
567 memcpy(&s->bitstream[s->bitstream_index + s->bitstream_size], buf, buf_size);
568 buf= &s->bitstream[s->bitstream_index];
569 buf_size += s->bitstream_size;
570 s->bitstream_size= buf_size;
572 if(buf_size < s->max_framesize){
573 // printf("wanna more data ...\n");
574 return input_buf_size;
578 init_get_bits(&s->gb, buf, buf_size*8);
580 /* fLaC signature (be) */
581 if (show_bits_long(&s->gb, 32) == bswap_32(ff_get_fourcc("fLaC")))
583 skip_bits(&s->gb, 32);
585 av_log(s->avctx, AV_LOG_DEBUG, "STREAM HEADER\n");
587 metadata_last = get_bits(&s->gb, 1);
588 metadata_type = get_bits(&s->gb, 7);
589 metadata_size = get_bits_long(&s->gb, 24);
591 av_log(s->avctx, AV_LOG_DEBUG, " metadata block: flag = %d, type = %d, size = %d\n",
592 metadata_last, metadata_type,
595 switch(metadata_type)
597 case METADATA_TYPE_STREAMINFO:
598 metadata_streaminfo(s);
602 for(i=0; i<metadata_size; i++)
603 skip_bits(&s->gb, 8);
606 } while(!metadata_last);
611 tmp = show_bits(&s->gb, 16);
613 av_log(s->avctx, AV_LOG_ERROR, "FRAME HEADER not here\n");
614 while(get_bits_count(&s->gb)/8+2 < buf_size && show_bits(&s->gb, 16) != 0xFFF8)
615 skip_bits(&s->gb, 8);
616 goto end; // we may not have enough bits left to decode a frame, so try next time
618 skip_bits(&s->gb, 16);
619 if (decode_frame(s) < 0){
620 av_log(s->avctx, AV_LOG_ERROR, "decode_frame() failed\n");
622 s->bitstream_index=0;
629 /* fix the channel order here */
630 if (s->order == MID_SIDE)
632 short *left = samples;
633 short *right = samples + s->blocksize;
634 for (i = 0; i < s->blocksize; i += 2)
636 uint32_t x = s->decoded[0][i];
637 uint32_t y = s->decoded[0][i+1];
639 right[i] = x - (y / 2);
640 left[i] = right[i] + y;
642 *data_size = 2 * s->blocksize;
646 for (i = 0; i < s->channels; i++)
651 for (j = 0; j < s->blocksize; j++)
652 samples[(s->blocksize*i)+j] = s->decoded[i][j];
657 for (j = 0; j < s->blocksize; j++)
658 samples[(s->blocksize*i)+j] = s->decoded[0][j];
660 for (j = 0; j < s->blocksize; j++)
661 samples[(s->blocksize*i)+j] = s->decoded[0][j] - s->decoded[i][j];
664 // av_log(s->avctx, AV_LOG_DEBUG, "mid-side unsupported\n");
666 *data_size += s->blocksize;
670 switch(s->decorrelation)
673 for (j = 0; j < s->blocksize; j++)
675 for (i = 0; i < s->channels; i++)
676 *(samples++) = s->decoded[i][j];
680 assert(s->channels == 2);
681 for (i = 0; i < s->blocksize; i++)
683 *(samples++) = s->decoded[0][i];
684 *(samples++) = s->decoded[0][i] - s->decoded[1][i];
688 assert(s->channels == 2);
689 for (i = 0; i < s->blocksize; i++)
691 *(samples++) = s->decoded[0][i] + s->decoded[1][i];
692 *(samples++) = s->decoded[1][i];
696 assert(s->channels == 2);
697 for (i = 0; i < s->blocksize; i++)
700 mid = s->decoded[0][i];
701 side = s->decoded[1][i];
703 #if 1 //needs to be checked but IMHO it should be binary identical
705 *(samples++) = mid + side;
712 *(samples++) = (mid + side) >> 1;
713 *(samples++) = (mid - side) >> 1;
720 *data_size = (int8_t *)samples - (int8_t *)data;
721 // av_log(s->avctx, AV_LOG_DEBUG, "data size: %d\n", *data_size);
723 // s->last_blocksize = s->blocksize;
725 i= (get_bits_count(&s->gb)+7)/8;;
727 av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", i - buf_size);
729 s->bitstream_index=0;
733 if(s->bitstream_size){
734 s->bitstream_index += i;
735 s->bitstream_size -= i;
736 return input_buf_size;
741 static int flac_decode_close(AVCodecContext *avctx)
743 FLACContext *s = avctx->priv_data;
746 for (i = 0; i < s->channels; i++)
748 av_freep(&s->decoded[i]);
750 av_freep(&s->bitstream);
755 AVCodec flac_decoder = {