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 155 int16_t
block[6][64],
156 int motion_x,
int motion_y);
185 #if 0 //3IV1 is quite rare and it slows things down a tiny bit 186 #define IS_3IV1 s->codec_tag == AV_RL32("3IV1") 199 int *dir_ptr,
int encoding)
219 b = dc_val[-1 -
wrap];
231 if (n == 0 || n == 4 || n == 5)
235 if (
abs(a - b) <
abs(b - c)) {
243 pred =
FASTDIV((pred + (scale >> 1)), scale);
252 if (level & (~2047)) {
256 "dc<0 at %dx%d\n", s->
mb_x, s->
mb_y);
259 if (level > 2048 + scale) {
261 "dc overflow at %dx%d\n", s->
mb_x, s->
mb_y);
uint16_t sprite_traj[4][2]
sprite trajectory points
#define AV_EF_AGGRESSIVE
consider things that a sane encoder should not do as an error
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int sprite_brightness_change
int resync_marker
could this stream contain resync markers
const int8_t ff_mpeg4_intra_level[102]
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
int ff_mpeg4_frame_end(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
const uint8_t ff_mpeg4_studio_dc_luma[19][2]
#define AV_EF_BITSTREAM
detect bitstream specification deviations
int ff_mpeg4_workaround_bugs(AVCodecContext *avctx)
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s)
const uint16_t ff_mpeg4_resync_prefix[8]
int encoding
true if we are encoding (vs decoding)
int cplx_estimation_trash_b
void ff_mpeg4_merge_partitions(MpegEncContext *s)
const uint8_t ff_sprite_trajectory_lens[15]
The exact code depends on how similar the blocks are and how related they are to the block
const int16_t ff_mpeg4_default_non_intra_matrix[64]
const uint8_t ff_mpeg4_studio_intra[12][24][2]
uint8_t ff_mpeg4_static_rl_table_store[3][2][2 *MAX_RUN+MAX_LEVEL+3]
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
void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
int cplx_estimation_trash_p
bitstream reader API header.
static const uint8_t header[24]
int intra_dc_threshold
QP above which the ac VLC should be used for intra dc.
static int ff_mpeg4_pred_dc(MpegEncContext *s, int n, int level, int *dir_ptr, int encoding)
Predict the dc.
int16_t * dc_val[3]
used for MPEG-4 DC prediction, all 3 arrays must be continuous
const uint16_t ff_mpeg4_intra_vlc[103][2]
const uint8_t ff_mpeg4_DCtab_chrom[13][2]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const uint8_t ff_mpeg4_DCtab_lum[13][2]
void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n, int dir)
Predict the ac.
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_mpeg4_clean_buffers(MpegEncContext *s)
int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx)
Decode the next video packet.
void ff_mpeg4videodec_static_init(void)
int resync_mb_x
x position of last resync marker
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
void ff_clean_mpeg4_qscales(MpegEncContext *s)
modify mb_type & qscale so that encoding is actually possible in MPEG-4
const uint8_t ff_mpeg4_dc_threshold[8]
int vol_control_parameters
does the stream contain the low_delay flag, used to work around buggy encoders.
const uint8_t ff_mb_type_b_tab[4][2]
int block_index[6]
index to current MB in block based arrays with edges
static const float pred[4]
int first_slice_line
used in MPEG-4 too to handle resync markers
main external API structure.
int cplx_estimation_trash_i
int showed_packed_warning
flag for having shown the warning about invalid Divx B-frames
int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx)
Decode the first and second partition.
const int16_t ff_mpeg4_default_intra_matrix[64]
void ff_set_mpeg4_time(MpegEncContext *s)
int sprite_shift[2]
sprite shift [isChroma]
RLTable ff_mpeg4_rl_intra
const uint8_t ff_mpeg4_studio_dc_chroma[19][2]
struct AVCodecContext * avctx
int t_frame
time distance of first I -> B, used for interlaced B-frames
void ff_mpeg4_init_direct_mv(MpegEncContext *s)
const int8_t ff_mpeg4_intra_run[102]
const uint8_t ff_mpeg4_y_dc_scale_table[32]
void ff_mpeg4_stuffing(PutBitContext *pbc)
add MPEG-4 stuffing bits (01...1)
void ff_mpeg4_init_partitions(MpegEncContext *s)
int resync_mb_y
y position of last resync marker
static const uint8_t mpeg4_block_count[4]
int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb, int header)
Decode MPEG-4 headers.
void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
int time_increment_bits
number of bits to represent the fractional part of time
int workaround_bugs
workaround bugs in encoders which cannot be detected automatically
int ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
int num_sprite_warping_points
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)