FFmpeg
Macros | Functions | Variables
ffv1enc.c File Reference
#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
#include "libavutil/crc.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "encode.h"
#include "codec_internal.h"
#include "put_bits.h"
#include "put_golomb.h"
#include "rangecoder.h"
#include "ffv1.h"
#include "ffv1enc.h"
#include "ffv1enc_template.c"

Go to the source code of this file.

Macros

#define put_rac(C, S, B)
 
#define TYPE   int16_t
 
#define RENAME(name)   name
 
#define TYPE   int32_t
 
#define RENAME(name)   name ## 32
 
#define COST(old, new)
 
#define COST2(old, new)   COST(old, new) + COST(256 - (old), 256 - (new))
 
#define STATS_OUT_SIZE   1024 * 1024 * 6
 
#define NB_Y_COEFF   15
 
#define OFFSET(x)   offsetof(FFV1Context, x)
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static void find_best_state (uint8_t best_state[256][256], const uint8_t one_state[256])
 
static av_always_inline av_flatten void put_symbol_inline (RangeCoder *c, uint8_t *state, int v, int is_signed, uint64_t rc_stat[256][2], uint64_t rc_stat2[32][2])
 
static av_noinline void put_symbol (RangeCoder *c, uint8_t *state, int v, int is_signed)
 
static void put_vlc_symbol (PutBitContext *pb, VlcState *const state, int v, int bits)
 
static int encode_plane (FFV1Context *f, FFV1SliceContext *sc, const uint8_t *src, int w, int h, int stride, int plane_index, int remap_index, int pixel_stride, int ac)
 
static void load_plane (FFV1Context *f, FFV1SliceContext *sc, const uint8_t *src, int w, int h, int stride, int remap_index, int pixel_stride)
 
static void write_quant_table (RangeCoder *c, int16_t *quant_table)
 
static void write_quant_tables (RangeCoder *c, int16_t quant_table[MAX_CONTEXT_INPUTS][MAX_QUANT_TABLE_SIZE])
 
static int contains_non_128 (uint8_t(*initial_state)[CONTEXT_SIZE], int nb_contexts)
 
static void write_header (FFV1Context *f)
 
static void set_micro_version (FFV1Context *f)
 
av_cold int ff_ffv1_write_extradata (AVCodecContext *avctx)
 
static int sort_stt (FFV1Context *s, uint8_t stt[256])
 
int ff_ffv1_encode_determine_slices (AVCodecContext *avctx)
 
av_cold int ff_ffv1_encode_init (AVCodecContext *avctx)
 
av_cold int ff_ffv1_encode_setup_plane_info (AVCodecContext *avctx, enum AVPixelFormat pix_fmt)
 
static av_cold int encode_init_internal (AVCodecContext *avctx)
 
static void encode_slice_header (FFV1Context *f, FFV1SliceContext *sc)
 
static void choose_rct_params (const FFV1Context *f, FFV1SliceContext *sc, const uint8_t *src[3], const int stride[3], int w, int h)
 
static void encode_remap (FFV1Context *f, FFV1SliceContext *sc)
 
static int encode_slice (AVCodecContext *c, void *arg)
 
size_t ff_ffv1_encode_buffer_size (AVCodecContext *avctx)
 
static int encode_frame (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
 
static av_cold int encode_close (AVCodecContext *avctx)
 

Variables

static const int8_t quant5_10bit [256]
 
static const int8_t quant5 [256]
 
static const int8_t quant9_10bit [256]
 
static const int8_t quant11 [256]
 
static const uint8_t ver2_state [256]
 
static const AVOption options []
 
static const AVClass ffv1_class
 
const FFCodec ff_ffv1_encoder
 

Detailed Description

FF Video Codec 1 (a lossless codec) encoder

Definition in file ffv1enc.c.

Macro Definition Documentation

◆ put_rac

#define put_rac (   C,
  S,
  B 
)
Value:
do { \
if (rc_stat) { \
rc_stat[*(S)][B]++; \
rc_stat2[(S) - state][B]++; \
} \
put_rac(C, S, B); \
} while (0)

◆ TYPE [1/2]

#define TYPE   int16_t

Definition at line 269 of file ffv1enc.c.

◆ RENAME [1/2]

#define RENAME (   name)    name

Definition at line 270 of file ffv1enc.c.

◆ TYPE [2/2]

#define TYPE   int32_t

Definition at line 269 of file ffv1enc.c.

◆ RENAME [2/2]

#define RENAME (   name)    name ## 32

Definition at line 270 of file ffv1enc.c.

◆ COST

