flacenc.c 44.2 KB
Newer Older
1
/*
2
 * FLAC audio encoder
3
 * Copyright (c) 2006  Justin Ruggles <justin.ruggles@gmail.com>
4
 *
5 6 7
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
8 9
 * modify it under the terms of the GNU Lesser General Public
 * 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 14 15 16 17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * 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 20 21
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

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 "bswapdsp.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 38 39 40 41

#define FLAC_SUBFRAME_CONSTANT  0
#define FLAC_SUBFRAME_VERBATIM  1
#define FLAC_SUBFRAME_FIXED     8
#define FLAC_SUBFRAME_LPC      32

42 43 44 45 46
#define MAX_FIXED_ORDER     4
#define MAX_PARTITION_ORDER 8
#define MAX_PARTITIONS     (1 << MAX_PARTITION_ORDER)
#define MAX_LPC_PRECISION  15
#define MAX_LPC_SHIFT      15
47 48 49 50 51

enum CodingMode {
    CODING_MODE_RICE  = 4,
    CODING_MODE_RICE2 = 5,
};
52 53 54 55

typedef struct CompressionOptions {
    int compression_level;
    int block_time_ms;
56
    enum FFLPCType lpc_type;
57
    int lpc_passes;
58 59 60 61 62 63
    int lpc_coeff_precision;
    int min_prediction_order;
    int max_prediction_order;
    int prediction_order_method;
    int min_partition_order;
    int max_partition_order;
64
    int ch_mode;
65 66
} CompressionOptions;

67
typedef struct RiceContext {
68
    enum CodingMode coding_mode;
69
    int porder;
70
    int params[MAX_PARTITIONS];
71 72
} RiceContext;

73 74 75 76
typedef struct FlacSubframe {
    int type;
    int type_code;
    int obits;
77
    int wasted;
78
    int order;
79 80
    int32_t coefs[MAX_LPC_ORDER];
    int shift;
81
    RiceContext rc;
82
    int32_t samples[FLAC_MAX_BLOCKSIZE];
83
    int32_t residual[FLAC_MAX_BLOCKSIZE+11];
84 85 86
} FlacSubframe;

typedef struct FlacFrame {
87
    FlacSubframe subframes[FLAC_MAX_CHANNELS];
88 89 90 91
    int blocksize;
    int bs_code[2];
    uint8_t crc8;
    int ch_mode;
92
    int verbatim_only;
93 94 95
} FlacFrame;

typedef struct FlacEncodeContext {
96
    AVClass *class;
97
    PutBitContext pb;
98 99
    int channels;
    int samplerate;
100
    int sr_code[2];
101
    int bps_code;
102
    int max_blocksize;
103
    int min_framesize;
104
    int max_framesize;
105
    int max_encoded_framesize;
106
    uint32_t frame_count;
107
    uint64_t sample_count;
108
    uint8_t md5sum[16];
109
    FlacFrame frame;
110
    CompressionOptions options;
111
    AVCodecContext *avctx;
112
    LPCContext lpc_ctx;
113
    struct AVMD5 *md5ctx;
114 115
    uint8_t *md5_buffer;
    unsigned int md5_buffer_size;
116
    BswapDSPContext bdsp;
117
    FLACDSPContext flac_dsp;
118 119 120

    int flushed;
    int64_t next_pts;
121 122
} FlacEncodeContext;

123

124
/**
125
 * Write streaminfo metadata block to byte array.
126 127 128 129 130 131 132 133 134
 */
static void write_streaminfo(FlacEncodeContext *s, uint8_t *header)
{
    PutBitContext pb;

    memset(header, 0, FLAC_STREAMINFO_SIZE);
    init_put_bits(&pb, header, FLAC_STREAMINFO_SIZE);

    /* streaminfo metadata block */
135 136
    put_bits(&pb, 16, s->max_blocksize);
    put_bits(&pb, 16, s->max_blocksize);
137
    put_bits(&pb, 24, s->min_framesize);
138 139 140
    put_bits(&pb, 24, s->max_framesize);
    put_bits(&pb, 20, s->samplerate);
    put_bits(&pb, 3, s->channels-1);
141
    put_bits(&pb,  5, s->avctx->bits_per_raw_sample - 1);
142 143 144
    /* write 36-bit sample count in 2 put_bits() calls */
    put_bits(&pb, 24, (s->sample_count & 0xFFFFFF000LL) >> 12);
    put_bits(&pb, 12,  s->sample_count & 0x000000FFFLL);
145
    flush_put_bits(&pb);
146
    memcpy(&header[18], s->md5sum, 16);
147 148
}

149

150
/**
151 152
 * Set blocksize based on samplerate.
 * Choose the closest predefined blocksize >= BLOCK_TIME_MS milliseconds.
153
 */
154
static int select_blocksize(int samplerate, int block_time_ms)
155 156 157 158 159
{
    int i;
    int target;
    int blocksize;

160
    av_assert0(samplerate > 0);
161
    blocksize = ff_flac_blocksize_table[1];
162 163 164 165
    target    = (samplerate * block_time_ms) / 1000;
    for (i = 0; i < 16; i++) {
        if (target >= ff_flac_blocksize_table[i] &&
            ff_flac_blocksize_table[i] > blocksize) {
166
            blocksize = ff_flac_blocksize_table[i];
167 168 169 170 171
        }
    }
    return blocksize;
}

172

173 174 175 176 177 178 179 180
static av_cold void dprint_compression_options(FlacEncodeContext *s)
{
    AVCodecContext     *avctx = s->avctx;
    CompressionOptions *opt   = &s->options;

    av_log(avctx, AV_LOG_DEBUG, " compression: %d\n", opt->compression_level);

    switch (opt->lpc_type) {
181
    case FF_LPC_TYPE_NONE:
182 183
        av_log(avctx, AV_LOG_DEBUG, " lpc type: None\n");
        break;
184
    case FF_LPC_TYPE_FIXED:
185 186
        av_log(avctx, AV_LOG_DEBUG, " lpc type: Fixed pre-defined coefficients\n");
        break;
187
    case FF_LPC_TYPE_LEVINSON:
188 189
        av_log(avctx, AV_LOG_DEBUG, " lpc type: Levinson-Durbin recursion with Welch window\n");
        break;
190
    case FF_LPC_TYPE_CHOLESKY:
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
        av_log(avctx, AV_LOG_DEBUG, " lpc type: Cholesky factorization, %d pass%s\n",
               opt->lpc_passes, opt->lpc_passes == 1 ? "" : "es");
        break;
    }

    av_log(avctx, AV_LOG_DEBUG, " prediction order: %d, %d\n",
           opt->min_prediction_order, opt->max_prediction_order);

    switch (opt->prediction_order_method) {
    case ORDER_METHOD_EST:
        av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "estimate");
        break;
    case ORDER_METHOD_2LEVEL:
        av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "2-level");
        break;
    case ORDER_METHOD_4LEVEL:
        av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "4-level");
        break;
    case ORDER_METHOD_8LEVEL:
        av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "8-level");
        break;
    case ORDER_METHOD_SEARCH:
        av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "full search");
        break;
    case ORDER_METHOD_LOG:
        av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", "log search");
        break;
    }


    av_log(avctx, AV_LOG_DEBUG, " partition order: %d, %d\n",
           opt->min_partition_order, opt->max_partition_order);

    av_log(avctx, AV_LOG_DEBUG, " block size: %d\n", avctx->frame_size);

    av_log(avctx, AV_LOG_DEBUG, " lpc precision: %d\n",
           opt->lpc_coeff_precision);
}


