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