FFmpeg
Macros | Functions | Variables
mpegvideo_enc.c File Reference
#include "config_components.h"
#include <stdint.h>
#include "libavutil/emms.h"
#include "libavutil/internal.h"
#include "libavutil/intmath.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavutil/mem_internal.h"
#include "libavutil/opt.h"
#include "libavutil/thread.h"
#include "avcodec.h"
#include "encode.h"
#include "idctdsp.h"
#include "mpeg12codecs.h"
#include "mpeg12data.h"
#include "mpeg12enc.h"
#include "mpegvideo.h"
#include "mpegvideodata.h"
#include "mpegvideoenc.h"
#include "h261enc.h"
#include "h263.h"
#include "h263data.h"
#include "h263enc.h"
#include "mjpegenc_common.h"
#include "mathops.h"
#include "mpegutils.h"
#include "mjpegenc.h"
#include "speedhqenc.h"
#include "msmpeg4enc.h"
#include "pixblockdsp.h"
#include "qpeldsp.h"
#include "faandct.h"
#include "aandcttab.h"
#include "flvenc.h"
#include "mpeg4video.h"
#include "mpeg4videodata.h"
#include "mpeg4videoenc.h"
#include "internal.h"
#include "bytestream.h"
#include "wmv2enc.h"
#include "rv10enc.h"
#include "packet_internal.h"
#include <limits.h>
#include "sp5x.h"
#include "mpv_reconstruct_mb_template.c"

Go to the source code of this file.

Macros

#define QUANT_BIAS_SHIFT   8
 
#define QMAT_SHIFT_MMX   16
 
#define QMAT_SHIFT   21
 
#define COPY(a)   dst->a= src->a
 
#define ALLOCZ_ARRAYS(p, mult, numb)   ((p) = av_calloc(numb, mult * sizeof(*(p))))
 
#define IS_ENCODER   1
 
#define INTERLACED_DCT(s)
 
#define MERGE(field)   dst->field += src->field; src->field=0
 

Functions

static int encode_picture (MpegEncContext *s)
 
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 (MpegEncContext *s, 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 More...
 
static void update_duplicate_context_after_me (MpegEncContext *dst, const MpegEncContext *src)
 
static void mpv_encode_init_static (void)
 
static void mpv_encode_defaults (MpegEncContext *s)
 Set the given MpegEncContext to defaults for encoding. More...
 
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 void mpv_reconstruct_mb (MpegEncContext *s, int16_t block[12][64])
 
static int get_sae (const uint8_t *src, int ref, int stride)
 
static int get_intra_count (MpegEncContext *s, const uint8_t *src, const uint8_t *ref, int stride)
 
static int alloc_picture (MpegEncContext *s, Picture *pic)
 
static int load_input_picture (MpegEncContext *s, const AVFrame *pic_arg)
 
static int skip_check (MpegEncContext *s, const Picture *p, const Picture *ref)
 
static int encode_frame (AVCodecContext *c, const AVFrame *frame, AVPacket *pkt)
 
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, const 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, int chroma_x_shift, int chroma_y_shift, int chroma_format)
 
static av_always_inline void encode_mb (MpegEncContext *s, int motion_x, int motion_y)
 
static void copy_context_before_encode (MpegEncContext *d, const MpegEncContext *s)
 
static void copy_context_after_encode (MpegEncContext *d, const MpegEncContext *s)
 
static void encode_mb_hq (MpegEncContext *s, MpegEncContext *backup, MpegEncContext *best, 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, const uint8_t *src1, const 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)
 
int ff_mpv_reallocate_putbitbuffer (MpegEncContext *s, size_t threshold, size_t size_increase)
 
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)
 
void ff_block_permute (int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last)
 Permute an 8x8 block according to permutation. More...
 
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_DMV *2+1]
 
static uint8_t default_fcode_tab [MAX_MV *2+1]
 
static const AVOption mpv_generic_options []
 
const AVClass ff_mpv_enc_class
 
