FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
flacenc.c File Reference
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/crc.h"
#include "libavutil/intmath.h"
#include "libavutil/md5.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "bswapdsp.h"
#include "codec_internal.h"
#include "encode.h"
#include "put_bits.h"
#include "put_golomb.h"
#include "lpc.h"
#include "flac.h"
#include "flacdata.h"
#include "flacencdsp.h"

Go to the source code of this file.

Data Structures

struct  CompressionOptions
 
struct  RiceContext
 
struct  FlacSubframe
 
struct  FlacFrame
 
struct  FlacEncodeContext
 

Macros

#define FLAC_SUBFRAME_CONSTANT   0
 
#define FLAC_SUBFRAME_VERBATIM   1
 
#define FLAC_SUBFRAME_FIXED   8
 
#define FLAC_SUBFRAME_LPC   32
 
#define MAX_FIXED_ORDER   4
 
#define MAX_PARTITION_ORDER   8
 
#define MAX_PARTITIONS   (1 << MAX_PARTITION_ORDER)
 
#define MAX_LPC_PRECISION   15
 
#define MIN_LPC_SHIFT   0
 
#define MAX_LPC_SHIFT   15
 
#define COPY_SAMPLES(bits)
 
#define rice_encode_count(sum, n, k)   (((n)*((k)+1))+((sum-(n>>1))>>(k)))
 
#define FLAGS   AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
 

Enumerations

enum  CodingMode { CODING_MODE_RICE = 4, CODING_MODE_RICE2 = 5 }
 

Functions

static void write_streaminfo (FlacEncodeContext *s, uint8_t *header)
 Write streaminfo metadata block to byte array. More...
 
static int flac_get_max_frame_size (int blocksize, int ch, int bps)
 Calculate an estimate for the maximum frame size based on verbatim mode. More...
 
static int select_blocksize (int samplerate, int block_time_ms)
 Set blocksize based on samplerate. More...
 
static av_cold void dprint_compression_options (FlacEncodeContext *s)
 
static av_cold int flac_encode_init (AVCodecContext *avctx)
 
static void init_frame (FlacEncodeContext *s, int nb_samples)
 
static void copy_samples (FlacEncodeContext *s, const void *samples)
 Copy channel-interleaved input samples into separate subframes. More...
 
static uint64_t rice_count_exact (const int32_t *res, int n, int k)
 
static uint64_t subframe_count_exact (FlacEncodeContext *s, FlacSubframe *sub, int pred_order)
 
static int find_optimal_param (uint64_t sum, int n, int max_param)
 Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0. More...
 
static int find_optimal_param_exact (uint64_t sums[32][MAX_PARTITIONS], int i, int max_param)
 
static uint64_t calc_optimal_rice_params (RiceContext *rc, int porder, uint64_t sums[32][MAX_PARTITIONS], int n, int pred_order, int max_param, int exact)
 
static void calc_sum_top (int pmax, int kmax, const uint32_t *data, int n, int pred_order, uint64_t sums[32][MAX_PARTITIONS])
 
static void calc_sum_next (int level, uint64_t sums[32][MAX_PARTITIONS], int kmax)
 
static uint64_t calc_rice_params (RiceContext *rc, uint32_t udata[FLAC_MAX_BLOCKSIZE], uint64_t sums[32][MAX_PARTITIONS], int pmin, int pmax, const int32_t *data, int n, int pred_order, int exact)
 
static int get_max_p_order (int max_porder, int n, int order)
 
static uint64_t find_subframe_rice_params (FlacEncodeContext *s, FlacSubframe *sub, int pred_order)
 
static void encode_residual_fixed (int32_t *res, const int32_t *smp, int n, int order)
 
static int encode_residual_ch (FlacEncodeContext *s, int ch)
 
static int count_frame_header (FlacEncodeContext *s)
 
static int encode_frame (FlacEncodeContext *s)
 
static void remove_wasted_bits (FlacEncodeContext *s)
 
static int estimate_stereo_mode (const int32_t *left_ch, const int32_t *right_ch, int n, int max_rice_param)
 
static void channel_decorrelation (FlacEncodeContext *s)
 Perform stereo channel decorrelation. More...
 
static void write_utf8 (PutBitContext *pb, uint32_t val)
 
