FFmpeg
Macros | Functions | Variables
snowenc.c File Reference
#include "libavutil/intmath.h"
#include "libavutil/libm.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "codec_internal.h"
#include "encode.h"
#include "me_cmp.h"
#include "packet_internal.h"
#include "snow_dwt.h"
#include "snow.h"
#include "rangecoder.h"
#include "mathops.h"
#include "mpegvideo.h"
#include "h263enc.h"

Go to the source code of this file.

Macros

#define P_LEFT   P[1]
 
#define P_TOP   P[2]
 
#define P_TOPRIGHT   P[3]
 
#define P_MEDIAN   P[4]
 
#define P_MV1   P[9]
 
#define FLAG_QPEL   1
 
#define OFFSET(x)   offsetof(SnowContext, x)
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static av_cold int encode_init (AVCodecContext *avctx)
 
static int pix_sum (const uint8_t *pix, int line_size, int w, int h)
 
static int pix_norm1 (const uint8_t *pix, int line_size, int w)
 
static int get_penalty_factor (int lambda, int lambda2, int type)
 
static int encode_q_branch (SnowContext *s, int level, int x, int y)
 
static void encode_q_branch2 (SnowContext *s, int level, int x, int y)
 
static int get_dc (SnowContext *s, int mb_x, int mb_y, int plane_index)
 
static int get_block_bits (SnowContext *s, int x, int y, int w)
 
static int get_block_rd (SnowContext *s, int mb_x, int mb_y, int plane_index, uint8_t(*obmc_edged)[MB_SIZE *2])
 
static int get_4block_rd (SnowContext *s, int mb_x, int mb_y, int plane_index)
 
static int encode_subband_c0run (SnowContext *s, SubBand *b, const IDWTELEM *src, const IDWTELEM *parent, int stride, int orientation)
 
static int encode_subband (SnowContext *s, SubBand *b, const IDWTELEM *src, const IDWTELEM *parent, int stride, int orientation)
 
static av_always_inline int check_block_intra (SnowContext *s, int mb_x, int mb_y, int p[3], uint8_t(*obmc_edged)[MB_SIZE *2], int *best_rd)
 
static av_always_inline int check_block_inter (SnowContext *s, int mb_x, int mb_y, int p0, int p1, uint8_t(*obmc_edged)[MB_SIZE *2], int *best_rd)
 
static av_always_inline int check_4block_inter (SnowContext *s, int mb_x, int mb_y, int p0, int p1, int ref, int *best_rd)
 
static void iterative_me (SnowContext *s)
 
static void encode_blocks (SnowContext *s, int search)
 
static void quantize (SnowContext *s, SubBand *b, IDWTELEM *dst, DWTELEM *src, int stride, int bias)
 
static void dequantize (SnowContext *s, SubBand *b, IDWTELEM *src, int stride)
 
static void decorrelate (SnowContext *s, SubBand *b, IDWTELEM *src, int stride, int inverse, int use_median)
 
static void correlate (SnowContext *s, SubBand *b, IDWTELEM *src, int stride, int inverse, int use_median)
 
static void encode_qlogs (SnowContext *s)
 
static void encode_header (SnowContext *s)
 
static void update_last_header_values (SnowContext *s)
 
static int qscale2qlog (int qscale)
 
static int ratecontrol_1pass (SnowContext *s, AVFrame *pict)
 
static void calculate_visual_weight (SnowContext *s, Plane *p)
 