static int16_t basis [64][64]
 

Detailed Description

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

Definition in file mpegvideo_enc.c.

Macro Definition Documentation

◆ QUANT_BIAS_SHIFT

#define QUANT_BIAS_SHIFT   8

Definition at line 81 of file mpegvideo_enc.c.

◆ QMAT_SHIFT_MMX

#define QMAT_SHIFT_MMX   16

Definition at line 83 of file mpegvideo_enc.c.

◆ QMAT_SHIFT

#define QMAT_SHIFT   21

Definition at line 84 of file mpegvideo_enc.c.

◆ COPY

#define COPY (   a)    dst->a= src->a

◆ ALLOCZ_ARRAYS

#define ALLOCZ_ARRAYS (   p,
  mult,
  numb 
)    ((p) = av_calloc(numb, mult * sizeof(*(p))))

◆ IS_ENCODER

#define IS_ENCODER   1

Definition at line 1037 of file mpegvideo_enc.c.

◆ INTERLACED_DCT

#define INTERLACED_DCT (   s)
Value:
((chroma_format == CHROMA_420 || chroma_format == CHROMA_422) && \
(s)->avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT)

◆ MERGE

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

Definition at line 3491 of file mpegvideo_enc.c.

Function Documentation

◆ encode_picture()

static int encode_picture ( MpegEncContext s)
static

Definition at line 3578 of file mpegvideo_enc.c.

Referenced by ff_mpv_encode_picture().

◆ dct_quantize_refine()

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

Definition at line 4217 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

◆ sse_mb()

static int sse_mb ( MpegEncContext s)
static

Definition at line 2657 of file mpegvideo_enc.c.

Referenced by encode_mb_hq().

◆ denoise_dct_c()

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

Definition at line 3859 of file mpegvideo_enc.c.

Referenced by ff_dct_encode_init().

◆ dct_quantize_trellis_c()

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

Definition at line 3883 of file mpegvideo_enc.c.

Referenced by ff_dct_encode_init().

◆ ff_convert_matrix()

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

Definition at line 108 of file mpegvideo_enc.c.

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

◆ update_qscale()

static void update_qscale ( MpegEncContext s)
inlinestatic

Definition at line 192 of file mpegvideo_enc.c.

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

◆ ff_write_quant_matrix()

void ff_write_quant_matrix ( PutBitContext pb,
uint16_t *  matrix 
)

Definition at line 220 of file mpegvideo_enc.c.

Referenced by mpeg4_encode_vol_header().

◆ ff_init_qscale_tab()

void ff_init_qscale_tab ( MpegEncContext s)

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

Definition at line 236 of file mpegvideo_enc.c.

Referenced by estimate_qp(), and ff_clean_h263_qscales().

◆ update_duplicate_context_after_me()

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

Definition at line 249 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ mpv_encode_init_static()

static void mpv_encode_init_static ( void  )
static

Definition at line 265 of file mpegvideo_enc.c.

Referenced by mpv_encode_defaults().

◆ mpv_encode_defaults()

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 275 of file mpegvideo_enc.c.

Referenced by ff_mpv_encode_init().

◆ ff_dct_encode_init()

av_cold int ff_dct_encode_init ( MpegEncContext s)

Definition at line 290 of file mpegvideo_enc.c.

Referenced by dnxhd_encode_init(), and ff_mpv_encode_init().

◆ ff_mpv_encode_init()

av_cold int ff_mpv_encode_init ( AVCodecContext avctx)

Definition at line 310 of file mpegvideo_enc.c.

Referenced by encode_init(), and wmv2_encode_init().

◆ ff_mpv_encode_end()

av_cold int ff_mpv_encode_end ( AVCodecContext avctx)

Definition at line 987 of file mpegvideo_enc.c.

Referenced by mjpeg_encode_close().

◆ mpv_reconstruct_mb()

static void mpv_reconstruct_mb ( MpegEncContext s,
int16_t  block[12][64] 
)
static

