]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - libavcodec/flacenc.c
share some constants between the FLAC encoder and FLAC decoder
[frescor/ffmpeg.git] / libavcodec / flacenc.c
1 /**
2  * FLAC audio encoder
3  * Copyright (c) 2006  Justin Ruggles <justin.ruggles@gmail.com>
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 #include "libavutil/crc.h"
23 #include "libavutil/lls.h"
24 #include "libavutil/md5.h"
25 #include "avcodec.h"
26 #include "bitstream.h"
27 #include "dsputil.h"
28 #include "golomb.h"
29 #include "lpc.h"
30 #include "flac.h"
31
32 #define FLAC_SUBFRAME_CONSTANT  0
33 #define FLAC_SUBFRAME_VERBATIM  1
34 #define FLAC_SUBFRAME_FIXED     8
35 #define FLAC_SUBFRAME_LPC      32
36
37 #define FLAC_CHMODE_NOT_STEREO      0
38 #define FLAC_CHMODE_LEFT_RIGHT      1
39 #define FLAC_CHMODE_LEFT_SIDE       8
40 #define FLAC_CHMODE_RIGHT_SIDE      9
41 #define FLAC_CHMODE_MID_SIDE       10
42
43 #define MAX_FIXED_ORDER     4
44 #define MAX_PARTITION_ORDER 8
45 #define MAX_PARTITIONS     (1 << MAX_PARTITION_ORDER)
46 #define MAX_LPC_PRECISION  15
47 #define MAX_LPC_SHIFT      15
48 #define MAX_RICE_PARAM     14
49
50 typedef struct CompressionOptions {
51     int compression_level;
52     int block_time_ms;
53     int use_lpc;
54     int lpc_coeff_precision;
55     int min_prediction_order;
56     int max_prediction_order;
57     int prediction_order_method;
58     int min_partition_order;
59     int max_partition_order;
60 } CompressionOptions;
61
62 typedef struct RiceContext {
63     int porder;
64     int params[MAX_PARTITIONS];
65 } RiceContext;
66
67 typedef struct FlacSubframe {
68     int type;
69     int type_code;
70     int obits;
71     int order;
72     int32_t coefs[MAX_LPC_ORDER];
73     int shift;
74     RiceContext rc;
75     int32_t samples[FLAC_MAX_BLOCKSIZE];
76     int32_t residual[FLAC_MAX_BLOCKSIZE+1];
77 } FlacSubframe;
78
79 typedef struct FlacFrame {
80     FlacSubframe subframes[FLAC_MAX_CHANNELS];
81     int blocksize;
82     int bs_code[2];
83     uint8_t crc8;
84     int ch_mode;
85 } FlacFrame;
86
87 typedef struct FlacEncodeContext {
88     PutBitContext pb;
89     int channels;
90     int ch_code;
91     int samplerate;
92     int sr_code[2];
93     int min_framesize;
94     int min_encoded_framesize;
95     int max_framesize;
96     int max_encoded_framesize;
97     uint32_t frame_count;
98     uint64_t sample_count;
99     uint8_t md5sum[16];
100     FlacFrame frame;
101     CompressionOptions options;
102     AVCodecContext *avctx;
103     DSPContext dsp;
104     struct AVMD5 *md5ctx;
105 } FlacEncodeContext;
106
107 static const int flac_samplerates[16] = {
108     0, 0, 0, 0,
109     8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000,
110     0, 0, 0, 0
111 };
112
113 static const int flac_blocksizes[16] = {
114     0,
115     192,
116     576, 1152, 2304, 4608,
117     0, 0,
118     256, 512, 1024, 2048, 4096, 8192, 16384, 32768
119 };
120
121 /**
122  * Writes streaminfo metadata block to byte array
123  */
124 static void write_streaminfo(FlacEncodeContext *s, uint8_t *header)
125 {
126     PutBitContext pb;
127
128     memset(header, 0, FLAC_STREAMINFO_SIZE);
129     init_put_bits(&pb, header, FLAC_STREAMINFO_SIZE);
130
131     /* streaminfo metadata block */
132     put_bits(&pb, 16, s->avctx->frame_size);
133     put_bits(&pb, 16, s->avctx->frame_size);
134     put_bits(&pb, 24, s->min_framesize);
135     put_bits(&pb, 24, s->max_framesize);
136     put_bits(&pb, 20, s->samplerate);
137     put_bits(&pb, 3, s->channels-1);
138     put_bits(&pb, 5, 15);       /* bits per sample - 1 */
139     /* write 36-bit sample count in 2 put_bits() calls */
140     put_bits(&pb, 24, (s->sample_count & 0xFFFFFF000LL) >> 12);
141     put_bits(&pb, 12,  s->sample_count & 0x000000FFFLL);
142     flush_put_bits(&pb);
143     memcpy(&header[18], s->md5sum, 16);
144 }
145
146 /**
147  * Sets blocksize based on samplerate
148  * Chooses the closest predefined blocksize >= BLOCK_TIME_MS milliseconds
149  */
150 static int select_blocksize(int samplerate, int block_time_ms)
151 {
152     int i;
153     int target;
154     int blocksize;
155
156     assert(samplerate > 0);
157     blocksize = flac_blocksizes[1];
158     target = (samplerate * block_time_ms) / 1000;
159     for(i=0; i<16; i++) {
160         if(target >= flac_blocksizes[i] && flac_blocksizes[i] > blocksize) {
161             blocksize = flac_blocksizes[i];
162         }
163     }
164     return blocksize;
165 }
166
167 static av_cold int flac_encode_init(AVCodecContext *avctx)
168 {
169     int freq = avctx->sample_rate;
170     int channels = avctx->channels;
171     FlacEncodeContext *s = avctx->priv_data;
172     int i, level;
173     uint8_t *streaminfo;
174
175     s->avctx = avctx;
176
177     dsputil_init(&s->dsp, avctx);
178
179     if(avctx->sample_fmt != SAMPLE_FMT_S16) {
180         return -1;
181     }
182
183     if(channels < 1 || channels > FLAC_MAX_CHANNELS) {
184         return -1;
185     }
186     s->channels = channels;
187     s->ch_code = s->channels-1;
188
189     /* find samplerate in table */
190     if(freq < 1)
191         return -1;
192     for(i=4; i<12; i++) {
193         if(freq == flac_samplerates[i]) {
194             s->samplerate = flac_samplerates[i];
195             s->sr_code[0] = i;
196             s->sr_code[1] = 0;
197             break;
198         }
199     }
200     /* if not in table, samplerate is non-standard */
201     if(i == 12) {
202         if(freq % 1000 == 0 && freq < 255000) {
203             s->sr_code[0] = 12;
204             s->sr_code[1] = freq / 1000;
205         } else if(freq % 10 == 0 && freq < 655350) {
206             s->sr_code[0] = 14;
207             s->sr_code[1] = freq / 10;
208         } else if(freq < 65535) {
209             s->sr_code[0] = 13;
210             s->sr_code[1] = freq;
211         } else {
212             return -1;
213         }
214         s->samplerate = freq;
215     }
216
217     /* set compression option defaults based on avctx->compression_level */
218     if(avctx->compression_level < 0) {
219         s->options.compression_level = 5;
220     } else {
221         s->options.compression_level = avctx->compression_level;
222     }
223     av_log(avctx, AV_LOG_DEBUG, " compression: %d\n", s->options.compression_level);
224
225     level= s->options.compression_level;
226     if(level > 12) {
227         av_log(avctx, AV_LOG_ERROR, "invalid compression level: %d\n",
228                s->options.compression_level);
229         return -1;
230     }
231
232     s->options.block_time_ms       = ((int[]){ 27, 27, 27,105,105,105,105,105,105,105,105,105,105})[level];
233     s->options.use_lpc             = ((int[]){  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1})[level];
234     s->options.min_prediction_order= ((int[]){  2,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1})[level];
235     s->options.max_prediction_order= ((int[]){  3,  4,  4,  6,  8,  8,  8,  8, 12, 12, 12, 32, 32})[level];
236     s->options.prediction_order_method = ((int[]){ ORDER_METHOD_EST,    ORDER_METHOD_EST,    ORDER_METHOD_EST,
237                                                    ORDER_METHOD_EST,    ORDER_METHOD_EST,    ORDER_METHOD_EST,
238                                                    ORDER_METHOD_4LEVEL, ORDER_METHOD_LOG,    ORDER_METHOD_4LEVEL,
239                                                    ORDER_METHOD_LOG,    ORDER_METHOD_SEARCH, ORDER_METHOD_LOG,
240                                                    ORDER_METHOD_SEARCH})[level];
241     s->options.min_partition_order = ((int[]){  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0})[level];
242     s->options.max_partition_order = ((int[]){  2,  2,  3,  3,  3,  8,  8,  8,  8,  8,  8,  8,  8})[level];
243
244     /* set compression option overrides from AVCodecContext */
245     if(avctx->use_lpc >= 0) {
246         s->options.use_lpc = av_clip(avctx->use_lpc, 0, 11);
247     }
248     if(s->options.use_lpc == 1)
249         av_log(avctx, AV_LOG_DEBUG, " use lpc: Levinson-Durbin recursion with Welch window\n");
250     else if(s->options.use_lpc > 1)
251         av_log(avctx, AV_LOG_DEBUG, " use lpc: Cholesky factorization\n");
252
253     if(avctx->min_prediction_order >= 0) {
254         if(s->options.use_lpc) {
255             if(avctx->min_prediction_order < MIN_LPC_ORDER ||
256                     avctx->min_prediction_order > MAX_LPC_ORDER) {
257                 av_log(avctx, AV_LOG_ERROR, "invalid min prediction order: %d\n",
258                        avctx->min_prediction_order);
259                 return -1;
260             }
261         } else {
262             if(avctx->min_prediction_order > MAX_FIXED_ORDER) {
263                 av_log(avctx, AV_LOG_ERROR, "invalid min prediction order: %d\n",
264                        avctx->min_prediction_order);
265                 return -1;
266             }
267         }
268         s->options.min_prediction_order = avctx->min_prediction_order;
269     }
270     if(avctx->max_prediction_order >= 0) {
271         if(s->options.use_lpc) {
272             if(avctx->max_prediction_order < MIN_LPC_ORDER ||
273                     avctx->max_prediction_order > MAX_LPC_ORDER) {
274                 av_log(avctx, AV_LOG_ERROR, "invalid max prediction order: %d\n",
275                        avctx->max_prediction_order);
276                 return -1;
277             }
278         } else {
279             if(avctx->max_prediction_order > MAX_FIXED_ORDER) {
280                 av_log(avctx, AV_LOG_ERROR, "invalid max prediction order: %d\n",
281                        avctx->max_prediction_order);
282                 return -1;
283             }
284         }
285         s->options.max_prediction_order = avctx->max_prediction_order;
286     }
287     if(s->options.max_prediction_order < s->options.min_prediction_order) {
288         av_log(avctx, AV_LOG_ERROR, "invalid prediction orders: min=%d max=%d\n",
289                s->options.min_prediction_order, s->options.max_prediction_order);
290         return -1;
291     }
292     av_log(avctx, AV_LOG_DEBUG, " prediction order: %d, %d\n",
293            s->options.min_prediction_order, s->options.max_prediction_order);
294
295     if(avctx->prediction_order_method >= 0) {
296         if(avctx->prediction_order_method > ORDER_METHOD_LOG) {
297             av_log(avctx, AV_LOG_ERROR, "invalid prediction order method: %d\n",
298                    avctx->prediction_order_method);
299             return -1;
300         }
301         s->options.prediction_order_method = avctx->prediction_order_method;
302     }
303     switch(s->options.prediction_order_method) {
304         case ORDER_METHOD_EST:    av_log(avctx, AV_LOG_DEBUG, " order method: %s\n",
305                                          "estimate"); break;
306         case ORDER_METHOD_2LEVEL: av_log(avctx, AV_LOG_DEBUG, " order method: %s\n",
307                                          "2-level"); break;
308         case ORDER_METHOD_4LEVEL: av_log(avctx, AV_LOG_DEBUG, " order method: %s\n",
309                                          "4-level"); break;
310         case ORDER_METHOD_8LEVEL: av_log(avctx, AV_LOG_DEBUG, " order method: %s\n",
311                                          "8-level"); break;
312         case ORDER_METHOD_SEARCH: av_log(avctx, AV_LOG_DEBUG, " order method: %s\n",
313                                          "full search"); break;
314         case ORDER_METHOD_LOG:    av_log(avctx, AV_LOG_DEBUG, " order method: %s\n",
315                                          "log search"); break;
316     }
317
318     if(avctx->min_partition_order >= 0) {
319         if(avctx->min_partition_order > MAX_PARTITION_ORDER) {
320             av_log(avctx, AV_LOG_ERROR, "invalid min partition order: %d\n",
321                    avctx->min_partition_order);
322             return -1;
323         }
324         s->options.min_partition_order = avctx->min_partition_order;
325     }
326     if(avctx->max_partition_order >= 0) {
327         if(avctx->max_partition_order > MAX_PARTITION_ORDER) {
328             av_log(avctx, AV_LOG_ERROR, "invalid max partition order: %d\n",
329                    avctx->max_partition_order);
330             return -1;
331         }
332         s->options.max_partition_order = avctx->max_partition_order;
333     }
334     if(s->options.max_partition_order < s->options.min_partition_order) {
335         av_log(avctx, AV_LOG_ERROR, "invalid partition orders: min=%d max=%d\n",
336                s->options.min_partition_order, s->options.max_partition_order);
337         return -1;
338     }
339     av_log(avctx, AV_LOG_DEBUG, " partition order: %d, %d\n",
340            s->options.min_partition_order, s->options.max_partition_order);
341
342     if(avctx->frame_size > 0) {
343         if(avctx->frame_size < FLAC_MIN_BLOCKSIZE ||
344                 avctx->frame_size > FLAC_MAX_BLOCKSIZE) {
345             av_log(avctx, AV_LOG_ERROR, "invalid block size: %d\n",
346                    avctx->frame_size);
347             return -1;
348         }
349     } else {
350         s->avctx->frame_size = select_blocksize(s->samplerate, s->options.block_time_ms);
351     }
352     av_log(avctx, AV_LOG_DEBUG, " block size: %d\n", s->avctx->frame_size);
353
354     /* set LPC precision */
355     if(avctx->lpc_coeff_precision > 0) {
356         if(avctx->lpc_coeff_precision > MAX_LPC_PRECISION) {
357             av_log(avctx, AV_LOG_ERROR, "invalid lpc coeff precision: %d\n",
358                    avctx->lpc_coeff_precision);
359             return -1;
360         }
361         s->options.lpc_coeff_precision = avctx->lpc_coeff_precision;
362     } else {
363         /* default LPC precision */
364         s->options.lpc_coeff_precision = 15;
365     }
366     av_log(avctx, AV_LOG_DEBUG, " lpc precision: %d\n",
367            s->options.lpc_coeff_precision);
368
369     /* set maximum encoded frame size in verbatim mode */
370     if(s->channels == 2) {
371         s->max_framesize = 14 + ((s->avctx->frame_size * 33 + 7) >> 3);
372     } else {
373         s->max_framesize = 14 + (s->avctx->frame_size * s->channels * 2);
374     }
375     s->min_encoded_framesize = 0xFFFFFF;
376
377     /* initialize MD5 context */
378     s->md5ctx = av_malloc(av_md5_size);
379     if(!s->md5ctx)
380         return AVERROR_NOMEM;
381     av_md5_init(s->md5ctx);
382
383     streaminfo = av_malloc(FLAC_STREAMINFO_SIZE);
384     write_streaminfo(s, streaminfo);
385     avctx->extradata = streaminfo;
386     avctx->extradata_size = FLAC_STREAMINFO_SIZE;
387
388     s->frame_count = 0;
389
390     avctx->coded_frame = avcodec_alloc_frame();
391     avctx->coded_frame->key_frame = 1;
392
393     return 0;
394 }
395
396 static void init_frame(FlacEncodeContext *s)
397 {
398     int i, ch;
399     FlacFrame *frame;
400
401     frame = &s->frame;
402
403     for(i=0; i<16; i++) {
404         if(s->avctx->frame_size == flac_blocksizes[i]) {
405             frame->blocksize = flac_blocksizes[i];
406             frame->bs_code[0] = i;
407             frame->bs_code[1] = 0;
408             break;
409         }
410     }
411     if(i == 16) {
412         frame->blocksize = s->avctx->frame_size;
413         if(frame->blocksize <= 256) {
414             frame->bs_code[0] = 6;
415             frame->bs_code[1] = frame->blocksize-1;
416         } else {
417             frame->bs_code[0] = 7;
418             frame->bs_code[1] = frame->blocksize-1;
419         }
420     }
421
422     for(ch=0; ch<s->channels; ch++) {
423         frame->subframes[ch].obits = 16;
424     }
425 }
426
427 /**
428  * Copy channel-interleaved input samples into separate subframes
429  */
430 static void copy_samples(FlacEncodeContext *s, int16_t *samples)
431 {
432     int i, j, ch;
433     FlacFrame *frame;
434
435     frame = &s->frame;
436     for(i=0,j=0; i<frame->blocksize; i++) {
437         for(ch=0; ch<s->channels; ch++,j++) {
438             frame->subframes[ch].samples[i] = samples[j];
439         }
440     }
441 }
442
443
444 #define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k)))
445
446 /**
447  * Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0
448  */
449 static int find_optimal_param(uint32_t sum, int n)
450 {
451     int k;
452     uint32_t sum2;
453
454     if(sum <= n>>1)
455         return 0;
456     sum2 = sum-(n>>1);
457     k = av_log2(n<256 ? FASTDIV(sum2,n) : sum2/n);
458     return FFMIN(k, MAX_RICE_PARAM);
459 }
460
461 static uint32_t calc_optimal_rice_params(RiceContext *rc, int porder,
462                                          uint32_t *sums, int n, int pred_order)
463 {
464     int i;
465     int k, cnt, part;
466     uint32_t all_bits;
467
468     part = (1 << porder);
469     all_bits = 4 * part;
470
471     cnt = (n >> porder) - pred_order;
472     for(i=0; i<part; i++) {
473         k = find_optimal_param(sums[i], cnt);
474         rc->params[i] = k;
475         all_bits += rice_encode_count(sums[i], cnt, k);
476         cnt = n >> porder;
477     }
478
479     rc->porder = porder;
480
481     return all_bits;
482 }
483
484 static void calc_sums(int pmin, int pmax, uint32_t *data, int n, int pred_order,
485                       uint32_t sums[][MAX_PARTITIONS])
486 {
487     int i, j;
488     int parts;
489     uint32_t *res, *res_end;
490
491     /* sums for highest level */
492     parts = (1 << pmax);
493     res = &data[pred_order];
494     res_end = &data[n >> pmax];
495     for(i=0; i<parts; i++) {
496         uint32_t sum = 0;
497         while(res < res_end){
498             sum += *(res++);
499         }
500         sums[pmax][i] = sum;
501         res_end+= n >> pmax;
502     }
503     /* sums for lower levels */
504     for(i=pmax-1; i>=pmin; i--) {
505         parts = (1 << i);
506         for(j=0; j<parts; j++) {
507             sums[i][j] = sums[i+1][2*j] + sums[i+1][2*j+1];
508         }
509     }
510 }
511
512 static uint32_t calc_rice_params(RiceContext *rc, int pmin, int pmax,
513                                  int32_t *data, int n, int pred_order)
514 {
515     int i;
516     uint32_t bits[MAX_PARTITION_ORDER+1];
517     int opt_porder;
518     RiceContext tmp_rc;
519     uint32_t *udata;
520     uint32_t sums[MAX_PARTITION_ORDER+1][MAX_PARTITIONS];
521
522     assert(pmin >= 0 && pmin <= MAX_PARTITION_ORDER);
523     assert(pmax >= 0 && pmax <= MAX_PARTITION_ORDER);
524     assert(pmin <= pmax);
525
526     udata = av_malloc(n * sizeof(uint32_t));
527     for(i=0; i<n; i++) {
528         udata[i] = (2*data[i]) ^ (data[i]>>31);
529     }
530
531     calc_sums(pmin, pmax, udata, n, pred_order, sums);
532
533     opt_porder = pmin;
534     bits[pmin] = UINT32_MAX;
535     for(i=pmin; i<=pmax; i++) {
536         bits[i] = calc_optimal_rice_params(&tmp_rc, i, sums[i], n, pred_order);
537         if(bits[i] <= bits[opt_porder]) {
538             opt_porder = i;
539             *rc= tmp_rc;
540         }
541     }
542
543     av_freep(&udata);
544     return bits[opt_porder];
545 }
546
547 static int get_max_p_order(int max_porder, int n, int order)
548 {
549     int porder = FFMIN(max_porder, av_log2(n^(n-1)));
550     if(order > 0)
551         porder = FFMIN(porder, av_log2(n/order));
552     return porder;
553 }
554
555 static uint32_t calc_rice_params_fixed(RiceContext *rc, int pmin, int pmax,
556                                        int32_t *data, int n, int pred_order,
557                                        int bps)
558 {
559     uint32_t bits;
560     pmin = get_max_p_order(pmin, n, pred_order);
561     pmax = get_max_p_order(pmax, n, pred_order);
562     bits = pred_order*bps + 6;
563     bits += calc_rice_params(rc, pmin, pmax, data, n, pred_order);
564     return bits;
565 }
566
567 static uint32_t calc_rice_params_lpc(RiceContext *rc, int pmin, int pmax,
568                                      int32_t *data, int n, int pred_order,
569                                      int bps, int precision)
570 {
571     uint32_t bits;
572     pmin = get_max_p_order(pmin, n, pred_order);
573     pmax = get_max_p_order(pmax, n, pred_order);
574     bits = pred_order*bps + 4 + 5 + pred_order*precision + 6;
575     bits += calc_rice_params(rc, pmin, pmax, data, n, pred_order);
576     return bits;
577 }
578
579 /**
580  * Apply Welch window function to audio block
581  */
582 static void apply_welch_window(const int32_t *data, int len, double *w_data)
583 {
584     int i, n2;
585     double w;
586     double c;
587
588     assert(!(len&1)); //the optimization in r11881 does not support odd len
589                       //if someone wants odd len extend the change in r11881
590
591     n2 = (len >> 1);
592     c = 2.0 / (len - 1.0);
593
594     w_data+=n2;
595       data+=n2;
596     for(i=0; i<n2; i++) {
597         w = c - n2 + i;
598         w = 1.0 - (w * w);
599         w_data[-i-1] = data[-i-1] * w;
600         w_data[+i  ] = data[+i  ] * w;
601     }
602 }
603
604 /**
605  * Calculates autocorrelation data from audio samples
606  * A Welch window function is applied before calculation.
607  */
608 void ff_flac_compute_autocorr(const int32_t *data, int len, int lag,
609                               double *autoc)
610 {
611     int i, j;
612     double tmp[len + lag + 1];
613     double *data1= tmp + lag;
614
615     apply_welch_window(data, len, data1);
616
617     for(j=0; j<lag; j++)
618         data1[j-lag]= 0.0;
619     data1[len] = 0.0;
620
621     for(j=0; j<lag; j+=2){
622         double sum0 = 1.0, sum1 = 1.0;
623         for(i=0; i<len; i++){
624             sum0 += data1[i] * data1[i-j];
625             sum1 += data1[i] * data1[i-j-1];
626         }
627         autoc[j  ] = sum0;
628         autoc[j+1] = sum1;
629     }
630
631     if(j==lag){
632         double sum = 1.0;
633         for(i=0; i<len; i+=2){
634             sum += data1[i  ] * data1[i-j  ]
635                  + data1[i+1] * data1[i-j+1];
636         }
637         autoc[j] = sum;
638     }
639 }
640
641
642 static void encode_residual_verbatim(int32_t *res, int32_t *smp, int n)
643 {
644     assert(n > 0);
645     memcpy(res, smp, n * sizeof(int32_t));
646 }
647
648 static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n,
649                                   int order)
650 {
651     int i;
652
653     for(i=0; i<order; i++) {
654         res[i] = smp[i];
655     }
656
657     if(order==0){
658         for(i=order; i<n; i++)
659             res[i]= smp[i];
660     }else if(order==1){
661         for(i=order; i<n; i++)
662             res[i]= smp[i] - smp[i-1];
663     }else if(order==2){
664         int a = smp[order-1] - smp[order-2];
665         for(i=order; i<n; i+=2) {
666             int b = smp[i] - smp[i-1];
667             res[i]= b - a;
668             a = smp[i+1] - smp[i];
669             res[i+1]= a - b;
670         }
671     }else if(order==3){
672         int a = smp[order-1] - smp[order-2];
673         int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
674         for(i=order; i<n; i+=2) {
675             int b = smp[i] - smp[i-1];
676             int d = b - a;
677             res[i]= d - c;
678             a = smp[i+1] - smp[i];
679             c = a - b;
680             res[i+1]= c - d;
681         }
682     }else{
683         int a = smp[order-1] - smp[order-2];
684         int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
685         int e = smp[order-1] - 3*smp[order-2] + 3*smp[order-3] - smp[order-4];
686         for(i=order; i<n; i+=2) {
687             int b = smp[i] - smp[i-1];
688             int d = b - a;
689             int f = d - c;
690             res[i]= f - e;
691             a = smp[i+1] - smp[i];
692             c = a - b;
693             e = c - d;
694             res[i+1]= e - f;
695         }
696     }
697 }
698
699 #define LPC1(x) {\
700     int c = coefs[(x)-1];\
701     p0 += c*s;\
702     s = smp[i-(x)+1];\
703     p1 += c*s;\
704 }
705
706 static av_always_inline void encode_residual_lpc_unrolled(
707     int32_t *res, const int32_t *smp, int n,
708     int order, const int32_t *coefs, int shift, int big)
709 {
710     int i;
711     for(i=order; i<n; i+=2) {
712         int s = smp[i-order];
713         int p0 = 0, p1 = 0;
714         if(big) {
715             switch(order) {
716                 case 32: LPC1(32)
717                 case 31: LPC1(31)
718                 case 30: LPC1(30)
719                 case 29: LPC1(29)
720                 case 28: LPC1(28)
721                 case 27: LPC1(27)
722                 case 26: LPC1(26)
723                 case 25: LPC1(25)
724                 case 24: LPC1(24)
725                 case 23: LPC1(23)
726                 case 22: LPC1(22)
727                 case 21: LPC1(21)
728                 case 20: LPC1(20)
729                 case 19: LPC1(19)
730                 case 18: LPC1(18)
731                 case 17: LPC1(17)
732                 case 16: LPC1(16)
733                 case 15: LPC1(15)
734                 case 14: LPC1(14)
735                 case 13: LPC1(13)
736                 case 12: LPC1(12)
737                 case 11: LPC1(11)
738                 case 10: LPC1(10)
739                 case  9: LPC1( 9)
740                          LPC1( 8)
741                          LPC1( 7)
742                          LPC1( 6)
743                          LPC1( 5)
744                          LPC1( 4)
745                          LPC1( 3)
746                          LPC1( 2)
747                          LPC1( 1)
748             }
749         } else {
750             switch(order) {
751                 case  8: LPC1( 8)
752                 case  7: LPC1( 7)
753                 case  6: LPC1( 6)
754                 case  5: LPC1( 5)
755                 case  4: LPC1( 4)
756                 case  3: LPC1( 3)
757                 case  2: LPC1( 2)
758                 case  1: LPC1( 1)
759             }
760         }
761         res[i  ] = smp[i  ] - (p0 >> shift);
762         res[i+1] = smp[i+1] - (p1 >> shift);
763     }
764 }
765
766 static void encode_residual_lpc(int32_t *res, const int32_t *smp, int n,
767                                 int order, const int32_t *coefs, int shift)
768 {
769     int i;
770     for(i=0; i<order; i++) {
771         res[i] = smp[i];
772     }
773 #if CONFIG_SMALL
774     for(i=order; i<n; i+=2) {
775         int j;
776         int s = smp[i];
777         int p0 = 0, p1 = 0;
778         for(j=0; j<order; j++) {
779             int c = coefs[j];
780             p1 += c*s;
781             s = smp[i-j-1];
782             p0 += c*s;
783         }
784         res[i  ] = smp[i  ] - (p0 >> shift);
785         res[i+1] = smp[i+1] - (p1 >> shift);
786     }
787 #else
788     switch(order) {
789         case  1: encode_residual_lpc_unrolled(res, smp, n, 1, coefs, shift, 0); break;
790         case  2: encode_residual_lpc_unrolled(res, smp, n, 2, coefs, shift, 0); break;
791         case  3: encode_residual_lpc_unrolled(res, smp, n, 3, coefs, shift, 0); break;
792         case  4: encode_residual_lpc_unrolled(res, smp, n, 4, coefs, shift, 0); break;
793         case  5: encode_residual_lpc_unrolled(res, smp, n, 5, coefs, shift, 0); break;
794         case  6: encode_residual_lpc_unrolled(res, smp, n, 6, coefs, shift, 0); break;
795         case  7: encode_residual_lpc_unrolled(res, smp, n, 7, coefs, shift, 0); break;
796         case  8: encode_residual_lpc_unrolled(res, smp, n, 8, coefs, shift, 0); break;
797         default: encode_residual_lpc_unrolled(res, smp, n, order, coefs, shift, 1); break;
798     }
799 #endif
800 }
801
802 static int encode_residual(FlacEncodeContext *ctx, int ch)
803 {
804     int i, n;
805     int min_order, max_order, opt_order, precision, omethod;
806     int min_porder, max_porder;
807     FlacFrame *frame;
808     FlacSubframe *sub;
809     int32_t coefs[MAX_LPC_ORDER][MAX_LPC_ORDER];
810     int shift[MAX_LPC_ORDER];
811     int32_t *res, *smp;
812
813     frame = &ctx->frame;
814     sub = &frame->subframes[ch];
815     res = sub->residual;
816     smp = sub->samples;
817     n = frame->blocksize;
818
819     /* CONSTANT */
820     for(i=1; i<n; i++) {
821         if(smp[i] != smp[0]) break;
822     }
823     if(i == n) {
824         sub->type = sub->type_code = FLAC_SUBFRAME_CONSTANT;
825         res[0] = smp[0];
826         return sub->obits;
827     }
828
829     /* VERBATIM */
830     if(n < 5) {
831         sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM;
832         encode_residual_verbatim(res, smp, n);
833         return sub->obits * n;
834     }
835
836     min_order = ctx->options.min_prediction_order;
837     max_order = ctx->options.max_prediction_order;
838     min_porder = ctx->options.min_partition_order;
839     max_porder = ctx->options.max_partition_order;
840     precision = ctx->options.lpc_coeff_precision;
841     omethod = ctx->options.prediction_order_method;
842
843     /* FIXED */
844     if(!ctx->options.use_lpc || max_order == 0 || (n <= max_order)) {
845         uint32_t bits[MAX_FIXED_ORDER+1];
846         if(max_order > MAX_FIXED_ORDER) max_order = MAX_FIXED_ORDER;
847         opt_order = 0;
848         bits[0] = UINT32_MAX;
849         for(i=min_order; i<=max_order; i++) {
850             encode_residual_fixed(res, smp, n, i);
851             bits[i] = calc_rice_params_fixed(&sub->rc, min_porder, max_porder, res,
852                                              n, i, sub->obits);
853             if(bits[i] < bits[opt_order]) {
854                 opt_order = i;
855             }
856         }
857         sub->order = opt_order;
858         sub->type = FLAC_SUBFRAME_FIXED;
859         sub->type_code = sub->type | sub->order;
860         if(sub->order != max_order) {
861             encode_residual_fixed(res, smp, n, sub->order);
862             return calc_rice_params_fixed(&sub->rc, min_porder, max_porder, res, n,
863                                           sub->order, sub->obits);
864         }
865         return bits[sub->order];
866     }
867
868     /* LPC */
869     opt_order = ff_lpc_calc_coefs(&ctx->dsp, smp, n, min_order, max_order,
870                                   precision, coefs, shift, ctx->options.use_lpc,
871                                   omethod, MAX_LPC_SHIFT, 0);
872
873     if(omethod == ORDER_METHOD_2LEVEL ||
874        omethod == ORDER_METHOD_4LEVEL ||
875        omethod == ORDER_METHOD_8LEVEL) {
876         int levels = 1 << omethod;
877         uint32_t bits[levels];
878         int order;
879         int opt_index = levels-1;
880         opt_order = max_order-1;
881         bits[opt_index] = UINT32_MAX;
882         for(i=levels-1; i>=0; i--) {
883             order = min_order + (((max_order-min_order+1) * (i+1)) / levels)-1;
884             if(order < 0) order = 0;
885             encode_residual_lpc(res, smp, n, order+1, coefs[order], shift[order]);
886             bits[i] = calc_rice_params_lpc(&sub->rc, min_porder, max_porder,
887                                            res, n, order+1, sub->obits, precision);
888             if(bits[i] < bits[opt_index]) {
889                 opt_index = i;
890                 opt_order = order;
891             }
892         }
893         opt_order++;
894     } else if(omethod == ORDER_METHOD_SEARCH) {
895         // brute-force optimal order search
896         uint32_t bits[MAX_LPC_ORDER];
897         opt_order = 0;
898         bits[0] = UINT32_MAX;
899         for(i=min_order-1; i<max_order; i++) {
900             encode_residual_lpc(res, smp, n, i+1, coefs[i], shift[i]);
901             bits[i] = calc_rice_params_lpc(&sub->rc, min_porder, max_porder,
902                                            res, n, i+1, sub->obits, precision);
903             if(bits[i] < bits[opt_order]) {
904                 opt_order = i;
905             }
906         }
907         opt_order++;
908     } else if(omethod == ORDER_METHOD_LOG) {
909         uint32_t bits[MAX_LPC_ORDER];
910         int step;
911
912         opt_order= min_order - 1 + (max_order-min_order)/3;
913         memset(bits, -1, sizeof(bits));
914
915         for(step=16 ;step; step>>=1){
916             int last= opt_order;
917             for(i=last-step; i<=last+step; i+= step){
918                 if(i<min_order-1 || i>=max_order || bits[i] < UINT32_MAX)
919                     continue;
920                 encode_residual_lpc(res, smp, n, i+1, coefs[i], shift[i]);
921                 bits[i] = calc_rice_params_lpc(&sub->rc, min_porder, max_porder,
922                                             res, n, i+1, sub->obits, precision);
923                 if(bits[i] < bits[opt_order])
924                     opt_order= i;
925             }
926         }
927         opt_order++;
928     }
929
930     sub->order = opt_order;
931     sub->type = FLAC_SUBFRAME_LPC;
932     sub->type_code = sub->type | (sub->order-1);
933     sub->shift = shift[sub->order-1];
934     for(i=0; i<sub->order; i++) {
935         sub->coefs[i] = coefs[sub->order-1][i];
936     }
937     encode_residual_lpc(res, smp, n, sub->order, sub->coefs, sub->shift);
938     return calc_rice_params_lpc(&sub->rc, min_porder, max_porder, res, n, sub->order,
939                                 sub->obits, precision);
940 }
941
942 static int encode_residual_v(FlacEncodeContext *ctx, int ch)
943 {
944     int i, n;
945     FlacFrame *frame;
946     FlacSubframe *sub;
947     int32_t *res, *smp;
948
949     frame = &ctx->frame;
950     sub = &frame->subframes[ch];
951     res = sub->residual;
952     smp = sub->samples;
953     n = frame->blocksize;
954
955     /* CONSTANT */
956     for(i=1; i<n; i++) {
957         if(smp[i] != smp[0]) break;
958     }
959     if(i == n) {
960         sub->type = sub->type_code = FLAC_SUBFRAME_CONSTANT;
961         res[0] = smp[0];
962         return sub->obits;
963     }
964
965     /* VERBATIM */
966     sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM;
967     encode_residual_verbatim(res, smp, n);
968     return sub->obits * n;
969 }
970
971 static int estimate_stereo_mode(int32_t *left_ch, int32_t *right_ch, int n)
972 {
973     int i, best;
974     int32_t lt, rt;
975     uint64_t sum[4];
976     uint64_t score[4];
977     int k;
978
979     /* calculate sum of 2nd order residual for each channel */
980     sum[0] = sum[1] = sum[2] = sum[3] = 0;
981     for(i=2; i<n; i++) {
982         lt = left_ch[i] - 2*left_ch[i-1] + left_ch[i-2];
983         rt = right_ch[i] - 2*right_ch[i-1] + right_ch[i-2];
984         sum[2] += FFABS((lt + rt) >> 1);
985         sum[3] += FFABS(lt - rt);
986         sum[0] += FFABS(lt);
987         sum[1] += FFABS(rt);
988     }
989     /* estimate bit counts */
990     for(i=0; i<4; i++) {
991         k = find_optimal_param(2*sum[i], n);
992         sum[i] = rice_encode_count(2*sum[i], n, k);
993     }
994
995     /* calculate score for each mode */
996     score[0] = sum[0] + sum[1];
997     score[1] = sum[0] + sum[3];
998     score[2] = sum[1] + sum[3];
999     score[3] = sum[2] + sum[3];
1000
1001     /* return mode with lowest score */
1002     best = 0;
1003     for(i=1; i<4; i++) {
1004         if(score[i] < score[best]) {
1005             best = i;
1006         }
1007     }
1008     if(best == 0) {
1009         return FLAC_CHMODE_LEFT_RIGHT;
1010     } else if(best == 1) {
1011         return FLAC_CHMODE_LEFT_SIDE;
1012     } else if(best == 2) {
1013         return FLAC_CHMODE_RIGHT_SIDE;
1014     } else {
1015         return FLAC_CHMODE_MID_SIDE;
1016     }
1017 }
1018
1019 /**
1020  * Perform stereo channel decorrelation
1021  */
1022 static void channel_decorrelation(FlacEncodeContext *ctx)
1023 {
1024     FlacFrame *frame;
1025     int32_t *left, *right;
1026     int i, n;
1027
1028     frame = &ctx->frame;
1029     n = frame->blocksize;
1030     left  = frame->subframes[0].samples;
1031     right = frame->subframes[1].samples;
1032
1033     if(ctx->channels != 2) {
1034         frame->ch_mode = FLAC_CHMODE_NOT_STEREO;
1035         return;
1036     }
1037
1038     frame->ch_mode = estimate_stereo_mode(left, right, n);
1039
1040     /* perform decorrelation and adjust bits-per-sample */
1041     if(frame->ch_mode == FLAC_CHMODE_LEFT_RIGHT) {
1042         return;
1043     }
1044     if(frame->ch_mode == FLAC_CHMODE_MID_SIDE) {
1045         int32_t tmp;
1046         for(i=0; i<n; i++) {
1047             tmp = left[i];
1048             left[i] = (tmp + right[i]) >> 1;
1049             right[i] = tmp - right[i];
1050         }
1051         frame->subframes[1].obits++;
1052     } else if(frame->ch_mode == FLAC_CHMODE_LEFT_SIDE) {
1053         for(i=0; i<n; i++) {
1054             right[i] = left[i] - right[i];
1055         }
1056         frame->subframes[1].obits++;
1057     } else {
1058         for(i=0; i<n; i++) {
1059             left[i] -= right[i];
1060         }
1061         frame->subframes[0].obits++;
1062     }
1063 }
1064
1065 static void write_utf8(PutBitContext *pb, uint32_t val)
1066 {
1067     uint8_t tmp;
1068     PUT_UTF8(val, tmp, put_bits(pb, 8, tmp);)
1069 }
1070
1071 static void output_frame_header(FlacEncodeContext *s)
1072 {
1073     FlacFrame *frame;
1074     int crc;
1075
1076     frame = &s->frame;
1077
1078     put_bits(&s->pb, 16, 0xFFF8);
1079     put_bits(&s->pb, 4, frame->bs_code[0]);
1080     put_bits(&s->pb, 4, s->sr_code[0]);
1081     if(frame->ch_mode == FLAC_CHMODE_NOT_STEREO) {
1082         put_bits(&s->pb, 4, s->ch_code);
1083     } else {
1084         put_bits(&s->pb, 4, frame->ch_mode);
1085     }
1086     put_bits(&s->pb, 3, 4); /* bits-per-sample code */
1087     put_bits(&s->pb, 1, 0);
1088     write_utf8(&s->pb, s->frame_count);
1089     if(frame->bs_code[0] == 6) {
1090         put_bits(&s->pb, 8, frame->bs_code[1]);
1091     } else if(frame->bs_code[0] == 7) {
1092         put_bits(&s->pb, 16, frame->bs_code[1]);
1093     }
1094     if(s->sr_code[0] == 12) {
1095         put_bits(&s->pb, 8, s->sr_code[1]);
1096     } else if(s->sr_code[0] > 12) {
1097         put_bits(&s->pb, 16, s->sr_code[1]);
1098     }
1099     flush_put_bits(&s->pb);
1100     crc = av_crc(av_crc_get_table(AV_CRC_8_ATM), 0,
1101                  s->pb.buf, put_bits_count(&s->pb)>>3);
1102     put_bits(&s->pb, 8, crc);
1103 }
1104
1105 static void output_subframe_constant(FlacEncodeContext *s, int ch)
1106 {
1107     FlacSubframe *sub;
1108     int32_t res;
1109
1110     sub = &s->frame.subframes[ch];
1111     res = sub->residual[0];
1112     put_sbits(&s->pb, sub->obits, res);
1113 }
1114
1115 static void output_subframe_verbatim(FlacEncodeContext *s, int ch)
1116 {
1117     int i;
1118     FlacFrame *frame;
1119     FlacSubframe *sub;
1120     int32_t res;
1121
1122     frame = &s->frame;
1123     sub = &frame->subframes[ch];
1124
1125     for(i=0; i<frame->blocksize; i++) {
1126         res = sub->residual[i];
1127         put_sbits(&s->pb, sub->obits, res);
1128     }
1129 }
1130
1131 static void output_residual(FlacEncodeContext *ctx, int ch)
1132 {
1133     int i, j, p, n, parts;
1134     int k, porder, psize, res_cnt;
1135     FlacFrame *frame;
1136     FlacSubframe *sub;
1137     int32_t *res;
1138
1139     frame = &ctx->frame;
1140     sub = &frame->subframes[ch];
1141     res = sub->residual;
1142     n = frame->blocksize;
1143
1144     /* rice-encoded block */
1145     put_bits(&ctx->pb, 2, 0);
1146
1147     /* partition order */
1148     porder = sub->rc.porder;
1149     psize = n >> porder;
1150     parts = (1 << porder);
1151     put_bits(&ctx->pb, 4, porder);
1152     res_cnt = psize - sub->order;
1153
1154     /* residual */
1155     j = sub->order;
1156     for(p=0; p<parts; p++) {
1157         k = sub->rc.params[p];
1158         put_bits(&ctx->pb, 4, k);
1159         if(p == 1) res_cnt = psize;
1160         for(i=0; i<res_cnt && j<n; i++, j++) {
1161             set_sr_golomb_flac(&ctx->pb, res[j], k, INT32_MAX, 0);
1162         }
1163     }
1164 }
1165
1166 static void output_subframe_fixed(FlacEncodeContext *ctx, int ch)
1167 {
1168     int i;
1169     FlacFrame *frame;
1170     FlacSubframe *sub;
1171
1172     frame = &ctx->frame;
1173     sub = &frame->subframes[ch];
1174
1175     /* warm-up samples */
1176     for(i=0; i<sub->order; i++) {
1177         put_sbits(&ctx->pb, sub->obits, sub->residual[i]);
1178     }
1179
1180     /* residual */
1181     output_residual(ctx, ch);
1182 }
1183
1184 static void output_subframe_lpc(FlacEncodeContext *ctx, int ch)
1185 {
1186     int i, cbits;
1187     FlacFrame *frame;
1188     FlacSubframe *sub;
1189
1190     frame = &ctx->frame;
1191     sub = &frame->subframes[ch];
1192
1193     /* warm-up samples */
1194     for(i=0; i<sub->order; i++) {
1195         put_sbits(&ctx->pb, sub->obits, sub->residual[i]);
1196     }
1197
1198     /* LPC coefficients */
1199     cbits = ctx->options.lpc_coeff_precision;
1200     put_bits(&ctx->pb, 4, cbits-1);
1201     put_sbits(&ctx->pb, 5, sub->shift);
1202     for(i=0; i<sub->order; i++) {
1203         put_sbits(&ctx->pb, cbits, sub->coefs[i]);
1204     }
1205
1206     /* residual */
1207     output_residual(ctx, ch);
1208 }
1209
1210 static void output_subframes(FlacEncodeContext *s)
1211 {
1212     FlacFrame *frame;
1213     FlacSubframe *sub;
1214     int ch;
1215
1216     frame = &s->frame;
1217
1218     for(ch=0; ch<s->channels; ch++) {
1219         sub = &frame->subframes[ch];
1220
1221         /* subframe header */
1222         put_bits(&s->pb, 1, 0);
1223         put_bits(&s->pb, 6, sub->type_code);
1224         put_bits(&s->pb, 1, 0); /* no wasted bits */
1225
1226         /* subframe */
1227         if(sub->type == FLAC_SUBFRAME_CONSTANT) {
1228             output_subframe_constant(s, ch);
1229         } else if(sub->type == FLAC_SUBFRAME_VERBATIM) {
1230             output_subframe_verbatim(s, ch);
1231         } else if(sub->type == FLAC_SUBFRAME_FIXED) {
1232             output_subframe_fixed(s, ch);
1233         } else if(sub->type == FLAC_SUBFRAME_LPC) {
1234             output_subframe_lpc(s, ch);
1235         }
1236     }
1237 }
1238
1239 static void output_frame_footer(FlacEncodeContext *s)
1240 {
1241     int crc;
1242     flush_put_bits(&s->pb);
1243     crc = bswap_16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
1244                           s->pb.buf, put_bits_count(&s->pb)>>3));
1245     put_bits(&s->pb, 16, crc);
1246     flush_put_bits(&s->pb);
1247 }
1248
1249 static void update_md5_sum(FlacEncodeContext *s, int16_t *samples)
1250 {
1251 #ifdef WORDS_BIGENDIAN
1252     int i;
1253     for(i = 0; i < s->frame.blocksize*s->channels; i++) {
1254         int16_t smp = le2me_16(samples[i]);
1255         av_md5_update(s->md5ctx, (uint8_t *)&smp, 2);
1256     }
1257 #else
1258     av_md5_update(s->md5ctx, (uint8_t *)samples, s->frame.blocksize*s->channels*2);
1259 #endif
1260 }
1261
1262 static int flac_encode_frame(AVCodecContext *avctx, uint8_t *frame,
1263                              int buf_size, void *data)
1264 {
1265     int ch;
1266     FlacEncodeContext *s;
1267     int16_t *samples = data;
1268     int out_bytes;
1269     int reencoded=0;
1270
1271     s = avctx->priv_data;
1272
1273     if(buf_size < s->max_framesize*2) {
1274         av_log(avctx, AV_LOG_ERROR, "output buffer too small\n");
1275         return 0;
1276     }
1277
1278     /* when the last block is reached, update the header in extradata */
1279     if (!data) {
1280         s->min_framesize = s->min_encoded_framesize;
1281         s->max_framesize = s->max_encoded_framesize;
1282         av_md5_final(s->md5ctx, s->md5sum);
1283         write_streaminfo(s, avctx->extradata);
1284         return 0;
1285     }
1286
1287     init_frame(s);
1288
1289     copy_samples(s, samples);
1290
1291     channel_decorrelation(s);
1292
1293     for(ch=0; ch<s->channels; ch++) {
1294         encode_residual(s, ch);
1295     }
1296
1297 write_frame:
1298     init_put_bits(&s->pb, frame, buf_size);
1299     output_frame_header(s);
1300     output_subframes(s);
1301     output_frame_footer(s);
1302     out_bytes = put_bits_count(&s->pb) >> 3;
1303
1304     if(out_bytes > s->max_framesize) {
1305         if(reencoded) {
1306             /* still too large. must be an error. */
1307             av_log(avctx, AV_LOG_ERROR, "error encoding frame\n");
1308             return -1;
1309         }
1310
1311         /* frame too large. use verbatim mode */
1312         for(ch=0; ch<s->channels; ch++) {
1313             encode_residual_v(s, ch);
1314         }
1315         reencoded = 1;
1316         goto write_frame;
1317     }
1318
1319     s->frame_count++;
1320     s->sample_count += avctx->frame_size;
1321     update_md5_sum(s, samples);
1322     if (out_bytes > s->max_encoded_framesize)
1323         s->max_encoded_framesize = out_bytes;
1324     if (out_bytes < s->min_encoded_framesize)
1325         s->min_encoded_framesize = out_bytes;
1326
1327     return out_bytes;
1328 }
1329
1330 static av_cold int flac_encode_close(AVCodecContext *avctx)
1331 {
1332     if (avctx->priv_data) {
1333         FlacEncodeContext *s = avctx->priv_data;
1334         av_freep(&s->md5ctx);
1335     }
1336     av_freep(&avctx->extradata);
1337     avctx->extradata_size = 0;
1338     av_freep(&avctx->coded_frame);
1339     return 0;
1340 }
1341
1342 AVCodec flac_encoder = {
1343     "flac",
1344     CODEC_TYPE_AUDIO,
1345     CODEC_ID_FLAC,
1346     sizeof(FlacEncodeContext),
1347     flac_encode_init,
1348     flac_encode_frame,
1349     flac_encode_close,
1350     NULL,
1351     .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
1352     .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
1353     .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
1354 };