FFmpeg  4.0
Macros | Functions | Variables
mpeg12enc.c File Reference

MPEG-1/2 encoder. More...

#include <stdint.h>
#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/timecode.h"
#include "libavutil/stereo3d.h"
#include "avcodec.h"
#include "bytestream.h"
#include "mathops.h"
#include "mpeg12.h"
#include "mpeg12data.h"
#include "mpegutils.h"
#include "mpegvideo.h"

Go to the source code of this file.

Macros

#define OFFSET(x)   offsetof(MpegEncContext, x)
 
#define VE   AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
 
#define COMMON_OPTS
 
#define mpeg12_class(x)
 

Functions

static av_cold void init_uni_ac_vlc (RLTable *rl, uint8_t *uni_ac_vlc_len)
 
static int find_frame_rate_index (MpegEncContext *s)
 
static av_cold int encode_init (AVCodecContext *avctx)
 
static void put_header (MpegEncContext *s, int header)
 
static void mpeg1_encode_sequence_header (MpegEncContext *s)
 
static void encode_mb_skip_run (MpegEncContext *s, int run)
 
static av_always_inline void put_qscale (MpegEncContext *s)
 
void ff_mpeg1_encode_slice_header (MpegEncContext *s)
 
void ff_mpeg1_encode_picture_header (MpegEncContext *s, int picture_number)
 
static void put_mb_modes (MpegEncContext *s, int n, int bits, int has_mv, int field_motion)
 
static void mpeg1_encode_motion (MpegEncContext *s, int val, int f_or_b_code)
 
static void encode_dc (MpegEncContext *s, int diff, int component)
 
static void mpeg1_encode_block (MpegEncContext *s, int16_t *block, int n)
 
static av_always_inline void mpeg1_encode_mb_internal (MpegEncContext *s, int16_t block[8][64], int motion_x, int motion_y, int mb_block_count)
 
void ff_mpeg1_encode_mb (MpegEncContext *s, int16_t block[8][64], int motion_x, int motion_y)
 
av_cold void ff_mpeg1_encode_init (MpegEncContext *s)
 
 mpeg12_class (1)
 

Variables

static const uint8_t svcd_scan_offset_placeholder []
 
static uint8_t mv_penalty [MAX_FCODE+1][MAX_DMV *2+1]
 
static uint8_t fcode_tab [MAX_MV *2+1]
 
static uint8_t uni_mpeg1_ac_vlc_len [64 *64 *2]
 
static uint8_t uni_mpeg2_ac_vlc_len [64 *64 *2]
 
static uint32_t mpeg1_lum_dc_uni [512]
 
static uint32_t mpeg1_chr_dc_uni [512]
 
static uint8_t mpeg1_index_run [2][64]
 
static int8_t mpeg1_max_level [2][64]
 
static const AVOption mpeg1_options []
 
static const AVOption mpeg2_options []
 
AVCodec ff_mpeg2video_encoder
 

Detailed Description

MPEG-1/2 encoder.

Definition in file mpeg12enc.c.

Macro Definition Documentation

◆ OFFSET

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

Definition at line 1101 of file mpeg12enc.c.

◆ VE

Definition at line 1102 of file mpeg12enc.c.

◆ COMMON_OPTS

