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 "libavutil/qsort.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 FLIP(f)   (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);
 
#define CMP(A, B)   ((A)->val - (int64_t)(B)->val)
 
#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_histogram_remap (FFV1Context *f, FFV1SliceContext *sc)
 
static void load_rgb_float32_frame (FFV1Context *f, FFV1SliceContext *sc, const uint8_t *src[4], int w, int h, const int stride[4])
 
static int encode_float32_remap_segment (FFV1SliceContext *sc, int p, int mul_count, int *mul_tab, int update, int final)
 
static void encode_float32_remap (FFV1Context *f, FFV1SliceContext *sc, const uint8_t *src[4])
 
static int encode_float32_rgb_frame (FFV1Context *f, FFV1SliceContext *sc, const uint8_t *src[4], int w, int h, const int stride[4], int ac)
 
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 270 of file ffv1enc.c.

◆ RENAME [1/2]

#define RENAME (   name)    name

Definition at line 271 of file ffv1enc.c.

◆ TYPE [2/2]

#define TYPE   int32_t

Definition at line 270 of file ffv1enc.c.

◆ RENAME [2/2]

#define RENAME (   name)    name ## 32

Definition at line 271 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

◆ FLIP

#define FLIP (   f)    (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);

◆ CMP

#define CMP (   A,
  B 
)    ((A)->val - (int64_t)(B)->val)

◆ OFFSET

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

Definition at line 1845 of file ffv1enc.c.

◆ VE

Definition at line 1846 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 140 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

◆ 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 240 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 274 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 323 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 347 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 362 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 370 of file ffv1enc.c.

Referenced by ff_ffv1_write_extradata().

◆ write_header()

static void write_header ( FFV1Context f)
static

Definition at line 382 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 429 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 445 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 515 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 564 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 598 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 796 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 963 of file ffv1enc.c.

◆ encode_slice_header()

static void encode_slice_header ( FFV1Context f,
FFV1SliceContext sc 
)
static

Definition at line 1059 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 1093 of file ffv1enc.c.

Referenced by encode_slice().

◆ encode_histogram_remap()

static void encode_histogram_remap ( FFV1Context f,
FFV1SliceContext sc 
)
static

Definition at line 1188 of file ffv1enc.c.

Referenced by encode_slice().

◆ load_rgb_float32_frame()

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

Definition at line 1222 of file ffv1enc.c.

Referenced by encode_slice().

◆ encode_float32_remap_segment()

static int encode_float32_remap_segment ( FFV1SliceContext sc,
int  p,
int  mul_count,
int *  mul_tab,
int  update,
int  final 
)
static

Definition at line 1274 of file ffv1enc.c.

Referenced by encode_float32_remap().

◆ encode_float32_remap()

static void encode_float32_remap ( FFV1Context f,
FFV1SliceContext sc,
const uint8_t *  src[4] 
)
static

Definition at line 1387 of file ffv1enc.c.

Referenced by encode_slice().

◆ encode_float32_rgb_frame()

static int encode_float32_rgb_frame ( FFV1Context f,
FFV1SliceContext sc,
const uint8_t *  src[4],
int  w,
int  h,
const int  stride[4],
int  ac 
)
static

Definition at line 1487 of file ffv1enc.c.

Referenced by encode_slice().

◆ encode_slice()

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

Definition at line 1544 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 1689 of file ffv1enc.c.

◆ encode_close()

static av_cold int encode_close ( AVCodecContext avctx)
static

Definition at line 1826 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 45 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 64 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 83 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 102 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 121 of file ffv1enc.c.

Referenced by ff_ffv1_encode_init().

◆ options

const AVOption options[]
static

Definition at line 1847 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 1883 of file ffv1enc.c.

◆ ff_ffv1_encoder

const FFCodec ff_ffv1_encoder

Definition at line 1890 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
state
static struct @486 state
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:1847
log2
#define log2(x)
Definition: libm.h:406