static void write_frame_header (FlacEncodeContext *s)
 
static void write_subframes (FlacEncodeContext *s)
 
static void write_frame_footer (FlacEncodeContext *s)
 
static int write_frame (FlacEncodeContext *s, AVPacket *avpkt)
 
static int update_md5_sum (FlacEncodeContext *s, const void *samples)
 
static int flac_encode_frame (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
 
static av_cold int flac_encode_close (AVCodecContext *avctx)
 

Variables

static const AVOption options []
 
static const AVClass flac_encoder_class
 
const FFCodec ff_flac_encoder
 

Macro Definition Documentation

◆ FLAC_SUBFRAME_CONSTANT

#define FLAC_SUBFRAME_CONSTANT   0

Definition at line 40 of file flacenc.c.

◆ FLAC_SUBFRAME_VERBATIM

#define FLAC_SUBFRAME_VERBATIM   1

Definition at line 41 of file flacenc.c.

◆ FLAC_SUBFRAME_FIXED

#define FLAC_SUBFRAME_FIXED   8

Definition at line 42 of file flacenc.c.

◆ FLAC_SUBFRAME_LPC

#define FLAC_SUBFRAME_LPC   32

Definition at line 43 of file flacenc.c.

◆ MAX_FIXED_ORDER

#define MAX_FIXED_ORDER   4

Definition at line 45 of file flacenc.c.

◆ MAX_PARTITION_ORDER

#define MAX_PARTITION_ORDER   8

Definition at line 46 of file flacenc.c.

◆ MAX_PARTITIONS

#define MAX_PARTITIONS   (1 << MAX_PARTITION_ORDER)

Definition at line 47 of file flacenc.c.

◆ MAX_LPC_PRECISION

#define MAX_LPC_PRECISION   15

Definition at line 48 of file flacenc.c.

◆ MIN_LPC_SHIFT

#define MIN_LPC_SHIFT   0

Definition at line 49 of file flacenc.c.

◆ MAX_LPC_SHIFT

#define MAX_LPC_SHIFT   15

Definition at line 50 of file flacenc.c.

◆ COPY_SAMPLES

#define COPY_SAMPLES (   bits)
Value:
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)

◆ rice_encode_count

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

Definition at line 594 of file flacenc.c.

◆ FLAGS

Definition at line 1448 of file flacenc.c.

Enumeration Type Documentation

◆ CodingMode

enum CodingMode
Enumerator
CODING_MODE_RICE 
CODING_MODE_RICE2 

Definition at line 52 of file flacenc.c.

Function Documentation

◆ write_streaminfo()

static void write_streaminfo ( FlacEncodeContext s,
uint8_t *  header 
)
static

Write streaminfo metadata block to byte array.

Definition at line 137 of file flacenc.c.

Referenced by flac_encode_frame(), and flac_encode_init().

◆ flac_get_max_frame_size()

static int flac_get_max_frame_size ( int  blocksize,
int  ch,
int  bps 
)
static

Calculate an estimate for the maximum frame size based on verbatim mode.

Parameters
blocksizeblock size, in samples
chnumber of channels
bpsbits-per-sample

Definition at line 166 of file flacenc.c.

Referenced by flac_encode_frame(), and flac_encode_init().

◆ select_blocksize()

static int select_blocksize ( int  samplerate,
int  block_time_ms 
)
static

Set blocksize based on samplerate.

Choose the closest predefined blocksize >= BLOCK_TIME_MS milliseconds.

Definition at line 192 of file flacenc.c.

Referenced by flac_encode_init().

◆ dprint_compression_options()

static av_cold void dprint_compression_options ( FlacEncodeContext s)
static

Definition at line 211 of file flacenc.c.

Referenced by flac_encode_init().

◆ flac_encode_init()

static av_cold int flac_encode_init ( AVCodecContext avctx)
static

Definition at line 269 of file flacenc.c.

◆ init_frame()

static void init_frame ( FlacEncodeContext s,
int  nb_samples 
)
static

Definition at line 463 of file flacenc.c.

Referenced by decode_frame(), and flac_encode_frame().

◆ copy_samples()

static void copy_samples ( FlacEncodeContext s,
const void *  samples 
)
static

