FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions | Variables
mpegvideo_enc.c File Reference

The simplest mpeg encoder (well, it was the simplest!). More...

#include <stdint.h>
#include "libavutil/internal.h"
#include "libavutil/intmath.h"
#include "libavutil/mathematics.h"
#include "libavutil/pixdesc.h"
#include "libavutil/opt.h"
#include "libavutil/timer.h"
#include "avcodec.h"
#include "dct.h"
#include "dsputil.h"
#include "mpeg12.h"
#include "mpegvideo.h"
#include "h261.h"
#include "h263.h"
#include "mathops.h"
#include "mjpegenc.h"
#include "msmpeg4.h"
#include "faandct.h"
#include "thread.h"
#include "aandcttab.h"
#include "flv.h"
#include "mpeg4video.h"
#include "internal.h"
#include "bytestream.h"
#include <limits.h>
#include "sp5x.h"

Go to the source code of this file.

Macros

#define COPY(a)   dst->a= src->a
 
#define MERGE(field)   dst->field += src->field; src->field=0
 
#define OFFSET(x)   offsetof(MpegEncContext, x)
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static int encode_picture (MpegEncContext *s, int picture_number)
 
static int dct_quantize_refine (MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale)
 
static int sse_mb (MpegEncContext *s)
 
static void denoise_dct_c (MpegEncContext *s, int16_t *block)
 