231
static av_cold int flac_encode_init(AVCodecContext *avctx)
232 233 234 235
{
    int freq = avctx->sample_rate;
    int channels = avctx->channels;
    FlacEncodeContext *s = avctx->priv_data;
236
    int i, level, ret;
237 238
    uint8_t *streaminfo;

239 240
    s->avctx = avctx;

241 242 243 244 245 246 247 248 249 250 251 252
    switch (avctx->sample_fmt) {
    case AV_SAMPLE_FMT_S16:
        avctx->bits_per_raw_sample = 16;
        s->bps_code                = 4;
        break;
    case AV_SAMPLE_FMT_S32:
        if (avctx->bits_per_raw_sample != 24)
            av_log(avctx, AV_LOG_WARNING, "encoding as 24 bits-per-sample\n");
        avctx->bits_per_raw_sample = 24;
        s->bps_code                = 6;
        break;
    }
253

254 255 256 257 258
    if (channels < 1 || channels > FLAC_MAX_CHANNELS) {
        av_log(avctx, AV_LOG_ERROR, "%d channels not supported (max %d)\n",
               channels, FLAC_MAX_CHANNELS);
        return AVERROR(EINVAL);
    }
259 260 261
    s->channels = channels;

    /* find samplerate in table */
262
    if (freq < 1)
263
        return -1;
264 265
    for (i = 4; i < 12; i++) {
        if (freq == ff_flac_sample_rate_table[i]) {
266
            s->samplerate = ff_flac_sample_rate_table[i];
267 268 269 270 271 272
            s->sr_code[0] = i;
            s->sr_code[1] = 0;
            break;
        }
    }
    /* if not in table, samplerate is non-standard */
273 274
    if (i == 12) {
        if (freq % 1000 == 0 && freq < 255000) {
275 276
            s->sr_code[0] = 12;
            s->sr_code[1] = freq / 1000;
277
        } else if (freq % 10 == 0 && freq < 655350) {
278 279
            s->sr_code[0] = 14;
            s->sr_code[1] = freq / 10;
280
        } else if (freq < 65535) {
281 282 283
            s->sr_code[0] = 13;
            s->sr_code[1] = freq;
        } else {
284 285
            av_log(avctx, AV_LOG_ERROR, "%d Hz not supported\n", freq);
            return AVERROR(EINVAL);
286 287 288 289
        }
        s->samplerate = freq;
    }

290
    /* set compression option defaults based on avctx->compression_level */
291
    if (avctx->compression_level < 0)
292
        s->options.compression_level = 5;
293
    else
294 295
        s->options.compression_level = avctx->compression_level;

296 297
    level = s->options.compression_level;
    if (level > 12) {
298 299
        av_log(avctx, AV_LOG_ERROR, "invalid compression level: %d\n",
               s->options.compression_level);
300
        return AVERROR(EINVAL);
301 302
    }

303 304
    s->options.block_time_ms = ((int[]){ 27, 27, 27,105,105,105,105,105,105,105,105,105,105})[level];

305 306 307 308 309 310
    if (s->options.lpc_type == FF_LPC_TYPE_DEFAULT)
        s->options.lpc_type  = ((int[]){ FF_LPC_TYPE_FIXED,    FF_LPC_TYPE_FIXED,    FF_LPC_TYPE_FIXED,
                                         FF_LPC_TYPE_LEVINSON, FF_LPC_TYPE_LEVINSON, FF_LPC_TYPE_LEVINSON,
                                         FF_LPC_TYPE_LEVINSON, FF_LPC_TYPE_LEVINSON, FF_LPC_TYPE_LEVINSON,
                                         FF_LPC_TYPE_LEVINSON, FF_LPC_TYPE_LEVINSON, FF_LPC_TYPE_LEVINSON,
                                         FF_LPC_TYPE_LEVINSON})[level];
311 312 313 314

    s->options.min_prediction_order = ((int[]){  2,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1})[level];
    s->options.max_prediction_order = ((int[]){  3,  4,  4,  6,  8,  8,  8,  8, 12, 12, 12, 32, 32})[level];

315 316 317 318 319 320
    if (s->options.prediction_order_method < 0)
        s->options.prediction_order_method = ((int[]){ ORDER_METHOD_EST,    ORDER_METHOD_EST,    ORDER_METHOD_EST,
                                                       ORDER_METHOD_EST,    ORDER_METHOD_EST,    ORDER_METHOD_EST,
                                                       ORDER_METHOD_4LEVEL, ORDER_METHOD_LOG,    ORDER_METHOD_4LEVEL,
                                                       ORDER_METHOD_LOG,    ORDER_METHOD_SEARCH, ORDER_METHOD_LOG,
                                                       ORDER_METHOD_SEARCH})[level];
321

322 323 324 325 326 327 328 329 330
    if (s->options.min_partition_order > s->options.max_partition_order) {
        av_log(avctx, AV_LOG_ERROR, "invalid partition orders: min=%d max=%d\n",
               s->options.min_partition_order, s->options.max_partition_order);
        return AVERROR(EINVAL);
    }
    if (s->options.min_partition_order < 0)
        s->options.min_partition_order = ((int[]){  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0})[level];
    if (s->options.max_partition_order < 0)
        s->options.max_partition_order = ((int[]){  2,  2,  3,  3,  3,  8,  8,  8,  8,  8,  8,  8,  8})[level];
Michael Niedermayer's avatar
Michael Niedermayer committed
331

332
    if (s->options.lpc_type == FF_LPC_TYPE_NONE) {
333 334
        s->options.min_prediction_order = 0;
    } else if (avctx->min_prediction_order >= 0) {
335
        if (s->options.lpc_type == FF_LPC_TYPE_FIXED) {
336
            if (avctx->min_prediction_order > MAX_FIXED_ORDER) {
337 338
                av_log(avctx, AV_LOG_ERROR, "invalid min prediction order: %d\n",
                       avctx->min_prediction_order);
339
                return AVERROR(EINVAL);
340
            }
341 342
        } else if (avctx->min_prediction_order < MIN_LPC_ORDER ||
                   avctx->min_prediction_order > MAX_LPC_ORDER) {
343 344
            av_log(avctx, AV_LOG_ERROR, "invalid min prediction order: %d\n",
                   avctx->min_prediction_order);
345
            return AVERROR(EINVAL);
346 347 348
        }
        s->options.min_prediction_order = avctx->min_prediction_order;
    }
349
    if (s->options.lpc_type == FF_LPC_TYPE_NONE) {
350 351
        s->options.max_prediction_order = 0;
    } else if (avctx->max_prediction_order >= 0) {
352
        if (s->options.lpc_type == FF_LPC_TYPE_FIXED) {
353
            if (avctx->max_prediction_order > MAX_FIXED_ORDER) {
354 355
                av_log(avctx, AV_LOG_ERROR, "invalid max prediction order: %d\n",
                       avctx->max_prediction_order);
356
                return AVERROR(EINVAL);
357
            }
358 359 360 361
        } else if (avctx->max_prediction_order < MIN_LPC_ORDER ||
                   avctx->max_prediction_order > MAX_LPC_ORDER) {
            av_log(avctx, AV_LOG_ERROR, "invalid max prediction order: %d\n",
                   avctx->max_prediction_order);
362
            return AVERROR(EINVAL);
363 364 365
        }
        s->options.max_prediction_order = avctx->max_prediction_order;
    }
366
    if (s->options.max_prediction_order < s->options.min_prediction_order) {
367 368
        av_log(avctx, AV_LOG_ERROR, "invalid prediction orders: min=%d max=%d\n",
               s->options.min_prediction_order, s->options.max_prediction_order);
369
        return AVERROR(EINVAL);
370 371
    }

372 373
    if (avctx->frame_size > 0) {
        if (avctx->frame_size < FLAC_MIN_BLOCKSIZE ||
374
                avctx->frame_size > FLAC_MAX_BLOCKSIZE) {
375 376
            av_log(avctx, AV_LOG_ERROR, "invalid block size: %d\n",
                   avctx->frame_size);
377
            return AVERROR(EINVAL);
378 379
        }
    } else {
380
        s->avctx->frame_size = select_blocksize(s->samplerate, s->options.block_time_ms);
381
    }
382
    s->max_blocksize = s->avctx->frame_size;
383

384
    /* set maximum encoded frame size in verbatim mode */
385
    s->max_framesize = ff_flac_get_max_frame_size(s->avctx->frame_size,
386 387
                                                  s->channels,
                                                  s->avctx->bits_per_raw_sample);
388

389
    /* initialize MD5 context */
390
    s->md5ctx = av_md5_alloc();
391
    if (!s->md5ctx)
392
        return AVERROR(ENOMEM);
393 394
    av_md5_init(s->md5ctx);

395
    streaminfo = av_malloc(FLAC_STREAMINFO_SIZE);
396 397
    if (!streaminfo)
        return AVERROR(ENOMEM);
398 399 400 401
    write_streaminfo(s, streaminfo);
    avctx->extradata = streaminfo;
    avctx->extradata_size = FLAC_STREAMINFO_SIZE;

402
    s->frame_count   = 0;
403
    s->min_framesize = s->max_framesize;
404

405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
    if (channels == 3 &&
            avctx->channel_layout != (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) ||
        channels == 4 &&
            avctx->channel_layout != AV_CH_LAYOUT_2_2 &&
            avctx->channel_layout != AV_CH_LAYOUT_QUAD ||
        channels == 5 &&
            avctx->channel_layout != AV_CH_LAYOUT_5POINT0 &&
            avctx->channel_layout != AV_CH_LAYOUT_5POINT0_BACK ||
        channels == 6 &&
            avctx->channel_layout != AV_CH_LAYOUT_5POINT1 &&
            avctx->channel_layout != AV_CH_LAYOUT_5POINT1_BACK) {
        if (avctx->channel_layout) {
            av_log(avctx, AV_LOG_ERROR, "Channel layout not supported by Flac, "
                                             "output stream will have incorrect "
                                             "channel layout.\n");
        } else {
            av_log(avctx, AV_LOG_WARNING, "No channel layout specified. The encoder "
                                               "will use Flac channel layout for "
                                               "%d channels.\n", channels);
        }
    }

427
    ret = ff_lpc_init(&s->lpc_ctx, avctx->frame_size,
428
                      s->options.max_prediction_order, FF_LPC_TYPE_LEVINSON);
429

430
    ff_bswapdsp_init(&s->bdsp);
431 432
    ff_flacdsp_init(&s->flac_dsp, avctx->sample_fmt,
                    avctx->bits_per_raw_sample);
433

434 435
    dprint_compression_options(s);

436
    return ret;
437 438
}