#define COMMON_OPTS
Value:
{ "gop_timecode", "MPEG GOP Timecode in hh:mm:ss[:;.]ff format. Overrides timecode_frame_start.", \
OFFSET(tc_opt_str), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX, VE },\
{ "intra_vlc", "Use MPEG-2 intra VLC table.", \
OFFSET(intra_vlc_format), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, \
{ "drop_frame_timecode", "Timecode is in drop frame format.", \
OFFSET(drop_frame_timecode), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, \
{ "scan_offset", "Reserve space for SVCD scan offset user data.", \
OFFSET(scan_offset), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, \
{ "timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", \
OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, VE}, \
#define NULL
Definition: coverity.c:32
#define VE
Definition: mpeg12enc.c:1102

Definition at line 1103 of file mpeg12enc.c.

◆ mpeg12_class

#define mpeg12_class (   x)
Value:
static const AVClass mpeg ## x ## _class = { \
.class_name = "mpeg" # x "video encoder", \
.item_name = av_default_item_name, \
.option = mpeg ## x ## _options, \
.version = LIBAVUTIL_VERSION_INT, \
};
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:72
Describe the class of an AVClass context structure.
Definition: log.h:67

Definition at line 1140 of file mpeg12enc.c.

Function Documentation

◆ init_uni_ac_vlc()

static av_cold void init_uni_ac_vlc ( RLTable rl,
uint8_t uni_ac_vlc_len 
)
static

Definition at line 64 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_init().

◆ find_frame_rate_index()

static int find_frame_rate_index ( MpegEncContext s)
static

Definition at line 99 of file mpeg12enc.c.

Referenced by encode_init().

◆ encode_init()

static av_cold int encode_init ( AVCodecContext avctx)
static

Definition at line 138 of file mpeg12enc.c.

Referenced by mpeg12_class().

◆ put_header()

static void put_header ( MpegEncContext s,
int  header 
)
static

◆ mpeg1_encode_sequence_header()

static void mpeg1_encode_sequence_header ( MpegEncContext s)
static

Definition at line 238 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_picture_header().

◆ encode_mb_skip_run()

static void encode_mb_skip_run ( MpegEncContext s,
int  run 
)
inlinestatic

Definition at line 393 of file mpeg12enc.c.

Referenced by mpeg1_encode_mb_internal().

◆ put_qscale()

static av_always_inline void put_qscale ( MpegEncContext s)
static

Definition at line 403 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_slice_header(), and mpeg1_encode_mb_internal().

◆ ff_mpeg1_encode_slice_header()

void ff_mpeg1_encode_slice_header ( MpegEncContext s)

Definition at line 408 of file mpeg12enc.c.

Referenced by decode_dc(), encode_thread(), and ff_mpeg1_encode_picture_header().

◆ ff_mpeg1_encode_picture_header()

void ff_mpeg1_encode_picture_header ( MpegEncContext s,
int  picture_number 
)

Definition at line 422 of file mpeg12enc.c.

Referenced by decode_dc(), and encode_picture().

◆ put_mb_modes()

static void put_mb_modes ( MpegEncContext s,
int  n,
int  bits,
int  has_mv,
int  field_motion 
)
inlinestatic

Definition at line 551 of file mpeg12enc.c.

Referenced by mpeg1_encode_mb_internal().

◆ mpeg1_encode_motion()

static void mpeg1_encode_motion ( MpegEncContext s,
int  val,
int  f_or_b_code 
)
static

Definition at line 564 of file mpeg12enc.c.

Referenced by mpeg1_encode_mb_internal().

◆ encode_dc()

static void encode_dc ( MpegEncContext s,
int  diff,
int  component 
)
inlinestatic

Definition at line 603 of file mpeg12enc.c.

Referenced by mpeg1_encode_block().

◆ mpeg1_encode_block()

static void mpeg1_encode_block ( MpegEncContext s,
int16_t *  block,
int  n 
)
static

Definition at line 637 of file mpeg12enc.c.

Referenced by mpeg1_encode_mb_internal().

◆ mpeg1_encode_mb_internal()

static av_always_inline void mpeg1_encode_mb_internal ( MpegEncContext s,
int16_t  block[8][64],
int  motion_x,
int  motion_y,
int  mb_block_count 
)
static

Definition at line 716 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_mb().

◆ ff_mpeg1_encode_mb()

void ff_mpeg1_encode_mb ( MpegEncContext s,
int16_t  block[8][64],
int  motion_x,
int  motion_y 
)

Definition at line 994 of file mpeg12enc.c.

Referenced by decode_dc(), and encode_mb_internal().

◆ ff_mpeg1_encode_init()

av_cold void ff_mpeg1_encode_init ( MpegEncContext s)

Definition at line 1003 of file mpeg12enc.c.

Referenced by decode_dc(), and ff_mpv_encode_init().

◆ mpeg12_class()

mpeg12_class ( )

Definition at line 1148 of file mpeg12enc.c.

Variable Documentation

◆ svcd_scan_offset_placeholder

const uint8_t svcd_scan_offset_placeholder[]
static
Initial value:
= {
0x10, 0x0E, 0x00, 0x80, 0x81, 0x00, 0x80,
0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
}

Definition at line 45 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_picture_header().

◆ mv_penalty

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

Definition at line 50 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_init().

◆ fcode_tab

uint8_t fcode_tab[MAX_MV *2+1]
static

Definition at line 51 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_init().

◆ uni_mpeg1_ac_vlc_len

uint8_t uni_mpeg1_ac_vlc_len[64 *64 *2]
static

Definition at line 53 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_init().

◆ uni_mpeg2_ac_vlc_len

uint8_t uni_mpeg2_ac_vlc_len[64 *64 *2]
static

Definition at line 54 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_init().

◆ mpeg1_lum_dc_uni

uint32_t mpeg1_lum_dc_uni[512]
static

Definition at line 58 of file mpeg12enc.c.

Referenced by encode_dc(), and ff_mpeg1_encode_init().

◆ mpeg1_chr_dc_uni

uint32_t mpeg1_chr_dc_uni[512]
static

Definition at line 59 of file mpeg12enc.c.

Referenced by encode_dc(), and ff_mpeg1_encode_init().

◆ mpeg1_index_run

uint8_t mpeg1_index_run[2][64]
static

Definition at line 61 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_init(), and mpeg1_encode_block().

◆ mpeg1_max_level

int8_t mpeg1_max_level[2][64]
static

Definition at line 62 of file mpeg12enc.c.

Referenced by ff_mpeg1_encode_init(), and mpeg1_encode_block().

◆ mpeg1_options

const AVOption mpeg1_options[]
static
Initial value:
= {
{ NULL },
}
#define NULL
Definition: coverity.c:32
#define FF_MPV_COMMON_OPTS
Definition: mpegvideo.h:617
#define COMMON_OPTS
Definition: mpeg12enc.c:1103

Definition at line 1115 of file mpeg12enc.c.

◆ mpeg2_options

const AVOption mpeg2_options[]
static
Initial value:
= {
{ "non_linear_quant", "Use nonlinear quantizer.", OFFSET(q_scale_type), 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 },
{ "seq_disp_ext", "Write sequence_display_extension blocks.", OFFSET(seq_disp_ext), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE, "seq_disp_ext" },
{ "auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, 0, 0, VE, "seq_disp_ext" },
{ "never", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, 0, 0, VE, "seq_disp_ext" },
{ "always", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 1 }, 0, 0, VE, "seq_disp_ext" },
{ "video_format", "Video_format in the sequence_display_extension indicating the source of the video.", OFFSET(video_format), AV_OPT_TYPE_INT, { .i64 = VIDEO_FORMAT_UNSPECIFIED }, 0, 7, VE, "video_format" },
{ "component", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_COMPONENT }, 0, 0, VE, "video_format" },
{ "pal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_PAL }, 0, 0, VE, "video_format" },
{ "ntsc", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_NTSC }, 0, 0, VE, "video_format" },
{ "secam", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_SECAM }, 0, 0, VE, "video_format" },
{ "mac", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_MAC }, 0, 0, VE, "video_format" },
{ "unspecified", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_UNSPECIFIED}, 0, 0, VE, "video_format" },
{ NULL },
}
#define NULL
Definition: coverity.c:32
#define VIDEO_FORMAT_COMPONENT
Definition: mpegvideo.h:473
#define FF_MPV_COMMON_OPTS
Definition: mpegvideo.h:617
#define VIDEO_FORMAT_NTSC
Definition: mpegvideo.h:475
#define VIDEO_FORMAT_PAL
Definition: mpegvideo.h:474
#define VIDEO_FORMAT_UNSPECIFIED
Definition: mpegvideo.h:478
#define VIDEO_FORMAT_SECAM
Definition: mpegvideo.h:476
#define VIDEO_FORMAT_MAC
Definition: mpegvideo.h:477
#define VE
Definition: mpeg12enc.c:1102
#define COMMON_OPTS
Definition: mpeg12enc.c:1103
#define OFFSET(x)
Definition: mpeg12enc.c:1101

Definition at line 1121 of file mpeg12enc.c.

◆ ff_mpeg2video_encoder

AVCodec ff_mpeg2video_encoder
Initial value:
= {
.name = "mpeg2video",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 video"),
.priv_data_size = sizeof(MpegEncContext),
.supported_framerates = ff_mpeg2_frame_rate_tab,
.priv_class = &mpeg2_class,
}
const AVRational ff_mpeg2_frame_rate_tab[]
Definition: mpeg12data.c:308
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
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:66
preferred ID for MPEG-1/2 video decoding
Definition: avcodec.h:220
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:1019
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:266
static av_cold int encode_init(AVCodecContext *avctx)
Definition: mpeg12enc.c:138
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 1167 of file mpeg12enc.c.