FFmpeg  4.0
Macros | Functions | Variables
mpeg4videoenc.c File Reference
#include "libavutil/attributes.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "mpegutils.h"
#include "mpegvideo.h"
#include "h263.h"
#include "mpeg4video.h"

Go to the source code of this file.

Macros

#define UNI_MPEG4_ENC_INDEX(last, run, level)   ((last) * 128 * 64 + (run) * 128 + (level))
 
#define OFFSET(x)   offsetof(MpegEncContext, x)
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static int get_block_rate (MpegEncContext *s, int16_t block[64], int block_last_index, uint8_t scantable[64])
 Return the number of bits that encoding the 8x8 block in block would need. More...
 
static void restore_ac_coeffs (MpegEncContext *s, int16_t block[6][64], const int dir[6], uint8_t *st[6], const int zigzag_last_index[6])
 Restore the ac coefficients in block that have been changed by decide_ac_pred(). More...
 
static int decide_ac_pred (MpegEncContext *s, int16_t block[6][64], const int dir[6], uint8_t *st[6], int zigzag_last_index[6])
 Return the optimal value (0 or 1) for the ac_pred element for the given MB in MPEG-4. More...
 
void ff_clean_mpeg4_qscales (MpegEncContext *s)
 modify mb_type & qscale so that encoding is actually possible in MPEG-4 More...
 
static void mpeg4_encode_dc (PutBitContext *s, int level, int n)
 Encode the dc value. More...
 
static int mpeg4_get_dc_length (int level, int n)
 