439

440
static void init_frame(FlacEncodeContext *s, int nb_samples)
441 442 443 444 445 446
{
    int i, ch;
    FlacFrame *frame;

    frame = &s->frame;

447
    for (i = 0; i < 16; i++) {
448
        if (nb_samples == ff_flac_blocksize_table[i]) {
449
            frame->blocksize  = ff_flac_blocksize_table[i];
450 451 452 453 454
            frame->bs_code[0] = i;
            frame->bs_code[1] = 0;
            break;
        }
    }
455
    if (i == 16) {
456
        frame->blocksize = nb_samples;
457
        if (frame->blocksize <= 256) {
458 459 460 461 462 463 464 465
            frame->bs_code[0] = 6;
            frame->bs_code[1] = frame->blocksize-1;
        } else {
            frame->bs_code[0] = 7;
            frame->bs_code[1] = frame->blocksize-1;
        }
    }

466
    for (ch = 0; ch < s->channels; ch++) {
467 468 469 470 471 472 473 474 475
        FlacSubframe *sub = &frame->subframes[ch];

        sub->wasted = 0;
        sub->obits  = s->avctx->bits_per_raw_sample;

        if (sub->obits > 16)
            sub->rc.coding_mode = CODING_MODE_RICE2;
        else
            sub->rc.coding_mode = CODING_MODE_RICE;
476
    }
477 478

    frame->verbatim_only = 0;
479 480
}

481

482
/**
483
 * Copy channel-interleaved input samples into separate subframes.
484
 */
485
static void copy_samples(FlacEncodeContext *s, const void *samples)
486 487 488
{
    int i, j, ch;
    FlacFrame *frame;
489 490 491 492 493 494 495 496 497 498 499 500 501 502 503
    int shift = av_get_bytes_per_sample(s->avctx->sample_fmt) * 8 -
                s->avctx->bits_per_raw_sample;

#define COPY_SAMPLES(bits) do {                                     \
    const int ## bits ## _t *samples0 = samples;                    \
    frame = &s->frame;                                              \
    for (i = 0, j = 0; i < frame->blocksize; i++)                   \
        for (ch = 0; ch < s->channels; ch++, j++)                   \
            frame->subframes[ch].samples[i] = samples0[j] >> shift; \
} while (0)

    if (s->avctx->sample_fmt == AV_SAMPLE_FMT_S16)
        COPY_SAMPLES(16);
    else
        COPY_SAMPLES(32);
504 505
}

506

507
static uint64_t rice_count_exact(int32_t *res, int n, int k)
508 509
{
    int i;
510
    uint64_t count = 0;
511 512 513 514 515 516 517 518 519 520

    for (i = 0; i < n; i++) {
        int32_t v = -2 * res[i] - 1;
        v ^= v >> 31;
        count += (v >> k) + 1 + k;
    }
    return count;
}


