libavcodec/flacenc.c
Go to the documentation of this file.
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/avassert.h"
23 #include "libavutil/crc.h"
24 #include "libavutil/intmath.h"
25 #include "libavutil/md5.h"
26 #include "libavutil/opt.h"
27 #include "avcodec.h"
28 #include "dsputil.h"
29 #include "put_bits.h"
30 #include "golomb.h"
31 #include "internal.h"
32 #include "lpc.h"
33 #include "flac.h"
34 #include "flacdata.h"
35 #include "flacdsp.h"
36 
37 #define FLAC_SUBFRAME_CONSTANT 0
38 #define FLAC_SUBFRAME_VERBATIM 1
39 #define FLAC_SUBFRAME_FIXED 8
40 #define FLAC_SUBFRAME_LPC 32
41 
42 #define MAX_FIXED_ORDER 4
43 #define MAX_PARTITION_ORDER 8
44 #define MAX_PARTITIONS (1 << MAX_PARTITION_ORDER)
45 #define MAX_LPC_PRECISION 15
46 #define MAX_LPC_SHIFT 15
47 
48 enum CodingMode {
51 };
52 
53 typedef struct CompressionOptions {
64  int ch_mode;
66 
67 typedef struct RiceContext {
68  enum CodingMode coding_mode;
69  int porder;
71 } RiceContext;
72 
73 typedef struct FlacSubframe {
74  int type;
75  int type_code;
76  int obits;
77  int wasted;
78  int order;
80  int shift;
84 } FlacSubframe;
85 
86 typedef struct FlacFrame {
88  int blocksize;
89  int bs_code[2];
91  int ch_mode;
93 } FlacFrame;
94 
95 typedef struct FlacEncodeContext {
96  AVClass *class;
98  int channels;
100  int sr_code[2];
101  int bps_code;
106  uint32_t frame_count;
107  uint64_t sample_count;
108  uint8_t md5sum[16];
113  struct AVMD5 *md5ctx;
115  unsigned int md5_buffer_size;
119 
120 
121 /**
122  * Write streaminfo metadata block to byte array.
123  */
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->max_blocksize);
133  put_bits(&pb, 16, s->max_blocksize);
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, s->avctx->bits_per_raw_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 /**
148  * Set blocksize based on samplerate.
149  * Choose the closest predefined blocksize >= BLOCK_TIME_MS milliseconds.
150  */
151 static int select_blocksize(int samplerate, int block_time_ms)
152 {
153  int i;
154  int target;
155  int blocksize;
156 
157  av_assert0(samplerate > 0);
158  blocksize = ff_flac_blocksize_table[1];
159  target = (samplerate * block_time_ms) / 1000;
160  for (i = 0; i < 16; i++) {
161  if (target >= ff_flac_blocksize_table[i] &&
162  ff_flac_blocksize_table[i] > blocksize) {
163  blocksize = ff_flac_blocksize_table[i];
164  }
165  }
166  return blocksize;
167 }
168 
169 
171 {
172  AVCodecContext *avctx = s->avctx;
173  CompressionOptions *opt = &s->options;
174 
175  av_log(avctx, AV_LOG_DEBUG, " compression: %d\n", opt->compression_level);
176 
177  switch (opt->lpc_type) {
178  case FF_LPC_TYPE_NONE:
179  av_log(avctx, AV_LOG_DEBUG, " lpc type: None\n");
180  break;
181  case FF_LPC_TYPE_FIXED:
182  av_log(avctx, AV_LOG_DEBUG, " lpc type: Fixed pre-defined coefficients\n");
183  break;
185  av_log(avctx, AV_LOG_DEBUG, " lpc type: Levinson-Durbin recursion with Welch window\n");
186  break;
188  av_log(avctx, AV_LOG_DEBUG, " lpc type: Cholesky factorization, %d pass%s\n",
189  opt->lpc_passes, opt->lpc_passes == 1 ? "" : "es");
190  break;
191  }
192 
193  av_log(avctx, AV_LOG_DEBUG, " prediction order: %d, %d\n",
195 
196  switch (opt->prediction_order_method) {
197  case ORDER_METHOD_EST:
198  av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "estimate");
199  break;
200  case ORDER_METHOD_2LEVEL:
201  av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "2-level");
202  break;
203  case ORDER_METHOD_4LEVEL:
204  av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "4-level");
205  break;
206  case ORDER_METHOD_8LEVEL:
207  av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "8-level");
208  break;
209  case ORDER_METHOD_SEARCH:
210  av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "full search");
211  break;
212  case ORDER_METHOD_LOG:
213  av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "log search");
214  break;
215  }
216 
217 
218  av_log(avctx, AV_LOG_DEBUG, " partition order: %d, %d\n",
220 
221  av_log(avctx, AV_LOG_DEBUG, " block size: %d\n", avctx->frame_size);
222 
223  av_log(avctx, AV_LOG_DEBUG, " lpc precision: %d\n",
224  opt->lpc_coeff_precision);
225 }
226 
227 
229 {
230  int freq = avctx->sample_rate;
231  int channels = avctx->channels;
232  FlacEncodeContext *s = avctx->priv_data;
233  int i, level, ret;
234  uint8_t *streaminfo;
235 
236  s->avctx = avctx;
237 
238  switch (avctx->sample_fmt) {
239  case AV_SAMPLE_FMT_S16:
240  avctx->bits_per_raw_sample = 16;
241  s->bps_code = 4;
242  break;
243  case AV_SAMPLE_FMT_S32:
244  if (avctx->bits_per_raw_sample != 24)
245  av_log(avctx, AV_LOG_WARNING, "encoding as 24 bits-per-sample\n");
246  avctx->bits_per_raw_sample = 24;
247  s->bps_code = 6;
248  break;
249  }
250 
251  if (channels < 1 || channels > FLAC_MAX_CHANNELS) {
252  av_log(avctx, AV_LOG_ERROR, "%d channels not supported (max %d)\n",
253  channels, FLAC_MAX_CHANNELS);
254  return AVERROR(EINVAL);
255  }
256  s->channels = channels;
257 
258  /* find samplerate in table */
259  if (freq < 1)
260  return -1;
261  for (i = 4; i < 12; i++) {
262  if (freq == ff_flac_sample_rate_table[i]) {
264  s->sr_code[0] = i;
265  s->sr_code[1] = 0;
266  break;
267  }
268  }
269  /* if not in table, samplerate is non-standard */
270  if (i == 12) {
271  if (freq % 1000 == 0 && freq < 255000) {
272  s->sr_code[0] = 12;
273  s->sr_code[1] = freq / 1000;
274  } else if (freq % 10 == 0 && freq < 655350) {
275  s->sr_code[0] = 14;
276  s->sr_code[1] = freq / 10;
277  } else if (freq < 65535) {
278  s->sr_code[0] = 13;
279  s->sr_code[1] = freq;
280  } else {
281  av_log(avctx, AV_LOG_ERROR, "%d Hz not supported\n", freq);
282  return AVERROR(EINVAL);
283  }
284  s->samplerate = freq;
285  }
286 
287  /* set compression option defaults based on avctx->compression_level */
288  if (avctx->compression_level < 0)
289  s->options.compression_level = 5;
290  else
292 
293  level = s->options.compression_level;
294  if (level > 12) {
295  av_log(avctx, AV_LOG_ERROR, "invalid compression level: %d\n",
297  return AVERROR(EINVAL);
298  }
299 
300  s->options.block_time_ms = ((int[]){ 27, 27, 27,105,105,105,105,105,105,105,105,105,105})[level];
301 
307  FF_LPC_TYPE_LEVINSON})[level];
308 
309  s->options.min_prediction_order = ((int[]){ 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1})[level];
310  s->options.max_prediction_order = ((int[]){ 3, 4, 4, 6, 8, 8, 8, 8, 12, 12, 12, 32, 32})[level];
311 
312  if (s->options.prediction_order_method < 0)
317  ORDER_METHOD_SEARCH})[level];
318 
320  av_log(avctx, AV_LOG_ERROR, "invalid partition orders: min=%d max=%d\n",
322  return AVERROR(EINVAL);
323  }
324  if (s->options.min_partition_order < 0)
325  s->options.min_partition_order = ((int[]){ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})[level];
326  if (s->options.max_partition_order < 0)
327  s->options.max_partition_order = ((int[]){ 2, 2, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8})[level];
328 
329  if (s->options.lpc_type == FF_LPC_TYPE_NONE) {
331  } else if (avctx->min_prediction_order >= 0) {
332  if (s->options.lpc_type == FF_LPC_TYPE_FIXED) {
333  if (avctx->min_prediction_order > MAX_FIXED_ORDER) {
334  av_log(avctx, AV_LOG_ERROR, "invalid min prediction order: %d\n",
335  avctx->min_prediction_order);
336  return AVERROR(EINVAL);
337  }
338  } else if (avctx->min_prediction_order < MIN_LPC_ORDER ||
340  av_log(avctx, AV_LOG_ERROR, "invalid min prediction order: %d\n",
341  avctx->min_prediction_order);
342  return AVERROR(EINVAL);
343  }
345  }
346  if (s->options.lpc_type == FF_LPC_TYPE_NONE) {
348  } else if (avctx->max_prediction_order >= 0) {
349  if (s->options.lpc_type == FF_LPC_TYPE_FIXED) {
350  if (avctx->max_prediction_order > MAX_FIXED_ORDER) {
351  av_log(avctx, AV_LOG_ERROR, "invalid max prediction order: %d\n",
352  avctx->max_prediction_order);
353  return AVERROR(EINVAL);
354  }
355  } else if (avctx->max_prediction_order < MIN_LPC_ORDER ||
357  av_log(avctx, AV_LOG_ERROR, "invalid max prediction order: %d\n",
358  avctx->max_prediction_order);
359  return AVERROR(EINVAL);
360  }
362  }
364  av_log(avctx, AV_LOG_ERROR, "invalid prediction orders: min=%d max=%d\n",
366  return AVERROR(EINVAL);
367  }
368 
369  if (avctx->frame_size > 0) {
370  if (avctx->frame_size < FLAC_MIN_BLOCKSIZE ||
371  avctx->frame_size > FLAC_MAX_BLOCKSIZE) {
372  av_log(avctx, AV_LOG_ERROR, "invalid block size: %d\n",
373  avctx->frame_size);
374  return AVERROR(EINVAL);
375  }
376  } else {
378  }
379  s->max_blocksize = s->avctx->frame_size;
380 
381  /* set maximum encoded frame size in verbatim mode */
383  s->channels,
385 
386  /* initialize MD5 context */
387  s->md5ctx = av_md5_alloc();
388  if (!s->md5ctx)
389  return AVERROR(ENOMEM);
390  av_md5_init(s->md5ctx);
391 
392  streaminfo = av_malloc(FLAC_STREAMINFO_SIZE);
393  if (!streaminfo)
394  return AVERROR(ENOMEM);
395  write_streaminfo(s, streaminfo);
396  avctx->extradata = streaminfo;
398 
399  s->frame_count = 0;
401 
402  if (channels == 3 &&
404  channels == 4 &&
405  avctx->channel_layout != AV_CH_LAYOUT_2_2 &&
406  avctx->channel_layout != AV_CH_LAYOUT_QUAD ||
407  channels == 5 &&
410  channels == 6 &&
413  if (avctx->channel_layout) {
414  av_log(avctx, AV_LOG_ERROR, "Channel layout not supported by Flac, "
415  "output stream will have incorrect "
416  "channel layout.\n");
417  } else {
418  av_log(avctx, AV_LOG_WARNING, "No channel layout specified. The encoder "
419  "will use Flac channel layout for "
420  "%d channels.\n", channels);
421  }
422  }
423 
424  ret = ff_lpc_init(&s->lpc_ctx, avctx->frame_size,
426 
427  ff_dsputil_init(&s->dsp, avctx);
428  ff_flacdsp_init(&s->flac_dsp, avctx->sample_fmt,
429  avctx->bits_per_raw_sample);
430 
432 
433  return ret;
434 }
435 
436 
437 static void init_frame(FlacEncodeContext *s, int nb_samples)
438 {
439  int i, ch;
440  FlacFrame *frame;
441 
442  frame = &s->frame;
443 
444  for (i = 0; i < 16; i++) {
445  if (nb_samples == ff_flac_blocksize_table[i]) {
447  frame->bs_code[0] = i;
448  frame->bs_code[1] = 0;
449  break;
450  }
451  }
452  if (i == 16) {
453  frame->blocksize = nb_samples;
454  if (frame->blocksize <= 256) {
455  frame->bs_code[0] = 6;
456  frame->bs_code[1] = frame->blocksize-1;
457  } else {
458  frame->bs_code[0] = 7;
459  frame->bs_code[1] = frame->blocksize-1;
460  }
461  }
462 
463  for (ch = 0; ch < s->channels; ch++) {
464  FlacSubframe *sub = &frame->subframes[ch];
465 
466  sub->wasted = 0;
467  sub->obits = s->avctx->bits_per_raw_sample;
468 
469  if (sub->obits > 16)
471  else
473  }
474 
475  frame->verbatim_only = 0;
476 }
477 
478 
479 /**
480  * Copy channel-interleaved input samples into separate subframes.
481  */
482 static void copy_samples(FlacEncodeContext *s, const void *samples)
483 {
484  int i, j, ch;
485  FlacFrame *frame;
488 
489 #define COPY_SAMPLES(bits) do { \
490  const int ## bits ## _t *samples0 = samples; \
491  frame = &s->frame; \
492  for (i = 0, j = 0; i < frame->blocksize; i++) \
493  for (ch = 0; ch < s->channels; ch++, j++) \
494  frame->subframes[ch].samples[i] = samples0[j] >> shift; \
495 } while (0)
496 
498  COPY_SAMPLES(16);
499  else
500  COPY_SAMPLES(32);
501 }
502 
503 
504 static uint64_t rice_count_exact(int32_t *res, int n, int k)
505 {
506  int i;
507  uint64_t count = 0;
508 
509  for (i = 0; i < n; i++) {
510  int32_t v = -2 * res[i] - 1;
511  v ^= v >> 31;
512  count += (v >> k) + 1 + k;
513  }
514  return count;
515 }
516 
517 
519  int pred_order)
520 {
521  int p, porder, psize;
522  int i, part_end;
523  uint64_t count = 0;
524 
525  /* subframe header */
526  count += 8;
527 
528  /* subframe */
529  if (sub->type == FLAC_SUBFRAME_CONSTANT) {
530  count += sub->obits;
531  } else if (sub->type == FLAC_SUBFRAME_VERBATIM) {
532  count += s->frame.blocksize * sub->obits;
533  } else {
534  /* warm-up samples */
535  count += pred_order * sub->obits;
536 
537  /* LPC coefficients */
538  if (sub->type == FLAC_SUBFRAME_LPC)
539  count += 4 + 5 + pred_order * s->options.lpc_coeff_precision;
540 
541  /* rice-encoded block */
542  count += 2;
543 
544  /* partition order */
545  porder = sub->rc.porder;
546  psize = s->frame.blocksize >> porder;
547  count += 4;
548 
549  /* residual */
550  i = pred_order;
551  part_end = psize;
552  for (p = 0; p < 1 << porder; p++) {
553  int k = sub->rc.params[p];
554  count += sub->rc.coding_mode;
555  count += rice_count_exact(&sub->residual[i], part_end - i, k);
556  i = part_end;
557  part_end = FFMIN(s->frame.blocksize, part_end + psize);
558  }
559  }
560 
561  return count;
562 }
563 
564 
565 #define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k)))
566 
567 /**
568  * Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0.
569  */
570 static int find_optimal_param(uint64_t sum, int n, int max_param)
571 {
572  int k;
573  uint64_t sum2;
574 
575  if (sum <= n >> 1)
576  return 0;
577  sum2 = sum - (n >> 1);
578  k = av_log2(av_clipl_int32(sum2 / n));
579  return FFMIN(k, max_param);
580 }
581 
582 
583 static uint64_t calc_optimal_rice_params(RiceContext *rc, int porder,
584  uint64_t *sums, int n, int pred_order)
585 {
586  int i;
587  int k, cnt, part, max_param;
588  uint64_t all_bits;
589 
590  max_param = (1 << rc->coding_mode) - 2;
591 
592  part = (1 << porder);
593  all_bits = 4 * part;
594 
595  cnt = (n >> porder) - pred_order;
596  for (i = 0; i < part; i++) {
597  k = find_optimal_param(sums[i], cnt, max_param);
598  rc->params[i] = k;
599  all_bits += rice_encode_count(sums[i], cnt, k);
600  cnt = n >> porder;
601  }
602 
603  rc->porder = porder;
604 
605  return all_bits;
606 }
607 
608 
609 static void calc_sums(int pmin, int pmax, uint32_t *data, int n, int pred_order,
610  uint64_t sums[][MAX_PARTITIONS])
611 {
612  int i, j;
613  int parts;
614  uint32_t *res, *res_end;
615 
616  /* sums for highest level */
617  parts = (1 << pmax);
618  res = &data[pred_order];
619  res_end = &data[n >> pmax];
620  for (i = 0; i < parts; i++) {
621  uint64_t sum = 0;
622  while (res < res_end)
623  sum += *(res++);
624  sums[pmax][i] = sum;
625  res_end += n >> pmax;
626  }
627  /* sums for lower levels */
628  for (i = pmax - 1; i >= pmin; i--) {
629  parts = (1 << i);
630  for (j = 0; j < parts; j++)
631  sums[i][j] = sums[i+1][2*j] + sums[i+1][2*j+1];
632  }
633 }
634 
635 
636 static uint64_t calc_rice_params(RiceContext *rc, int pmin, int pmax,
637  int32_t *data, int n, int pred_order)
638 {
639  int i;
640  uint64_t bits[MAX_PARTITION_ORDER+1];
641  int opt_porder;
642  RiceContext tmp_rc;
643  uint32_t *udata;
644  uint64_t sums[MAX_PARTITION_ORDER+1][MAX_PARTITIONS];
645 
646  av_assert1(pmin >= 0 && pmin <= MAX_PARTITION_ORDER);
647  av_assert1(pmax >= 0 && pmax <= MAX_PARTITION_ORDER);
648  av_assert1(pmin <= pmax);
649 
650  tmp_rc.coding_mode = rc->coding_mode;
651 
652  udata = av_malloc(n * sizeof(uint32_t));
653  for (i = 0; i < n; i++)
654  udata[i] = (2*data[i]) ^ (data[i]>>31);
655 
656  calc_sums(pmin, pmax, udata, n, pred_order, sums);
657 
658  opt_porder = pmin;
659  bits[pmin] = UINT32_MAX;
660  for (i = pmin; i <= pmax; i++) {
661  bits[i] = calc_optimal_rice_params(&tmp_rc, i, sums[i], n, pred_order);
662  if (bits[i] <= bits[opt_porder]) {
663  opt_porder = i;
664  *rc = tmp_rc;
665  }
666  }
667 
668  av_freep(&udata);
669  return bits[opt_porder];
670 }
671 
672 
673 static int get_max_p_order(int max_porder, int n, int order)
674 {
675  int porder = FFMIN(max_porder, av_log2(n^(n-1)));
676  if (order > 0)
677  porder = FFMIN(porder, av_log2(n/order));
678  return porder;
679 }
680 
681 
683  FlacSubframe *sub, int pred_order)
684 {
686  s->frame.blocksize, pred_order);
688  s->frame.blocksize, pred_order);
689 
690  uint64_t bits = 8 + pred_order * sub->obits + 2 + sub->rc.coding_mode;
691  if (sub->type == FLAC_SUBFRAME_LPC)
692  bits += 4 + 5 + pred_order * s->options.lpc_coeff_precision;
693  bits += calc_rice_params(&sub->rc, pmin, pmax, sub->residual,
694  s->frame.blocksize, pred_order);
695  return bits;
696 }
697 
698 
699 static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n,
700  int order)
701 {
702  int i;
703 
704  for (i = 0; i < order; i++)
705  res[i] = smp[i];
706 
707  if (order == 0) {
708  for (i = order; i < n; i++)
709  res[i] = smp[i];
710  } else if (order == 1) {
711  for (i = order; i < n; i++)
712  res[i] = smp[i] - smp[i-1];
713  } else if (order == 2) {
714  int a = smp[order-1] - smp[order-2];
715  for (i = order; i < n; i += 2) {
716  int b = smp[i ] - smp[i-1];
717  res[i] = b - a;
718  a = smp[i+1] - smp[i ];
719  res[i+1] = a - b;
720  }
721  } else if (order == 3) {
722  int a = smp[order-1] - smp[order-2];
723  int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
724  for (i = order; i < n; i += 2) {
725  int b = smp[i ] - smp[i-1];
726  int d = b - a;
727  res[i] = d - c;
728  a = smp[i+1] - smp[i ];
729  c = a - b;
730  res[i+1] = c - d;
731  }
732  } else {
733  int a = smp[order-1] - smp[order-2];
734  int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
735  int e = smp[order-1] - 3*smp[order-2] + 3*smp[order-3] - smp[order-4];
736  for (i = order; i < n; i += 2) {
737  int b = smp[i ] - smp[i-1];
738  int d = b - a;
739  int f = d - c;
740  res[i ] = f - e;
741  a = smp[i+1] - smp[i ];
742  c = a - b;
743  e = c - d;
744  res[i+1] = e - f;
745  }
746  }
747 }
748 
749 
751 {
752  int i, n;
753  int min_order, max_order, opt_order, omethod;
754  FlacFrame *frame;
755  FlacSubframe *sub;
757  int shift[MAX_LPC_ORDER];
758  int32_t *res, *smp;
759 
760  frame = &s->frame;
761  sub = &frame->subframes[ch];
762  res = sub->residual;
763  smp = sub->samples;
764  n = frame->blocksize;
765 
766  /* CONSTANT */
767  for (i = 1; i < n; i++)
768  if(smp[i] != smp[0])
769  break;
770  if (i == n) {
771  sub->type = sub->type_code = FLAC_SUBFRAME_CONSTANT;
772  res[0] = smp[0];
773  return subframe_count_exact(s, sub, 0);
774  }
775 
776  /* VERBATIM */
777  if (frame->verbatim_only || n < 5) {
778  sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM;
779  memcpy(res, smp, n * sizeof(int32_t));
780  return subframe_count_exact(s, sub, 0);
781  }
782 
783  min_order = s->options.min_prediction_order;
784  max_order = s->options.max_prediction_order;
785  omethod = s->options.prediction_order_method;
786 
787  /* FIXED */
788  sub->type = FLAC_SUBFRAME_FIXED;
789  if (s->options.lpc_type == FF_LPC_TYPE_NONE ||
790  s->options.lpc_type == FF_LPC_TYPE_FIXED || n <= max_order) {
791  uint64_t bits[MAX_FIXED_ORDER+1];
792  if (max_order > MAX_FIXED_ORDER)
793  max_order = MAX_FIXED_ORDER;
794  opt_order = 0;
795  bits[0] = UINT32_MAX;
796  for (i = min_order; i <= max_order; i++) {
797  encode_residual_fixed(res, smp, n, i);
798  bits[i] = find_subframe_rice_params(s, sub, i);
799  if (bits[i] < bits[opt_order])
800  opt_order = i;
801  }
802  sub->order = opt_order;
803  sub->type_code = sub->type | sub->order;
804  if (sub->order != max_order) {
805  encode_residual_fixed(res, smp, n, sub->order);
806  find_subframe_rice_params(s, sub, sub->order);
807  }
808  return subframe_count_exact(s, sub, sub->order);
809  }
810 
811  /* LPC */
812  sub->type = FLAC_SUBFRAME_LPC;
813  opt_order = ff_lpc_calc_coefs(&s->lpc_ctx, smp, n, min_order, max_order,
814  s->options.lpc_coeff_precision, coefs, shift, s->options.lpc_type,
815  s->options.lpc_passes, omethod,
816  MAX_LPC_SHIFT, 0);
817 
818  if (omethod == ORDER_METHOD_2LEVEL ||
819  omethod == ORDER_METHOD_4LEVEL ||
820  omethod == ORDER_METHOD_8LEVEL) {
821  int levels = 1 << omethod;
822  uint64_t bits[1 << ORDER_METHOD_8LEVEL];
823  int order = -1;
824  int opt_index = levels-1;
825  opt_order = max_order-1;
826  bits[opt_index] = UINT32_MAX;
827  for (i = levels-1; i >= 0; i--) {
828  int last_order = order;
829  order = min_order + (((max_order-min_order+1) * (i+1)) / levels)-1;
830  order = av_clip(order, min_order - 1, max_order - 1);
831  if (order == last_order)
832  continue;
833  s->flac_dsp.lpc_encode(res, smp, n, order+1, coefs[order],
834  shift[order]);
835  bits[i] = find_subframe_rice_params(s, sub, order+1);
836  if (bits[i] < bits[opt_index]) {
837  opt_index = i;
838  opt_order = order;
839  }
840  }
841  opt_order++;
842  } else if (omethod == ORDER_METHOD_SEARCH) {
843  // brute-force optimal order search
844  uint64_t bits[MAX_LPC_ORDER];
845  opt_order = 0;
846  bits[0] = UINT32_MAX;
847  for (i = min_order-1; i < max_order; i++) {
848  s->flac_dsp.lpc_encode(res, smp, n, i+1, coefs[i], shift[i]);
849  bits[i] = find_subframe_rice_params(s, sub, i+1);
850  if (bits[i] < bits[opt_order])
851  opt_order = i;
852  }
853  opt_order++;
854  } else if (omethod == ORDER_METHOD_LOG) {
855  uint64_t bits[MAX_LPC_ORDER];
856  int step;
857 
858  opt_order = min_order - 1 + (max_order-min_order)/3;
859  memset(bits, -1, sizeof(bits));
860 
861  for (step = 16; step; step >>= 1) {
862  int last = opt_order;
863  for (i = last-step; i <= last+step; i += step) {
864  if (i < min_order-1 || i >= max_order || bits[i] < UINT32_MAX)
865  continue;
866  s->flac_dsp.lpc_encode(res, smp, n, i+1, coefs[i], shift[i]);
867  bits[i] = find_subframe_rice_params(s, sub, i+1);
868  if (bits[i] < bits[opt_order])
869  opt_order = i;
870  }
871  }
872  opt_order++;
873  }
874 
875  sub->order = opt_order;
876  sub->type_code = sub->type | (sub->order-1);
877  sub->shift = shift[sub->order-1];
878  for (i = 0; i < sub->order; i++)
879  sub->coefs[i] = coefs[sub->order-1][i];
880 
881  s->flac_dsp.lpc_encode(res, smp, n, sub->order, sub->coefs, sub->shift);
882 
883  find_subframe_rice_params(s, sub, sub->order);
884 
885  return subframe_count_exact(s, sub, sub->order);
886 }
887 
888 
890 {
891  uint8_t av_unused tmp;
892  int count;
893 
894  /*
895  <14> Sync code
896  <1> Reserved
897  <1> Blocking strategy
898  <4> Block size in inter-channel samples
899  <4> Sample rate
900  <4> Channel assignment
901  <3> Sample size in bits
902  <1> Reserved
903  */
904  count = 32;
905 
906  /* coded frame number */
907  PUT_UTF8(s->frame_count, tmp, count += 8;)
908 
909  /* explicit block size */
910  if (s->frame.bs_code[0] == 6)
911  count += 8;
912  else if (s->frame.bs_code[0] == 7)
913  count += 16;
914 
915  /* explicit sample rate */
916  count += ((s->sr_code[0] == 12) + (s->sr_code[0] > 12)) * 8;
917 
918  /* frame header CRC-8 */
919  count += 8;
920 
921  return count;
922 }
923 
924 
926 {
927  int ch;
928  uint64_t count;
929 
930  count = count_frame_header(s);
931 
932  for (ch = 0; ch < s->channels; ch++)
933  count += encode_residual_ch(s, ch);
934 
935  count += (8 - (count & 7)) & 7; // byte alignment
936  count += 16; // CRC-16
937 
938  count >>= 3;
939  if (count > INT_MAX)
940  return AVERROR_BUG;
941  return count;
942 }
943 
944 
946 {
947  int ch, i;
948 
949  for (ch = 0; ch < s->channels; ch++) {
950  FlacSubframe *sub = &s->frame.subframes[ch];
951  int32_t v = 0;
952 
953  for (i = 0; i < s->frame.blocksize; i++) {
954  v |= sub->samples[i];
955  if (v & 1)
956  break;
957  }
958 
959  if (v && !(v & 1)) {
960  v = av_ctz(v);
961 
962  for (i = 0; i < s->frame.blocksize; i++)
963  sub->samples[i] >>= v;
964 
965  sub->wasted = v;
966  sub->obits -= v;
967 
968  /* for 24-bit, check if removing wasted bits makes the range better
969  suited for using RICE instead of RICE2 for entropy coding */
970  if (sub->obits <= 17)
972  }
973  }
974 }
975 
976 
977 static int estimate_stereo_mode(int32_t *left_ch, int32_t *right_ch, int n,
978  int max_rice_param)
979 {
980  int i, best;
981  int32_t lt, rt;
982  uint64_t sum[4];
983  uint64_t score[4];
984  int k;
985 
986  /* calculate sum of 2nd order residual for each channel */
987  sum[0] = sum[1] = sum[2] = sum[3] = 0;
988  for (i = 2; i < n; i++) {
989  lt = left_ch[i] - 2*left_ch[i-1] + left_ch[i-2];
990  rt = right_ch[i] - 2*right_ch[i-1] + right_ch[i-2];
991  sum[2] += FFABS((lt + rt) >> 1);
992  sum[3] += FFABS(lt - rt);
993  sum[0] += FFABS(lt);
994  sum[1] += FFABS(rt);
995  }
996  /* estimate bit counts */
997  for (i = 0; i < 4; i++) {
998  k = find_optimal_param(2 * sum[i], n, max_rice_param);
999  sum[i] = rice_encode_count( 2 * sum[i], n, k);
1000  }
1001 
1002  /* calculate score for each mode */
1003  score[0] = sum[0] + sum[1];
1004  score[1] = sum[0] + sum[3];
1005  score[2] = sum[1] + sum[3];
1006  score[3] = sum[2] + sum[3];
1007 
1008  /* return mode with lowest score */
1009  best = 0;
1010  for (i = 1; i < 4; i++)
1011  if (score[i] < score[best])
1012  best = i;
1013 
1014  return best;
1015 }
1016 
1017 
1018 /**
1019  * Perform stereo channel decorrelation.
1020  */
1022 {
1023  FlacFrame *frame;
1024  int32_t *left, *right;
1025  int i, n;
1026 
1027  frame = &s->frame;
1028  n = frame->blocksize;
1029  left = frame->subframes[0].samples;
1030  right = frame->subframes[1].samples;
1031 
1032  if (s->channels != 2) {
1034  return;
1035  }
1036 
1037  if (s->options.ch_mode < 0) {
1038  int max_rice_param = (1 << frame->subframes[0].rc.coding_mode) - 2;
1039  frame->ch_mode = estimate_stereo_mode(left, right, n, max_rice_param);
1040  } else
1041  frame->ch_mode = s->options.ch_mode;
1042 
1043  /* perform decorrelation and adjust bits-per-sample */
1044  if (frame->ch_mode == FLAC_CHMODE_INDEPENDENT)
1045  return;
1046  if (frame->ch_mode == FLAC_CHMODE_MID_SIDE) {
1047  int32_t tmp;
1048  for (i = 0; i < n; i++) {
1049  tmp = left[i];
1050  left[i] = (tmp + right[i]) >> 1;
1051  right[i] = tmp - right[i];
1052  }
1053  frame->subframes[1].obits++;
1054  } else if (frame->ch_mode == FLAC_CHMODE_LEFT_SIDE) {
1055  for (i = 0; i < n; i++)
1056  right[i] = left[i] - right[i];
1057  frame->subframes[1].obits++;
1058  } else {
1059  for (i = 0; i < n; i++)
1060  left[i] -= right[i];
1061  frame->subframes[0].obits++;
1062  }
1063 }
1064 
1065 
1066 static void write_utf8(PutBitContext *pb, uint32_t val)
1067 {
1068  uint8_t tmp;
1069  PUT_UTF8(val, tmp, put_bits(pb, 8, tmp);)
1070 }
1071 
1072 
1074 {
1075  FlacFrame *frame;
1076  int crc;
1077 
1078  frame = &s->frame;
1079 
1080  put_bits(&s->pb, 16, 0xFFF8);
1081  put_bits(&s->pb, 4, frame->bs_code[0]);
1082  put_bits(&s->pb, 4, s->sr_code[0]);
1083 
1084  if (frame->ch_mode == FLAC_CHMODE_INDEPENDENT)
1085  put_bits(&s->pb, 4, s->channels-1);
1086  else
1087  put_bits(&s->pb, 4, frame->ch_mode + FLAC_MAX_CHANNELS - 1);
1088 
1089  put_bits(&s->pb, 3, s->bps_code);
1090  put_bits(&s->pb, 1, 0);
1091  write_utf8(&s->pb, s->frame_count);
1092 
1093  if (frame->bs_code[0] == 6)
1094  put_bits(&s->pb, 8, frame->bs_code[1]);
1095  else if (frame->bs_code[0] == 7)
1096  put_bits(&s->pb, 16, frame->bs_code[1]);
1097 
1098  if (s->sr_code[0] == 12)
1099  put_bits(&s->pb, 8, s->sr_code[1]);
1100  else if (s->sr_code[0] > 12)
1101  put_bits(&s->pb, 16, s->sr_code[1]);
1102 
1103  flush_put_bits(&s->pb);
1104  crc = av_crc(av_crc_get_table(AV_CRC_8_ATM), 0, s->pb.buf,
1105  put_bits_count(&s->pb) >> 3);
1106  put_bits(&s->pb, 8, crc);
1107 }
1108 
1109 
1111 {
1112  int ch;
1113 
1114  for (ch = 0; ch < s->channels; ch++) {
1115  FlacSubframe *sub = &s->frame.subframes[ch];
1116  int i, p, porder, psize;
1117  int32_t *part_end;
1118  int32_t *res = sub->residual;
1119  int32_t *frame_end = &sub->residual[s->frame.blocksize];
1120 
1121  /* subframe header */
1122  put_bits(&s->pb, 1, 0);
1123  put_bits(&s->pb, 6, sub->type_code);
1124  put_bits(&s->pb, 1, !!sub->wasted);
1125  if (sub->wasted)
1126  put_bits(&s->pb, sub->wasted, 1);
1127 
1128  /* subframe */
1129  if (sub->type == FLAC_SUBFRAME_CONSTANT) {
1130  put_sbits(&s->pb, sub->obits, res[0]);
1131  } else if (sub->type == FLAC_SUBFRAME_VERBATIM) {
1132  while (res < frame_end)
1133  put_sbits(&s->pb, sub->obits, *res++);
1134  } else {
1135  /* warm-up samples */
1136  for (i = 0; i < sub->order; i++)
1137  put_sbits(&s->pb, sub->obits, *res++);
1138 
1139  /* LPC coefficients */
1140  if (sub->type == FLAC_SUBFRAME_LPC) {
1141  int cbits = s->options.lpc_coeff_precision;
1142  put_bits( &s->pb, 4, cbits-1);
1143  put_sbits(&s->pb, 5, sub->shift);
1144  for (i = 0; i < sub->order; i++)
1145  put_sbits(&s->pb, cbits, sub->coefs[i]);
1146  }
1147 
1148  /* rice-encoded block */
1149  put_bits(&s->pb, 2, sub->rc.coding_mode - 4);
1150 
1151  /* partition order */
1152  porder = sub->rc.porder;
1153  psize = s->frame.blocksize >> porder;
1154  put_bits(&s->pb, 4, porder);
1155 
1156  /* residual */
1157  part_end = &sub->residual[psize];
1158  for (p = 0; p < 1 << porder; p++) {
1159  int k = sub->rc.params[p];
1160  put_bits(&s->pb, sub->rc.coding_mode, k);
1161  while (res < part_end)
1162  set_sr_golomb_flac(&s->pb, *res++, k, INT32_MAX, 0);
1163  part_end = FFMIN(frame_end, part_end + psize);
1164  }
1165  }
1166  }
1167 }
1168 
1169 
1171 {
1172  int crc;
1173  flush_put_bits(&s->pb);
1175  put_bits_count(&s->pb)>>3));
1176  put_bits(&s->pb, 16, crc);
1177  flush_put_bits(&s->pb);
1178 }
1179 
1180 
1182 {
1183  init_put_bits(&s->pb, avpkt->data, avpkt->size);
1184  write_frame_header(s);
1185  write_subframes(s);
1186  write_frame_footer(s);
1187  return put_bits_count(&s->pb) >> 3;
1188 }
1189 
1190 
1191 static int update_md5_sum(FlacEncodeContext *s, const void *samples)
1192 {
1193  const uint8_t *buf;
1194  int buf_size = s->frame.blocksize * s->channels *
1195  ((s->avctx->bits_per_raw_sample + 7) / 8);
1196 
1197  if (s->avctx->bits_per_raw_sample > 16 || HAVE_BIGENDIAN) {
1198  av_fast_malloc(&s->md5_buffer, &s->md5_buffer_size, buf_size);
1199  if (!s->md5_buffer)
1200  return AVERROR(ENOMEM);
1201  }
1202 
1203  if (s->avctx->bits_per_raw_sample <= 16) {
1204  buf = (const uint8_t *)samples;
1205 #if HAVE_BIGENDIAN
1206  s->dsp.bswap16_buf((uint16_t *)s->md5_buffer,
1207  (const uint16_t *)samples, buf_size / 2);
1208  buf = s->md5_buffer;
1209 #endif
1210  } else {
1211  int i;
1212  const int32_t *samples0 = samples;
1213  uint8_t *tmp = s->md5_buffer;
1214 
1215  for (i = 0; i < s->frame.blocksize * s->channels; i++) {
1216  int32_t v = samples0[i] >> 8;
1217  *tmp++ = (v ) & 0xFF;
1218  *tmp++ = (v >> 8) & 0xFF;
1219  *tmp++ = (v >> 16) & 0xFF;
1220  }
1221  buf = s->md5_buffer;
1222  }
1223  av_md5_update(s->md5ctx, buf, buf_size);
1224 
1225  return 0;
1226 }
1227 
1228 
1229 static int flac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
1230  const AVFrame *frame, int *got_packet_ptr)
1231 {
1233  int frame_bytes, out_bytes, ret;
1234 
1235  s = avctx->priv_data;
1236 
1237  /* when the last block is reached, update the header in extradata */
1238  if (!frame) {
1240  av_md5_final(s->md5ctx, s->md5sum);
1241  write_streaminfo(s, avctx->extradata);
1242  return 0;
1243  }
1244 
1245  /* change max_framesize for small final frame */
1246  if (frame->nb_samples < s->frame.blocksize) {
1248  s->channels,
1249  avctx->bits_per_raw_sample);
1250  }
1251 
1252  init_frame(s, frame->nb_samples);
1253 
1254  copy_samples(s, frame->data[0]);
1255 
1257 
1258  remove_wasted_bits(s);
1259 
1260  frame_bytes = encode_frame(s);
1261 
1262  /* fallback to verbatim mode if the compressed frame is larger than it
1263  would be if encoded uncompressed. */
1264  if (frame_bytes < 0 || frame_bytes > s->max_framesize) {
1265  s->frame.verbatim_only = 1;
1266  frame_bytes = encode_frame(s);
1267  if (frame_bytes < 0) {
1268  av_log(avctx, AV_LOG_ERROR, "Bad frame count\n");
1269  return frame_bytes;
1270  }
1271  }
1272 
1273  if ((ret = ff_alloc_packet2(avctx, avpkt, frame_bytes)) < 0)
1274  return ret;
1275 
1276  out_bytes = write_frame(s, avpkt);
1277 
1278  s->frame_count++;
1279  s->sample_count += frame->nb_samples;
1280  if ((ret = update_md5_sum(s, frame->data[0])) < 0) {
1281  av_log(avctx, AV_LOG_ERROR, "Error updating MD5 checksum\n");
1282  return ret;
1283  }
1284  if (out_bytes > s->max_encoded_framesize)
1285  s->max_encoded_framesize = out_bytes;
1286  if (out_bytes < s->min_framesize)
1287  s->min_framesize = out_bytes;
1288 
1289  avpkt->pts = frame->pts;
1290  avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples);
1291  avpkt->size = out_bytes;
1292  *got_packet_ptr = 1;
1293  return 0;
1294 }
1295 
1296 
1298 {
1299  if (avctx->priv_data) {
1300  FlacEncodeContext *s = avctx->priv_data;
1301  av_freep(&s->md5ctx);
1302  av_freep(&s->md5_buffer);
1303  ff_lpc_end(&s->lpc_ctx);
1304  }
1305  av_freep(&avctx->extradata);
1306  avctx->extradata_size = 0;
1307  return 0;
1308 }
1309 
1310 #define FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
1311 static const AVOption options[] = {
1312 { "lpc_coeff_precision", "LPC coefficient precision", offsetof(FlacEncodeContext, options.lpc_coeff_precision), AV_OPT_TYPE_INT, {.i64 = 15 }, 0, MAX_LPC_PRECISION, FLAGS },
1313 { "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" },
1314 { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_NONE }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
1315 { "fixed", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_FIXED }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
1316 { "levinson", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_LEVINSON }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
1317 { "cholesky", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_CHOLESKY }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
1318 { "lpc_passes", "Number of passes to use for Cholesky factorization during LPC analysis", offsetof(FlacEncodeContext, options.lpc_passes), AV_OPT_TYPE_INT, {.i64 = 2 }, 1, INT_MAX, FLAGS },
1319 { "min_partition_order", NULL, offsetof(FlacEncodeContext, options.min_partition_order), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, MAX_PARTITION_ORDER, FLAGS },
1320 { "max_partition_order", NULL, offsetof(FlacEncodeContext, options.max_partition_order), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, MAX_PARTITION_ORDER, FLAGS },
1321 { "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" },
1322 { "estimation", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_EST }, INT_MIN, INT_MAX, FLAGS, "predm" },
1323 { "2level", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_2LEVEL }, INT_MIN, INT_MAX, FLAGS, "predm" },
1324 { "4level", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_4LEVEL }, INT_MIN, INT_MAX, FLAGS, "predm" },
1325 { "8level", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_8LEVEL }, INT_MIN, INT_MAX, FLAGS, "predm" },
1326 { "search", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_SEARCH }, INT_MIN, INT_MAX, FLAGS, "predm" },
1327 { "log", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_LOG }, INT_MIN, INT_MAX, FLAGS, "predm" },
1328 { "ch_mode", "Stereo decorrelation mode", offsetof(FlacEncodeContext, options.ch_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, FLAC_CHMODE_MID_SIDE, FLAGS, "ch_mode" },
1329 { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
1330 { "indep", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_INDEPENDENT }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
1331 { "left_side", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_LEFT_SIDE }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
1332 { "right_side", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_RIGHT_SIDE }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
1333 { "mid_side", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_MID_SIDE }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
1334 { NULL },
1335 };
1336 
1337 static const AVClass flac_encoder_class = {
1338  "FLAC encoder",
1340  options,
1342 };
1343 
1345  .name = "flac",
1346  .type = AVMEDIA_TYPE_AUDIO,
1347  .id = AV_CODEC_ID_FLAC,
1348  .priv_data_size = sizeof(FlacEncodeContext),
1350  .encode2 = flac_encode_frame,
1353  .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
1356  .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
1357  .priv_class = &flac_encoder_class,
1358 };
#define MAX_FIXED_ORDER
#define rice_encode_count(sum, n, k)
float v
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil.c:2675
#define ORDER_METHOD_SEARCH
Definition: lpc.h:32
const char * s
Definition: avisynth_c.h:668
static int shift(int a, int b)
Definition: sonic.c:86
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
#define ORDER_METHOD_8LEVEL
Definition: lpc.h:31
AVCodec ff_flac_encoder
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
Definition: crc.c:275
AVOption.
Definition: opt.h:251
Definition: lpc.h:50
static void put_sbits(PutBitContext *pb, int n, int32_t value)
Definition: put_bits.h:172
av_default_item_name
static uint64_t calc_optimal_rice_params(RiceContext *rc, int porder, uint64_t *sums, int n, int pred_order)
struct AVMD5 * md5ctx
#define MAX_LPC_ORDER
Definition: lpc.h:36
int ff_lpc_calc_coefs(LPCContext *s, const int32_t *samples, int blocksize, int min_order, int max_order, int precision, int32_t coefs[][MAX_LPC_ORDER], int *shift, enum FFLPCType lpc_type, int lpc_passes, int omethod, int max_shift, int zero_shift)
Calculate LPC coefficients for multiple orders.
Definition: lpc.c:170
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
int av_ctz(int v)
Trailing zero bit count.
Definition: intmath.c:36
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:154
av_cold void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int bps)
Definition: flacdsp.c:88
int ff_flac_get_max_frame_size(int blocksize, int ch, int bps)
Calculate an estimate for the maximum frame size based on verbatim mode.
Definition: flac.c:148
#define CODEC_CAP_LOSSLESS
Codec is lossless.
Sinusoidal phase f
#define MAX_PARTITION_ORDER
#define av_bswap16
Definition: sh4/bswap.h:31
#define PUT_UTF8(val, tmp, PUT_BYTE)
Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
Definition: common.h:349
void(* bswap16_buf)(uint16_t *dst, const uint16_t *src, int len)
Definition: dsputil.h:209
#define FLAC_MAX_BLOCKSIZE
Definition: flac.h:36
#define MAX_LPC_SHIFT
#define AV_CH_LAYOUT_STEREO
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
static int flac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
signed 16 bits
Definition: samplefmt.h:52
static uint64_t calc_rice_params(RiceContext *rc, int pmin, int pmax, int32_t *data, int n, int pred_order)
#define AV_CH_LAYOUT_5POINT0
static uint64_t rice_count_exact(int32_t *res, int n, int k)
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
Definition: mem.c:198
set threshold d
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
static int select_blocksize(int samplerate, int block_time_ms)
Set blocksize based on samplerate.
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
struct AVMD5 * av_md5_alloc(void)
Definition: md5.c:47
uint8_t bits
Definition: crc.c:216
enum AVSampleFormat sample_fmt
audio sample format
uint8_t
#define ORDER_METHOD_LOG
Definition: lpc.h:33
#define av_cold
Definition: attributes.h:78
struct CompressionOptions CompressionOptions
AVOptions.
do not use LPC prediction or use all zero coefficients
Definition: lpc.h:43
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
Definition: crc.c:261
int32_t coefs[MAX_LPC_ORDER]
#define b
Definition: input.c:42
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:159
FLACDSPContext flac_dsp
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
uint8_t * data
static uint64_t find_subframe_rice_params(FlacEncodeContext *s, FlacSubframe *sub, int pred_order)
int params[MAX_PARTITIONS]
Definition: md5.c:39
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
#define FLAC_MIN_BLOCKSIZE
Definition: flac.h:35
static void write_subframes(FlacEncodeContext *s)
frame
Definition: stft.m:14
#define AV_CH_LAYOUT_5POINT1
const int16_t ff_flac_blocksize_table[16]
Definition: flacdata.c:30
void av_md5_update(AVMD5 *ctx, const uint8_t *src, const int len)
Definition: md5.c:142
#define ORDER_METHOD_4LEVEL
Definition: lpc.h:30
static int estimate_stereo_mode(int32_t *left_ch, int32_t *right_ch, int n, int max_rice_param)
unsigned int md5_buffer_size
FLAC (Free Lossless Audio Codec) decoder/demuxer common functions.
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Spectrum Plot time data
#define FLAC_SUBFRAME_LPC
uint8_t * buf
Definition: put_bits.h:44
enum CodingMode coding_mode
simple assert() macros that are a bit more flexible than ISO C assert().
#define AV_CH_LAYOUT_QUAD
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
#define COPY_SAMPLES(bits)
#define FLAC_SUBFRAME_VERBATIM
static void put_bits(J2kEncoderContext *s, int val, int n)
put n times val bit
Definition: j2kenc.c:160
int32_t samples[FLAC_MAX_BLOCKSIZE]
external API header
static void remove_wasted_bits(FlacEncodeContext *s)
#define FLAC_SUBFRAME_CONSTANT
uint64_t channel_layout
Audio channel layout.
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:73
#define ORDER_METHOD_2LEVEL
Definition: lpc.h:29
#define AV_CH_LAYOUT_2_2
signed 32 bits
Definition: samplefmt.h:53
struct FlacSubframe FlacSubframe
void(* lpc_encode)(int32_t *res, const int32_t *smp, int len, int order, const int32_t *coefs, int shift)
Definition: flacdsp.h:30
struct RiceContext RiceContext
#define FLAC_SUBFRAME_FIXED
static int encode_residual_ch(FlacEncodeContext *s, int ch)
av_cold void ff_lpc_end(LPCContext *s)
Uninitialize LPCContext.
Definition: lpc.c:284
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
#define FFMIN(a, b)
Definition: common.h:58
static int encode_frame(FlacEncodeContext *s)
ret
Definition: avfilter.c:821
#define FLAGS
int32_t
#define FLAC_STREAMINFO_SIZE
Definition: flac.h:33
#define FFABS(a)
Definition: common.h:53
#define AV_CH_FRONT_CENTER
FIXME Range Coding of cr are level
Definition: snow.txt:367
#define AV_CH_LAYOUT_5POINT1_BACK
static int get_max_p_order(int max_porder, int n, int order)
static int write_frame(FlacEncodeContext *s, AVPacket *avpkt)
Not part of ABI.
Definition: lpc.h:47
LIBAVUTIL_VERSION_INT
Definition: eval.c:55
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
Definition: samplefmt.c:104
static void set_sr_golomb_flac(PutBitContext *pb, int i, int k, int limit, int esc_len)
write signed golomb rice code (flac).
Definition: golomb.h:548
static const AVOption options[]
static void channel_decorrelation(FlacEncodeContext *s)
Perform stereo channel decorrelation.
for k
int frame_size
Number of samples per channel in an audio frame.
NULL
Definition: eval.c:55
struct FlacEncodeContext FlacEncodeContext
const int ff_flac_sample_rate_table[16]
Definition: flacdata.c:24
int sample_rate
samples per second
static void write_frame_header(FlacEncodeContext *s)
#define MIN_LPC_ORDER
Definition: lpc.h:35
main external API structure.
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
static int count_frame_header(FlacEncodeContext *s)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
Levinson-Durbin recursion.
Definition: lpc.h:45
#define ORDER_METHOD_EST
Definition: lpc.h:28
void av_md5_init(AVMD5 *ctx)
Definition: md5.c:132
void * buf
Definition: avisynth_c.h:594
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
Definition: error.h:50
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:73
Describe the class of an AVClass context structure.
Definition: log.h:50
use the codec default LPC type
Definition: lpc.h:42
synthesis window for stochastic i
enum FFLPCType lpc_type
#define MAX_PARTITIONS
#define AV_CH_LAYOUT_5POINT0_BACK
struct FlacFrame FlacFrame
static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n, int order)
void av_md5_final(AVMD5 *ctx, uint8_t *dst)
Definition: md5.c:158
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
static void write_utf8(PutBitContext *pb, uint32_t val)
av_cold int ff_lpc_init(LPCContext *s, int blocksize, int max_order, enum FFLPCType lpc_type)
Initialize LPCContext.
Definition: lpc.c:258
#define MAX_LPC_PRECISION
static void copy_samples(FlacEncodeContext *s, const void *samples)
Copy channel-interleaved input samples into separate subframes.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:87
RiceContext rc
AVCodecContext * avctx
static void write_frame_footer(FlacEncodeContext *s)
int32_t residual[FLAC_MAX_BLOCKSIZE+1]
FlacSubframe subframes[FLAC_MAX_CHANNELS]
const char const char * params
Definition: avisynth_c.h:675
CompressionOptions options
FFLPCType
LPC analysis type.
Definition: lpc.h:41
Cholesky factorization.
Definition: lpc.h:46
common internal api header.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:81
static double c[64]
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
static void calc_sums(int pmin, int pmax, uint32_t *data, int n, int pred_order, uint64_t sums[][MAX_PARTITIONS])
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:54
static av_cold int flac_encode_close(AVCodecContext *avctx)
static av_cold void dprint_compression_options(FlacEncodeContext *s)
fixed LPC coefficients
Definition: lpc.h:44
DSP utils.
static int find_optimal_param(uint64_t sum, int n, int max_param)
Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0.
int channels
number of audio channels
#define av_log2
Definition: intmath.h:89
static uint64_t subframe_count_exact(FlacEncodeContext *s, FlacSubframe *sub, int pred_order)
static const AVClass flac_encoder_class
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:700
CodingMode
Filter the word “frame” indicates either a video frame or a group of audio samples
static void init_frame(FlacEncodeContext *s, int nb_samples)
void INT64 INT64 count
Definition: avisynth_c.h:594
static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
#define HAVE_BIGENDIAN
Definition: config.h:116
static int update_md5_sum(FlacEncodeContext *s, const void *samples)
exp golomb vlc stuff
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
static av_cold int flac_encode_init(AVCodecContext *avctx)
static void write_streaminfo(FlacEncodeContext *s, uint8_t *header)
Write streaminfo metadata block to byte array.
#define FLAC_MAX_CHANNELS
Definition: flac.h:34
#define av_unused
Definition: attributes.h:114
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
DSPContext.
Definition: dsputil.h:127
bitstream writer API