static void mpeg4_encode_block (MpegEncContext *s, int16_t *block, int n, int intra_dc, uint8_t *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
 Encode an 8x8 block. More...
 
static int mpeg4_get_block_length (MpegEncContext *s, int16_t *block, int n, int intra_dc, uint8_t *scan_table)
 
static void mpeg4_encode_blocks (MpegEncContext *s, int16_t block[6][64], int intra_dc[6], uint8_t **scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
 
static int get_b_cbp (MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y, int mb_type)
 
void ff_mpeg4_encode_mb (MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
 
void ff_mpeg4_stuffing (PutBitContext *pbc)
 add MPEG-4 stuffing bits (01...1) More...
 
void ff_set_mpeg4_time (MpegEncContext *s)
 
static void mpeg4_encode_gop_header (MpegEncContext *s)
 
static void mpeg4_encode_visual_object_header (MpegEncContext *s)
 
static void mpeg4_encode_vol_header (MpegEncContext *s, int vo_number, int vol_number)
 
int ff_mpeg4_encode_picture_header (MpegEncContext *s, int picture_number)
 
static av_cold void init_uni_dc_tab (void)
 
static av_cold void init_uni_mpeg4_rl_tab (RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab)
 
static av_cold int encode_init (AVCodecContext *avctx)
 
void ff_mpeg4_init_partitions (MpegEncContext *s)
 
void ff_mpeg4_merge_partitions (MpegEncContext *s)
 
void ff_mpeg4_encode_video_packet_header (MpegEncContext *s)
 

Variables

static uint8_t uni_DCtab_lum_len [512]
 
static uint8_t uni_DCtab_chrom_len [512]
 
static uint16_t uni_DCtab_lum_bits [512]
 
static uint16_t uni_DCtab_chrom_bits [512]
 
static uint32_t uni_mpeg4_intra_rl_bits [64 *64 *2 *2]
 
static uint8_t uni_mpeg4_intra_rl_len [64 *64 *2 *2]
 
static uint32_t uni_mpeg4_inter_rl_bits [64 *64 *2 *2]
 
static uint8_t uni_mpeg4_inter_rl_len [64 *64 *2 *2]
 
static const int dquant_code [5] = { 1, 0, 9, 2, 3 }
 
static const AVOption options []
 
static const AVClass mpeg4enc_class
 
AVCodec ff_mpeg4_encoder
 

Macro Definition Documentation

◆ UNI_MPEG4_ENC_INDEX

#define UNI_MPEG4_ENC_INDEX (   last,
  run,
  level 
)    ((last) * 128 * 64 + (run) * 128 + (level))

◆ OFFSET

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

Definition at line 1373 of file mpeg4videoenc.c.

◆ VE

Definition at line 1374 of file mpeg4videoenc.c.

Function Documentation

◆ get_block_rate()

static int get_block_rate ( MpegEncContext s,
int16_t  block[64],
int  block_last_index,
uint8_t  scantable[64] 
)
inlinestatic

Return the number of bits that encoding the 8x8 block in block would need.

Parameters
[in]block_last_indexlast index in scantable order that refers to a non zero element in block.

Definition at line 64 of file mpeg4videoenc.c.

Referenced by decide_ac_pred().

◆ restore_ac_coeffs()

static void restore_ac_coeffs ( MpegEncContext s,
int16_t  block[6][64],
const int  dir[6],
uint8_t st[6],
const int  zigzag_last_index[6] 
)
inlinestatic

Restore the ac coefficients in block that have been changed by decide_ac_pred().

This function also restores s->block_last_index.

Parameters
[in,out]blockMB coefficients, these will be restored
[in]dirac prediction direction for each 8x8 block
[out]stscantable for each 8x8 block
[in]zigzag_last_indexindex referring to the last non zero coefficient in zigzag order

Definition at line 99 of file mpeg4videoenc.c.

Referenced by decide_ac_pred(), and ff_mpeg4_encode_mb().

◆ decide_ac_pred()

static int decide_ac_pred ( MpegEncContext s,
int16_t  block[6][64],
const int  dir[6],
uint8_t st[6],
int  zigzag_last_index[6] 
)
inlinestatic

Return the optimal value (0 or 1) for the ac_pred element for the given MB in MPEG-4.

This function will also update s->block_last_index and s->ac_val.

Parameters
[in,out]blockMB coefficients, these will be updated if 1 is returned
[in]dirac prediction direction for each 8x8 block
[out]stscantable for each 8x8 block
[out]zigzag_last_indexindex referring to the last non zero coefficient in zigzag order

Definition at line 130 of file mpeg4videoenc.c.

Referenced by ff_mpeg4_encode_mb().

◆ ff_clean_mpeg4_qscales()

void ff_clean_mpeg4_qscales ( MpegEncContext s)

modify mb_type & qscale so that encoding is actually possible in MPEG-4

Definition at line 213 of file mpeg4videoenc.c.

Referenced by estimate_qp().

◆ mpeg4_encode_dc()

static void mpeg4_encode_dc ( PutBitContext s,
int  level,
int  n 
)
inlinestatic

Encode the dc value.

Parameters
nblock index (0-3 are luma, 4-5 are chroma)

Definition at line 257 of file mpeg4videoenc.c.

Referenced by mpeg4_encode_block().

◆ mpeg4_get_dc_length()

static int mpeg4_get_dc_length ( int  level,
int  n 
)
inlinestatic

Definition at line 270 of file mpeg4videoenc.c.

Referenced by mpeg4_get_block_length().

◆ mpeg4_encode_block()

static void mpeg4_encode_block ( MpegEncContext s,
int16_t *  block,
int  n,
int  intra_dc,
uint8_t scan_table,
PutBitContext dc_pb,
PutBitContext ac_pb 
)
inlinestatic

Encode an 8x8 block.

Parameters
nblock index (0-3 are luma, 4-5 are chroma)

Definition at line 282 of file mpeg4videoenc.c.

Referenced by mpeg4_encode_blocks().

◆ mpeg4_get_block_length()

static int mpeg4_get_block_length ( MpegEncContext s,
int16_t *  block,
int  n,
int  intra_dc,
uint8_t scan_table 
)
static

Definition at line 343 of file mpeg4videoenc.c.

Referenced by mpeg4_encode_blocks().

◆ mpeg4_encode_blocks()

static void mpeg4_encode_blocks ( MpegEncContext s,
int16_t  block[6][64],
int  intra_dc[6],
uint8_t **  scan_table,
PutBitContext dc_pb,
PutBitContext ac_pb 
)
inlinestatic

Definition at line 397 of file mpeg4videoenc.c.

Referenced by ff_mpeg4_encode_mb().

◆ get_b_cbp()

static int get_b_cbp ( MpegEncContext s,
int16_t  block[6][64],
int  motion_x,
int  motion_y,
int  mb_type 
)
inlinestatic

Definition at line 431 of file mpeg4videoenc.c.

Referenced by ff_mpeg4_encode_mb().

◆ ff_mpeg4_encode_mb()

void ff_mpeg4_encode_mb ( MpegEncContext s,
int16_t  block[6][64],
int  motion_x,
int  motion_y 
)

Definition at line 475 of file mpeg4videoenc.c.

Referenced by encode_mb_internal().

◆ ff_mpeg4_stuffing()

void ff_mpeg4_stuffing ( PutBitContext pbc)

add MPEG-4 stuffing bits (01...1)

Definition at line 863 of file mpeg4videoenc.c.

Referenced by mpeg4_encode_gop_header(), mpeg4_encode_visual_object_header(), mpeg4_encode_vol_header(), and write_slice_end().

◆ ff_set_mpeg4_time()

void ff_set_mpeg4_time ( MpegEncContext s)

Definition at line 873 of file mpeg4videoenc.c.

Referenced by encode_picture().

◆ mpeg4_encode_gop_header()

static void mpeg4_encode_gop_header ( MpegEncContext s)
static

Definition at line 883 of file mpeg4videoenc.c.

Referenced by ff_mpeg4_encode_picture_header().

◆ mpeg4_encode_visual_object_header()

static void mpeg4_encode_visual_object_header ( MpegEncContext s)
static

Definition at line 913 of file mpeg4videoenc.c.

Referenced by encode_init(), and ff_mpeg4_encode_picture_header().

◆ mpeg4_encode_vol_header()

static void mpeg4_encode_vol_header ( MpegEncContext s,
int  vo_number,
int  vol_number 
)
static

Definition at line 957 of file mpeg4videoenc.c.

Referenced by encode_init(), and ff_mpeg4_encode_picture_header().

◆ ff_mpeg4_encode_picture_header()

int ff_mpeg4_encode_picture_header ( MpegEncContext s,
int  picture_number 
)

Definition at line 1061 of file mpeg4videoenc.c.

Referenced by encode_picture().

◆ init_uni_dc_tab()

static av_cold void init_uni_dc_tab ( void  )
static

Definition at line 1121 of file mpeg4videoenc.c.

Referenced by encode_init().

◆ init_uni_mpeg4_rl_tab()

static av_cold void init_uni_mpeg4_rl_tab ( RLTable rl,
uint32_t *  bits_tab,
uint8_t len_tab 
)
static

Definition at line 1176 of file mpeg4videoenc.c.

Referenced by encode_init().

◆ encode_init()

static av_cold int encode_init ( AVCodecContext avctx)
static

Definition at line 1271 of file mpeg4videoenc.c.

◆ ff_mpeg4_init_partitions()

void ff_mpeg4_init_partitions ( MpegEncContext s)

Definition at line 1322 of file mpeg4videoenc.c.

Referenced by encode_thread().

◆ ff_mpeg4_merge_partitions()

void ff_mpeg4_merge_partitions ( MpegEncContext s)

Definition at line 1335 of file mpeg4videoenc.c.

Referenced by write_slice_end().

◆ ff_mpeg4_encode_video_packet_header()

void ff_mpeg4_encode_video_packet_header ( MpegEncContext s)

Definition at line 1361 of file mpeg4videoenc.c.

Referenced by encode_thread().

Variable Documentation

◆ uni_DCtab_lum_len

uint8_t uni_DCtab_lum_len[512]
static

Definition at line 34 of file mpeg4videoenc.c.

Referenced by encode_init(), init_uni_dc_tab(), mpeg4_encode_dc(), and mpeg4_get_dc_length().

◆ uni_DCtab_chrom_len

uint8_t uni_DCtab_chrom_len[512]
static

Definition at line 35 of file mpeg4videoenc.c.

Referenced by init_uni_dc_tab(), mpeg4_encode_dc(), and mpeg4_get_dc_length().

◆ uni_DCtab_lum_bits

uint16_t uni_DCtab_lum_bits[512]
static

Definition at line 36 of file mpeg4videoenc.c.

Referenced by init_uni_dc_tab(), and mpeg4_encode_dc().

◆ uni_DCtab_chrom_bits

uint16_t uni_DCtab_chrom_bits[512]
static

Definition at line 37 of file mpeg4videoenc.c.

Referenced by init_uni_dc_tab(), and mpeg4_encode_dc().

◆ uni_mpeg4_intra_rl_bits

uint32_t uni_mpeg4_intra_rl_bits[64 *64 *2 *2]
static

Definition at line 41 of file mpeg4videoenc.c.

Referenced by encode_init(), and mpeg4_encode_block().

◆ uni_mpeg4_intra_rl_len

uint8_t uni_mpeg4_intra_rl_len[64 *64 *2 *2]
static

Definition at line 42 of file mpeg4videoenc.c.

Referenced by encode_init(), mpeg4_encode_block(), and mpeg4_get_block_length().

◆ uni_mpeg4_inter_rl_bits

uint32_t uni_mpeg4_inter_rl_bits[64 *64 *2 *2]
static

Definition at line 43 of file mpeg4videoenc.c.

Referenced by encode_init(), and mpeg4_encode_block().

◆ uni_mpeg4_inter_rl_len

uint8_t uni_mpeg4_inter_rl_len[64 *64 *2 *2]
static

Definition at line 44 of file mpeg4videoenc.c.

Referenced by encode_init(), mpeg4_encode_block(), and mpeg4_get_block_length().

◆ dquant_code

const int dquant_code[5] = { 1, 0, 9, 2, 3 }
static

Definition at line 473 of file mpeg4videoenc.c.

Referenced by ff_mpeg4_encode_mb().

◆ options

const AVOption options[]
static
Initial value:
= {
{ "data_partitioning", "Use data partitioning.", OFFSET(data_partitioning), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
{ "alternate_scan", "Enable alternate scantable.", OFFSET(alternate_scan), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
{ NULL },
}
#define NULL
Definition: coverity.c:32
#define FF_MPV_COMMON_OPTS
Definition: mpegvideo.h:617
#define VE
#define OFFSET(x)

Definition at line 1375 of file mpeg4videoenc.c.

◆ mpeg4enc_class

const AVClass mpeg4enc_class
static
Initial value:
= {
.class_name = "MPEG4 encoder",
.item_name = av_default_item_name,
.option = options,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
static const AVOption options[]

Definition at line 1382 of file mpeg4videoenc.c.

◆ ff_mpeg4_encoder

AVCodec ff_mpeg4_encoder
Initial value:
= {
.name = "mpeg4",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),
.priv_data_size = sizeof(MpegEncContext),
.priv_class = &mpeg4enc_class,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: avcodec.h:984
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static const AVClass mpeg4enc_class
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:1019
static av_cold int encode_init(AVCodecContext *avctx)
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:266
MpegEncContext.
Definition: mpegvideo.h:81
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:62
int ff_mpv_encode_end(AVCodecContext *avctx)
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
AVPixelFormat
Pixel format.
Definition: pixfmt.h:60

Definition at line 1389 of file mpeg4videoenc.c.