521 522
static uint64_t subframe_count_exact(FlacEncodeContext *s, FlacSubframe *sub,
                                     int pred_order)
523 524 525
{
    int p, porder, psize;
    int i, part_end;
526
    uint64_t count = 0;
527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556

    /* subframe header */
    count += 8;

    /* subframe */
    if (sub->type == FLAC_SUBFRAME_CONSTANT) {
        count += sub->obits;
    } else if (sub->type == FLAC_SUBFRAME_VERBATIM) {
        count += s->frame.blocksize * sub->obits;
    } else {
        /* warm-up samples */
        count += pred_order * sub->obits;

        /* LPC coefficients */
        if (sub->type == FLAC_SUBFRAME_LPC)
            count += 4 + 5 + pred_order * s->options.lpc_coeff_precision;

        /* rice-encoded block */
        count += 2;

        /* partition order */
        porder = sub->rc.porder;
        psize  = s->frame.blocksize >> porder;
        count += 4;

        /* residual */
        i        = pred_order;
        part_end = psize;
        for (p = 0; p < 1 << porder; p++) {
            int k = sub->rc.params[p];
557
            count += sub->rc.coding_mode;
558 559 560 561 562 563 564 565 566 567
            count += rice_count_exact(&sub->residual[i], part_end - i, k);
            i = part_end;
            part_end = FFMIN(s->frame.blocksize, part_end + psize);
        }
    }

    return count;
}


568 569
#define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k)))

570
/**
571
 * Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0.
572
 */
573
static int find_optimal_param(uint64_t sum, int n, int max_param)
574
{
575
    int k;
576
    uint64_t sum2;
577

578
    if (sum <= n >> 1)
579
        return 0;
580
    sum2 = sum - (n >> 1);
581
    k    = av_log2(av_clipl_int32(sum2 / n));
582
    return FFMIN(k, max_param);
583 584
}

585

586 587
static uint64_t calc_optimal_rice_params(RiceContext *rc, int porder,
                                         uint64_t *sums, int n, int pred_order)
588 589
{
    int i;
590
    int k, cnt, part, max_param;
591
    uint64_t all_bits;
592

593 594
    max_param = (1 << rc->coding_mode) - 2;

595
    part     = (1 << porder);
596
    all_bits = 4 * part;
597 598

    cnt = (n >> porder) - pred_order;
599
    for (i = 0; i < part; i++) {
600
        k = find_optimal_param(sums[i], cnt, max_param);
601 602
        rc->params[i] = k;
        all_bits += rice_encode_count(sums[i], cnt, k);
603
        cnt = n >> porder;
604 605 606 607 608 609 610
    }

    rc->porder = porder;

    return all_bits;
}

611

612
static void calc_sums(int pmin, int pmax, uint32_t *data, int n, int pred_order,
613
                      uint64_t sums[][MAX_PARTITIONS])
614 615
{
    int i, j;
Michael Niedermayer's avatar
Michael Niedermayer committed
616 617
    int parts;
    uint32_t *res, *res_end;
618 619

    /* sums for highest level */
620 621
    parts   = (1 << pmax);
    res     = &data[pred_order];
Michael Niedermayer's avatar
Michael Niedermayer committed
622
    res_end = &data[n >> pmax];
623
    for (i = 0; i < parts; i++) {
624
        uint64_t sum = 0;
625
        while (res < res_end)
626 627
            sum += *(res++);
        sums[pmax][i] = sum;
628
        res_end += n >> pmax;
629 630
    }
    /* sums for lower levels */
631
    for (i = pmax - 1; i >= pmin; i--) {
632
        parts = (1 << i);
633
        for (j = 0; j < parts; j++)
634 635 636 637
            sums[i][j] = sums[i+1][2*j] + sums[i+1][2*j+1];
    }
}

638

639
static uint64_t calc_rice_params(RiceContext *rc, int pmin, int pmax,
640
                                 int32_t *data, int n, int pred_order)
641 642
{
    int i;
643
    uint64_t bits[MAX_PARTITION_ORDER+1];
644
    int opt_porder;
645
    RiceContext tmp_rc;
646
    uint32_t *udata;
647
    uint64_t sums[MAX_PARTITION_ORDER+1][MAX_PARTITIONS];
648

649 650 651
    av_assert1(pmin >= 0 && pmin <= MAX_PARTITION_ORDER);
    av_assert1(pmax >= 0 && pmax <= MAX_PARTITION_ORDER);
    av_assert1(pmin <= pmax);
652

653 654
    tmp_rc.coding_mode = rc->coding_mode;

655
    udata = av_malloc_array(n,  sizeof(uint32_t));
656
    for (i = 0; i < n; i++)
657 658
        udata[i] = (2*data[i]) ^ (data[i]>>31);

659
    calc_sums(pmin, pmax, udata, n, pred_order, sums);
660

661 662
    opt_porder = pmin;
    bits[pmin] = UINT32_MAX;
663
    for (i = pmin; i <= pmax; i++) {
664
        bits[i] = calc_optimal_rice_params(&tmp_rc, i, sums[i], n, pred_order);
665
        if (bits[i] <= bits[opt_porder]) {
666
            opt_porder = i;
667
            *rc = tmp_rc;
668 669 670 671
        }
    }

    av_freep(&udata);
672
    return bits[opt_porder];
673 674
}

675

676 677 678
static int get_max_p_order(int max_porder, int n, int order)
{
    int porder = FFMIN(max_porder, av_log2(n^(n-1)));
679
    if (order > 0)
680 681 682 683
        porder = FFMIN(porder, av_log2(n/order));
    return porder;
}

684

685
static uint64_t find_subframe_rice_params(FlacEncodeContext *s,
686
                                          FlacSubframe *sub, int pred_order)
687
{
688 689 690 691 692
    int pmin = get_max_p_order(s->options.min_partition_order,
                               s->frame.blocksize, pred_order);
    int pmax = get_max_p_order(s->options.max_partition_order,
                               s->frame.blocksize, pred_order);

693
    uint64_t bits = 8 + pred_order * sub->obits + 2 + sub->rc.coding_mode;
694 695 696 697
    if (sub->type == FLAC_SUBFRAME_LPC)
        bits += 4 + 5 + pred_order * s->options.lpc_coeff_precision;
    bits += calc_rice_params(&sub->rc, pmin, pmax, sub->residual,
                             s->frame.blocksize, pred_order);
698 699 700
    return bits;
}

701

702 703
static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n,
                                  int order)