Definition at line 1040 of file mpegvideo_enc.c.

Referenced by encode_mb_hq(), and encode_thread().

◆ get_sae()

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

Definition at line 1057 of file mpegvideo_enc.c.

Referenced by get_intra_count().

◆ get_intra_count()

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

Definition at line 1071 of file mpegvideo_enc.c.

Referenced by select_input_picture().

◆ alloc_picture()

static int alloc_picture ( MpegEncContext s,
Picture pic 
)
static

Definition at line 1094 of file mpegvideo_enc.c.

Referenced by load_input_picture(), and select_input_picture().

◆ load_input_picture()

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

Definition at line 1120 of file mpegvideo_enc.c.

Referenced by ff_mpv_encode_picture().

◆ skip_check()

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

Definition at line 1261 of file mpegvideo_enc.c.

Referenced by select_input_picture().

◆ encode_frame()

static int encode_frame ( AVCodecContext c,
const AVFrame frame,
AVPacket pkt 
)
static

Definition at line 1302 of file mpegvideo_enc.c.

Referenced by estimate_best_b_count().

◆ estimate_best_b_count()

static int estimate_best_b_count ( MpegEncContext s)
static

Definition at line 1323 of file mpegvideo_enc.c.

Referenced by select_input_picture().

◆ select_input_picture()

static int select_input_picture ( MpegEncContext s)
static

Definition at line 1468 of file mpegvideo_enc.c.

Referenced by ff_mpv_encode_picture().

◆ frame_end()

static void frame_end ( MpegEncContext s)
static

Definition at line 1651 of file mpegvideo_enc.c.

Referenced by ff_mpv_encode_picture().

◆ update_noise_reduction()

static void update_noise_reduction ( MpegEncContext s)
static

Definition at line 1687 of file mpegvideo_enc.c.

Referenced by frame_start().

◆ frame_start()

static int frame_start ( MpegEncContext s)
static

◆ ff_mpv_encode_picture()

int ff_mpv_encode_picture ( AVCodecContext avctx,
AVPacket pkt,
const AVFrame pic_arg,
int got_packet 
)

Definition at line 1754 of file mpegvideo_enc.c.

◆ dct_single_coeff_elimination()

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

Definition at line 2003 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

◆ clip_coeffs()

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

Definition at line 2059 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

◆ get_visual_weight()

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

Definition at line 2093 of file mpegvideo_enc.c.

Referenced by encode_mb_internal().

◆ 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,
int  chroma_x_shift,
int  chroma_y_shift,
int  chroma_format 
)
static

Definition at line 2117 of file mpegvideo_enc.c.

Referenced by encode_mb().

◆ encode_mb()

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

Definition at line 2508 of file mpegvideo_enc.c.

Referenced by encode_mb_hq(), and encode_thread().

◆ copy_context_before_encode()

static void copy_context_before_encode ( MpegEncContext d,
const MpegEncContext s 
)
inlinestatic

Definition at line 2518 of file mpegvideo_enc.c.

Referenced by encode_mb_hq(), and encode_thread().

◆ copy_context_after_encode()

static void copy_context_after_encode ( MpegEncContext d,
const MpegEncContext s 
)
inlinestatic

Definition at line 2546 of file mpegvideo_enc.c.

Referenced by encode_mb_hq(), and encode_thread().

◆ encode_mb_hq()