static int encode_frame (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
 
static av_cold int encode_end (AVCodecContext *avctx)
 

Variables

static const AVOption options []
 
static const AVClass snowenc_class
 
const FFCodec ff_snow_encoder
 

Macro Definition Documentation

◆ P_LEFT

#define P_LEFT   P[1]

Definition at line 213 of file snowenc.c.

◆ P_TOP

#define P_TOP   P[2]

Definition at line 214 of file snowenc.c.

◆ P_TOPRIGHT

#define P_TOPRIGHT   P[3]

Definition at line 215 of file snowenc.c.

◆ P_MEDIAN

#define P_MEDIAN   P[4]

Definition at line 216 of file snowenc.c.

◆ P_MV1

#define P_MV1   P[9]

Definition at line 217 of file snowenc.c.

◆ FLAG_QPEL

#define FLAG_QPEL   1

Definition at line 218 of file snowenc.c.

◆ OFFSET

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

Definition at line 1901 of file snowenc.c.

◆ VE

Definition at line 1902 of file snowenc.c.

Function Documentation

◆ encode_init()

static av_cold int encode_init ( AVCodecContext avctx)
static

Definition at line 40 of file snowenc.c.

◆ pix_sum()

static int pix_sum ( const uint8_t *  pix,
int  line_size,
int  w,
int  h 
)
static

Definition at line 156 of file snowenc.c.

Referenced by encode_q_branch().

◆ pix_norm1()

static int pix_norm1 ( const uint8_t *  pix,
int  line_size,
int  w 
)
static

Definition at line 172 of file snowenc.c.

Referenced by encode_q_branch().

◆ get_penalty_factor()

static int get_penalty_factor ( int  lambda,
int  lambda2,
int  type 
)
inlinestatic

Definition at line 188 of file snowenc.c.

Referenced by encode_q_branch(), get_4block_rd(), and get_block_rd().

◆ encode_q_branch()

static int encode_q_branch ( SnowContext s,
int  level,
int  x,
int  y 
)
static

Definition at line 220 of file snowenc.c.

Referenced by encode_blocks(), and iterative_me().

◆ encode_q_branch2()

static void encode_q_branch2 ( SnowContext s,
int  level,
int  x,
int  y 
)
static

Definition at line 448 of file snowenc.c.

Referenced by encode_blocks().

◆ get_dc()

static int get_dc ( SnowContext s,
int  mb_x,
int  mb_y,
int  plane_index 
)
static

Definition at line 504 of file snowenc.c.

Referenced by iterative_me().

◆ get_block_bits()

static int get_block_bits ( SnowContext s,
int  x,
int  y,
int  w 
)
inlinestatic

Definition at line 562 of file snowenc.c.

Referenced by get_4block_rd(), and get_block_rd().

◆ get_block_rd()

static int get_block_rd ( SnowContext s,
int  mb_x,
int  mb_y,
int  plane_index,
uint8_t(*)  obmc_edged[MB_SIZE *2] 
)
static

Definition at line 600 of file snowenc.c.

Referenced by check_block_inter(), and check_block_intra().

◆ get_4block_rd()

static int get_4block_rd ( SnowContext s,
int  mb_x,
int  mb_y,
int  plane_index 
)
static

Definition at line 701 of file snowenc.c.

Referenced by check_4block_inter(), and iterative_me().

◆ encode_subband_c0run()

static int encode_subband_c0run ( SnowContext s,
SubBand b,
const IDWTELEM src,
const IDWTELEM parent,
int  stride,
int  orientation 
)
static

Definition at line 770 of file snowenc.c.

Referenced by encode_subband().

◆ encode_subband()

static int encode_subband ( SnowContext s,
SubBand b,
const IDWTELEM src,
const IDWTELEM parent,
int  stride,
int  orientation 
)
static

Definition at line 890 of file snowenc.c.

Referenced by encode_frame().

◆ check_block_intra()

static av_always_inline int check_block_intra ( SnowContext s,
int  mb_x,
int  mb_y,
int  p[3],
uint8_t(*)  obmc_edged[MB_SIZE *2],
int best_rd 
)
static

Definition at line 897 of file snowenc.c.

Referenced by iterative_me().

◆ check_block_inter()

static av_always_inline int check_block_inter ( SnowContext s,
int  mb_x,
int  mb_y,
int  p0,
int  p1,
uint8_t(*)  obmc_edged[MB_SIZE *2],
int best_rd 
)
static

Definition at line 927 of file snowenc.c.

Referenced by iterative_me().

◆ check_4block_inter()

static av_always_inline int check_4block_inter ( SnowContext s,
int  mb_x,
int  mb_y,
int  p0,
int  p1,
int  ref,
int best_rd 
)
static

Definition at line 959 of file snowenc.c.

Referenced by iterative_me().

◆ iterative_me()

static void iterative_me ( SnowContext s)
static

Definition at line 1005 of file snowenc.c.

Referenced by encode_blocks().

◆ encode_blocks()

static void encode_blocks ( SnowContext s,
int  search 
)
static

Definition at line 1232 of file snowenc.c.

Referenced by encode_frame().

◆ quantize()

static void quantize ( SnowContext s,
SubBand b,
IDWTELEM dst,
DWTELEM src,
int  stride,
int  bias 
)
static

Definition at line 1254 of file snowenc.c.

Referenced by encode_frame().

◆ dequantize()

static void dequantize ( SnowContext s,
SubBand b,
IDWTELEM src,
int  stride 
)
static

Definition at line 1315 of file snowenc.c.

Referenced by encode_frame().

◆ decorrelate()

static void decorrelate ( SnowContext s,
SubBand b,
IDWTELEM src,
int  stride,
int  inverse,
int  use_median 
)
static

Definition at line 1337 of file snowenc.c.

Referenced by decode_bgr_1(), encode_frame(), and ratecontrol_1pass().

◆ correlate()

static void correlate ( SnowContext s,
SubBand b,
IDWTELEM src,
int  stride,
int  inverse,
int  use_median 
)
static

Definition at line 1361 of file snowenc.c.

Referenced by encode_frame().

◆ encode_qlogs()

static void encode_qlogs ( SnowContext s)
static

Definition at line 1385 of file snowenc.c.

Referenced by encode_header().

◆ encode_header()

static void encode_header ( SnowContext s)
static

Definition at line 1398 of file snowenc.c.

Referenced by encode_frame().

◆ update_last_header_values()

static void update_last_header_values ( SnowContext s)
static

Definition at line 1471 of file snowenc.c.

Referenced by encode_frame().

◆ qscale2qlog()

static int qscale2qlog ( int  qscale)
static

< 64 > 60

Definition at line 1491 of file snowenc.c.

Referenced by encode_frame(), and ratecontrol_1pass().

◆ ratecontrol_1pass()

static int ratecontrol_1pass ( SnowContext s,
AVFrame pict 
)
static

Definition at line 1496 of file snowenc.c.

Referenced by encode_frame().

◆ calculate_visual_weight()

static void calculate_visual_weight ( SnowContext s,
Plane p 
)
static

Definition at line 1548 of file snowenc.c.

Referenced by encode_frame().

◆ encode_frame()

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

Definition at line 1574 of file snowenc.c.

◆ encode_end()

static av_cold int encode_end ( AVCodecContext avctx)
static

Definition at line 1889 of file snowenc.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{"motion_est", "motion estimation algorithm", OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_ITER, VE, "motion_est" },
{ "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, VE, "motion_est" },
{ "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, VE, "motion_est" },
{ "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, VE, "motion_est" },
{ "iter", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ITER }, 0, 0, VE, "motion_est" },
{ "memc_only", "Only do ME/MC (I frames -> ref, P frame -> ME+MC).", OFFSET(memc_only), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
{ "no_bitstream", "Skip final bitstream writeout.", OFFSET(no_bitstream), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
{ "intra_penalty", "Penalty for intra blocks in block decission", OFFSET(intra_penalty), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
{ "iterative_dia_size", "Dia size for the iterative ME", OFFSET(iterative_dia_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
{ "sc_threshold", "Scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, VE },
{ "pred", "Spatial decomposition type", OFFSET(pred), AV_OPT_TYPE_INT, { .i64 = 0 }, DWT_97, DWT_53, VE, "pred" },
{ "dwt97", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "pred" },
{ "dwt53", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "pred" },
{ "rc_eq", "Set rate control equation. When computing the expression, besides the standard functions "
"defined in the section 'Expression Evaluation', the following functions are available: "
"bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv "
"fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.",
OFFSET(m.rc_eq), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE },
{ NULL },
}

Definition at line 1903 of file snowenc.c.

◆ snowenc_class

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

Definition at line 1925 of file snowenc.c.

◆ ff_snow_encoder

const FFCodec ff_snow_encoder
Initial value:
= {
.p.name = "snow",
CODEC_LONG_NAME("Snow"),
.p.type = AVMEDIA_TYPE_VIDEO,
.priv_data_size = sizeof(SnowContext),
.close = encode_end,
.p.pix_fmts = (const enum AVPixelFormat[]){
},
.p.priv_class = &snowenc_class,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}

Definition at line 1932 of file snowenc.c.

AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
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
FF_ME_EPZS
#define FF_ME_EPZS
Definition: motion_est.h:41
encode_end
static av_cold int encode_end(AVCodecContext *avctx)
Definition: snowenc.c:1889
DWT_97
#define DWT_97
Definition: snow_dwt.h:68
DWT_53
#define DWT_53
Definition: snow_dwt.h:69
SnowContext
Definition: snow.h:116
encode_frame
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
Definition: snowenc.c:1574
OFFSET
#define OFFSET(x)
Definition: snowenc.c:1901
FF_CODEC_ENCODE_CB
#define FF_CODEC_ENCODE_CB(func)
Definition: codec_internal.h:315
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts_bsf.c:365
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
Definition: codec.h:156
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:66
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:272
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
NULL
#define NULL
Definition: coverity.c:32
VE
#define VE
Definition: snowenc.c:1902
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
FF_ME_ITER
#define FF_ME_ITER
Definition: snow.h:40
AV_PIX_FMT_GRAY8
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition: pixfmt.h:74
FF_ME_XONE
#define FF_ME_XONE
Definition: motion_est.h:42
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
pred
static const float pred[4]
Definition: siprdata.h:259
encode_init
static av_cold int encode_init(AVCodecContext *avctx)
Definition: snowenc.c:40
options
static const AVOption options[]
Definition: snowenc.c:1903
AV_CODEC_ID_SNOW
@ AV_CODEC_ID_SNOW
Definition: codec_id.h:266
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:225
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:71
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:244
AV_PIX_FMT_YUV410P
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
Definition: pixfmt.h:72
snowenc_class
static const AVClass snowenc_class
Definition: snowenc.c:1925
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Definition: opt.h:229
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:234
FF_ME_ZERO
#define FF_ME_ZERO
Definition: motion_est.h:40