704 705 706
{
    int i;

707
    for (i = 0; i < order; i++)
708 709
        res[i] = smp[i];

710 711 712 713 714 715 716
    if (order == 0) {
        for (i = order; i < n; i++)
            res[i] = smp[i];
    } else if (order == 1) {
        for (i = order; i < n; i++)
            res[i] = smp[i] - smp[i-1];
    } else if (order == 2) {
717
        int a = smp[order-1] - smp[order-2];
718 719 720 721 722
        for (i = order; i < n; i += 2) {
            int b    = smp[i  ] - smp[i-1];
            res[i]   = b - a;
            a        = smp[i+1] - smp[i  ];
            res[i+1] = a - b;
723
        }
724 725
    } else if (order == 3) {
        int a = smp[order-1] -   smp[order-2];
726
        int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
727 728 729 730 731 732 733
        for (i = order; i < n; i += 2) {
            int b    = smp[i  ] - smp[i-1];
            int d    = b - a;
            res[i]   = d - c;
            a        = smp[i+1] - smp[i  ];
            c        = a - b;
            res[i+1] = c - d;
734
        }
735 736 737
    } else {
        int a = smp[order-1] -   smp[order-2];
        int c = smp[order-1] - 2*smp[order-2] +   smp[order-3];
738
        int e = smp[order-1] - 3*smp[order-2] + 3*smp[order-3] - smp[order-4];
739 740 741 742 743 744 745 746 747
        for (i = order; i < n; i += 2) {
            int b    = smp[i  ] - smp[i-1];
            int d    = b - a;
            int f    = d - c;
            res[i  ] = f - e;
            a        = smp[i+1] - smp[i  ];
            c        = a - b;
            e        = c - d;
            res[i+1] = e - f;
748
        }
749 750 751
    }
}

752

753
static int encode_residual_ch(FlacEncodeContext *s, int ch)
754
{
755
    int i, n;
756
    int min_order, max_order, opt_order, omethod;
757 758
    FlacFrame *frame;
    FlacSubframe *sub;
759 760
    int32_t coefs[MAX_LPC_ORDER][MAX_LPC_ORDER];
    int shift[MAX_LPC_ORDER];
761 762
    int32_t *res, *smp;

763
    frame = &s->frame;
764 765 766 767
    sub   = &frame->subframes[ch];
    res   = sub->residual;
    smp   = sub->samples;
    n     = frame->blocksize;
768 769

    /* CONSTANT */
770 771 772 773
    for (i = 1; i < n; i++)
        if(smp[i] != smp[0])
            break;
    if (i == n) {
774 775
        sub->type = sub->type_code = FLAC_SUBFRAME_CONSTANT;
        res[0] = smp[0];
776
        return subframe_count_exact(s, sub, 0);
777 778 779
    }

    /* VERBATIM */
780
    if (frame->verbatim_only || n < 5) {
781
        sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM;
782
        memcpy(res, smp, n * sizeof(int32_t));
783
        return subframe_count_exact(s, sub, 0);
784 785
    }

786 787 788
    min_order  = s->options.min_prediction_order;
    max_order  = s->options.max_prediction_order;
    omethod    = s->options.prediction_order_method;
789 790

    /* FIXED */
791
    sub->type = FLAC_SUBFRAME_FIXED;
792 793
    if (s->options.lpc_type == FF_LPC_TYPE_NONE  ||
        s->options.lpc_type == FF_LPC_TYPE_FIXED || n <= max_order) {
794
        uint64_t bits[MAX_FIXED_ORDER+1];
795 796
        if (max_order > MAX_FIXED_ORDER)
            max_order = MAX_FIXED_ORDER;
797
        opt_order = 0;
798 799
        bits[0]   = UINT32_MAX;
        for (i = min_order; i <= max_order; i++) {
800
            encode_residual_fixed(res, smp, n, i);
801
            bits[i] = find_subframe_rice_params(s, sub, i);
802
            if (bits[i] < bits[opt_order])
803
                opt_order = i;
804
        }
805
        sub->order     = opt_order;
806
        sub->type_code = sub->type | sub->order;
807
        if (sub->order != max_order) {
808
            encode_residual_fixed(res, smp, n, sub->order);
809
            find_subframe_rice_params(s, sub, sub->order);
810
        }
811
        return subframe_count_exact(s, sub, sub->order);
812
    }
813 814

    /* LPC */
815
    sub->type = FLAC_SUBFRAME_LPC;
816
    opt_order = ff_lpc_calc_coefs(&s->lpc_ctx, smp, n, min_order, max_order,
817
                                  s->options.lpc_coeff_precision, coefs, shift, s->options.lpc_type,
818
                                  s->options.lpc_passes, omethod,
819
                                  MAX_LPC_SHIFT, 0);
820

821 822 823
    if (omethod == ORDER_METHOD_2LEVEL ||
        omethod == ORDER_METHOD_4LEVEL ||
        omethod == ORDER_METHOD_8LEVEL) {
824
        int levels = 1 << omethod;
825
        uint64_t bits[1 << ORDER_METHOD_8LEVEL];
826
        int order       = -1;
827 828
        int opt_index   = levels-1;
        opt_order       = max_order-1;
829
        bits[opt_index] = UINT32_MAX;
830
        for (i = levels-1; i >= 0; i--) {
831
            int last_order = order;
832
            order = min_order + (((max_order-min_order+1) * (i+1)) / levels)-1;
833 834 835
            order = av_clip(order, min_order - 1, max_order - 1);
            if (order == last_order)
                continue;
836 837
            s->flac_dsp.lpc_encode(res, smp, n, order+1, coefs[order],
                                   shift[order]);
838
            bits[i] = find_subframe_rice_params(s, sub, order+1);
839
            if (bits[i] < bits[opt_index]) {
840 841 842 843 844
                opt_index = i;
                opt_order = order;
            }
        }
        opt_order++;
845
    } else if (omethod == ORDER_METHOD_SEARCH) {
846
        // brute-force optimal order search
847
        uint64_t bits[MAX_LPC_ORDER];
848
        opt_order = 0;
849 850
        bits[0]   = UINT32_MAX;
        for (i = min_order-1; i < max_order; i++) {
851
            s->flac_dsp.lpc_encode(res, smp, n, i+1, coefs[i], shift[i]);
852
            bits[i] = find_subframe_rice_params(s, sub, i+1);
853
            if (bits[i] < bits[opt_order])
854 855 856
                opt_order = i;
        }
        opt_order++;
857
    } else if (omethod == ORDER_METHOD_LOG) {
858
        uint64_t bits[MAX_LPC_ORDER];
859 860
        int step;

861
        opt_order = min_order - 1 + (max_order-min_order)/3;
862 863
        memset(bits, -1, sizeof(bits));

864 865 866 867
        for (step = 16; step; step >>= 1) {
            int last = opt_order;
            for (i = last-step; i <= last+step; i += step) {
                if (i < min_order-1 || i >= max_order || bits[i] < UINT32_MAX)
868
                    continue;
869
                s->flac_dsp.lpc_encode(res, smp, n, i+1, coefs[i], shift[i]);
870
                bits[i] = find_subframe_rice_params(s, sub, i+1);
871 872
                if (bits[i] < bits[opt_order])
                    opt_order = i;
873 874 875
            }
        }
        opt_order++;
876 877
    }

878
    sub->order     = opt_order;
879
    sub->type_code = sub->type | (sub->order-1);
880 881
    sub->shift     = shift[sub->order-1];
    for (i = 0; i < sub->order; i++)
882
        sub->coefs[i] = coefs[sub->order-1][i];
883

884
    s->flac_dsp.lpc_encode(res, smp, n, sub->order, sub->coefs, sub->shift);
885

886 887 888
    find_subframe_rice_params(s, sub, sub->order);

    return subframe_count_exact(s, sub, sub->order);
889 890
}

