3 * Copyright (c) 2006 Justin Ruggles <jruggle@earthlink.net>
5 * This file is part of FFmpeg.
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.
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.
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
22 #include "libavutil/crc.h"
23 #include "libavutil/lls.h"
25 #include "bitstream.h"
30 #define FLAC_MIN_BLOCKSIZE 16
31 #define FLAC_MAX_BLOCKSIZE 65535
33 #define FLAC_SUBFRAME_CONSTANT 0
34 #define FLAC_SUBFRAME_VERBATIM 1
35 #define FLAC_SUBFRAME_FIXED 8
36 #define FLAC_SUBFRAME_LPC 32
38 #define FLAC_CHMODE_NOT_STEREO 0
39 #define FLAC_CHMODE_LEFT_RIGHT 1
40 #define FLAC_CHMODE_LEFT_SIDE 8
41 #define FLAC_CHMODE_RIGHT_SIDE 9
42 #define FLAC_CHMODE_MID_SIDE 10
44 #define ORDER_METHOD_EST 0
45 #define ORDER_METHOD_2LEVEL 1
46 #define ORDER_METHOD_4LEVEL 2
47 #define ORDER_METHOD_8LEVEL 3
48 #define ORDER_METHOD_SEARCH 4
49 #define ORDER_METHOD_LOG 5
51 #define FLAC_STREAMINFO_SIZE 34
53 #define MIN_LPC_ORDER 1
54 #define MAX_LPC_ORDER 32
55 #define MAX_FIXED_ORDER 4
56 #define MAX_PARTITION_ORDER 8
57 #define MAX_PARTITIONS (1 << MAX_PARTITION_ORDER)
58 #define MAX_LPC_PRECISION 15
59 #define MAX_LPC_SHIFT 15
60 #define MAX_RICE_PARAM 14
62 typedef struct CompressionOptions
{
63 int compression_level
;
66 int lpc_coeff_precision
;
67 int min_prediction_order
;
68 int max_prediction_order
;
69 int prediction_order_method
;
70 int min_partition_order
;
71 int max_partition_order
;
74 typedef struct RiceContext
{
76 int params
[MAX_PARTITIONS
];
79 typedef struct FlacSubframe
{
84 int32_t coefs
[MAX_LPC_ORDER
];
87 int32_t samples
[FLAC_MAX_BLOCKSIZE
];
88 int32_t residual
[FLAC_MAX_BLOCKSIZE
+1];
91 typedef struct FlacFrame
{
92 FlacSubframe subframes
[FLAC_MAX_CH
];
99 typedef struct FlacEncodeContext
{
106 uint32_t frame_count
;
108 CompressionOptions options
;
109 AVCodecContext
*avctx
;
113 static const int flac_samplerates
[16] = {
115 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000,
119 static const int flac_blocksizes
[16] = {
122 576, 1152, 2304, 4608,
124 256, 512, 1024, 2048, 4096, 8192, 16384, 32768
128 * Writes streaminfo metadata block to byte array
130 static void write_streaminfo(FlacEncodeContext
*s
, uint8_t *header
)
134 memset(header
, 0, FLAC_STREAMINFO_SIZE
);
135 init_put_bits(&pb
, header
, FLAC_STREAMINFO_SIZE
);
137 /* streaminfo metadata block */
138 put_bits(&pb
, 16, s
->avctx
->frame_size
);
139 put_bits(&pb
, 16, s
->avctx
->frame_size
);
140 put_bits(&pb
, 24, 0);
141 put_bits(&pb
, 24, s
->max_framesize
);
142 put_bits(&pb
, 20, s
->samplerate
);
143 put_bits(&pb
, 3, s
->channels
-1);
144 put_bits(&pb
, 5, 15); /* bits per sample - 1 */
146 /* total samples = 0 */
147 /* MD5 signature = 0 */
151 * Sets blocksize based on samplerate
152 * Chooses the closest predefined blocksize >= BLOCK_TIME_MS milliseconds
154 static int select_blocksize(int samplerate
, int block_time_ms
)
160 assert(samplerate
> 0);
161 blocksize
= flac_blocksizes
[1];
162 target
= (samplerate
* block_time_ms
) / 1000;
163 for(i
=0; i
<16; i
++) {
164 if(target
>= flac_blocksizes
[i
] && flac_blocksizes
[i
] > blocksize
) {
165 blocksize
= flac_blocksizes
[i
];
171 static av_cold
int flac_encode_init(AVCodecContext
*avctx
)
173 int freq
= avctx
->sample_rate
;
174 int channels
= avctx
->channels
;
175 FlacEncodeContext
*s
= avctx
->priv_data
;
181 dsputil_init(&s
->dsp
, avctx
);
183 if(avctx
->sample_fmt
!= SAMPLE_FMT_S16
) {
187 if(channels
< 1 || channels
> FLAC_MAX_CH
) {
190 s
->channels
= channels
;
191 s
->ch_code
= s
->channels
-1;
193 /* find samplerate in table */
196 for(i
=4; i
<12; i
++) {
197 if(freq
== flac_samplerates
[i
]) {
198 s
->samplerate
= flac_samplerates
[i
];
204 /* if not in table, samplerate is non-standard */
206 if(freq
% 1000 == 0 && freq
< 255000) {
208 s
->sr_code
[1] = freq
/ 1000;
209 } else if(freq
% 10 == 0 && freq
< 655350) {
211 s
->sr_code
[1] = freq
/ 10;
212 } else if(freq
< 65535) {
214 s
->sr_code
[1] = freq
;
218 s
->samplerate
= freq
;
221 /* set compression option defaults based on avctx->compression_level */
222 if(avctx
->compression_level
< 0) {
223 s
->options
.compression_level
= 5;
225 s
->options
.compression_level
= avctx
->compression_level
;
227 av_log(avctx
, AV_LOG_DEBUG
, " compression: %d\n", s
->options
.compression_level
);
229 level
= s
->options
.compression_level
;
231 av_log(avctx
, AV_LOG_ERROR
, "invalid compression level: %d\n",
232 s
->options
.compression_level
);
236 s
->options
.block_time_ms
= ((int[]){ 27, 27, 27,105,105,105,105,105,105,105,105,105,105})[level
];
237 s
->options
.use_lpc
= ((int[]){ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1})[level
];
238 s
->options
.min_prediction_order
= ((int[]){ 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1})[level
];
239 s
->options
.max_prediction_order
= ((int[]){ 3, 4, 4, 6, 8, 8, 8, 8, 12, 12, 12, 32, 32})[level
];
240 s
->options
.prediction_order_method
= ((int[]){ ORDER_METHOD_EST
, ORDER_METHOD_EST
, ORDER_METHOD_EST
,
241 ORDER_METHOD_EST
, ORDER_METHOD_EST
, ORDER_METHOD_EST
,
242 ORDER_METHOD_4LEVEL
, ORDER_METHOD_LOG
, ORDER_METHOD_4LEVEL
,
243 ORDER_METHOD_LOG
, ORDER_METHOD_SEARCH
, ORDER_METHOD_LOG
,
244 ORDER_METHOD_SEARCH
})[level
];
245 s
->options
.min_partition_order
= ((int[]){ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})[level
];
246 s
->options
.max_partition_order
= ((int[]){ 2, 2, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8})[level
];
248 /* set compression option overrides from AVCodecContext */
249 if(avctx
->use_lpc
>= 0) {
250 s
->options
.use_lpc
= av_clip(avctx
->use_lpc
, 0, 11);
252 if(s
->options
.use_lpc
== 1)
253 av_log(avctx
, AV_LOG_DEBUG
, " use lpc: Levinson-Durbin recursion with Welch window\n");
254 else if(s
->options
.use_lpc
> 1)
255 av_log(avctx
, AV_LOG_DEBUG
, " use lpc: Cholesky factorization\n");
257 if(avctx
->min_prediction_order
>= 0) {
258 if(s
->options
.use_lpc
) {
259 if(avctx
->min_prediction_order
< MIN_LPC_ORDER
||
260 avctx
->min_prediction_order
> MAX_LPC_ORDER
) {
261 av_log(avctx
, AV_LOG_ERROR
, "invalid min prediction order: %d\n",
262 avctx
->min_prediction_order
);
266 if(avctx
->min_prediction_order
> MAX_FIXED_ORDER
) {
267 av_log(avctx
, AV_LOG_ERROR
, "invalid min prediction order: %d\n",
268 avctx
->min_prediction_order
);
272 s
->options
.min_prediction_order
= avctx
->min_prediction_order
;
274 if(avctx
->max_prediction_order
>= 0) {
275 if(s
->options
.use_lpc
) {
276 if(avctx
->max_prediction_order
< MIN_LPC_ORDER
||
277 avctx
->max_prediction_order
> MAX_LPC_ORDER
) {
278 av_log(avctx
, AV_LOG_ERROR
, "invalid max prediction order: %d\n",
279 avctx
->max_prediction_order
);
283 if(avctx
->max_prediction_order
> MAX_FIXED_ORDER
) {
284 av_log(avctx
, AV_LOG_ERROR
, "invalid max prediction order: %d\n",
285 avctx
->max_prediction_order
);
289 s
->options
.max_prediction_order
= avctx
->max_prediction_order
;
291 if(s
->options
.max_prediction_order
< s
->options
.min_prediction_order
) {
292 av_log(avctx
, AV_LOG_ERROR
, "invalid prediction orders: min=%d max=%d\n",
293 s
->options
.min_prediction_order
, s
->options
.max_prediction_order
);
296 av_log(avctx
, AV_LOG_DEBUG
, " prediction order: %d, %d\n",
297 s
->options
.min_prediction_order
, s
->options
.max_prediction_order
);
299 if(avctx
->prediction_order_method
>= 0) {
300 if(avctx
->prediction_order_method
> ORDER_METHOD_LOG
) {
301 av_log(avctx
, AV_LOG_ERROR
, "invalid prediction order method: %d\n",
302 avctx
->prediction_order_method
);
305 s
->options
.prediction_order_method
= avctx
->prediction_order_method
;
307 switch(s
->options
.prediction_order_method
) {
308 case ORDER_METHOD_EST
: av_log(avctx
, AV_LOG_DEBUG
, " order method: %s\n",
310 case ORDER_METHOD_2LEVEL
: av_log(avctx
, AV_LOG_DEBUG
, " order method: %s\n",
312 case ORDER_METHOD_4LEVEL
: av_log(avctx
, AV_LOG_DEBUG
, " order method: %s\n",
314 case ORDER_METHOD_8LEVEL
: av_log(avctx
, AV_LOG_DEBUG
, " order method: %s\n",
316 case ORDER_METHOD_SEARCH
: av_log(avctx
, AV_LOG_DEBUG
, " order method: %s\n",
317 "full search"); break;
318 case ORDER_METHOD_LOG
: av_log(avctx
, AV_LOG_DEBUG
, " order method: %s\n",
319 "log search"); break;
322 if(avctx
->min_partition_order
>= 0) {
323 if(avctx
->min_partition_order
> MAX_PARTITION_ORDER
) {
324 av_log(avctx
, AV_LOG_ERROR
, "invalid min partition order: %d\n",
325 avctx
->min_partition_order
);
328 s
->options
.min_partition_order
= avctx
->min_partition_order
;
330 if(avctx
->max_partition_order
>= 0) {
331 if(avctx
->max_partition_order
> MAX_PARTITION_ORDER
) {
332 av_log(avctx
, AV_LOG_ERROR
, "invalid max partition order: %d\n",
333 avctx
->max_partition_order
);
336 s
->options
.max_partition_order
= avctx
->max_partition_order
;
338 if(s
->options
.max_partition_order
< s
->options
.min_partition_order
) {
339 av_log(avctx
, AV_LOG_ERROR
, "invalid partition orders: min=%d max=%d\n",
340 s
->options
.min_partition_order
, s
->options
.max_partition_order
);
343 av_log(avctx
, AV_LOG_DEBUG
, " partition order: %d, %d\n",
344 s
->options
.min_partition_order
, s
->options
.max_partition_order
);
346 if(avctx
->frame_size
> 0) {
347 if(avctx
->frame_size
< FLAC_MIN_BLOCKSIZE
||
348 avctx
->frame_size
> FLAC_MAX_BLOCKSIZE
) {
349 av_log(avctx
, AV_LOG_ERROR
, "invalid block size: %d\n",
354 s
->avctx
->frame_size
= select_blocksize(s
->samplerate
, s
->options
.block_time_ms
);
356 av_log(avctx
, AV_LOG_DEBUG
, " block size: %d\n", s
->avctx
->frame_size
);
358 /* set LPC precision */
359 if(avctx
->lpc_coeff_precision
> 0) {
360 if(avctx
->lpc_coeff_precision
> MAX_LPC_PRECISION
) {
361 av_log(avctx
, AV_LOG_ERROR
, "invalid lpc coeff precision: %d\n",
362 avctx
->lpc_coeff_precision
);
365 s
->options
.lpc_coeff_precision
= avctx
->lpc_coeff_precision
;
367 /* default LPC precision */
368 s
->options
.lpc_coeff_precision
= 15;
370 av_log(avctx
, AV_LOG_DEBUG
, " lpc precision: %d\n",
371 s
->options
.lpc_coeff_precision
);
373 /* set maximum encoded frame size in verbatim mode */
374 if(s
->channels
== 2) {
375 s
->max_framesize
= 14 + ((s
->avctx
->frame_size
* 33 + 7) >> 3);
377 s
->max_framesize
= 14 + (s
->avctx
->frame_size
* s
->channels
* 2);
380 streaminfo
= av_malloc(FLAC_STREAMINFO_SIZE
);
381 write_streaminfo(s
, streaminfo
);
382 avctx
->extradata
= streaminfo
;
383 avctx
->extradata_size
= FLAC_STREAMINFO_SIZE
;
387 avctx
->coded_frame
= avcodec_alloc_frame();
388 avctx
->coded_frame
->key_frame
= 1;
393 static void init_frame(FlacEncodeContext
*s
)
400 for(i
=0; i
<16; i
++) {
401 if(s
->avctx
->frame_size
== flac_blocksizes
[i
]) {
402 frame
->blocksize
= flac_blocksizes
[i
];
403 frame
->bs_code
[0] = i
;
404 frame
->bs_code
[1] = 0;
409 frame
->blocksize
= s
->avctx
->frame_size
;
410 if(frame
->blocksize
<= 256) {
411 frame
->bs_code
[0] = 6;
412 frame
->bs_code
[1] = frame
->blocksize
-1;
414 frame
->bs_code
[0] = 7;
415 frame
->bs_code
[1] = frame
->blocksize
-1;
419 for(ch
=0; ch
<s
->channels
; ch
++) {
420 frame
->subframes
[ch
].obits
= 16;
425 * Copy channel-interleaved input samples into separate subframes
427 static void copy_samples(FlacEncodeContext
*s
, int16_t *samples
)
433 for(i
=0,j
=0; i
<frame
->blocksize
; i
++) {
434 for(ch
=0; ch
<s
->channels
; ch
++,j
++) {
435 frame
->subframes
[ch
].samples
[i
] = samples
[j
];
441 #define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k)))
444 * Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0
446 static int find_optimal_param(uint32_t sum
, int n
)
454 k
= av_log2(n
<256 ? FASTDIV(sum2
,n
) : sum2
/n
);
455 return FFMIN(k
, MAX_RICE_PARAM
);
458 static uint32_t calc_optimal_rice_params(RiceContext
*rc
, int porder
,
459 uint32_t *sums
, int n
, int pred_order
)
465 part
= (1 << porder
);
468 cnt
= (n
>> porder
) - pred_order
;
469 for(i
=0; i
<part
; i
++) {
470 k
= find_optimal_param(sums
[i
], cnt
);
472 all_bits
+= rice_encode_count(sums
[i
], cnt
, k
);
481 static void calc_sums(int pmin
, int pmax
, uint32_t *data
, int n
, int pred_order
,
482 uint32_t sums
[][MAX_PARTITIONS
])
486 uint32_t *res
, *res_end
;
488 /* sums for highest level */
490 res
= &data
[pred_order
];
491 res_end
= &data
[n
>> pmax
];
492 for(i
=0; i
<parts
; i
++) {
494 while(res
< res_end
){
500 /* sums for lower levels */
501 for(i
=pmax
-1; i
>=pmin
; i
--) {
503 for(j
=0; j
<parts
; j
++) {
504 sums
[i
][j
] = sums
[i
+1][2*j
] + sums
[i
+1][2*j
+1];
509 static uint32_t calc_rice_params(RiceContext
*rc
, int pmin
, int pmax
,
510 int32_t *data
, int n
, int pred_order
)
513 uint32_t bits
[MAX_PARTITION_ORDER
+1];
517 uint32_t sums
[MAX_PARTITION_ORDER
+1][MAX_PARTITIONS
];
519 assert(pmin
>= 0 && pmin
<= MAX_PARTITION_ORDER
);
520 assert(pmax
>= 0 && pmax
<= MAX_PARTITION_ORDER
);
521 assert(pmin
<= pmax
);
523 udata
= av_malloc(n
* sizeof(uint32_t));
525 udata
[i
] = (2*data
[i
]) ^ (data
[i
]>>31);
528 calc_sums(pmin
, pmax
, udata
, n
, pred_order
, sums
);
531 bits
[pmin
] = UINT32_MAX
;
532 for(i
=pmin
; i
<=pmax
; i
++) {
533 bits
[i
] = calc_optimal_rice_params(&tmp_rc
, i
, sums
[i
], n
, pred_order
);
534 if(bits
[i
] <= bits
[opt_porder
]) {
541 return bits
[opt_porder
];
544 static int get_max_p_order(int max_porder
, int n
, int order
)
546 int porder
= FFMIN(max_porder
, av_log2(n
^(n
-1)));
548 porder
= FFMIN(porder
, av_log2(n
/order
));
552 static uint32_t calc_rice_params_fixed(RiceContext
*rc
, int pmin
, int pmax
,
553 int32_t *data
, int n
, int pred_order
,
557 pmin
= get_max_p_order(pmin
, n
, pred_order
);
558 pmax
= get_max_p_order(pmax
, n
, pred_order
);
559 bits
= pred_order
*bps
+ 6;
560 bits
+= calc_rice_params(rc
, pmin
, pmax
, data
, n
, pred_order
);
564 static uint32_t calc_rice_params_lpc(RiceContext
*rc
, int pmin
, int pmax
,
565 int32_t *data
, int n
, int pred_order
,
566 int bps
, int precision
)
569 pmin
= get_max_p_order(pmin
, n
, pred_order
);
570 pmax
= get_max_p_order(pmax
, n
, pred_order
);
571 bits
= pred_order
*bps
+ 4 + 5 + pred_order
*precision
+ 6;
572 bits
+= calc_rice_params(rc
, pmin
, pmax
, data
, n
, pred_order
);
577 * Apply Welch window function to audio block
579 static void apply_welch_window(const int32_t *data
, int len
, double *w_data
)
585 assert(!(len
&1)); //the optimization in r11881 does not support odd len
586 //if someone wants odd len extend the change in r11881
589 c
= 2.0 / (len
- 1.0);
593 for(i
=0; i
<n2
; i
++) {
596 w_data
[-i
-1] = data
[-i
-1] * w
;
597 w_data
[+i
] = data
[+i
] * w
;
602 * Calculates autocorrelation data from audio samples
603 * A Welch window function is applied before calculation.
605 void ff_flac_compute_autocorr(const int32_t *data
, int len
, int lag
,
609 double tmp
[len
+ lag
+ 1];
610 double *data1
= tmp
+ lag
;
612 apply_welch_window(data
, len
, data1
);
618 for(j
=0; j
<lag
; j
+=2){
619 double sum0
= 1.0, sum1
= 1.0;
620 for(i
=0; i
<len
; i
++){
621 sum0
+= data1
[i
] * data1
[i
-j
];
622 sum1
+= data1
[i
] * data1
[i
-j
-1];
630 for(i
=0; i
<len
; i
+=2){
631 sum
+= data1
[i
] * data1
[i
-j
]
632 + data1
[i
+1] * data1
[i
-j
+1];
639 * Levinson-Durbin recursion.
640 * Produces LPC coefficients from autocorrelation data.
642 static void compute_lpc_coefs(const double *autoc
, int max_order
,
643 double lpc
[][MAX_LPC_ORDER
], double *ref
)
647 double lpc_tmp
[MAX_LPC_ORDER
];
649 for(i
=0; i
<max_order
; i
++) lpc_tmp
[i
] = 0;
652 for(i
=0; i
<max_order
; i
++) {
655 r
-= lpc_tmp
[j
] * autoc
[i
-j
];
660 err
*= 1.0 - (r
* r
);
664 for(j
=0; j
<i2
; j
++) {
666 lpc_tmp
[j
] += r
* lpc_tmp
[i
-1-j
];
667 lpc_tmp
[i
-1-j
] += r
* tmp
;
670 lpc_tmp
[j
] += lpc_tmp
[j
] * r
;
673 for(j
=0; j
<=i
; j
++) {
674 lpc
[i
][j
] = -lpc_tmp
[j
];
680 * Quantize LPC coefficients
682 static void quantize_lpc_coefs(double *lpc_in
, int order
, int precision
,
683 int32_t *lpc_out
, int *shift
)
690 /* define maximum levels */
691 qmax
= (1 << (precision
- 1)) - 1;
693 /* find maximum coefficient value */
695 for(i
=0; i
<order
; i
++) {
696 cmax
= FFMAX(cmax
, fabs(lpc_in
[i
]));
699 /* if maximum value quantizes to zero, return all zeros */
700 if(cmax
* (1 << MAX_LPC_SHIFT
) < 1.0) {
702 memset(lpc_out
, 0, sizeof(int32_t) * order
);
706 /* calculate level shift which scales max coeff to available bits */
708 while((cmax
* (1 << sh
) > qmax
) && (sh
> 0)) {
712 /* since negative shift values are unsupported in decoder, scale down
713 coefficients instead */
714 if(sh
== 0 && cmax
> qmax
) {
715 double scale
= ((double)qmax
) / cmax
;
716 for(i
=0; i
<order
; i
++) {
721 /* output quantized coefficients and level shift */
723 for(i
=0; i
<order
; i
++) {
724 error
+= lpc_in
[i
] * (1 << sh
);
725 lpc_out
[i
] = av_clip(lrintf(error
), -qmax
, qmax
);
731 static int estimate_best_order(double *ref
, int max_order
)
736 for(i
=max_order
-1; i
>=0; i
--) {
746 * Calculate LPC coefficients for multiple orders
748 static int lpc_calc_coefs(FlacEncodeContext
*s
,
749 const int32_t *samples
, int blocksize
, int max_order
,
750 int precision
, int32_t coefs
[][MAX_LPC_ORDER
],
751 int *shift
, int use_lpc
, int omethod
)
753 double autoc
[MAX_LPC_ORDER
+1];
754 double ref
[MAX_LPC_ORDER
];
755 double lpc
[MAX_LPC_ORDER
][MAX_LPC_ORDER
];
759 assert(max_order
>= MIN_LPC_ORDER
&& max_order
<= MAX_LPC_ORDER
);
762 s
->dsp
.flac_compute_autocorr(samples
, blocksize
, max_order
, autoc
);
764 compute_lpc_coefs(autoc
, max_order
, lpc
, ref
);
767 double var
[MAX_LPC_ORDER
+1], weight
;
769 for(pass
=0; pass
<use_lpc
-1; pass
++){
770 av_init_lls(&m
[pass
&1], max_order
);
773 for(i
=max_order
; i
<blocksize
; i
++){
774 for(j
=0; j
<=max_order
; j
++)
775 var
[j
]= samples
[i
-j
];
778 double eval
, inv
, rinv
;
779 eval
= av_evaluate_lls(&m
[(pass
-1)&1], var
+1, max_order
-1);
780 eval
= (512>>pass
) + fabs(eval
- var
[0]);
783 for(j
=0; j
<=max_order
; j
++)
789 av_update_lls(&m
[pass
&1], var
, 1.0);
791 av_solve_lls(&m
[pass
&1], 0.001, 0);
794 for(i
=0; i
<max_order
; i
++){
795 for(j
=0; j
<max_order
; j
++)
796 lpc
[i
][j
]= m
[(pass
-1)&1].coeff
[i
][j
];
797 ref
[i
]= sqrt(m
[(pass
-1)&1].variance
[i
] / weight
) * (blocksize
- max_order
) / 4000;
799 for(i
=max_order
-1; i
>0; i
--)
800 ref
[i
] = ref
[i
-1] - ref
[i
];
802 opt_order
= max_order
;
804 if(omethod
== ORDER_METHOD_EST
) {
805 opt_order
= estimate_best_order(ref
, max_order
);
807 quantize_lpc_coefs(lpc
[i
], i
+1, precision
, coefs
[i
], &shift
[i
]);
809 for(i
=0; i
<max_order
; i
++) {
810 quantize_lpc_coefs(lpc
[i
], i
+1, precision
, coefs
[i
], &shift
[i
]);
818 static void encode_residual_verbatim(int32_t *res
, int32_t *smp
, int n
)
821 memcpy(res
, smp
, n
* sizeof(int32_t));
824 static void encode_residual_fixed(int32_t *res
, const int32_t *smp
, int n
,
829 for(i
=0; i
<order
; i
++) {
834 for(i
=order
; i
<n
; i
++)
837 for(i
=order
; i
<n
; i
++)
838 res
[i
]= smp
[i
] - smp
[i
-1];
840 int a
= smp
[order
-1] - smp
[order
-2];
841 for(i
=order
; i
<n
; i
+=2) {
842 int b
= smp
[i
] - smp
[i
-1];
844 a
= smp
[i
+1] - smp
[i
];
848 int a
= smp
[order
-1] - smp
[order
-2];
849 int c
= smp
[order
-1] - 2*smp
[order
-2] + smp
[order
-3];
850 for(i
=order
; i
<n
; i
+=2) {
851 int b
= smp
[i
] - smp
[i
-1];
854 a
= smp
[i
+1] - smp
[i
];
859 int a
= smp
[order
-1] - smp
[order
-2];
860 int c
= smp
[order
-1] - 2*smp
[order
-2] + smp
[order
-3];
861 int e
= smp
[order
-1] - 3*smp
[order
-2] + 3*smp
[order
-3] - smp
[order
-4];
862 for(i
=order
; i
<n
; i
+=2) {
863 int b
= smp
[i
] - smp
[i
-1];
867 a
= smp
[i
+1] - smp
[i
];
876 int c = coefs[(x)-1];\
882 static av_always_inline
void encode_residual_lpc_unrolled(
883 int32_t *res
, const int32_t *smp
, int n
,
884 int order
, const int32_t *coefs
, int shift
, int big
)
887 for(i
=order
; i
<n
; i
+=2) {
888 int s
= smp
[i
-order
];
937 res
[i
] = smp
[i
] - (p0
>> shift
);
938 res
[i
+1] = smp
[i
+1] - (p1
>> shift
);
942 static void encode_residual_lpc(int32_t *res
, const int32_t *smp
, int n
,
943 int order
, const int32_t *coefs
, int shift
)
946 for(i
=0; i
<order
; i
++) {
950 for(i
=order
; i
<n
; i
+=2) {
954 for(j
=0; j
<order
; j
++) {
960 res
[i
] = smp
[i
] - (p0
>> shift
);
961 res
[i
+1] = smp
[i
+1] - (p1
>> shift
);
965 case 1: encode_residual_lpc_unrolled(res
, smp
, n
, 1, coefs
, shift
, 0); break;
966 case 2: encode_residual_lpc_unrolled(res
, smp
, n
, 2, coefs
, shift
, 0); break;
967 case 3: encode_residual_lpc_unrolled(res
, smp
, n
, 3, coefs
, shift
, 0); break;
968 case 4: encode_residual_lpc_unrolled(res
, smp
, n
, 4, coefs
, shift
, 0); break;
969 case 5: encode_residual_lpc_unrolled(res
, smp
, n
, 5, coefs
, shift
, 0); break;
970 case 6: encode_residual_lpc_unrolled(res
, smp
, n
, 6, coefs
, shift
, 0); break;
971 case 7: encode_residual_lpc_unrolled(res
, smp
, n
, 7, coefs
, shift
, 0); break;
972 case 8: encode_residual_lpc_unrolled(res
, smp
, n
, 8, coefs
, shift
, 0); break;
973 default: encode_residual_lpc_unrolled(res
, smp
, n
, order
, coefs
, shift
, 1); break;
978 static int encode_residual(FlacEncodeContext
*ctx
, int ch
)
981 int min_order
, max_order
, opt_order
, precision
, omethod
;
982 int min_porder
, max_porder
;
985 int32_t coefs
[MAX_LPC_ORDER
][MAX_LPC_ORDER
];
986 int shift
[MAX_LPC_ORDER
];
990 sub
= &frame
->subframes
[ch
];
993 n
= frame
->blocksize
;
997 if(smp
[i
] != smp
[0]) break;
1000 sub
->type
= sub
->type_code
= FLAC_SUBFRAME_CONSTANT
;
1007 sub
->type
= sub
->type_code
= FLAC_SUBFRAME_VERBATIM
;
1008 encode_residual_verbatim(res
, smp
, n
);
1009 return sub
->obits
* n
;
1012 min_order
= ctx
->options
.min_prediction_order
;
1013 max_order
= ctx
->options
.max_prediction_order
;
1014 min_porder
= ctx
->options
.min_partition_order
;
1015 max_porder
= ctx
->options
.max_partition_order
;
1016 precision
= ctx
->options
.lpc_coeff_precision
;
1017 omethod
= ctx
->options
.prediction_order_method
;
1020 if(!ctx
->options
.use_lpc
|| max_order
== 0 || (n
<= max_order
)) {
1021 uint32_t bits
[MAX_FIXED_ORDER
+1];
1022 if(max_order
> MAX_FIXED_ORDER
) max_order
= MAX_FIXED_ORDER
;
1024 bits
[0] = UINT32_MAX
;
1025 for(i
=min_order
; i
<=max_order
; i
++) {
1026 encode_residual_fixed(res
, smp
, n
, i
);
1027 bits
[i
] = calc_rice_params_fixed(&sub
->rc
, min_porder
, max_porder
, res
,
1029 if(bits
[i
] < bits
[opt_order
]) {
1033 sub
->order
= opt_order
;
1034 sub
->type
= FLAC_SUBFRAME_FIXED
;
1035 sub
->type_code
= sub
->type
| sub
->order
;
1036 if(sub
->order
!= max_order
) {
1037 encode_residual_fixed(res
, smp
, n
, sub
->order
);
1038 return calc_rice_params_fixed(&sub
->rc
, min_porder
, max_porder
, res
, n
,
1039 sub
->order
, sub
->obits
);
1041 return bits
[sub
->order
];
1045 opt_order
= lpc_calc_coefs(ctx
, smp
, n
, max_order
, precision
, coefs
, shift
, ctx
->options
.use_lpc
, omethod
);
1047 if(omethod
== ORDER_METHOD_2LEVEL
||
1048 omethod
== ORDER_METHOD_4LEVEL
||
1049 omethod
== ORDER_METHOD_8LEVEL
) {
1050 int levels
= 1 << omethod
;
1051 uint32_t bits
[levels
];
1053 int opt_index
= levels
-1;
1054 opt_order
= max_order
-1;
1055 bits
[opt_index
] = UINT32_MAX
;
1056 for(i
=levels
-1; i
>=0; i
--) {
1057 order
= min_order
+ (((max_order
-min_order
+1) * (i
+1)) / levels
)-1;
1058 if(order
< 0) order
= 0;
1059 encode_residual_lpc(res
, smp
, n
, order
+1, coefs
[order
], shift
[order
]);
1060 bits
[i
] = calc_rice_params_lpc(&sub
->rc
, min_porder
, max_porder
,
1061 res
, n
, order
+1, sub
->obits
, precision
);
1062 if(bits
[i
] < bits
[opt_index
]) {
1068 } else if(omethod
== ORDER_METHOD_SEARCH
) {
1069 // brute-force optimal order search
1070 uint32_t bits
[MAX_LPC_ORDER
];
1072 bits
[0] = UINT32_MAX
;
1073 for(i
=min_order
-1; i
<max_order
; i
++) {
1074 encode_residual_lpc(res
, smp
, n
, i
+1, coefs
[i
], shift
[i
]);
1075 bits
[i
] = calc_rice_params_lpc(&sub
->rc
, min_porder
, max_porder
,
1076 res
, n
, i
+1, sub
->obits
, precision
);
1077 if(bits
[i
] < bits
[opt_order
]) {
1082 } else if(omethod
== ORDER_METHOD_LOG
) {
1083 uint32_t bits
[MAX_LPC_ORDER
];
1086 opt_order
= min_order
- 1 + (max_order
-min_order
)/3;
1087 memset(bits
, -1, sizeof(bits
));
1089 for(step
=16 ;step
; step
>>=1){
1090 int last
= opt_order
;
1091 for(i
=last
-step
; i
<=last
+step
; i
+= step
){
1092 if(i
<min_order
-1 || i
>=max_order
|| bits
[i
] < UINT32_MAX
)
1094 encode_residual_lpc(res
, smp
, n
, i
+1, coefs
[i
], shift
[i
]);
1095 bits
[i
] = calc_rice_params_lpc(&sub
->rc
, min_porder
, max_porder
,
1096 res
, n
, i
+1, sub
->obits
, precision
);
1097 if(bits
[i
] < bits
[opt_order
])
1104 sub
->order
= opt_order
;
1105 sub
->type
= FLAC_SUBFRAME_LPC
;
1106 sub
->type_code
= sub
->type
| (sub
->order
-1);
1107 sub
->shift
= shift
[sub
->order
-1];
1108 for(i
=0; i
<sub
->order
; i
++) {
1109 sub
->coefs
[i
] = coefs
[sub
->order
-1][i
];
1111 encode_residual_lpc(res
, smp
, n
, sub
->order
, sub
->coefs
, sub
->shift
);
1112 return calc_rice_params_lpc(&sub
->rc
, min_porder
, max_porder
, res
, n
, sub
->order
,
1113 sub
->obits
, precision
);
1116 static int encode_residual_v(FlacEncodeContext
*ctx
, int ch
)
1123 frame
= &ctx
->frame
;
1124 sub
= &frame
->subframes
[ch
];
1125 res
= sub
->residual
;
1127 n
= frame
->blocksize
;
1130 for(i
=1; i
<n
; i
++) {
1131 if(smp
[i
] != smp
[0]) break;
1134 sub
->type
= sub
->type_code
= FLAC_SUBFRAME_CONSTANT
;
1140 sub
->type
= sub
->type_code
= FLAC_SUBFRAME_VERBATIM
;
1141 encode_residual_verbatim(res
, smp
, n
);
1142 return sub
->obits
* n
;
1145 static int estimate_stereo_mode(int32_t *left_ch
, int32_t *right_ch
, int n
)
1153 /* calculate sum of 2nd order residual for each channel */
1154 sum
[0] = sum
[1] = sum
[2] = sum
[3] = 0;
1155 for(i
=2; i
<n
; i
++) {
1156 lt
= left_ch
[i
] - 2*left_ch
[i
-1] + left_ch
[i
-2];
1157 rt
= right_ch
[i
] - 2*right_ch
[i
-1] + right_ch
[i
-2];
1158 sum
[2] += FFABS((lt
+ rt
) >> 1);
1159 sum
[3] += FFABS(lt
- rt
);
1160 sum
[0] += FFABS(lt
);
1161 sum
[1] += FFABS(rt
);
1163 /* estimate bit counts */
1164 for(i
=0; i
<4; i
++) {
1165 k
= find_optimal_param(2*sum
[i
], n
);
1166 sum
[i
] = rice_encode_count(2*sum
[i
], n
, k
);
1169 /* calculate score for each mode */
1170 score
[0] = sum
[0] + sum
[1];
1171 score
[1] = sum
[0] + sum
[3];
1172 score
[2] = sum
[1] + sum
[3];
1173 score
[3] = sum
[2] + sum
[3];
1175 /* return mode with lowest score */
1177 for(i
=1; i
<4; i
++) {
1178 if(score
[i
] < score
[best
]) {
1183 return FLAC_CHMODE_LEFT_RIGHT
;
1184 } else if(best
== 1) {
1185 return FLAC_CHMODE_LEFT_SIDE
;
1186 } else if(best
== 2) {
1187 return FLAC_CHMODE_RIGHT_SIDE
;
1189 return FLAC_CHMODE_MID_SIDE
;
1194 * Perform stereo channel decorrelation
1196 static void channel_decorrelation(FlacEncodeContext
*ctx
)
1199 int32_t *left
, *right
;
1202 frame
= &ctx
->frame
;
1203 n
= frame
->blocksize
;
1204 left
= frame
->subframes
[0].samples
;
1205 right
= frame
->subframes
[1].samples
;
1207 if(ctx
->channels
!= 2) {
1208 frame
->ch_mode
= FLAC_CHMODE_NOT_STEREO
;
1212 frame
->ch_mode
= estimate_stereo_mode(left
, right
, n
);
1214 /* perform decorrelation and adjust bits-per-sample */
1215 if(frame
->ch_mode
== FLAC_CHMODE_LEFT_RIGHT
) {
1218 if(frame
->ch_mode
== FLAC_CHMODE_MID_SIDE
) {
1220 for(i
=0; i
<n
; i
++) {
1222 left
[i
] = (tmp
+ right
[i
]) >> 1;
1223 right
[i
] = tmp
- right
[i
];
1225 frame
->subframes
[1].obits
++;
1226 } else if(frame
->ch_mode
== FLAC_CHMODE_LEFT_SIDE
) {
1227 for(i
=0; i
<n
; i
++) {
1228 right
[i
] = left
[i
] - right
[i
];
1230 frame
->subframes
[1].obits
++;
1232 for(i
=0; i
<n
; i
++) {
1233 left
[i
] -= right
[i
];
1235 frame
->subframes
[0].obits
++;
1239 static void put_sbits(PutBitContext
*pb
, int bits
, int32_t val
)
1241 assert(bits
>= 0 && bits
<= 31);
1243 put_bits(pb
, bits
, val
& ((1<<bits
)-1));
1246 static void write_utf8(PutBitContext
*pb
, uint32_t val
)
1249 PUT_UTF8(val
, tmp
, put_bits(pb
, 8, tmp
);)
1252 static void output_frame_header(FlacEncodeContext
*s
)
1259 put_bits(&s
->pb
, 16, 0xFFF8);
1260 put_bits(&s
->pb
, 4, frame
->bs_code
[0]);
1261 put_bits(&s
->pb
, 4, s
->sr_code
[0]);
1262 if(frame
->ch_mode
== FLAC_CHMODE_NOT_STEREO
) {
1263 put_bits(&s
->pb
, 4, s
->ch_code
);
1265 put_bits(&s
->pb
, 4, frame
->ch_mode
);
1267 put_bits(&s
->pb
, 3, 4); /* bits-per-sample code */
1268 put_bits(&s
->pb
, 1, 0);
1269 write_utf8(&s
->pb
, s
->frame_count
);
1270 if(frame
->bs_code
[0] == 6) {
1271 put_bits(&s
->pb
, 8, frame
->bs_code
[1]);
1272 } else if(frame
->bs_code
[0] == 7) {
1273 put_bits(&s
->pb
, 16, frame
->bs_code
[1]);
1275 if(s
->sr_code
[0] == 12) {
1276 put_bits(&s
->pb
, 8, s
->sr_code
[1]);
1277 } else if(s
->sr_code
[0] > 12) {
1278 put_bits(&s
->pb
, 16, s
->sr_code
[1]);
1280 flush_put_bits(&s
->pb
);
1281 crc
= av_crc(av_crc_get_table(AV_CRC_8_ATM
), 0,
1282 s
->pb
.buf
, put_bits_count(&s
->pb
)>>3);
1283 put_bits(&s
->pb
, 8, crc
);
1286 static void output_subframe_constant(FlacEncodeContext
*s
, int ch
)
1291 sub
= &s
->frame
.subframes
[ch
];
1292 res
= sub
->residual
[0];
1293 put_sbits(&s
->pb
, sub
->obits
, res
);
1296 static void output_subframe_verbatim(FlacEncodeContext
*s
, int ch
)
1304 sub
= &frame
->subframes
[ch
];
1306 for(i
=0; i
<frame
->blocksize
; i
++) {
1307 res
= sub
->residual
[i
];
1308 put_sbits(&s
->pb
, sub
->obits
, res
);
1312 static void output_residual(FlacEncodeContext
*ctx
, int ch
)
1314 int i
, j
, p
, n
, parts
;
1315 int k
, porder
, psize
, res_cnt
;
1320 frame
= &ctx
->frame
;
1321 sub
= &frame
->subframes
[ch
];
1322 res
= sub
->residual
;
1323 n
= frame
->blocksize
;
1325 /* rice-encoded block */
1326 put_bits(&ctx
->pb
, 2, 0);
1328 /* partition order */
1329 porder
= sub
->rc
.porder
;
1330 psize
= n
>> porder
;
1331 parts
= (1 << porder
);
1332 put_bits(&ctx
->pb
, 4, porder
);
1333 res_cnt
= psize
- sub
->order
;
1337 for(p
=0; p
<parts
; p
++) {
1338 k
= sub
->rc
.params
[p
];
1339 put_bits(&ctx
->pb
, 4, k
);
1340 if(p
== 1) res_cnt
= psize
;
1341 for(i
=0; i
<res_cnt
&& j
<n
; i
++, j
++) {
1342 set_sr_golomb_flac(&ctx
->pb
, res
[j
], k
, INT32_MAX
, 0);
1347 static void output_subframe_fixed(FlacEncodeContext
*ctx
, int ch
)
1353 frame
= &ctx
->frame
;
1354 sub
= &frame
->subframes
[ch
];
1356 /* warm-up samples */
1357 for(i
=0; i
<sub
->order
; i
++) {
1358 put_sbits(&ctx
->pb
, sub
->obits
, sub
->residual
[i
]);
1362 output_residual(ctx
, ch
);
1365 static void output_subframe_lpc(FlacEncodeContext
*ctx
, int ch
)
1371 frame
= &ctx
->frame
;
1372 sub
= &frame
->subframes
[ch
];
1374 /* warm-up samples */
1375 for(i
=0; i
<sub
->order
; i
++) {
1376 put_sbits(&ctx
->pb
, sub
->obits
, sub
->residual
[i
]);
1379 /* LPC coefficients */
1380 cbits
= ctx
->options
.lpc_coeff_precision
;
1381 put_bits(&ctx
->pb
, 4, cbits
-1);
1382 put_sbits(&ctx
->pb
, 5, sub
->shift
);
1383 for(i
=0; i
<sub
->order
; i
++) {
1384 put_sbits(&ctx
->pb
, cbits
, sub
->coefs
[i
]);
1388 output_residual(ctx
, ch
);
1391 static void output_subframes(FlacEncodeContext
*s
)
1399 for(ch
=0; ch
<s
->channels
; ch
++) {
1400 sub
= &frame
->subframes
[ch
];
1402 /* subframe header */
1403 put_bits(&s
->pb
, 1, 0);
1404 put_bits(&s
->pb
, 6, sub
->type_code
);
1405 put_bits(&s
->pb
, 1, 0); /* no wasted bits */
1408 if(sub
->type
== FLAC_SUBFRAME_CONSTANT
) {
1409 output_subframe_constant(s
, ch
);
1410 } else if(sub
->type
== FLAC_SUBFRAME_VERBATIM
) {
1411 output_subframe_verbatim(s
, ch
);
1412 } else if(sub
->type
== FLAC_SUBFRAME_FIXED
) {
1413 output_subframe_fixed(s
, ch
);
1414 } else if(sub
->type
== FLAC_SUBFRAME_LPC
) {
1415 output_subframe_lpc(s
, ch
);
1420 static void output_frame_footer(FlacEncodeContext
*s
)
1423 flush_put_bits(&s
->pb
);
1424 crc
= bswap_16(av_crc(av_crc_get_table(AV_CRC_16_ANSI
), 0,
1425 s
->pb
.buf
, put_bits_count(&s
->pb
)>>3));
1426 put_bits(&s
->pb
, 16, crc
);
1427 flush_put_bits(&s
->pb
);
1430 static int flac_encode_frame(AVCodecContext
*avctx
, uint8_t *frame
,
1431 int buf_size
, void *data
)
1434 FlacEncodeContext
*s
;
1435 int16_t *samples
= data
;
1438 s
= avctx
->priv_data
;
1442 copy_samples(s
, samples
);
1444 channel_decorrelation(s
);
1446 for(ch
=0; ch
<s
->channels
; ch
++) {
1447 encode_residual(s
, ch
);
1449 init_put_bits(&s
->pb
, frame
, buf_size
);
1450 output_frame_header(s
);
1451 output_subframes(s
);
1452 output_frame_footer(s
);
1453 out_bytes
= put_bits_count(&s
->pb
) >> 3;
1455 if(out_bytes
> s
->max_framesize
|| out_bytes
>= buf_size
) {
1456 /* frame too large. use verbatim mode */
1457 for(ch
=0; ch
<s
->channels
; ch
++) {
1458 encode_residual_v(s
, ch
);
1460 init_put_bits(&s
->pb
, frame
, buf_size
);
1461 output_frame_header(s
);
1462 output_subframes(s
);
1463 output_frame_footer(s
);
1464 out_bytes
= put_bits_count(&s
->pb
) >> 3;
1466 if(out_bytes
> s
->max_framesize
|| out_bytes
>= buf_size
) {
1467 /* still too large. must be an error. */
1468 av_log(avctx
, AV_LOG_ERROR
, "error encoding frame\n");
1477 static av_cold
int flac_encode_close(AVCodecContext
*avctx
)
1479 av_freep(&avctx
->extradata
);
1480 avctx
->extradata_size
= 0;
1481 av_freep(&avctx
->coded_frame
);
1485 AVCodec flac_encoder
= {
1489 sizeof(FlacEncodeContext
),
1494 .capabilities
= CODEC_CAP_SMALL_LAST_FRAME
,
1495 .long_name
= NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),