Go to the documentation of this file.
23 #ifndef AVCODEC_MPEG4VIDEO_H
24 #define AVCODEC_MPEG4VIDEO_H
35 #define BIN_ONLY_SHAPE 2
38 #define SIMPLE_VO_TYPE 1
39 #define CORE_VO_TYPE 3
40 #define MAIN_VO_TYPE 4
41 #define NBIT_VO_TYPE 5
42 #define ARTS_VO_TYPE 10
43 #define ACE_VO_TYPE 12
44 #define SIMPLE_STUDIO_VO_TYPE 14
45 #define CORE_STUDIO_VO_TYPE 15
46 #define ADV_SIMPLE_VO_TYPE 17
48 #define VOT_VIDEO_ID 1
49 #define VOT_STILL_TEXTURE_ID 2
52 #define EXTENDED_PAR 15
55 #define STATIC_SPRITE 1
58 #define MOTION_MARKER 0x1F001
59 #define DC_MARKER 0x6B001
61 #define VOS_STARTCODE 0x1B0
62 #define USER_DATA_STARTCODE 0x1B2
63 #define GOP_STARTCODE 0x1B3
64 #define VISUAL_OBJ_STARTCODE 0x1B5
65 #define VOP_STARTCODE 0x1B6
66 #define SLICE_STARTCODE 0x1B7
67 #define EXT_STARTCODE 0x1B8
69 #define QUANT_MATRIX_EXT_ID 0x3
72 #define MAX_NVOP_SIZE 19
156 int16_t
block[6][64],
157 int motion_x,
int motion_y);
184 #if 0 //3IV1 is quite rare and it slows things down a tiny bit
185 #define IS_3IV1 s->codec_tag == AV_RL32("3IV1")
198 int *dir_ptr,
int encoding)
211 wrap =
s->block_wrap[n];
212 dc_val =
s->dc_val[0] +
s->block_index[n];
218 b = dc_val[-1 -
wrap];
223 if (
s->first_slice_line && n != 3) {
226 if (n != 1 &&
s->mb_x ==
s->resync_mb_x)
229 if (
s->mb_x ==
s->resync_mb_x &&
s->mb_y ==
s->resync_mb_y + 1) {
230 if (n == 0 || n == 4 || n == 5)
251 if (
level & (~2047)) {
255 "dc<0 at %dx%d\n",
s->mb_x,
s->mb_y);
260 "dc overflow at %dx%d\n",
s->mb_x,
s->mb_y);
const uint8_t ff_mpeg4_studio_dc_luma[19][2]
int ff_mpeg4_workaround_bugs(AVCodecContext *avctx)
void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
static const uint8_t mpeg4_block_count[4]
int showed_packed_warning
flag for having shown the warning about invalid Divx B-frames
void ff_mpeg4_merge_partitions(MpegEncContext *s)
const uint8_t ff_sprite_trajectory_lens[15]
const uint8_t ff_mpeg4_c_dc_scale_table[32]
int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx)
Decode the next video packet.
void ff_mpeg4videodec_static_init(void)
void ff_mpeg4_init_direct_mv(MpegEncContext *s)
void ff_set_mpeg4_time(MpegEncContext *s)
int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx)
Decode the first and second partition.
const uint8_t ff_mpeg4_studio_dc_chroma[19][2]
static av_always_inline float scale(float x, float s)
void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
RLTable ff_mpeg4_rl_intra
#define AV_EF_BITSTREAM
detect bitstream specification deviations
int ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
const uint8_t ff_mb_type_b_tab[4][2]
int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx)
Decode the next video packet.
const uint8_t ff_mpeg4_dc_threshold[8]
int sprite_brightness_change
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const int8_t ff_mpeg4_intra_run[102]
int cplx_estimation_trash_b
void ff_mpeg4_stuffing(PutBitContext *pbc)
add MPEG-4 stuffing bits (01...1)
const int16_t ff_mpeg4_default_intra_matrix[64]
int cplx_estimation_trash_i
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
const uint16_t ff_mpeg4_resync_prefix[8]
int t_frame
time distance of first I -> B, used for interlaced B-frames
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)
static int ff_mpeg4_pred_dc(MpegEncContext *s, int n, int level, int *dir_ptr, int encoding)
Predict the dc.
int sprite_shift[2]
sprite shift [isChroma]
void ff_mpeg4_init_rl_intra(void)
static const uint8_t header[24]
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n, int dir)
Predict the ac.
int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb, int header)
Decode MPEG-4 headers.
uint16_t sprite_traj[4][2]
sprite trajectory points
int cplx_estimation_trash_p
void ff_clean_mpeg4_qscales(MpegEncContext *s)
modify mb_type & qscale so that encoding is actually possible in MPEG-4
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s)
int time_increment_bits
number of bits to represent the fractional part of time
int num_sprite_warping_points
const uint8_t ff_mpeg4_y_dc_scale_table[32]
const uint16_t ff_mpeg4_intra_vlc[103][2]
void ff_mpeg4_init_partitions(MpegEncContext *s)
const uint8_t ff_mpeg4_DCtab_chrom[13][2]
int vol_control_parameters
does the stream contain the low_delay flag, used to work around buggy encoders.
const int8_t ff_mpeg4_intra_level[102]
const int16_t ff_mpeg4_default_non_intra_matrix[64]
static const float pred[4]
int ff_mpeg4_frame_end(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
const uint8_t ff_mpeg4_studio_intra[12][24][2]
void ff_mpeg4_clean_buffers(MpegEncContext *s)
main external API structure.
int resync_marker
could this stream contain resync markers
#define AV_EF_AGGRESSIVE
consider things that a sane encoder should not do as an error
The exact code depends on how similar the blocks are and how related they are to the block
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
const uint8_t ff_mpeg4_DCtab_lum[13][2]
int intra_dc_threshold
QP above which the ac VLC should be used for intra dc.