891

892 893
static int count_frame_header(FlacEncodeContext *s)
{
894
    uint8_t av_unused tmp;
895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912
    int count;

    /*
    <14> Sync code
    <1>  Reserved
    <1>  Blocking strategy
    <4>  Block size in inter-channel samples
    <4>  Sample rate
    <4>  Channel assignment
    <3>  Sample size in bits
    <1>  Reserved
    */
    count = 32;

    /* coded frame number */
    PUT_UTF8(s->frame_count, tmp, count += 8;)

    /* explicit block size */
913 914 915 916
    if (s->frame.bs_code[0] == 6)
        count += 8;
    else if (s->frame.bs_code[0] == 7)
        count += 16;
917 918 919 920 921 922 923 924 925 926 927 928 929

    /* explicit sample rate */
    count += ((s->sr_code[0] == 12) + (s->sr_code[0] > 12)) * 8;

    /* frame header CRC-8 */
    count += 8;

    return count;
}


static int encode_frame(FlacEncodeContext *s)
{
930 931
    int ch;
    uint64_t count;
932 933 934 935 936 937 938 939 940

    count = count_frame_header(s);

    for (ch = 0; ch < s->channels; ch++)
        count += encode_residual_ch(s, ch);

    count += (8 - (count & 7)) & 7; // byte alignment
    count += 16;                    // CRC-16

941 942 943 944
    count >>= 3;
    if (count > INT_MAX)
        return AVERROR_BUG;
    return count;
945 946 947
}


948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969
static void remove_wasted_bits(FlacEncodeContext *s)
{
    int ch, i;

    for (ch = 0; ch < s->channels; ch++) {
        FlacSubframe *sub = &s->frame.subframes[ch];
        int32_t v         = 0;

        for (i = 0; i < s->frame.blocksize; i++) {
            v |= sub->samples[i];
            if (v & 1)
                break;
        }

        if (v && !(v & 1)) {
            v = av_ctz(v);

            for (i = 0; i < s->frame.blocksize; i++)
                sub->samples[i] >>= v;

            sub->wasted = v;
            sub->obits -= v;
970 971 972 973 974

            /* for 24-bit, check if removing wasted bits makes the range better
               suited for using RICE instead of RICE2 for entropy coding */
            if (sub->obits <= 17)
                sub->rc.coding_mode = CODING_MODE_RICE;
975 976
        }
    }
977 978 979
}


980 981
static int estimate_stereo_mode(int32_t *left_ch, int32_t *right_ch, int n,
                                int max_rice_param)
982 983 984
{
    int i, best;
    int32_t lt, rt;
985
    uint64_t sum[4];
986
    uint64_t score[4];
987
    int k;
988

989
    /* calculate sum of 2nd order residual for each channel */
990
    sum[0] = sum[1] = sum[2] = sum[3] = 0;
991 992
    for (i = 2; i < n; i++) {
        lt = left_ch[i]  - 2*left_ch[i-1]  + left_ch[i-2];
993
        rt = right_ch[i] - 2*right_ch[i-1] + right_ch[i-2];
994 995 996 997
        sum[2] += FFABS((lt + rt) >> 1);
        sum[3] += FFABS(lt - rt);
        sum[0] += FFABS(lt);
        sum[1] += FFABS(rt);
998
    }
999
    /* estimate bit counts */
1000
    for (i = 0; i < 4; i++) {
1001
        k      = find_optimal_param(2 * sum[i], n, max_rice_param);
1002
        sum[i] = rice_encode_count( 2 * sum[i], n, k);
1003 1004 1005
    }

    /* calculate score for each mode */
1006 1007 1008 1009
    score[0] = sum[0] + sum[1];
    score[1] = sum[0] + sum[3];
    score[2] = sum[1] + sum[3];
    score[3] = sum[2] + sum[3];
1010 1011 1012

    /* return mode with lowest score */
    best = 0;
1013 1014
    for (i = 1; i < 4; i++)
        if (score[i] < score[best])
1015
            best = i;
1016 1017

    return best;
1018 1019
}

1020

1021
/**
1022
 * Perform stereo channel decorrelation.
1023
 */
1024
static void channel_decorrelation(FlacEncodeContext *s)
1025 1026 1027 1028 1029
{
    FlacFrame *frame;
    int32_t *left, *right;
    int i, n;

1030
    frame = &s->frame;
1031
    n     = frame->blocksize;
1032 1033 1034
    left  = frame->subframes[0].samples;
    right = frame->subframes[1].samples;

1035
    if (s->channels != 2) {
1036
        frame->ch_mode = FLAC_CHMODE_INDEPENDENT;
1037 1038 1039
        return;
    }

1040 1041 1042 1043
    if (s->options.ch_mode < 0) {
        int max_rice_param = (1 << frame->subframes[0].rc.coding_mode) - 2;
        frame->ch_mode = estimate_stereo_mode(left, right, n, max_rice_param);
    } else
1044
        frame->ch_mode = s->options.ch_mode;
1045 1046

    /* perform decorrelation and adjust bits-per-sample */
1047
    if (frame->ch_mode == FLAC_CHMODE_INDEPENDENT)
1048
        return;
1049
    if (frame->ch_mode == FLAC_CHMODE_MID_SIDE) {
1050
        int32_t tmp;
1051 1052 1053 1054
        for (i = 0; i < n; i++) {
            tmp      = left[i];
            left[i]  = (tmp + right[i]) >> 1;
            right[i] =  tmp - right[i];
1055 1056
        }
        frame->subframes[1].obits++;
1057 1058
    } else if (frame->ch_mode == FLAC_CHMODE_LEFT_SIDE) {
        for (i = 0; i < n; i++)
1059 1060 1061
            right[i] = left[i] - right[i];
        frame->subframes[1].obits++;
    } else {
1062
        for (i = 0; i < n; i++)
1063 1064 1065 1066 1067
            left[i] -= right[i];
        frame->subframes[0].obits++;
    }
}

1068

1069
static void write_utf8(PutBitContext *pb, uint32_t val)
1070
{
1071 1072
    uint8_t tmp;
    PUT_UTF8(val, tmp, put_bits(pb, 8, tmp);)
1073 1074
}

1075

