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