#define COST (   old,
  new 
)
Value:
s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
s->rc_stat[old][1] * -log2((new) / 256.0)

◆ COST2

#define COST2 (   old,
  new 
)    COST(old, new) + COST(256 - (old), 256 - (new))

◆ STATS_OUT_SIZE

#define STATS_OUT_SIZE   1024 * 1024 * 6

◆ NB_Y_COEFF

#define NB_Y_COEFF   15

◆ OFFSET

#define OFFSET (   x)    offsetof(FFV1Context, x)

Definition at line 1464 of file ffv1enc.c.

◆ VE

Definition at line 1465 of file ffv1enc.c.

Function Documentation

◆ find_best_state()

static void find_best_state ( uint8_t  best_state[256][256],
const uint8_t  one_state[256] 
)
static

Definition at line 139 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ put_symbol_inline()

static av_always_inline av_flatten void put_symbol_inline ( RangeCoder c,
uint8_t *  state,
int  v,
int  is_signed,
uint64_t  rc_stat[256][2],
uint64_t  rc_stat2[32][2] 
)
static

Definition at line 184 of file ffv1enc.c.

Referenced by encode_line(), encode_remap(), and put_symbol().

◆ put_symbol()

static av_noinline void put_symbol ( RangeCoder c,
uint8_t *  state,
int  v,
int  is_signed 
)
static

◆ put_vlc_symbol()

static void put_vlc_symbol ( PutBitContext pb,
VlcState *const  state,
int  v,
int  bits 
)
inlinestatic

Definition at line 239 of file ffv1enc.c.

Referenced by encode_line().

◆ encode_plane()

static int encode_plane ( FFV1Context f,
FFV1SliceContext sc,
const uint8_t *  src,
int  w,
int  h,
int  stride,
int  plane_index,
int  remap_index,
int  pixel_stride,
int  ac 
)
static

Definition at line 273 of file ffv1enc.c.

Referenced by encode_slice().

◆ load_plane()

static void load_plane ( FFV1Context f,
FFV1SliceContext sc,
const uint8_t *  src,
int  w,
int  h,
int  stride,
int  remap_index,
int  pixel_stride 
)
static

Definition at line 322 of file ffv1enc.c.

Referenced by encode_slice().

◆ write_quant_table()

static void write_quant_table ( RangeCoder c,
int16_t *  quant_table 
)
static

Definition at line 346 of file ffv1enc.c.

Referenced by write_quant_tables().

◆ write_quant_tables()

static void write_quant_tables ( RangeCoder c,
int16_t  quant_table[MAX_CONTEXT_INPUTS][MAX_QUANT_TABLE_SIZE] 
)
static

Definition at line 361 of file ffv1enc.c.

Referenced by ff_ffv1_write_extradata(), and write_header().

◆ contains_non_128()

static int contains_non_128 ( uint8_t(*)  initial_state[CONTEXT_SIZE],
int  nb_contexts 
)
static

Definition at line 369 of file ffv1enc.c.

Referenced by ff_ffv1_write_extradata().

◆ write_header()

static void write_header ( FFV1Context f)
static

Definition at line 381 of file ffv1enc.c.

Referenced by encode_frame(), and segment_start().

◆ set_micro_version()

static void set_micro_version ( FFV1Context f)
static

Definition at line 428 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ ff_ffv1_write_extradata()

av_cold int ff_ffv1_write_extradata ( AVCodecContext avctx)

Definition at line 444 of file ffv1enc.c.

Referenced by encode_init_internal(), and vulkan_encode_ffv1_init().

◆ sort_stt()

static int sort_stt ( FFV1Context s,
uint8_t  stt[256] 
)
static

Definition at line 514 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ ff_ffv1_encode_determine_slices()

int ff_ffv1_encode_determine_slices ( AVCodecContext avctx)

Definition at line 563 of file ffv1enc.c.

Referenced by encode_init_internal(), and vulkan_encode_ffv1_init().

◆ ff_ffv1_encode_init()

av_cold int ff_ffv1_encode_init ( AVCodecContext avctx)

Definition at line 594 of file ffv1enc.c.

Referenced by encode_init_internal(), and vulkan_encode_ffv1_init().

◆ ff_ffv1_encode_setup_plane_info()

av_cold int ff_ffv1_encode_setup_plane_info ( AVCodecContext avctx,
enum AVPixelFormat  pix_fmt 
)

Definition at line 792 of file ffv1enc.c.

Referenced by encode_init_internal(), and vulkan_encode_ffv1_init().

◆ encode_init_internal()

static av_cold int encode_init_internal ( AVCodecContext avctx)
static

Definition at line 946 of file ffv1enc.c.