1076
static void write_frame_header(FlacEncodeContext *s)
1077 1078 1079 1080 1081 1082 1083 1084 1085
{
    FlacFrame *frame;
    int crc;

    frame = &s->frame;

    put_bits(&s->pb, 16, 0xFFF8);
    put_bits(&s->pb, 4, frame->bs_code[0]);
    put_bits(&s->pb, 4, s->sr_code[0]);
1086 1087

    if (frame->ch_mode == FLAC_CHMODE_INDEPENDENT)
1088
        put_bits(&s->pb, 4, s->channels-1);
1089
    else
1090
        put_bits(&s->pb, 4, frame->ch_mode + FLAC_MAX_CHANNELS - 1);
1091

1092
    put_bits(&s->pb, 3, s->bps_code);
1093 1094
    put_bits(&s->pb, 1, 0);
    write_utf8(&s->pb, s->frame_count);
1095 1096

    if (frame->bs_code[0] == 6)
1097
        put_bits(&s->pb, 8, frame->bs_code[1]);
1098
    else if (frame->bs_code[0] == 7)
1099
        put_bits(&s->pb, 16, frame->bs_code[1]);
1100 1101

    if (s->sr_code[0] == 12)
1102
        put_bits(&s->pb, 8, s->sr_code[1]);
1103
    else if (s->sr_code[0] > 12)
1104
        put_bits(&s->pb, 16, s->sr_code[1]);
1105

1106
    flush_put_bits(&s->pb);
1107 1108
    crc = av_crc(av_crc_get_table(AV_CRC_8_ATM), 0, s->pb.buf,
                 put_bits_count(&s->pb) >> 3);
1109 1110 1111
    put_bits(&s->pb, 8, crc);
}

1112

1113
static void write_subframes(FlacEncodeContext *s)
1114
{
1115 1116 1117 1118
    int ch;

    for (ch = 0; ch < s->channels; ch++) {
        FlacSubframe *sub = &s->frame.subframes[ch];
Justin Ruggles's avatar
Justin Ruggles committed
1119 1120 1121 1122
        int i, p, porder, psize;
        int32_t *part_end;
        int32_t *res       =  sub->residual;
        int32_t *frame_end = &sub->residual[s->frame.blocksize];
1123

1124 1125 1126
        /* subframe header */
        put_bits(&s->pb, 1, 0);
        put_bits(&s->pb, 6, sub->type_code);
1127 1128 1129
        put_bits(&s->pb, 1, !!sub->wasted);
        if (sub->wasted)
            put_bits(&s->pb, sub->wasted, 1);
1130 1131

        /* subframe */
Justin Ruggles's avatar
Justin Ruggles committed
1132 1133 1134 1135 1136 1137 1138
        if (sub->type == FLAC_SUBFRAME_CONSTANT) {
            put_sbits(&s->pb, sub->obits, res[0]);
        } else if (sub->type == FLAC_SUBFRAME_VERBATIM) {
            while (res < frame_end)
                put_sbits(&s->pb, sub->obits, *res++);
        } else {
            /* warm-up samples */
Justin Ruggles's avatar
Justin Ruggles committed
1139
            for (i = 0; i < sub->order; i++)
Justin Ruggles's avatar
Justin Ruggles committed
1140 1141 1142 1143 1144 1145 1146 1147 1148 1149
                put_sbits(&s->pb, sub->obits, *res++);

            /* LPC coefficients */
            if (sub->type == FLAC_SUBFRAME_LPC) {
                int cbits = s->options.lpc_coeff_precision;
                put_bits( &s->pb, 4, cbits-1);
                put_sbits(&s->pb, 5, sub->shift);
                for (i = 0; i < sub->order; i++)
                    put_sbits(&s->pb, cbits, sub->coefs[i]);
            }
Justin Ruggles's avatar
Justin Ruggles committed
1150

Justin Ruggles's avatar
Justin Ruggles committed
1151
            /* rice-encoded block */
1152
            put_bits(&s->pb, 2, sub->rc.coding_mode - 4);
Justin Ruggles's avatar
Justin Ruggles committed
1153 1154 1155 1156 1157 1158 1159 1160 1161 1162

            /* partition order */
            porder  = sub->rc.porder;
            psize   = s->frame.blocksize >> porder;
            put_bits(&s->pb, 4, porder);

            /* residual */
            part_end  = &sub->residual[psize];
            for (p = 0; p < 1 << porder; p++) {
                int k = sub->rc.params[p];
1163
                put_bits(&s->pb, sub->rc.coding_mode, k);
Justin Ruggles's avatar
Justin Ruggles committed
1164 1165 1166 1167
                while (res < part_end)
                    set_sr_golomb_flac(&s->pb, *res++, k, INT32_MAX, 0);
                part_end = FFMIN(frame_end, part_end + psize);
            }
Justin Ruggles's avatar
Justin Ruggles committed
1168
        }
1169
    }
1170 1171
}

1172

1173
static void write_frame_footer(FlacEncodeContext *s)
1174 1175 1176
{
    int crc;
    flush_put_bits(&s->pb);
1177 1178
    crc = av_bswap16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, s->pb.buf,
                            put_bits_count(&s->pb)>>3));
1179 1180 1181 1182
    put_bits(&s->pb, 16, crc);
    flush_put_bits(&s->pb);
}

1183

1184
static int write_frame(FlacEncodeContext *s, AVPacket *avpkt)
1185
{
1186
    init_put_bits(&s->pb, avpkt->data, avpkt->size);
1187 1188 1189
    write_frame_header(s);
    write_subframes(s);
    write_frame_footer(s);
1190 1191 1192 1193
    return put_bits_count(&s->pb) >> 3;
}


1194
static int update_md5_sum(FlacEncodeContext *s, const void *samples)
1195
{
1196
    const uint8_t *buf;
1197 1198
    int buf_size = s->frame.blocksize * s->channels *
                   ((s->avctx->bits_per_raw_sample + 7) / 8);
1199

1200
    if (s->avctx->bits_per_raw_sample > 16 || HAVE_BIGENDIAN) {
1201 1202 1203
        av_fast_malloc(&s->md5_buffer, &s->md5_buffer_size, buf_size);
        if (!s->md5_buffer)
            return AVERROR(ENOMEM);
1204
    }
1205

1206 1207
    if (s->avctx->bits_per_raw_sample <= 16) {
        buf = (const uint8_t *)samples;
1208
#if HAVE_BIGENDIAN
1209 1210
        s->bdsp.bswap16_buf((uint16_t *) s->md5_buffer,
                            (const uint16_t *) samples, buf_size / 2);
1211
        buf = s->md5_buffer;
1212
#endif
1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225
    } else {
        int i;
        const int32_t *samples0 = samples;
        uint8_t *tmp            = s->md5_buffer;

        for (i = 0; i < s->frame.blocksize * s->channels; i++) {
            int32_t v = samples0[i] >> 8;
            *tmp++    = (v      ) & 0xFF;
            *tmp++    = (v >>  8) & 0xFF;
            *tmp++    = (v >> 16) & 0xFF;
        }
        buf = s->md5_buffer;
    }
1226 1227 1228
    av_md5_update(s->md5ctx, buf, buf_size);

    return 0;
1229 1230
}

1231

1232 1233
static int flac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
                             const AVFrame *frame, int *got_packet_ptr)