Copy channel-interleaved input samples into separate subframes.

Definition at line 508 of file flacenc.c.

Referenced by flac_encode_frame().

◆ rice_count_exact()

static uint64_t rice_count_exact ( const int32_t res,
int  n,
int  k 
)
static

Definition at line 530 of file flacenc.c.

Referenced by subframe_count_exact().

◆ subframe_count_exact()

static uint64_t subframe_count_exact ( FlacEncodeContext s,
FlacSubframe sub,
int  pred_order 
)
static

Definition at line 544 of file flacenc.c.

Referenced by encode_residual_ch().

◆ find_optimal_param()

static int find_optimal_param ( uint64_t  sum,
int  n,
int  max_param 
)
static

Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0.

Definition at line 599 of file flacenc.c.

Referenced by calc_optimal_rice_params(), and estimate_stereo_mode().

◆ find_optimal_param_exact()

static int find_optimal_param_exact ( uint64_t  sums[32][MAX_PARTITIONS],
int  i,
int  max_param 
)
static

Definition at line 611 of file flacenc.c.

Referenced by calc_optimal_rice_params().

◆ calc_optimal_rice_params()

static uint64_t calc_optimal_rice_params ( RiceContext rc,
int  porder,
uint64_t  sums[32][MAX_PARTITIONS],
int  n,
int  pred_order,
int  max_param,
int  exact 
)
static

Definition at line 628 of file flacenc.c.

Referenced by calc_rice_params().

◆ calc_sum_top()

static void calc_sum_top ( int  pmax,
int  kmax,
const uint32_t *  data,
int  n,
int  pred_order,
uint64_t  sums[32][MAX_PARTITIONS] 
)
static

Definition at line 658 of file flacenc.c.

Referenced by calc_rice_params().

◆ calc_sum_next()

static void calc_sum_next ( int  level,
uint64_t  sums[32][MAX_PARTITIONS],
int  kmax 
)
static

Definition at line 688 of file flacenc.c.

Referenced by calc_rice_params().

◆ calc_rice_params()

static uint64_t calc_rice_params ( RiceContext rc,
uint32_t  udata[FLAC_MAX_BLOCKSIZE],
uint64_t  sums[32][MAX_PARTITIONS],
int  pmin,
int  pmax,
const int32_t data,
int  n,
int  pred_order,
int  exact 
)
static

Definition at line 698 of file flacenc.c.

Referenced by find_subframe_rice_params().

◆ get_max_p_order()

static int get_max_p_order ( int  max_porder,
int  n,
int  order 
)
static

Definition at line 738 of file flacenc.c.

Referenced by find_subframe_rice_params().

◆ find_subframe_rice_params()

static uint64_t find_subframe_rice_params ( FlacEncodeContext s,
FlacSubframe sub,
int  pred_order 
)
static

Definition at line 747 of file flacenc.c.

Referenced by encode_residual_ch().

◆ encode_residual_fixed()

static void encode_residual_fixed ( int32_t res,
const int32_t smp,
int  n,
int  order 
)
static

Definition at line 764 of file flacenc.c.

Referenced by encode_residual_ch().

◆ encode_residual_ch()

static int encode_residual_ch ( FlacEncodeContext s,
int  ch 
)
static

Definition at line 815 of file flacenc.c.

Referenced by encode_frame().

◆ count_frame_header()

static int count_frame_header ( FlacEncodeContext s)
static

Definition at line 1014 of file flacenc.c.

Referenced by encode_frame().

◆ encode_frame()

static int encode_frame ( FlacEncodeContext s)
static

Definition at line 1050 of file flacenc.c.

Referenced by flac_encode_frame().

◆ remove_wasted_bits()

static void remove_wasted_bits ( FlacEncodeContext s)
static

Definition at line 1070 of file flacenc.c.

Referenced by flac_encode_frame().

◆ estimate_stereo_mode()

static int estimate_stereo_mode ( const int32_t left_ch,
const int32_t right_ch,
int  n,
int  max_rice_param 
)
static

Definition at line 1102 of file flacenc.c.

Referenced by channel_decorrelation().

◆ channel_decorrelation()

static void channel_decorrelation ( FlacEncodeContext s)
static

Perform stereo channel decorrelation.

