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
28
39
40 #define FLAC_SUBFRAME_CONSTANT 0
41 #define FLAC_SUBFRAME_VERBATIM 1
42 #define FLAC_SUBFRAME_FIXED 8
43 #define FLAC_SUBFRAME_LPC 32
44
45 #define MAX_FIXED_ORDER 4
46 #define MAX_PARTITION_ORDER 8
47 #define MAX_PARTITIONS (1 << MAX_PARTITION_ORDER)
48 #define MAX_LPC_PRECISION 15
49 #define MIN_LPC_SHIFT 0
50 #define MAX_LPC_SHIFT 15
51
55 };
56
72
78
87
91
95
104
128
132
133
134 /**
135 * Write streaminfo metadata block to byte array.
136 */
138 {
140
143
144 /* streaminfo metadata block */
151 put_bits(&pb, 5,
s->avctx->bits_per_raw_sample - 1);
152 /* write 36-bit sample count in 2 put_bits() calls */
153 put_bits(&pb, 24, (
s->sample_count & 0xFFFFFF000LL) >> 12);
154 put_bits(&pb, 12,
s->sample_count & 0x000000FFFLL);
156 memcpy(&
header[18],
s->md5sum, 16);
157 }
158
159
160 /**
161 * Set blocksize based on samplerate.
162 * Choose the closest predefined blocksize >= BLOCK_TIME_MS milliseconds.
163 */
165 {
167 int target;
168 int blocksize;
169
172 target = (samplerate * block_time_ms) / 1000;
173 for (
i = 0;
i < 16;
i++) {
177 }
178 }
179 return blocksize;
180 }
181
182
184 {
187
189
193 break;
196 break;
198 av_log(avctx,
AV_LOG_DEBUG,
" lpc type: Levinson-Durbin recursion with Welch window\n");
199 break;
203 break;
204 }
205
208
212 break;
215 break;
218 break;
221 break;
224 break;
227 break;
228 }
229
230
233
235
238 }
239
240
242 {
247 uint8_t *streaminfo;
248
250
255 break;
261 break;
262 }
263
268 }
270
271 /* find samplerate in table */
272 if (freq < 1)
274 for (
i = 4;
i < 12;
i++) {
279 break;
280 }
281 }
282 /* if not in table, samplerate is non-standard */
284 if (freq % 1000 == 0 && freq < 255000) {
286 s->sr_code[1] = freq / 1000;
287 } else if (freq % 10 == 0 && freq < 655350) {
289 s->sr_code[1] = freq / 10;
290 } else if (freq < 65535) {
292 s->sr_code[1] = freq;
293 } else {
296 }
297 s->samplerate = freq;
298 }
299
300 /* set compression option defaults based on avctx->compression_level */
302 s->options.compression_level = 5;
303 else
305
306 level =
s->options.compression_level;
309 s->options.compression_level);
311 }
312
313 s->options.block_time_ms = ((
int[]){ 27, 27, 27,105,105,105,105,105,105,105,105,105,105})[
level];
314
321
322 if (
s->options.min_prediction_order < 0)
323 s->options.min_prediction_order = ((
int[]){ 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1})[
level];
324 if (
s->options.max_prediction_order < 0)
325 s->options.max_prediction_order = ((
int[]){ 3, 4, 4, 6, 8, 8, 8, 8, 12, 12, 12, 32, 32})[
level];
326
327 if (
s->options.prediction_order_method < 0)
333
334 if (
s->options.min_partition_order >
s->options.max_partition_order) {
336 s->options.min_partition_order,
s->options.max_partition_order);
338 }
339 if (
s->options.min_partition_order < 0)
340 s->options.min_partition_order = ((
int[]){ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})[
level];
341 if (
s->options.max_partition_order < 0)
342 s->options.max_partition_order = ((
int[]){ 2, 2, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8})[
level];
343
345 s->options.min_prediction_order = 0;
346 s->options.max_prediction_order = 0;
350 "invalid min prediction order %d, clamped to %d\n",
353 }
356 "invalid max prediction order %d, clamped to %d\n",
359 }
360 }
361
362 if (
s->options.max_prediction_order <
s->options.min_prediction_order) {
364 s->options.min_prediction_order,
s->options.max_prediction_order);
366 }
367
374 }
375 } else {
377 }
378 s->max_blocksize =
s->avctx->frame_size;
379
380 /* set maximum encoded frame size in verbatim mode */
383 s->avctx->bits_per_raw_sample);
384
385 /* initialize MD5 context */
390
392 if (!streaminfo)
397
399 s->min_framesize =
s->max_framesize;
400
414 "output stream will have incorrect "
415 "channel layout.\n");
416 } else {
418 "will use Flac channel layout for "
420 }
421 }
422
425
429
431
433 }
434
435
437 {
440
442
443 for (
i = 0;
i < 16;
i++) {
447 frame->bs_code[1] = 0;
448 break;
449 }
450 }
452 frame->blocksize = nb_samples;
453 if (
frame->blocksize <= 256) {
454 frame->bs_code[0] = 6;
456 } else {
457 frame->bs_code[0] = 7;
459 }
460 }
461
462 for (ch = 0; ch <
s->channels; ch++) {
464
466 sub->obits =
s->avctx->bits_per_raw_sample;
467
470 else
472 }
473
474 frame->verbatim_only = 0;
475 }
476
477
478 /**
479 * Copy channel-interleaved input samples into separate subframes.
480 */
482 {
486 s->avctx->bits_per_raw_sample;
487
488 #define COPY_SAMPLES(bits) do { \
489 const int ## bits ## _t *samples0 = samples; \
490 frame = &s->frame; \
491 for (i = 0, j = 0; i < frame->blocksize; i++) \
492 for (ch = 0; ch < s->channels; ch++, j++) \
493 frame->subframes[ch].samples[i] = samples0[j] >> shift; \
494 } while (0)
495
498 else
500 }
501
502
504 {
506 uint64_t count = 0;
507
508 for (
i = 0;
i < n;
i++) {
510 v ^= v >> 31;
511 count += (v >> k) + 1 + k;
512 }
513 return count;
514 }
515
516
518 int pred_order)
519 {
520 int p, porder, psize;
522 uint64_t count = 0;
523
524 /* subframe header */
525 count += 8;
526
528 count +=
sub->wasted;
529
530 /* subframe */
534 count +=
s->frame.blocksize *
sub->obits;
535 } else {
536 /* warm-up samples */
537 count += pred_order *
sub->obits;
538
539 /* LPC coefficients */
541 count += 4 + 5 + pred_order *
s->options.lpc_coeff_precision;
542
543 /* rice-encoded block */
544 count += 2;
545
546 /* partition order */
547 porder =
sub->rc.porder;
548 psize =
s->frame.blocksize >> porder;
549 count += 4;
550
551 /* residual */
553 part_end = psize;
554 for (p = 0; p < 1 << porder; p++) {
555 int k =
sub->rc.params[p];
556 count +=
sub->rc.coding_mode;
559 part_end =
FFMIN(
s->frame.blocksize, part_end + psize);
560 }
561 }
562
563 return count;
564 }
565
566
567 #define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k)))
568
569 /**
570 * Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0.
571 */
573 {
574 int k;
575 uint64_t sum2;
576
577 if (sum <= n >> 1)
578 return 0;
579 sum2 = sum - (n >> 1);
581 return FFMIN(k, max_param);
582 }
583
585 {
586 int bestk = 0;
587 int64_t bestbits = INT64_MAX;
588 int k;
589
590 for (k = 0; k <= max_param; k++) {
591 int64_t
bits = sums[k][
i];
592 if (
bits < bestbits) {
594 bestk = k;
595 }
596 }
597
598 return bestk;
599 }
600
603 int n, int pred_order, int max_param, int exact)
604 {
606 int k, cnt, part;
607 uint64_t all_bits;
608
609 part = (1 << porder);
610 all_bits = 4 * part;
611
612 cnt = (n >> porder) - pred_order;
613 for (
i = 0;
i < part;
i++) {
614 if (exact) {
616 all_bits += sums[k][
i];
617 } else {
620 }
622 cnt = n >> porder;
623 }
624
626
627 return all_bits;
628 }
629
630
633 {
635 int parts;
636 const uint32_t *res, *res_end;
637
638 /* sums for highest level */
639 parts = (1 << pmax);
640
641 for (k = 0; k <= kmax; k++) {
642 res = &
data[pred_order];
643 res_end = &
data[n >> pmax];
644 for (
i = 0;
i < parts;
i++) {
645 if (kmax) {
646 uint64_t sum = (1LL + k) * (res_end - res);
647 while (res < res_end)
648 sum += *(res++) >> k;
650 } else {
651 uint64_t sum = 0;
652 while (res < res_end)
653 sum += *(res++);
655 }
656 res_end += n >> pmax;
657 }
658 }
659 }
660
662 {
664 int parts = (1 <<
level);
665 for (
i = 0;
i < parts;
i++) {
666 for (k=0; k<=kmax; k++)
667 sums[k][
i] = sums[k][2*
i] + sums[k][2*
i+1];
668 }
669 }
670
674 int pmin, int pmax,
675 const int32_t *
data,
int n,
int pred_order,
int exact)
676 {
679 int opt_porder;
682
686
688
689 for (
i = 0;
i < n;
i++)
691
692 calc_sum_top(pmax, exact ? kmax : 0, udata, n, pred_order, sums);
693
694 opt_porder = pmin;
695 bits[pmin] = UINT32_MAX;
698 if (
bits[
i] <
bits[opt_porder] || pmax == pmin) {
700 *rc = tmp_rc;
701 }
703 break;
705 }
706
707 return bits[opt_porder];
708 }
709
710
712 {
714 if (order > 0)
716 return porder;
717 }
718
719
722 {
724 s->frame.blocksize, pred_order);
726 s->frame.blocksize, pred_order);
727
728 uint64_t
bits = 8 + pred_order *
sub->obits + 2 +
sub->rc.coding_mode;
730 bits += 4 + 5 + pred_order *
s->options.lpc_coeff_precision;
732 s->frame.blocksize, pred_order,
s->options.exact_rice_parameters);
734 }
735
736
738 int order)
739 {
741
742 for (
i = 0;
i < order;
i++)
744
745 if (order == 0) {
746 for (
i = order;
i < n;
i++)
748 } else if (order == 1) {
749 for (
i = order;
i < n;
i++)
750 res[
i] = smp[
i] - smp[
i-1];
751 } else if (order == 2) {
752 int a = smp[order-1] - smp[order-2];
753 for (
i = order;
i < n;
i += 2) {
754 int b = smp[
i ] - smp[
i-1];
756 a = smp[
i+1] - smp[
i ];
758 }
759 } else if (order == 3) {
760 int a = smp[order-1] - smp[order-2];
761 int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
762 for (
i = order;
i < n;
i += 2) {
763 int b = smp[
i ] - smp[
i-1];
766 a = smp[
i+1] - smp[
i ];
769 }
770 } else {
771 int a = smp[order-1] - smp[order-2];
772 int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
773 int e = smp[order-1] - 3*smp[order-2] + 3*smp[order-3] - smp[order-4];
774 for (
i = order;
i < n;
i += 2) {
775 int b = smp[
i ] - smp[
i-1];
779 a = smp[
i+1] - smp[
i ];
783 }
784 }
785 }
786
787
789 {
791 int min_order, max_order, opt_order, omethod;
797
802 n =
frame->blocksize;
803
804 /* CONSTANT */
805 for (
i = 1;
i < n;
i++)
807 break;
810 res[0] = smp[0];
812 }
813
814 /* VERBATIM */
815 if (
frame->verbatim_only || n < 5) {
817 memcpy(res, smp, n *
sizeof(
int32_t));
819 }
820
821 min_order =
s->options.min_prediction_order;
822 max_order =
s->options.max_prediction_order;
823 omethod =
s->options.prediction_order_method;
824
825 /* FIXED */
832 opt_order = 0;
833 bits[0] = UINT32_MAX;
834 for (
i = min_order;
i <= max_order;
i++) {
839 }
840 sub->order = opt_order;
842 if (
sub->order != max_order) {
845 }
847 }
848
849 /* LPC */
852 s->options.lpc_coeff_precision, coefs,
shift,
s->options.lpc_type,
853 s->options.lpc_passes, omethod,
855
859 int levels = 1 << omethod;
861 int order = -1;
862 int opt_index = levels-1;
863 opt_order = max_order-1;
864 bits[opt_index] = UINT32_MAX;
865 for (
i = levels-1;
i >= 0;
i--) {
866 int last_order = order;
867 order = min_order + (((max_order-min_order+1) * (
i+1)) / levels)-1;
868 order =
av_clip(order, min_order - 1, max_order - 1);
869 if (order == last_order)
870 continue;
871 if (
s->bps_code * 4 +
s->options.lpc_coeff_precision +
av_log2(order) <= 32) {
872 s->flac_dsp.lpc16_encode(res, smp, n, order+1, coefs[order],
874 } else {
875 s->flac_dsp.lpc32_encode(res, smp, n, order+1, coefs[order],
877 }
881 opt_order = order;
882 }
883 }
884 opt_order++;
886 // brute-force optimal order search
888 opt_order = 0;
889 bits[0] = UINT32_MAX;
890 for (
i = min_order-1;
i < max_order;
i++) {
891 if (
s->bps_code * 4 +
s->options.lpc_coeff_precision +
av_log2(
i) <= 32) {
892 s->flac_dsp.lpc16_encode(res, smp, n,
i+1, coefs[
i],
shift[
i]);
893 } else {
894 s->flac_dsp.lpc32_encode(res, smp, n,
i+1, coefs[
i],
shift[
i]);
895 }
899 }
900 opt_order++;
904
905 opt_order = min_order - 1 + (max_order-min_order)/3;
907
909 int last = opt_order;
911 if (i < min_order-1 || i >= max_order ||
bits[
i] < UINT32_MAX)
912 continue;
913 if (
s->bps_code * 4 +
s->options.lpc_coeff_precision +
av_log2(
i) <= 32) {
914 s->flac_dsp.lpc32_encode(res, smp, n,
i+1, coefs[
i],
shift[
i]);
915 } else {
916 s->flac_dsp.lpc16_encode(res, smp, n,
i+1, coefs[
i],
shift[
i]);
917 }
921 }
922 }
923 opt_order++;
924 }
925
926 if (
s->options.multi_dim_quant) {
927 int allsteps = 1;
928 int i,
step, improved;
929 int64_t best_score = INT64_MAX;
931
932 qmax = (1 << (
s->options.lpc_coeff_precision - 1)) - 1;
933
934 for (
i=0;
i<opt_order;
i++)
935 allsteps *= 3;
936
937 do {
938 improved = 0;
942 int64_t score = 0;
943 int diffsum = 0;
944
945 for (
i=0;
i<opt_order;
i++) {
946 int diff = ((
tmp + 1) % 3) - 1;
947 lpc_try[
i] =
av_clip(coefs[opt_order - 1][
i] +
diff, -qmax, qmax);
950 }
951 if (diffsum >8)
952 continue;
953
954 if (
s->bps_code * 4 +
s->options.lpc_coeff_precision +
av_log2(opt_order - 1) <= 32) {
955 s->flac_dsp.lpc16_encode(res, smp, n, opt_order, lpc_try,
shift[opt_order-1]);
956 } else {
957 s->flac_dsp.lpc32_encode(res, smp, n, opt_order, lpc_try,
shift[opt_order-1]);
958 }
960 if (score < best_score) {
961 best_score = score;
962 memcpy(coefs[opt_order-1], lpc_try, sizeof(*coefs));
963 improved=1;
964 }
965 }
966 } while(improved);
967 }
968
969 sub->order = opt_order;
970 sub->type_code =
sub->type | (
sub->order-1);
972 for (
i = 0;
i <
sub->order;
i++)
973 sub->coefs[
i] = coefs[
sub->order-1][
i];
974
975 if (
s->bps_code * 4 +
s->options.lpc_coeff_precision +
av_log2(opt_order) <= 32) {
976 s->flac_dsp.lpc16_encode(res, smp, n,
sub->order,
sub->coefs,
sub->shift);
977 } else {
978 s->flac_dsp.lpc32_encode(res, smp, n,
sub->order,
sub->coefs,
sub->shift);
979 }
980
982
984 }
985
986
988 {
990 int count;
991
992 /*
993 <14> Sync code
994 <1> Reserved
995 <1> Blocking strategy
996 <4> Block size in inter-channel samples
997 <4> Sample rate
998 <4> Channel assignment
999 <3> Sample size in bits
1000 <1> Reserved
1001 */
1002 count = 32;
1003
1004 /* coded frame number */
1006
1007 /* explicit block size */
1008 if (
s->frame.bs_code[0] == 6)
1009 count += 8;
1010 else if (
s->frame.bs_code[0] == 7)
1011 count += 16;
1012
1013 /* explicit sample rate */
1014 count += ((
s->sr_code[0] == 12) + (
s->sr_code[0] > 12) * 2) * 8;
1015
1016 /* frame header CRC-8 */
1017 count += 8;
1018
1019 return count;
1020 }
1021
1022
1024 {
1025 int ch;
1026 uint64_t count;
1027
1029
1030 for (ch = 0; ch <
s->channels; ch++)
1032
1033 count += (8 - (count & 7)) & 7; // byte alignment
1034 count += 16; // CRC-16
1035
1036 count >>= 3;
1037 if (count > INT_MAX)
1039 return count;
1040 }
1041
1042
1044 {
1046
1047 for (ch = 0; ch <
s->channels; ch++) {
1050
1051 for (
i = 0;
i <
s->frame.blocksize;
i++) {
1052 v |=
sub->samples[
i];
1053 if (v & 1)
1054 break;
1055 }
1056
1057 if (v && !(v & 1)) {
1059
1060 for (
i = 0;
i <
s->frame.blocksize;
i++)
1061 sub->samples[
i] >>= v;
1062
1065
1066 /* for 24-bit, check if removing wasted bits makes the range better
1067 suited for using RICE instead of RICE2 for entropy coding */
1068 if (
sub->obits <= 17)
1070 }
1071 }
1072 }
1073
1074
1076 int max_rice_param)
1077 {
1080 uint64_t sum[4];
1081 uint64_t score[4];
1082 int k;
1083
1084 /* calculate sum of 2nd order residual for each channel */
1085 sum[0] = sum[1] = sum[2] = sum[3] = 0;
1086 for (
i = 2;
i < n;
i++) {
1087 lt = left_ch[
i] - 2*left_ch[
i-1] + left_ch[
i-2];
1088 rt = right_ch[
i] - 2*right_ch[
i-1] + right_ch[
i-2];
1089 sum[2] +=
FFABS((lt + rt) >> 1);
1090 sum[3] +=
FFABS(lt - rt);
1091 sum[0] +=
FFABS(lt);
1092 sum[1] +=
FFABS(rt);
1093 }
1094 /* estimate bit counts */
1095 for (
i = 0;
i < 4;
i++) {
1098 }
1099
1100 /* calculate score for each mode */
1101 score[0] = sum[0] + sum[1];
1102 score[1] = sum[0] + sum[3];
1103 score[2] = sum[1] + sum[3];
1104 score[3] = sum[2] + sum[3];
1105
1106 /* return mode with lowest score */
1107 best = 0;
1108 for (
i = 1;
i < 4;
i++)
1109 if (score[
i] < score[best])
1111
1112 return best;
1113 }
1114
1115
1116 /**
1117 * Perform stereo channel decorrelation.
1118 */
1120 {
1124
1126 n =
frame->blocksize;
1128 right =
frame->subframes[1].samples;
1129
1130 if (
s->channels != 2) {
1132 return;
1133 }
1134
1135 if (
s->options.ch_mode < 0) {
1136 int max_rice_param = (1 <<
frame->subframes[0].rc.coding_mode) - 2;
1138 } else
1139 frame->ch_mode =
s->options.ch_mode;
1140
1141 /* perform decorrelation and adjust bits-per-sample */
1143 return;
1146 for (
i = 0;
i < n;
i++) {
1149 right[
i] =
tmp - right[
i];
1150 }
1151 frame->subframes[1].obits++;
1153 for (
i = 0;
i < n;
i++)
1154 right[
i] =
left[
i] - right[
i];
1155 frame->subframes[1].obits++;
1156 } else {
1157 for (
i = 0;
i < n;
i++)
1159 frame->subframes[0].obits++;
1160 }
1161 }
1162
1163
1165 {
1168 }
1169
1170
1172 {
1174 int crc;
1175
1177
1181
1184 else
1186
1190
1191 if (
frame->bs_code[0] == 6)
1193 else if (
frame->bs_code[0] == 7)
1195
1196 if (
s->sr_code[0] == 12)
1198 else if (
s->sr_code[0] > 12)
1200
1205 }
1206
1207
1209 {
1210 int ch;
1211
1212 for (ch = 0; ch <
s->channels; ch++) {
1214 int i, p, porder, psize;
1218
1219 /* subframe header */
1225
1226 /* subframe */
1232 } else {
1233 /* warm-up samples */
1234 for (
i = 0;
i <
sub->order;
i++)
1236
1237 /* LPC coefficients */
1239 int cbits =
s->options.lpc_coeff_precision;
1242 for (
i = 0;
i <
sub->order;
i++)
1244 }
1245
1246 /* rice-encoded block */
1248
1249 /* partition order */
1250 porder =
sub->rc.porder;
1251 psize =
s->frame.blocksize >> porder;
1253
1254 /* residual */
1255 part_end = &
sub->residual[psize];
1256 for (p = 0; p < 1 << porder; p++) {
1257 int k =
sub->rc.params[p];
1259 while (res < part_end)
1262 }
1263 }
1264 }
1265 }
1266
1267
1269 {
1270 int crc;
1276 }
1277
1278
1280 {
1286 }
1287
1288
1290 {
1291 const uint8_t *buf;
1292 int buf_size =
s->frame.blocksize *
s->channels *
1293 ((
s->avctx->bits_per_raw_sample + 7) / 8);
1294
1295 if (
s->avctx->bits_per_raw_sample > 16 || HAVE_BIGENDIAN) {
1299 }
1300
1301 if (
s->avctx->bits_per_raw_sample <= 16) {
1302 buf = (
const uint8_t *)
samples;
1303 #if HAVE_BIGENDIAN
1304 s->bdsp.bswap16_buf((uint16_t *)
s->md5_buffer,
1305 (
const uint16_t *)
samples, buf_size / 2);
1306 buf =
s->md5_buffer;
1307 #endif
1308 } else {
1311 uint8_t *
tmp =
s->md5_buffer;
1312
1313 for (
i = 0;
i <
s->frame.blocksize *
s->channels;
i++) {
1316 }
1317 buf =
s->md5_buffer;
1318 }
1320
1321 return 0;
1322 }
1323
1324
1327 {
1329 int frame_bytes, out_bytes,
ret;
1330
1332
1333 /* when the last block is reached, update the header in extradata */
1335 s->max_framesize =
s->max_encoded_framesize;
1338
1342 if (!side_data)
1345
1346 avpkt->
pts =
s->next_pts;
1347
1348 *got_packet_ptr = 1;
1350 }
1351
1352 return 0;
1353 }
1354
1355 /* change max_framesize for small final frame */
1356 if (
frame->nb_samples <
s->frame.blocksize) {
1360 }
1361
1363
1365
1367
1369
1371
1372 /* Fall back on verbatim mode if the compressed frame is larger than it
1373 would be if encoded uncompressed. */
1374 if (frame_bytes < 0 || frame_bytes >
s->max_framesize) {
1375 s->frame.verbatim_only = 1;
1377 if (frame_bytes < 0) {
1379 return frame_bytes;
1380 }
1381 }
1382
1385
1387
1389 s->sample_count +=
frame->nb_samples;
1393 }
1394 if (out_bytes >
s->max_encoded_framesize)
1395 s->max_encoded_framesize = out_bytes;
1396 if (out_bytes < s->min_framesize)
1397 s->min_framesize = out_bytes;
1398
1401
1403
1405
1406 *got_packet_ptr = 1;
1407 return 0;
1408 }
1409
1410
1412 {
1414
1418 return 0;
1419 }
1420
1421 #define FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
1424 {
"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" },
1432 {
"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" },
1439 {
"ch_mode",
"Stereo decorrelation mode", offsetof(
FlacEncodeContext,
options.ch_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1,
FLAC_CHMODE_MID_SIDE,
FLAGS,
"ch_mode" },
1449
1451 };
1452
1458 };
1459
1476 };