1234 1235
{
    FlacEncodeContext *s;
1236
    int frame_bytes, out_bytes, ret;
1237 1238 1239

    s = avctx->priv_data;

1240
    /* when the last block is reached, update the header in extradata */
1241
    if (!frame) {
1242
        s->max_framesize = s->max_encoded_framesize;
1243
        av_md5_final(s->md5ctx, s->md5sum);
1244
        write_streaminfo(s, avctx->extradata);
1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258

        if (avctx->side_data_only_packets && !s->flushed) {
            uint8_t *side_data = av_packet_new_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA,
                                                         avctx->extradata_size);
            if (!side_data)
                return AVERROR(ENOMEM);
            memcpy(side_data, avctx->extradata, avctx->extradata_size);

            avpkt->pts = s->next_pts;

            *got_packet_ptr = 1;
            s->flushed = 1;
        }

1259 1260 1261
        return 0;
    }

1262
    /* change max_framesize for small final frame */
1263 1264
    if (frame->nb_samples < s->frame.blocksize) {
        s->max_framesize = ff_flac_get_max_frame_size(frame->nb_samples,
1265 1266
                                                      s->channels,
                                                      avctx->bits_per_raw_sample);
1267 1268
    }

1269
    init_frame(s, frame->nb_samples);
1270

1271
    copy_samples(s, frame->data[0]);
1272

1273 1274
    channel_decorrelation(s);

1275 1276
    remove_wasted_bits(s);

1277
    frame_bytes = encode_frame(s);
1278

Diego Biurrun's avatar
Diego Biurrun committed
1279
    /* Fall back on verbatim mode if the compressed frame is larger than it
1280
       would be if encoded uncompressed. */
1281
    if (frame_bytes < 0 || frame_bytes > s->max_framesize) {
1282
        s->frame.verbatim_only = 1;
1283
        frame_bytes = encode_frame(s);
1284 1285 1286 1287
        if (frame_bytes < 0) {
            av_log(avctx, AV_LOG_ERROR, "Bad frame count\n");
            return frame_bytes;
        }
1288 1289
    }

1290
    if ((ret = ff_alloc_packet2(avctx, avpkt, frame_bytes)) < 0)
1291 1292 1293
        return ret;

    out_bytes = write_frame(s, avpkt);
1294

1295
    s->frame_count++;
1296
    s->sample_count += frame->nb_samples;
1297
    if ((ret = update_md5_sum(s, frame->data[0])) < 0) {
1298 1299 1300
        av_log(avctx, AV_LOG_ERROR, "Error updating MD5 checksum\n");
        return ret;
    }
1301 1302
    if (out_bytes > s->max_encoded_framesize)
        s->max_encoded_framesize = out_bytes;
1303 1304
    if (out_bytes < s->min_framesize)
        s->min_framesize = out_bytes;
1305

1306 1307 1308
    avpkt->pts      = frame->pts;
    avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples);
    avpkt->size     = out_bytes;
1309 1310 1311

    s->next_pts = avpkt->pts + avpkt->duration;

1312 1313
    *got_packet_ptr = 1;
    return 0;
1314 1315
}

1316

1317
static av_cold int flac_encode_close(AVCodecContext *avctx)
1318
{
1319 1320 1321
    if (avctx->priv_data) {
        FlacEncodeContext *s = avctx->priv_data;
        av_freep(&s->md5ctx);
1322
        av_freep(&s->md5_buffer);
1323
        ff_lpc_end(&s->lpc_ctx);
1324
    }
1325 1326
    av_freep(&avctx->extradata);
    avctx->extradata_size = 0;
1327 1328 1329
    return 0;
}

1330 1331
#define FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
static const AVOption options[] = {
1332 1333
{ "lpc_coeff_precision", "LPC coefficient precision", offsetof(FlacEncodeContext, options.lpc_coeff_precision), AV_OPT_TYPE_INT, {.i64 = 15 }, 0, MAX_LPC_PRECISION, FLAGS },
{ "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" },
1334 1335 1336 1337
{ "none",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_NONE },     INT_MIN, INT_MAX, FLAGS, "lpc_type" },
{ "fixed",    NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_FIXED },    INT_MIN, INT_MAX, FLAGS, "lpc_type" },
{ "levinson", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_LEVINSON }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
{ "cholesky", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_CHOLESKY }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
1338
{ "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 },
1339 1340 1341
{ "min_partition_order",  NULL, offsetof(FlacEncodeContext, options.min_partition_order),  AV_OPT_TYPE_INT, {.i64 = -1 },      -1, MAX_PARTITION_ORDER, FLAGS },
{ "max_partition_order",  NULL, offsetof(FlacEncodeContext, options.max_partition_order),  AV_OPT_TYPE_INT, {.i64 = -1 },      -1, MAX_PARTITION_ORDER, FLAGS },
{ "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" },
1342 1343 1344 1345 1346 1347
{ "estimation", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_EST },    INT_MIN, INT_MAX, FLAGS, "predm" },
{ "2level",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_2LEVEL }, INT_MIN, INT_MAX, FLAGS, "predm" },
{ "4level",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_4LEVEL }, INT_MIN, INT_MAX, FLAGS, "predm" },
{ "8level",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_8LEVEL }, INT_MIN, INT_MAX, FLAGS, "predm" },
{ "search",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_SEARCH }, INT_MIN, INT_MAX, FLAGS, "predm" },
{ "log",        NULL, 0, AV_OPT_TYPE_CONST, {.i64 = ORDER_METHOD_LOG },    INT_MIN, INT_MAX, FLAGS, "predm" },
1348
{ "ch_mode", "Stereo decorrelation mode", offsetof(FlacEncodeContext, options.ch_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, FLAC_CHMODE_MID_SIDE, FLAGS, "ch_mode" },
1349 1350 1351 1352 1353
{ "auto",       NULL, 0, AV_OPT_TYPE_CONST, { .i64 = -1                      }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
{ "indep",      NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_INDEPENDENT }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
{ "left_side",  NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_LEFT_SIDE   }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
{ "right_side", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_RIGHT_SIDE  }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
{ "mid_side",   NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FLAC_CHMODE_MID_SIDE    }, INT_MIN, INT_MAX, FLAGS, "ch_mode" },
1354 1355 1356 1357 1358 1359 1360 1361 1362
{ NULL },
};

static const AVClass flac_encoder_class = {
    "FLAC encoder",
    av_default_item_name,
    options,
    LIBAVUTIL_VERSION_INT,
};
1363

1364
AVCodec ff_flac_encoder = {
1365
    .name           = "flac",
1366
    .long_name      = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
1367
    .type           = AVMEDIA_TYPE_AUDIO,
1368
    .id             = AV_CODEC_ID_FLAC,
1369 1370
    .priv_data_size = sizeof(FlacEncodeContext),
    .init           = flac_encode_init,
1371
    .encode2        = flac_encode_frame,
1372
    .close          = flac_encode_close,
1373
    .capabilities   = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY | CODEC_CAP_LOSSLESS,
1374
    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
1375
                                                     AV_SAMPLE_FMT_S32,
1376 1377
                                                     AV_SAMPLE_FMT_NONE },
    .priv_class     = &flac_encoder_class,
1378
};