Definition at line 1146 of file flacenc.c.

Referenced by flac_encode_frame().

◆ write_utf8()

static void write_utf8 ( PutBitContext pb,
uint32_t  val 
)
static

Definition at line 1191 of file flacenc.c.

Referenced by write_frame_header().

◆ write_frame_header()

static void write_frame_header ( FlacEncodeContext s)
static

Definition at line 1198 of file flacenc.c.

Referenced by write_frame().

◆ write_subframes()

static void write_subframes ( FlacEncodeContext s)
static

Definition at line 1235 of file flacenc.c.

Referenced by write_frame().

◆ write_frame_footer()

static void write_frame_footer ( FlacEncodeContext s)
static

Definition at line 1295 of file flacenc.c.

Referenced by write_frame().

◆ write_frame()

static int write_frame ( FlacEncodeContext s,
AVPacket avpkt 
)
static

Definition at line 1306 of file flacenc.c.

Referenced by flac_encode_frame().

◆ update_md5_sum()

static int update_md5_sum ( FlacEncodeContext s,
const void *  samples 
)
static

Definition at line 1316 of file flacenc.c.

Referenced by flac_encode_frame().

◆ flac_encode_frame()

static int flac_encode_frame ( AVCodecContext avctx,
AVPacket avpkt,
const AVFrame frame,
int got_packet_ptr 
)
static

Definition at line 1352 of file flacenc.c.

◆ flac_encode_close()

static av_cold int flac_encode_close ( AVCodecContext avctx)
static

