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
24 * FLAC (Free Lossless Audio Codec) decoder
25 * @author Alex Beregszaszi
26 * @see http://flac.sourceforge.net/
27 *
28 * This decoder can be used in 1 of 2 ways: Either raw FLAC data can be fed
29 * through, starting from the initial 'fLaC' signature; or by passing the
30 * 34-byte streaminfo structure through avctx->extradata[_size] followed
31 * by data starting with the 0xFFF8 marker.
32 */
33
34 #include <limits.h>
35
48
51
54
55 int blocksize;
///< number of samples in the current frame
56 int sample_shift;
///< shift required to make output samples 16-bit or 32-bit
57 int ch_mode;
///< channel decorrelation type in the current frame
59
63
66
68
70 {
72 int need32 = s->bps > 16;
75
76 if (need32 || want32) {
77 if (planar)
79 else
82 } else {
83 if (planar)
85 else
88 }
89 }
90
92 {
98
99 /* for now, the raw FLAC header is allowed to be passed to the decoder as
100 frame data instead of extradata. */
102 return 0;
103
106
107 /* initialize based on the demuxer-supplied streamdata header */
110 if (ret < 0)
115
116 return 0;
117 }
118
120 {
126 }
127
129 {
130 int buf_size;
131
133
136 if (buf_size < 0)
137 return buf_size;
138
142
146 }
147
148 /**
149 * Parse the STREAMINFO from an inline header.
150 * @param s the flac decoding context
151 * @param buf input buffer, starting with the "fLaC" marker
152 * @param buf_size buffer size
153 * @return non-zero if metadata is invalid
154 */
156 {
157 int metadata_type, metadata_size,
ret;
158
160 /* need more data */
161 return 0;
162 }
167 }
170 if (ret < 0)
175
176 return 0;
177 }
178
179 /**
180 * Determine the size of an inline header.
181 * @param buf input buffer, starting with the "fLaC" marker
182 * @param buf_size buffer size
183 * @return number of bytes in the header, or 0 if more data is needed
184 */
186 {
187 int metadata_last, metadata_size;
188 const uint8_t *buf_end = buf + buf_size;
189
190 buf += 4;
191 do {
192 if (buf_end - buf < 4)
193 return 0;
195 buf += 4;
196 if (buf_end - buf < metadata_size) {
197 /* need more data in order to read the complete header */
198 return 0;
199 }
200 buf += metadata_size;
201 } while (!metadata_last);
202
203 return buf_size - (buf_end -
buf);
204 }
205
207 {
208 int i, tmp, partition, method_type, rice_order;
209 int rice_bits, rice_esc;
210 int samples;
211
213 if (method_type > 1) {
215 method_type);
217 }
218
220
222 if (pred_order > samples) {
224 pred_order, samples);
226 }
227
228 rice_bits = 4 + method_type;
229 rice_esc = (1 << rice_bits) - 1;
230
231 decoded += pred_order;
232 i= pred_order;
233 for (partition = 0; partition < (1 << rice_order); partition++) {
235 if (tmp == rice_esc) {
237 for (; i < samples; i++)
239 } else {
240 for (; i < samples; i++) {
242 }
243 }
244 i= 0;
245 }
246
247 return 0;
248 }
249
251 int pred_order,
int bps)
252 {
256
257 /* warm up samples */
258 for (i = 0; i < pred_order; i++) {
260 }
261
264
265 if (pred_order > 0)
266 a = decoded[pred_order-1];
267 if (pred_order > 1)
268 b =
a - decoded[pred_order-2];
269 if (pred_order > 2)
270 c =
b - decoded[pred_order-2] + decoded[pred_order-3];
271 if (pred_order > 3)
272 d =
c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
273
274 switch (pred_order) {
275 case 0:
276 break;
277 case 1:
278 for (i = pred_order; i < blocksize; i++)
279 decoded[i] =
a += decoded[i];
280 break;
281 case 2:
282 for (i = pred_order; i < blocksize; i++)
283 decoded[i] =
a +=
b += decoded[i];
284 break;
285 case 3:
286 for (i = pred_order; i < blocksize; i++)
287 decoded[i] =
a +=
b +=
c += decoded[i];
288 break;
289 case 4:
290 for (i = pred_order; i < blocksize; i++)
291 decoded[i] =
a +=
b +=
c += d += decoded[i];
292 break;
293 default:
296 }
297
298 return 0;
299 }
300
303 {
305 int coeff_prec, qlevel;
307
308 /* warm up samples */
309 for (i = 0; i < pred_order; i++) {
311 }
312
314 if (coeff_prec == 16) {
317 }
319 if (qlevel < 0) {
321 qlevel);
323 }
324
325 for (i = 0; i < pred_order; i++) {
326 coeffs[pred_order - i - 1] =
get_sbits(&s->
gb, coeff_prec);
327 }
328
331
333
334 return 0;
335 }
336
338 {
340 int type, wasted = 0;
343
344 if (channel == 0) {
346 bps++;
347 } else {
349 bps++;
350 }
351
355 }
357
360 wasted = 1;
361 if ( left < 0 ||
365 "Invalid number of wasted bits > available bits (%d) - left=%d\n",
366 bps, left);
368 }
370 wasted++;
371 bps -= wasted;
372 }
373 if (bps > 32) {
376 }
377
378 //FIXME use av_log2 for types
379 if (type == 0) {
382 decoded[i] = tmp;
383 } else if (type == 1) {
386 } else if ((type >= 8) && (type <= 12)) {
389 } else if (type >= 32) {
392 } else {
395 }
396
397 if (wasted) {
398 int i;
400 decoded[i] <<= wasted;
401 }
402
403 return 0;
404 }
405
407 {
411
415 }
416
417 if (s->channels && fi.channels != s->channels && s->
got_streaminfo) {
421 if (ret < 0)
423 }
428
429 if (!s->bps && !fi.bps) {
432 }
433 if (!fi.bps) {
434 fi.bps = s->bps;
435 } else if (s->bps && fi.bps != s->bps) {
437 "supported\n");
439 }
440
441 if (!s->bps) {
444 }
445
446 if (!s->max_blocksize)
450 s->max_blocksize);
452 }
454
455 if (!s->samplerate && !fi.samplerate) {
457 " or frame header\n");
459 }
460 if (fi.samplerate == 0)
461 fi.samplerate = s->samplerate;
463
466 if (ret < 0)
471 }
472
473 // dump_headers(s->avctx, (FLACStreaminfo *)s);
474
475 /* subframes */
476 for (i = 0; i < s->channels; i++) {
479 }
480
482
483 /* frame footer */
485
486 return 0;
487 }
488
490 int *got_frame_ptr,
AVPacket *avpkt)
491 {
495 int buf_size = avpkt->
size;
497 int bytes_read = 0;
499
500 *got_frame_ptr = 0;
501
502 if (s->max_framesize == 0) {
503 s->max_framesize =
506 }
507
508 if (buf_size > 5 && !memcmp(buf, "177円FLAC", 5)) {
510 return buf_size;
511 }
512
515 return buf_size;
516 }
517
518 /* check that there is at least the smallest decodable amount of data.
519 this amount corresponds to the smallest valid FLAC frame possible.
520 FF F8 69 02 00 00 9A 00 00 34 46 */
522 return buf_size;
523
524 /* check for inline header */
529 }
531 }
532
533 /* decode frame */
539 }
541
544 0, buf, bytes_read)) {
548 }
549
550 /* get output buffer */
554
557
558 if (bytes_read > buf_size) {
561 }
562 if (bytes_read < buf_size) {
564 buf_size - bytes_read, buf_size);
565 }
566
567 *got_frame_ptr = 1;
568
569 return bytes_read;
570 }
571
573 {
578 if (s->max_blocksize)
580 return 0;
581 }
582
584 {
586
588
589 return 0;
590 }
591
608 };