static int dct_quantize_trellis_c (MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
 
void ff_convert_matrix (DSPContext *dsp, int(*qmat)[64], uint16_t(*qmat16)[2][64], const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra)
 
static void update_qscale (MpegEncContext *s)
 
void ff_write_quant_matrix (PutBitContext *pb, uint16_t *matrix)
 
void ff_init_qscale_tab (MpegEncContext *s)
 init s->current_picture.qscale_table from s->lambda_table
 
static void update_duplicate_context_after_me (MpegEncContext *dst, MpegEncContext *src)
 
static void MPV_encode_defaults (MpegEncContext *s)
 Set the given MpegEncContext to defaults for encoding.
 
av_cold int ff_dct_encode_init (MpegEncContext *s)
 
av_cold int ff_MPV_encode_init (AVCodecContext *avctx)
 
av_cold int ff_MPV_encode_end (AVCodecContext *avctx)
 
static int get_sae (uint8_t *src, int ref, int stride)
 
static int get_intra_count (MpegEncContext *s, uint8_t *src, uint8_t *ref, int stride)
 
static int load_input_picture (MpegEncContext *s, const AVFrame *pic_arg)
 
static int skip_check (MpegEncContext *s, Picture *p, Picture *ref)
 
static int encode_frame (AVCodecContext *c, AVFrame *frame)
 
static int estimate_best_b_count (MpegEncContext *s)
 
static int select_input_picture (MpegEncContext *s)
 
static void frame_end (MpegEncContext *s)
 
static void update_noise_reduction (MpegEncContext *s)
 
static int frame_start (MpegEncContext *s)
 
int ff_MPV_encode_picture (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet)
 
static void dct_single_coeff_elimination (MpegEncContext *s, int n, int threshold)
 
static void clip_coeffs (MpegEncContext *s, int16_t *block, int last_index)
 
static void get_visual_weight (int16_t *weight, uint8_t *ptr, int stride)
 
static av_always_inline void encode_mb_internal (MpegEncContext *s, int motion_x, int motion_y, int mb_block_height, int mb_block_width, int mb_block_count)
 
static av_always_inline void encode_mb (MpegEncContext *s, int motion_x, int motion_y)
 
static void copy_context_before_encode (MpegEncContext *d, MpegEncContext *s, int type)
 
static void copy_context_after_encode (MpegEncContext *d, MpegEncContext *s, int type)
 
static void encode_mb_hq (MpegEncContext *s, MpegEncContext *backup, MpegEncContext *best, int type, PutBitContext pb[2], PutBitContext pb2[2], PutBitContext tex_pb[2], int *dmin, int *next_block, int motion_x, int motion_y)
 
static int sse (MpegEncContext *s, uint8_t *src1, uint8_t *src2, int w, int h, int stride)
 
static int pre_estimate_motion_thread (AVCodecContext *c, void *arg)
 
static int estimate_motion_thread (AVCodecContext *c, void *arg)
 
static int mb_var_thread (AVCodecContext *c, void *arg)
 
static void write_slice_end (MpegEncContext *s)
 
static void write_mb_info (MpegEncContext *s)
 
static void update_mb_info (MpegEncContext *s, int startcode)
 
static int encode_thread (AVCodecContext *c, void *arg)
 
static void merge_context_after_me (MpegEncContext *dst, MpegEncContext *src)
 
static void merge_context_after_encode (MpegEncContext *dst, MpegEncContext *src)
 
static int estimate_qp (MpegEncContext *s, int dry_run)
 
static void set_frame_distances (MpegEncContext *s)
 
static void build_basis (uint8_t *perm)
 
int ff_dct_quantize_c (MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
 

Variables

static uint8_t default_mv_penalty [MAX_FCODE+1][MAX_MV *2+1]
 
static uint8_t default_fcode_tab [MAX_MV *2+1]
 
const AVOption ff_mpv_generic_options []
 
static int16_t basis [64][64]
 
static const AVOption h263_options []
 
static const AVClass h263_class
 
AVCodec ff_h263_encoder
 
static const AVOption h263p_options []
 
static const AVClass h263p_class
 
AVCodec ff_h263p_encoder
 
AVCodec ff_msmpeg4v2_encoder
 
AVCodec ff_msmpeg4v3_encoder
 
AVCodec ff_wmv1_encoder
 

Detailed Description

The simplest mpeg encoder (well, it was the simplest!).

Definition in file mpegvideo_enc.c.

Macro Definition Documentation

#define COPY (   a)    dst->a= src->a
#define MERGE (   field)    dst->field += src->field; src->field=0

Definition at line 3262 of file mpegvideo_enc.c.

Referenced by merge_context_after_encode(), and merge_context_after_me().

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

Definition at line 4407 of file mpegvideo_enc.c.

Definition at line 4408 of file mpegvideo_enc.c.

Function Documentation

static int encode_picture ( MpegEncContext *  s,
int  picture_number 
)
static

Definition at line 3352 of file mpegvideo_enc.c.

Referenced by ff_MPV_encode_picture().

static int dct_quantize_refine ( MpegEncContext *  s,
int16_t *  block,
int16_t *  weight,
int16_t *  orig,
int  n,
int  qscale 
)
static

Definition at line 3954 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

static int sse_mb ( MpegEncContext *  s)
static

Definition at line 2470 of file mpegvideo_enc.c.

Referenced by encode_mb_hq().

static void denoise_dct_c ( MpegEncContext *  s,
int16_t *  block 
)
static

Definition at line 3616 of file mpegvideo_enc.c.

Referenced by ff_dct_encode_init().

static int dct_quantize_trellis_c ( MpegEncContext *  s,
int16_t *  block,
int  n,
int  qscale,
int *  overflow 
)
static

Definition at line 3640 of file mpegvideo_enc.c.

Referenced by ff_dct_encode_init().

void ff_convert_matrix ( DSPContext *  dsp,
int(*)  qmat[64],
uint16_t(*)  qmat16[2][64],
const uint16_t *  quant_matrix,
int  bias,
int  qmin,
int  qmax,
int  intra 
)

Definition at line 72 of file mpegvideo_enc.c.

Referenced by dnxhd_init_qmat(), encode_picture(), and ff_MPV_encode_init().

static void update_qscale ( MpegEncContext *  s)
inlinestatic

Definition at line 149 of file mpegvideo_enc.c.

Referenced by encode_mb_internal(), encode_picture(), and estimate_qp().

void ff_write_quant_matrix ( PutBitContext *  pb,
uint16_t *  matrix 
)

Definition at line 159 of file mpegvideo_enc.c.

Referenced by mpeg1_encode_sequence_header(), and mpeg4_encode_vol_header().

void ff_init_qscale_tab ( MpegEncContext *  s)

init s->current_picture.qscale_table from s->lambda_table

Definition at line 175 of file mpegvideo_enc.c.

Referenced by estimate_qp(), and ff_clean_h263_qscales().

static void update_duplicate_context_after_me ( MpegEncContext *  dst,
MpegEncContext *  src 
)
static

Definition at line 188 of file mpegvideo_enc.c.

Referenced by encode_picture().

static void MPV_encode_defaults ( MpegEncContext *  s)
static

Set the given MpegEncContext to defaults for encoding.

the changed fields will not depend upon the prior state of the MpegEncContext.

Definition at line 211 of file mpegvideo_enc.c.

Referenced by ff_MPV_encode_init().

av_cold int ff_dct_encode_init ( MpegEncContext *  s)

Definition at line 226 of file mpegvideo_enc.c.

Referenced by dnxhd_encode_init(), and ff_MPV_encode_init().

av_cold int ff_MPV_encode_init ( AVCodecContext *  avctx)

Definition at line 244 of file mpegvideo_enc.c.

Referenced by encode_init(), and wmv2_encode_init().

av_cold int ff_MPV_encode_end ( AVCodecContext *  avctx)

Definition at line 914 of file mpegvideo_enc.c.

Referenced by ff_MPV_encode_init(), and mpeg12_class().

static int get_sae ( uint8_t *  src,
int  ref,
int  stride 
)
static

Definition at line 952 of file mpegvideo_enc.c.

Referenced by get_intra_count().

static int get_intra_count ( MpegEncContext *  s,
uint8_t *  src,
uint8_t *  ref,
int  stride 
)
static

Definition at line 966 of file mpegvideo_enc.c.

Referenced by select_input_picture().

static int load_input_picture ( MpegEncContext *  s,
const AVFrame *  pic_arg 
)
static

Definition at line 990 of file mpegvideo_enc.c.

Referenced by ff_MPV_encode_picture().

static int skip_check ( MpegEncContext *  s,
Picture *  p,
Picture *  ref 
)
static

Definition at line 1140 of file mpegvideo_enc.c.

Referenced by select_input_picture().

static int encode_frame ( AVCodecContext *  c,
AVFrame *  frame 
)
static

Definition at line 1181 of file mpegvideo_enc.c.

static int estimate_best_b_count ( MpegEncContext *  s)
static

Definition at line 1196 of file mpegvideo_enc.c.

Referenced by select_input_picture().

static int select_input_picture ( MpegEncContext *  s)
static

Definition at line 1305 of file mpegvideo_enc.c.

Referenced by ff_MPV_encode_picture().

static void frame_end ( MpegEncContext *  s)
static
static void update_noise_reduction ( MpegEncContext *  s)
static

Definition at line 1516 of file mpegvideo_enc.c.

Referenced by frame_start().

static int frame_start ( MpegEncContext *  s)
static
int ff_MPV_encode_picture ( AVCodecContext *  avctx,
AVPacket *  pkt,
const AVFrame *  pic_arg,
int *  got_packet 
)

Definition at line 1609 of file mpegvideo_enc.c.

Referenced by amv_encode_picture(), and mpeg12_class().

static void dct_single_coeff_elimination ( MpegEncContext *  s,
int  n,
int  threshold 
)
inlinestatic

Definition at line 1821 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

static void clip_coeffs ( MpegEncContext *  s,
int16_t *  block,
int  last_index 
)
inlinestatic

Definition at line 1877 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

static void get_visual_weight ( int16_t *  weight,
uint8_t *  ptr,
int  stride 
)
static

Definition at line 1911 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

static av_always_inline void encode_mb_internal ( MpegEncContext *  s,
int  motion_x,
int  motion_y,
int  mb_block_height,
int  mb_block_width,
int  mb_block_count 
)
static

Definition at line 1935 of file mpegvideo_enc.c.

Referenced by encode_mb().

static av_always_inline void encode_mb ( MpegEncContext *  s,
int  motion_x,
int  motion_y 
)
static

Definition at line 2324 of file mpegvideo_enc.c.

Referenced by encode_mb_hq(), and encode_thread().

static void copy_context_before_encode ( MpegEncContext *  d,
MpegEncContext *  s,
int  type 
)
inlinestatic

Definition at line 2331 of file mpegvideo_enc.c.

Referenced by encode_mb_hq(), and encode_thread().

static void copy_context_after_encode ( MpegEncContext *  d,
MpegEncContext *  s,
int  type 
)
inlinestatic

Definition at line 2359 of file mpegvideo_enc.c.

Referenced by encode_mb_hq(), and encode_thread().

static void encode_mb_hq ( MpegEncContext *  s,
MpegEncContext *  backup,
MpegEncContext *  best,
int  type,
PutBitContext  pb[2],
PutBitContext  pb2[2],
PutBitContext  tex_pb[2],
int *  dmin,
int *  next_block,
int  motion_x,
int  motion_y 
)
inlinestatic

Definition at line 2398 of file mpegvideo_enc.c.

Referenced by encode_thread().

static int sse ( MpegEncContext *  s,
uint8_t *  src1,
uint8_t *  src2,
int  w,
int  h,
int  stride 
)
static

Definition at line 2449 of file mpegvideo_enc.c.

Referenced by block_sse(), encode_thread(), ff_vp9dsp_init_x86(), main(), run_psnr(), and sse_mb().

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

Definition at line 2493 of file mpegvideo_enc.c.

Referenced by encode_picture().

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

Definition at line 2512 of file mpegvideo_enc.c.

Referenced by encode_picture().

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

Definition at line 2539 of file mpegvideo_enc.c.

Referenced by encode_picture().

static void write_slice_end ( MpegEncContext *  s)
static

Definition at line 2563 of file mpegvideo_enc.c.

Referenced by encode_thread().

static void write_mb_info ( MpegEncContext *  s)
static

Definition at line 2581 of file mpegvideo_enc.c.

Referenced by update_mb_info().

static void update_mb_info ( MpegEncContext *  s,
int  startcode 
)
static

Definition at line 2601 of file mpegvideo_enc.c.

Referenced by encode_thread().

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

Definition at line 2624 of file mpegvideo_enc.c.

Referenced by encode_picture().

static void merge_context_after_me ( MpegEncContext *  dst,
MpegEncContext *  src 
)
static

Definition at line 3263 of file mpegvideo_enc.c.

Referenced by encode_picture().

static void merge_context_after_encode ( MpegEncContext *  dst,
MpegEncContext *  src 
)
static

Definition at line 3269 of file mpegvideo_enc.c.

Referenced by encode_picture().

static int estimate_qp ( MpegEncContext *  s,
int  dry_run 
)
static

Definition at line 3301 of file mpegvideo_enc.c.

Referenced by encode_picture().

static void set_frame_distances ( MpegEncContext *  s)
static

Definition at line 3338 of file mpegvideo_enc.c.

Referenced by encode_picture().

static void build_basis ( uint8_t *  perm)
static

Definition at line 3935 of file mpegvideo_enc.c.

Referenced by dct_quantize_refine().

int ff_dct_quantize_c ( MpegEncContext *  s,
int16_t *  block,
int  n,
int  qscale,
int *  overflow 
)

Definition at line 4327 of file mpegvideo_enc.c.

Referenced by dnxhd_encode_init(), encode_mb_internal(), and ff_dct_encode_init().

Variable Documentation

uint8_t default_mv_penalty[MAX_FCODE+1][MAX_MV *2+1]
static

Definition at line 64 of file mpegvideo_enc.c.

Referenced by MPV_encode_defaults().

uint8_t default_fcode_tab[MAX_MV *2+1]
static

Definition at line 65 of file mpegvideo_enc.c.

Referenced by MPV_encode_defaults().

const AVOption ff_mpv_generic_options[]
Initial value:
= {
{ NULL },
}

Definition at line 67 of file mpegvideo_enc.c.

int16_t basis[64][64]
static

Definition at line 3933 of file mpegvideo_enc.c.

Referenced by add_8x8basis_TMPL(), and try_8x8basis_TMPL().

const AVOption h263_options[]
static
Initial value:
= {
{ "obmc", "use overlapped block motion compensation.", OFFSET(obmc), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
{ "structured_slices","Write slice start position at every GOB header instead of just GOB number.", OFFSET(h263_slice_structured), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE},
{ "mb_info", "emit macroblock info for RFC 2190 packetization, the parameter value is the maximum payload size", OFFSET(mb_info), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
{ NULL },
}

Definition at line 4409 of file mpegvideo_enc.c.

const AVClass h263_class
static
Initial value:
= {
.class_name = "H.263 encoder",
.item_name = av_default_item_name,
.option = h263_options,
}

Definition at line 4417 of file mpegvideo_enc.c.

AVCodec ff_h263_encoder
Initial value:
= {
.name = "h263",
.long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996"),
.priv_data_size = sizeof(MpegEncContext),
.pix_fmts= (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE},
.priv_class = &h263_class,
}

Definition at line 4424 of file mpegvideo_enc.c.

const AVOption h263p_options[]
static
Initial value:
= {
{ "umv", "Use unlimited motion vectors.", OFFSET(umvplus), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
{ "aiv", "Use alternative inter VLC.", OFFSET(alt_inter_vlc), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
{ "obmc", "use overlapped block motion compensation.", OFFSET(obmc), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
{ "structured_slices", "Write slice start position at every GOB header instead of just GOB number.", OFFSET(h263_slice_structured), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE},
{ NULL },
}

Definition at line 4437 of file mpegvideo_enc.c.

const AVClass h263p_class
static
Initial value:
= {
.class_name = "H.263p encoder",
.item_name = av_default_item_name,
.option = h263p_options,
}

Definition at line 4445 of file mpegvideo_enc.c.

AVCodec ff_h263p_encoder
Initial value:
= {
.name = "h263p",
.long_name = NULL_IF_CONFIG_SMALL("H.263+ / H.263-1998 / H.263 version 2"),
.priv_data_size = sizeof(MpegEncContext),
.capabilities = CODEC_CAP_SLICE_THREADS,
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.priv_class = &h263p_class,
}

Definition at line 4452 of file mpegvideo_enc.c.

AVCodec ff_msmpeg4v2_encoder
Initial value:
= {
.name = "msmpeg4v2",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"),
.priv_data_size = sizeof(MpegEncContext),
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.priv_class = &msmpeg4v2_class,
}

Definition at line 4468 of file mpegvideo_enc.c.

AVCodec ff_msmpeg4v3_encoder
Initial value:
= {
.name = "msmpeg4",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"),
.priv_data_size = sizeof(MpegEncContext),
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.priv_class = &msmpeg4v3_class,
}

Definition at line 4483 of file mpegvideo_enc.c.

AVCodec ff_wmv1_encoder
Initial value:
= {
.name = "wmv1",
.long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"),
.priv_data_size = sizeof(MpegEncContext),
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.priv_class = &wmv1_class,
}

Definition at line 4498 of file mpegvideo_enc.c.