◆ encode_slice_header()

static void encode_slice_header ( FFV1Context f,
FFV1SliceContext sc 
)
static

Definition at line 1023 of file ffv1enc.c.

Referenced by encode_slice().

◆ choose_rct_params()

static void choose_rct_params ( const FFV1Context f,
FFV1SliceContext sc,
const uint8_t *  src[3],
const int  stride[3],
int  w,
int  h 
)
static

Definition at line 1057 of file ffv1enc.c.

Referenced by encode_slice().

◆ encode_remap()

static void encode_remap ( FFV1Context f,
FFV1SliceContext sc 
)
static

Definition at line 1152 of file ffv1enc.c.

Referenced by encode_slice().

◆ encode_slice()

static int encode_slice ( AVCodecContext c,
void *  arg 
)
static

Definition at line 1182 of file ffv1enc.c.

Referenced by encode_frame().

◆ ff_ffv1_encode_buffer_size()

size_t ff_ffv1_encode_buffer_size ( AVCodecContext avctx)

◆ encode_frame()

static int encode_frame ( AVCodecContext avctx,
AVPacket pkt,
const AVFrame pict,
int *  got_packet 
)
static

Definition at line 1317 of file ffv1enc.c.

◆ encode_close()

static av_cold int encode_close ( AVCodecContext avctx)
static

Definition at line 1454 of file ffv1enc.c.

Variable Documentation

◆ quant5_10bit

const int8_t quant5_10bit[256]
static
Initial value:
= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0,
}

Definition at line 44 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ quant5

const int8_t quant5[256]
static
Initial value:
= {
0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1,
}

Definition at line 63 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ quant9_10bit

const int8_t quant9_10bit[256]
static
Initial value:
= {
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
-4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3,
-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
-3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0,
}

Definition at line 82 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ quant11

const int8_t quant11[256]
static
Initial value:
= {
0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4,
-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
-4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1,
}

Definition at line 101 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ ver2_state

const uint8_t ver2_state[256]
static
Initial value:
= {
0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
53, 74, 55, 57, 58, 58, 74, 60, 101, 61, 62, 84, 66, 66, 68, 69,
87, 82, 71, 97, 73, 73, 82, 75, 111, 77, 94, 78, 87, 81, 83, 97,
85, 83, 94, 86, 99, 89, 90, 99, 111, 92, 93, 134, 95, 98, 105, 98,
105, 110, 102, 108, 102, 118, 103, 106, 106, 113, 109, 112, 114, 112, 116, 125,
115, 116, 117, 117, 126, 119, 125, 121, 121, 123, 145, 124, 126, 131, 127, 129,
165, 130, 132, 138, 133, 135, 145, 136, 137, 139, 146, 141, 143, 142, 144, 148,
147, 155, 151, 149, 151, 150, 152, 157, 153, 154, 156, 168, 158, 162, 161, 160,
172, 163, 169, 164, 166, 184, 167, 170, 177, 174, 171, 173, 182, 176, 180, 178,
175, 189, 179, 181, 186, 183, 192, 185, 200, 187, 191, 188, 190, 197, 193, 196,
197, 194, 195, 196, 198, 202, 199, 201, 210, 203, 207, 204, 205, 206, 208, 214,
209, 211, 221, 212, 213, 215, 224, 216, 217, 218, 219, 220, 222, 228, 223, 225,
226, 224, 227, 229, 240, 230, 231, 232, 233, 234, 235, 236, 238, 239, 237, 242,
241, 243, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255,
}

Definition at line 120 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ options

const AVOption options[]
static

Definition at line 1466 of file ffv1enc.c.

◆ ffv1_class

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

Definition at line 1502 of file ffv1enc.c.

◆ ff_ffv1_encoder

const FFCodec ff_ffv1_encoder

Definition at line 1509 of file ffv1enc.c.

S
#define S(s, c, i)
Definition: flacdsp_template.c:46
C
s EdgeDetect Foobar g libavfilter vf_edgedetect c libavfilter vf_foobar c edit libavfilter and add an entry for foobar following the pattern of the other filters edit libavfilter allfilters and add an entry for foobar following the pattern of the other filters configure make j< whatever > ffmpeg ffmpeg i you should get a foobar png with Lena edge detected That s your new playground is ready Some little details about what s going which in turn will define variables for the build system and the C
Definition: writing_filters.txt:58
s
#define s(width, name)
Definition: cbs_vp9.c:198
B
#define B
Definition: huffyuv.h:42
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:239
options
static const AVOption options[]
Definition: ffv1enc.c:1466
log2
#define log2(x)
Definition: libm.h:404
state
static struct @481 state