static void encode_mb_hq ( MpegEncContext s,
MpegEncContext backup,
MpegEncContext best,
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 2585 of file mpegvideo_enc.c.

Referenced by encode_thread().

◆ sse()

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

◆ pre_estimate_motion_thread()

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

Definition at line 2691 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ estimate_motion_thread()

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

Definition at line 2710 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ mb_var_thread()

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

Definition at line 2735 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ write_slice_end()

static void write_slice_end ( MpegEncContext s)
static

Definition at line 2758 of file mpegvideo_enc.c.

Referenced by encode_thread().

◆ write_mb_info()

static void write_mb_info ( MpegEncContext s)
static

Definition at line 2778 of file mpegvideo_enc.c.

Referenced by update_mb_info().

◆ update_mb_info()

static void update_mb_info ( MpegEncContext s,
int  startcode 
)
static

Definition at line 2798 of file mpegvideo_enc.c.

Referenced by encode_thread().

◆ ff_mpv_reallocate_putbitbuffer()

int ff_mpv_reallocate_putbitbuffer ( MpegEncContext s,
size_t  threshold,
size_t  size_increase 
)

Definition at line 2821 of file mpegvideo_enc.c.

Referenced by encode_thread(), and ff_mjpeg_encode_stuffing().

◆ encode_thread()

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

Definition at line 2855 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ merge_context_after_me()

static void merge_context_after_me ( MpegEncContext dst,
MpegEncContext src 
)
static

Definition at line 3492 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ merge_context_after_encode()

static void merge_context_after_encode ( MpegEncContext dst,
MpegEncContext src 
)
static

Definition at line 3498 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ estimate_qp()

static int estimate_qp ( MpegEncContext s,
int  dry_run 
)
static

Definition at line 3526 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ set_frame_distances()

static void set_frame_distances ( MpegEncContext s)
static

Definition at line 3564 of file mpegvideo_enc.c.

Referenced by encode_picture().

◆ build_basis()

static void build_basis ( uint8_t *  perm)
static

Definition at line 4198 of file mpegvideo_enc.c.

Referenced by dct_quantize_refine().

◆ ff_block_permute()

void ff_block_permute ( int16_t *  block,
uint8_t *  permutation,
const uint8_t *  scantable,
int  last 
)

Permute an 8x8 block according to permutation.

Parameters
blockthe block which will be permuted according to the given permutation vector
permutationthe permutation vector
lastthe last non zero coefficient in scantable order, used to speed the permutation up
scantablethe used scantable, this is only used to speed the permutation up, the block is not (inverse) permutated to scantable order!

Definition at line 4544 of file mpegvideo_enc.c.

Referenced by dnxhd_10bit_dct_quantize(), dnxhd_10bit_dct_quantize_444(), and ff_dct_quantize_c().

◆ ff_dct_quantize_c()

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

Definition at line 4569 of file mpegvideo_enc.c.

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

Variable Documentation

◆ default_mv_penalty

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

Definition at line 92 of file mpegvideo_enc.c.

Referenced by mpv_encode_defaults().

◆ default_fcode_tab

uint8_t default_fcode_tab[MAX_MV *2+1]
static

Definition at line 93 of file mpegvideo_enc.c.

Referenced by mpv_encode_defaults(), and mpv_encode_init_static().

◆ mpv_generic_options

const AVOption mpv_generic_options[]
static
Initial value:

Definition at line 95 of file mpegvideo_enc.c.

◆ ff_mpv_enc_class

const AVClass ff_mpv_enc_class
Initial value:
= {
.class_name = "generic mpegvideo encoder",
.item_name = av_default_item_name,
}

Definition at line 101 of file mpegvideo_enc.c.

◆ basis

int16_t basis[64][64]
static
FF_MPV_COMMON_MOTION_EST_OPTS
#define FF_MPV_COMMON_MOTION_EST_OPTS
Definition: mpegvideoenc.h:127
FF_MPV_COMMON_OPTS
#define FF_MPV_COMMON_OPTS
Definition: mpegvideoenc.h:84
AV_CODEC_FLAG_INTERLACED_DCT
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
Definition: avcodec.h:330
s
#define s(width, name)
Definition: cbs_vp9.c:198
CHROMA_422
#define CHROMA_422
Definition: mpegvideo.h:456
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
mpv_generic_options
static const AVOption mpv_generic_options[]
Definition: mpegvideo_enc.c:95
CHROMA_420
#define CHROMA_420
Definition: mpegvideo.h:455