]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - libavcodec/flacdec.c
cosmetics: indentation
[frescor/ffmpeg.git] / libavcodec / flacdec.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 flacdec.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,
80   88200, 176400, 192000,
81   8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000,
82   0, 0, 0, 0 };
83
84 static const int sample_size_table[] =
85 { 0, 8, 12, 0, 16, 20, 24, 0 };
86
87 static const int blocksize_table[] = {
88      0,    192, 576<<0, 576<<1, 576<<2, 576<<3,      0,      0,
89 256<<0, 256<<1, 256<<2, 256<<3, 256<<4, 256<<5, 256<<6, 256<<7
90 };
91
92 static int64_t get_utf8(GetBitContext *gb){
93     int64_t val;
94     GET_UTF8(val, get_bits(gb, 8), return -1;)
95     return val;
96 }
97
98 static void allocate_buffers(FLACContext *s);
99 static int metadata_parse(FLACContext *s);
100
101 static av_cold int flac_decode_init(AVCodecContext * avctx)
102 {
103     FLACContext *s = avctx->priv_data;
104     s->avctx = avctx;
105
106     if (avctx->extradata_size > 4) {
107         /* initialize based on the demuxer-supplied streamdata header */
108         if (avctx->extradata_size == FLAC_STREAMINFO_SIZE) {
109             ff_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, avctx->extradata);
110             allocate_buffers(s);
111         } else {
112             init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8);
113             metadata_parse(s);
114         }
115     }
116
117     avctx->sample_fmt = SAMPLE_FMT_S16;
118     return 0;
119 }
120
121 static void dump_headers(AVCodecContext *avctx, FLACStreaminfo *s)
122 {
123     av_log(avctx, AV_LOG_DEBUG, "  Blocksize: %d .. %d\n", s->min_blocksize, s->max_blocksize);
124     av_log(avctx, AV_LOG_DEBUG, "  Max Framesize: %d\n", s->max_framesize);
125     av_log(avctx, AV_LOG_DEBUG, "  Samplerate: %d\n", s->samplerate);
126     av_log(avctx, AV_LOG_DEBUG, "  Channels: %d\n", s->channels);
127     av_log(avctx, AV_LOG_DEBUG, "  Bits: %d\n", s->bps);
128 }
129
130 static void allocate_buffers(FLACContext *s){
131     int i;
132
133     assert(s->max_blocksize);
134
135     if(s->max_framesize == 0 && s->max_blocksize){
136         s->max_framesize= (s->channels * s->bps * s->max_blocksize + 7)/ 8; //FIXME header overhead
137     }
138
139     for (i = 0; i < s->channels; i++)
140     {
141         s->decoded[i] = av_realloc(s->decoded[i], sizeof(int32_t)*s->max_blocksize);
142     }
143
144     if(s->allocated_bitstream_size < s->max_framesize)
145         s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
146 }
147
148 void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
149                               const uint8_t *buffer)
150 {
151     GetBitContext gb;
152     init_get_bits(&gb, buffer, FLAC_STREAMINFO_SIZE*8);
153
154     /* mandatory streaminfo */
155     s->min_blocksize = get_bits(&gb, 16);
156     s->max_blocksize = get_bits(&gb, 16);
157
158     skip_bits(&gb, 24); /* skip min frame size */
159     s->max_framesize = get_bits_long(&gb, 24);
160
161     s->samplerate = get_bits_long(&gb, 20);
162     s->channels = get_bits(&gb, 3) + 1;
163     s->bps = get_bits(&gb, 5) + 1;
164
165     avctx->channels = s->channels;
166     avctx->sample_rate = s->samplerate;
167
168     skip_bits(&gb, 36); /* total num of samples */
169
170     skip_bits(&gb, 64); /* md5 sum */
171     skip_bits(&gb, 64); /* md5 sum */
172
173     dump_headers(avctx, s);
174 }
175
176 /**
177  * Parse a list of metadata blocks. This list of blocks must begin with
178  * the fLaC marker.
179  * @param s the flac decoding context containing the gb bit reader used to
180  *          parse metadata
181  * @return 1 if some metadata was read, 0 if no fLaC marker was found
182  */
183 static int metadata_parse(FLACContext *s)
184 {
185     int i, metadata_last, metadata_type, metadata_size, streaminfo_updated=0;
186     int initial_pos= get_bits_count(&s->gb);
187
188     if (show_bits_long(&s->gb, 32) == MKBETAG('f','L','a','C')) {
189         skip_bits(&s->gb, 32);
190
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             if (metadata_size) {
202                 switch (metadata_type) {
203                 case METADATA_TYPE_STREAMINFO:
204                     ff_flac_parse_streaminfo(s->avctx, (FLACStreaminfo *)s, s->gb.buffer+get_bits_count(&s->gb)/8);
205                     streaminfo_updated = 1;
206
207                 default:
208                     for (i=0; i<metadata_size; i++)
209                         skip_bits(&s->gb, 8);
210                 }
211             }
212         } while (!metadata_last);
213
214         if (streaminfo_updated)
215             allocate_buffers(s);
216         return 1;
217     }
218     return 0;
219 }
220
221 static int decode_residuals(FLACContext *s, int channel, int pred_order)
222 {
223     int i, tmp, partition, method_type, rice_order;
224     int sample = 0, samples;
225
226     method_type = get_bits(&s->gb, 2);
227     if (method_type > 1){
228         av_log(s->avctx, AV_LOG_ERROR, "illegal residual coding method %d\n", method_type);
229         return -1;
230     }
231
232     rice_order = get_bits(&s->gb, 4);
233
234     samples= s->blocksize >> rice_order;
235     if (pred_order > samples) {
236         av_log(s->avctx, AV_LOG_ERROR, "invalid predictor order: %i > %i\n", pred_order, samples);
237         return -1;
238     }
239
240     sample=
241     i= pred_order;
242     for (partition = 0; partition < (1 << rice_order); partition++)
243     {
244         tmp = get_bits(&s->gb, method_type == 0 ? 4 : 5);
245         if (tmp == (method_type == 0 ? 15 : 31))
246         {
247             tmp = get_bits(&s->gb, 5);
248             for (; i < samples; i++, sample++)
249                 s->decoded[channel][sample] = get_sbits(&s->gb, tmp);
250         }
251         else
252         {
253             for (; i < samples; i++, sample++){
254                 s->decoded[channel][sample] = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0);
255             }
256         }
257         i= 0;
258     }
259
260     return 0;
261 }
262
263 static int decode_subframe_fixed(FLACContext *s, int channel, int pred_order)
264 {
265     const int blocksize = s->blocksize;
266     int32_t *decoded = s->decoded[channel];
267     int a, b, c, d, i;
268
269     /* warm up samples */
270     for (i = 0; i < pred_order; i++)
271     {
272         decoded[i] = get_sbits(&s->gb, s->curr_bps);
273     }
274
275     if (decode_residuals(s, channel, pred_order) < 0)
276         return -1;
277
278     if(pred_order > 0)
279         a = decoded[pred_order-1];
280     if(pred_order > 1)
281         b = a - decoded[pred_order-2];
282     if(pred_order > 2)
283         c = b - decoded[pred_order-2] + decoded[pred_order-3];
284     if(pred_order > 3)
285         d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
286
287     switch(pred_order)
288     {
289         case 0:
290             break;
291         case 1:
292             for (i = pred_order; i < blocksize; i++)
293                 decoded[i] = a += decoded[i];
294             break;
295         case 2:
296             for (i = pred_order; i < blocksize; i++)
297                 decoded[i] = a += b += decoded[i];
298             break;
299         case 3:
300             for (i = pred_order; i < blocksize; i++)
301                 decoded[i] = a += b += c += decoded[i];
302             break;
303         case 4:
304             for (i = pred_order; i < blocksize; i++)
305                 decoded[i] = a += b += c += d += decoded[i];
306             break;
307         default:
308             av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
309             return -1;
310     }
311
312     return 0;
313 }
314
315 static int decode_subframe_lpc(FLACContext *s, int channel, int pred_order)
316 {
317     int i, j;
318     int coeff_prec, qlevel;
319     int coeffs[pred_order];
320     int32_t *decoded = s->decoded[channel];
321
322     /* warm up samples */
323     for (i = 0; i < pred_order; i++)
324     {
325         decoded[i] = get_sbits(&s->gb, s->curr_bps);
326     }
327
328     coeff_prec = get_bits(&s->gb, 4) + 1;
329     if (coeff_prec == 16)
330     {
331         av_log(s->avctx, AV_LOG_ERROR, "invalid coeff precision\n");
332         return -1;
333     }
334     qlevel = get_sbits(&s->gb, 5);
335     if(qlevel < 0){
336         av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n", qlevel);
337         return -1;
338     }
339
340     for (i = 0; i < pred_order; i++)
341     {
342         coeffs[i] = get_sbits(&s->gb, coeff_prec);
343     }
344
345     if (decode_residuals(s, channel, pred_order) < 0)
346         return -1;
347
348     if (s->bps > 16) {
349         int64_t sum;
350         for (i = pred_order; i < s->blocksize; i++)
351         {
352             sum = 0;
353             for (j = 0; j < pred_order; j++)
354                 sum += (int64_t)coeffs[j] * decoded[i-j-1];
355             decoded[i] += sum >> qlevel;
356         }
357     } else {
358         for (i = pred_order; i < s->blocksize-1; i += 2)
359         {
360             int c;
361             int d = decoded[i-pred_order];
362             int s0 = 0, s1 = 0;
363             for (j = pred_order-1; j > 0; j--)
364             {
365                 c = coeffs[j];
366                 s0 += c*d;
367                 d = decoded[i-j];
368                 s1 += c*d;
369             }
370             c = coeffs[0];
371             s0 += c*d;
372             d = decoded[i] += s0 >> qlevel;
373             s1 += c*d;
374             decoded[i+1] += s1 >> qlevel;
375         }
376         if (i < s->blocksize)
377         {
378             int sum = 0;
379             for (j = 0; j < pred_order; j++)
380                 sum += coeffs[j] * decoded[i-j-1];
381             decoded[i] += sum >> qlevel;
382         }
383     }
384
385     return 0;
386 }
387
388 static inline int decode_subframe(FLACContext *s, int channel)
389 {
390     int type, wasted = 0;
391     int i, tmp;
392
393     s->curr_bps = s->bps;
394     if(channel == 0){
395         if(s->decorrelation == RIGHT_SIDE)
396             s->curr_bps++;
397     }else{
398         if(s->decorrelation == LEFT_SIDE || s->decorrelation == MID_SIDE)
399             s->curr_bps++;
400     }
401
402     if (get_bits1(&s->gb))
403     {
404         av_log(s->avctx, AV_LOG_ERROR, "invalid subframe padding\n");
405         return -1;
406     }
407     type = get_bits(&s->gb, 6);
408
409     if (get_bits1(&s->gb))
410     {
411         wasted = 1;
412         while (!get_bits1(&s->gb))
413             wasted++;
414         s->curr_bps -= wasted;
415     }
416
417 //FIXME use av_log2 for types
418     if (type == 0)
419     {
420         tmp = get_sbits(&s->gb, s->curr_bps);
421         for (i = 0; i < s->blocksize; i++)
422             s->decoded[channel][i] = tmp;
423     }
424     else if (type == 1)
425     {
426         for (i = 0; i < s->blocksize; i++)
427             s->decoded[channel][i] = get_sbits(&s->gb, s->curr_bps);
428     }
429     else if ((type >= 8) && (type <= 12))
430     {
431         if (decode_subframe_fixed(s, channel, type & ~0x8) < 0)
432             return -1;
433     }
434     else if (type >= 32)
435     {
436         if (decode_subframe_lpc(s, channel, (type & ~0x20)+1) < 0)
437             return -1;
438     }
439     else
440     {
441         av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n");
442         return -1;
443     }
444
445     if (wasted)
446     {
447         int i;
448         for (i = 0; i < s->blocksize; i++)
449             s->decoded[channel][i] <<= wasted;
450     }
451
452     return 0;
453 }
454
455 static int decode_frame(FLACContext *s, int alloc_data_size)
456 {
457     int blocksize_code, sample_rate_code, sample_size_code, assignment, i, crc8;
458     int decorrelation, bps, blocksize, samplerate;
459
460     blocksize_code = get_bits(&s->gb, 4);
461
462     sample_rate_code = get_bits(&s->gb, 4);
463
464     assignment = get_bits(&s->gb, 4); /* channel assignment */
465     if (assignment < 8 && s->channels == assignment+1)
466         decorrelation = INDEPENDENT;
467     else if (assignment >=8 && assignment < 11 && s->channels == 2)
468         decorrelation = LEFT_SIDE + assignment - 8;
469     else
470     {
471         av_log(s->avctx, AV_LOG_ERROR, "unsupported channel assignment %d (channels=%d)\n", assignment, s->channels);
472         return -1;
473     }
474
475     sample_size_code = get_bits(&s->gb, 3);
476     if(sample_size_code == 0)
477         bps= s->bps;
478     else if((sample_size_code != 3) && (sample_size_code != 7))
479         bps = sample_size_table[sample_size_code];
480     else
481     {
482         av_log(s->avctx, AV_LOG_ERROR, "invalid sample size code (%d)\n", sample_size_code);
483         return -1;
484     }
485
486     if (get_bits1(&s->gb))
487     {
488         av_log(s->avctx, AV_LOG_ERROR, "broken stream, invalid padding\n");
489         return -1;
490     }
491
492     if(get_utf8(&s->gb) < 0){
493         av_log(s->avctx, AV_LOG_ERROR, "utf8 fscked\n");
494         return -1;
495     }
496
497     if (blocksize_code == 0)
498         blocksize = s->min_blocksize;
499     else if (blocksize_code == 6)
500         blocksize = get_bits(&s->gb, 8)+1;
501     else if (blocksize_code == 7)
502         blocksize = get_bits(&s->gb, 16)+1;
503     else
504         blocksize = blocksize_table[blocksize_code];
505
506     if(blocksize > s->max_blocksize){
507         av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", blocksize, s->max_blocksize);
508         return -1;
509     }
510
511     if(blocksize * s->channels * sizeof(int16_t) > alloc_data_size)
512         return -1;
513
514     if (sample_rate_code == 0){
515         samplerate= s->samplerate;
516     }else if (sample_rate_code < 12)
517         samplerate = sample_rate_table[sample_rate_code];
518     else if (sample_rate_code == 12)
519         samplerate = get_bits(&s->gb, 8) * 1000;
520     else if (sample_rate_code == 13)
521         samplerate = get_bits(&s->gb, 16);
522     else if (sample_rate_code == 14)
523         samplerate = get_bits(&s->gb, 16) * 10;
524     else{
525         av_log(s->avctx, AV_LOG_ERROR, "illegal sample rate code %d\n", sample_rate_code);
526         return -1;
527     }
528
529     skip_bits(&s->gb, 8);
530     crc8 = av_crc(av_crc_get_table(AV_CRC_8_ATM), 0,
531                   s->gb.buffer, get_bits_count(&s->gb)/8);
532     if(crc8){
533         av_log(s->avctx, AV_LOG_ERROR, "header crc mismatch crc=%2X\n", crc8);
534         return -1;
535     }
536
537     s->blocksize    = blocksize;
538     s->samplerate   = samplerate;
539     s->bps          = bps;
540     s->decorrelation= decorrelation;
541
542 //    dump_headers(s->avctx, (FLACStreaminfo *)s);
543
544     /* subframes */
545     for (i = 0; i < s->channels; i++)
546     {
547         if (decode_subframe(s, i) < 0)
548             return -1;
549     }
550
551     align_get_bits(&s->gb);
552
553     /* frame footer */
554     skip_bits(&s->gb, 16); /* data crc */
555
556     return 0;
557 }
558
559 static int flac_decode_frame(AVCodecContext *avctx,
560                             void *data, int *data_size,
561                             const uint8_t *buf, int buf_size)
562 {
563     FLACContext *s = avctx->priv_data;
564     int tmp = 0, i, j = 0, input_buf_size = 0;
565     int16_t *samples = data;
566     int alloc_data_size= *data_size;
567
568     *data_size=0;
569
570     if(s->max_framesize == 0){
571         s->max_framesize= FFMAX(4, buf_size); // should hopefully be enough for the first header
572         s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
573     }
574
575     if(1 && s->max_framesize){//FIXME truncated
576             if(s->bitstream_size < 4 || AV_RL32(s->bitstream) != MKTAG('f','L','a','C'))
577                 buf_size= FFMIN(buf_size, s->max_framesize - FFMIN(s->bitstream_size, s->max_framesize));
578             input_buf_size= buf_size;
579
580             if(s->bitstream_size + buf_size < buf_size || s->bitstream_index + s->bitstream_size + buf_size < s->bitstream_index)
581                 return -1;
582
583             if(s->allocated_bitstream_size < s->bitstream_size + buf_size)
584                 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->bitstream_size + buf_size);
585
586             if(s->bitstream_index + s->bitstream_size + buf_size > s->allocated_bitstream_size){
587                 memmove(s->bitstream, &s->bitstream[s->bitstream_index], s->bitstream_size);
588                 s->bitstream_index=0;
589             }
590             memcpy(&s->bitstream[s->bitstream_index + s->bitstream_size], buf, buf_size);
591             buf= &s->bitstream[s->bitstream_index];
592             buf_size += s->bitstream_size;
593             s->bitstream_size= buf_size;
594
595             if(buf_size < s->max_framesize && input_buf_size){
596                 return input_buf_size;
597             }
598     }
599
600     init_get_bits(&s->gb, buf, buf_size*8);
601
602     if(metadata_parse(s))
603         goto end;
604
605     tmp = show_bits(&s->gb, 16);
606     if((tmp & 0xFFFE) != 0xFFF8){
607         av_log(s->avctx, AV_LOG_ERROR, "FRAME HEADER not here\n");
608         while(get_bits_count(&s->gb)/8+2 < buf_size && (show_bits(&s->gb, 16) & 0xFFFE) != 0xFFF8)
609             skip_bits(&s->gb, 8);
610         goto end; // we may not have enough bits left to decode a frame, so try next time
611     }
612     skip_bits(&s->gb, 16);
613     if (decode_frame(s, alloc_data_size) < 0){
614         av_log(s->avctx, AV_LOG_ERROR, "decode_frame() failed\n");
615         s->bitstream_size=0;
616         s->bitstream_index=0;
617         return -1;
618     }
619
620 #define DECORRELATE(left, right)\
621             assert(s->channels == 2);\
622             for (i = 0; i < s->blocksize; i++)\
623             {\
624                 int a= s->decoded[0][i];\
625                 int b= s->decoded[1][i];\
626                 *samples++ = ((left)  << (24 - s->bps)) >> 8;\
627                 *samples++ = ((right) << (24 - s->bps)) >> 8;\
628             }\
629             break;
630
631     switch(s->decorrelation)
632     {
633         case INDEPENDENT:
634             for (j = 0; j < s->blocksize; j++)
635             {
636                 for (i = 0; i < s->channels; i++)
637                     *samples++ = (s->decoded[i][j] << (24 - s->bps)) >> 8;
638             }
639             break;
640         case LEFT_SIDE:
641             DECORRELATE(a,a-b)
642         case RIGHT_SIDE:
643             DECORRELATE(a+b,b)
644         case MID_SIDE:
645             DECORRELATE( (a-=b>>1) + b, a)
646     }
647
648     *data_size = (int8_t *)samples - (int8_t *)data;
649
650 end:
651     i= (get_bits_count(&s->gb)+7)/8;
652     if(i > buf_size){
653         av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", i - buf_size);
654         s->bitstream_size=0;
655         s->bitstream_index=0;
656         return -1;
657     }
658
659     if(s->bitstream_size){
660         s->bitstream_index += i;
661         s->bitstream_size  -= i;
662         return input_buf_size;
663     }else
664         return i;
665 }
666
667 static av_cold int flac_decode_close(AVCodecContext *avctx)
668 {
669     FLACContext *s = avctx->priv_data;
670     int i;
671
672     for (i = 0; i < s->channels; i++)
673     {
674         av_freep(&s->decoded[i]);
675     }
676     av_freep(&s->bitstream);
677
678     return 0;
679 }
680
681 static void flac_flush(AVCodecContext *avctx){
682     FLACContext *s = avctx->priv_data;
683
684     s->bitstream_size=
685     s->bitstream_index= 0;
686 }
687
688 AVCodec flac_decoder = {
689     "flac",
690     CODEC_TYPE_AUDIO,
691     CODEC_ID_FLAC,
692     sizeof(FLACContext),
693     flac_decode_init,
694     NULL,
695     flac_decode_close,
696     flac_decode_frame,
697     CODEC_CAP_DELAY,
698     .flush= flac_flush,
699     .long_name= NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
700 };