Definition at line 1438 of file flacenc.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "lpc_coeff_precision", "LPC coefficient precision", 0x42, AV_OPT_TYPE_INT, {.i64 = 15 }, 0, MAX_LPC_PRECISION, FLAGS },
{ "lpc_type", "LPC algorithm", 0x42, AV_OPT_TYPE_INT, {.i64 = FF_LPC_TYPE_DEFAULT }, FF_LPC_TYPE_DEFAULT, FF_LPC_TYPE_NB-1, FLAGS, "lpc_type" },
{ "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" },
{ "lpc_passes", "Number of passes to use for Cholesky factorization during LPC analysis", 0x42, AV_OPT_TYPE_INT, {.i64 = 2 }, 1, INT_MAX, FLAGS },
{ "min_partition_order", NULL, 0x42, AV_OPT_TYPE_INT, {.i64 = -1 }, -1, MAX_PARTITION_ORDER, FLAGS },
{ "max_partition_order", NULL, 0x42, AV_OPT_TYPE_INT, {.i64 = -1 }, -1, MAX_PARTITION_ORDER, FLAGS },
{ "prediction_order_method", "Search method for selecting prediction order", 0x42, AV_OPT_TYPE_INT, {.i64 = -1 }, -1, ORDER_METHOD_LOG, FLAGS, "predm" },
{ "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" },
{ "ch_mode", "Stereo decorrelation mode", 0x42, AV_OPT_TYPE_INT, { .i64 = -1 }, -1, FLAC_CHMODE_MID_SIDE, FLAGS, "ch_mode" },
{ "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" },
{ "exact_rice_parameters", "Calculate rice parameters exactly", 0x42, AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
{ "multi_dim_quant", "Multi-dimensional quantization", 0x42, AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
{ "min_prediction_order", NULL, 0x42, AV_OPT_TYPE_INT, { .i64 = -1 }, -1, MAX_LPC_ORDER, FLAGS },
{ "max_prediction_order", NULL, 0x42, AV_OPT_TYPE_INT, { .i64 = -1 }, -1, MAX_LPC_ORDER, FLAGS },
{ NULL },
}

Definition at line 1449 of file flacenc.c.

◆ flac_encoder_class

const AVClass flac_encoder_class
static
Initial value:
= {
.class_name = "FLAC encoder",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 1480 of file flacenc.c.

◆ ff_flac_encoder

const FFCodec ff_flac_encoder
Initial value:
= {
.p.name = "flac",
CODEC_LONG_NAME("FLAC (Free Lossless Audio Codec)"),
.p.type = AVMEDIA_TYPE_AUDIO,
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
.priv_data_size = sizeof(FlacEncodeContext),
.p.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
.p.priv_class = &flac_encoder_class,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}

Definition at line 1487 of file flacenc.c.

FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:42
flac_encode_init
static av_cold int flac_encode_init(AVCodecContext *avctx)
Definition: flacenc.c:269
FLAC_CHMODE_MID_SIDE
@ FLAC_CHMODE_MID_SIDE
Definition: flac.h:42
MAX_PARTITION_ORDER
#define MAX_PARTITION_ORDER
Definition: flacenc.c:46
flac_encode_frame
static int flac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
Definition: flacenc.c:1352
FF_LPC_TYPE_CHOLESKY
@ FF_LPC_TYPE_CHOLESKY
Cholesky factorization.
Definition: lpc.h:49
FlacEncodeContext
Definition: flacenc.c:105
AV_CODEC_ID_FLAC
@ AV_CODEC_ID_FLAC
Definition: codec_id.h:446
FLAC_CHMODE_RIGHT_SIDE
@ FLAC_CHMODE_RIGHT_SIDE
Definition: flac.h:41
FLAC_CHMODE_LEFT_SIDE
@ FLAC_CHMODE_LEFT_SIDE
Definition: flac.h:40
ORDER_METHOD_4LEVEL
#define ORDER_METHOD_4LEVEL
Definition: lpc.h:33
FF_CODEC_ENCODE_CB
#define FF_CODEC_ENCODE_CB(func)
Definition: codec_internal.h:307
FF_LPC_TYPE_DEFAULT
@ FF_LPC_TYPE_DEFAULT
use the codec default LPC type
Definition: lpc.h:45
s
#define s(width, name)
Definition: cbs_vp9.c:256
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts_bsf.c:363
bits
uint8_t bits
Definition: vp3data.h:141
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:264
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
NULL
#define NULL
Definition: coverity.c:32
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
FLAGS
#define FLAGS
Definition: flacenc.c:1448
ORDER_METHOD_SEARCH
#define ORDER_METHOD_SEARCH
Definition: lpc.h:35
ORDER_METHOD_8LEVEL
#define ORDER_METHOD_8LEVEL
Definition: lpc.h:34
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
shift
static int shift(int a, int b)
Definition: bonk.c:260
FF_LPC_TYPE_NB
@ FF_LPC_TYPE_NB
Not part of ABI.
Definition: lpc.h:50
MAX_LPC_ORDER
#define MAX_LPC_ORDER
Definition: lpc.h:39
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:56
ORDER_METHOD_EST
#define ORDER_METHOD_EST
Definition: lpc.h:31
options
static const AVOption options[]
Definition: flacenc.c:1449
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
AVSampleFormat
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:55
AV_SAMPLE_FMT_S16
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition: samplefmt.h:58
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
MAX_LPC_PRECISION
#define MAX_LPC_PRECISION
Definition: flacenc.c:48
ORDER_METHOD_LOG
#define ORDER_METHOD_LOG
Definition: lpc.h:36
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:225
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:82
samples
Filter the word “frame” indicates either a video frame or a group of audio samples
Definition: filter_design.txt:8
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:244
flac_encode_close
static av_cold int flac_encode_close(AVCodecContext *avctx)
Definition: flacenc.c:1438
flac_encoder_class
static const AVClass flac_encoder_class
Definition: flacenc.c:1480
ORDER_METHOD_2LEVEL
#define ORDER_METHOD_2LEVEL
Definition: lpc.h:32
FLAC_CHMODE_INDEPENDENT
@ FLAC_CHMODE_INDEPENDENT
Definition: flac.h:39
FF_LPC_TYPE_NONE
@ FF_LPC_TYPE_NONE
do not use LPC prediction or use all zero coefficients
Definition: lpc.h:46
AV_CODEC_CAP_SMALL_LAST_FRAME
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
Definition: codec.h:87
AV_SAMPLE_FMT_S32
@ AV_SAMPLE_FMT_S32
signed 32 bits
Definition: samplefmt.h:59
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:234
FF_LPC_TYPE_LEVINSON
@ FF_LPC_TYPE_LEVINSON
Levinson-Durbin recursion.
Definition: lpc.h:48
FF_LPC_TYPE_FIXED
@ FF_LPC_TYPE_FIXED
fixed LPC coefficients
Definition: lpc.h:47