47 int c_wrap, c_xy, l_wrap, l_xy;
50 l_xy = (2 * s->
mb_y - 1) * l_wrap + s->
mb_x * 2 - 1;
52 c_xy = (s->
mb_y - 1) * c_wrap + s->
mb_x - 1;
55 memset(s->
ac_val[0] + l_xy, 0, (l_wrap * 2 + 1) * 16 *
sizeof(int16_t));
56 memset(s->
ac_val[1] + c_xy, 0, (c_wrap + 1) * 16 *
sizeof(int16_t));
57 memset(s->
ac_val[2] + c_xy, 0, (c_wrap + 1) * 16 *
sizeof(int16_t));
67 #define tab_size ((signed)FF_ARRAY_ELEMS(s->direct_scale_mv[0]))
68 #define tab_bias (tab_size / 2)
92 s->
mv[1][i][0] = mx ? s->
mv[0][i][0] - p_mx
95 s->
mv[0][i][0] = p_mx * time_pb / time_pp + mx;
96 s->
mv[1][i][0] = mx ? s->
mv[0][i][0] - p_mx
97 : p_mx * (time_pb - time_pp) / time_pp;
102 s->
mv[1][i][1] = my ? s->
mv[0][i][1] - p_my
105 s->
mv[0][i][1] = p_my * time_pb / time_pp + my;
106 s->
mv[1][i][1] = my ? s->
mv[0][i][1] - p_my
107 : p_my * (time_pb - time_pp) / time_pp;
128 if (
IS_8X8(colocated_mb_type)) {
130 for (i = 0; i < 4; i++)
135 for (i = 0; i < 2; i++) {
147 time_pb / time_pp + mx;
149 time_pb / time_pp + my;
150 s->
mv[1][i][0] = mx ? s->
mv[0][i][0] -
153 (time_pb - time_pp) / time_pp;
154 s->
mv[1][i][1] = my ? s->
mv[0][i][1] -
157 (time_pb - time_pp) / time_pp;
165 s->
mv[0][3][0] = s->
mv[0][0][0];
168 s->
mv[0][3][1] = s->
mv[0][0][1];
171 s->
mv[1][3][0] = s->
mv[1][0][0];
174 s->
mv[1][3][1] = s->
mv[1][0][1];
#define MV_TYPE_FIELD
2 vectors, one per field
int last_mv[2][2][2]
last MV, used for MV prediction in MPEG-1 & B-frame MPEG-4
int16_t(*[3] ac_val)[16]
used for MPEG-4 AC prediction, all 3 arrays must be continuous
int16_t(*[2][2] p_field_mv_table)[2]
MV table (2MV per MB) interlaced P-frame encoding.
void ff_mpeg4_clean_buffers(MpegEncContext *s)
uint16_t pp_time
time distance between the last 2 p,s,i frames
#define FF_BUG_DIRECT_BLOCKSIZE
int16_t direct_scale_mv[2][64]
precomputed to avoid divisions in ff_mpeg4_set_direct_mv
void ff_mpeg4_init_direct_mv(MpegEncContext *s)
int quarter_sample
1->qpel, 0->half pel ME/MC
uint8_t ff_mpeg4_static_rl_table_store[3][2][2 *MAX_RUN+MAX_LEVEL+3]
int16_t(*[2] motion_val)[2]
#define MB_TYPE_INTERLACED
int block_index[6]
index to current MB in block based arrays with edges
#define MV_TYPE_16X16
1 vector for the whole mb
int f_code
forward MV resolution
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s)
uint16_t pb_field_time
like above, just for interlaced
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second " : depend...
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing
struct AVCodecContext * avctx
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
static void ff_mpeg4_set_one_direct_mv(MpegEncContext *s, int mx, int my, int i)
int workaround_bugs
Work around bugs in encoders which sometimes cannot be detected automatically.
Picture next_picture
copy of the next picture structure.
uint32_t * mb_type
types and macros are defined in mpegutils.h
#define MV_TYPE_8X8
4 vectors (H.263, MPEG-4 4MV)
int b_code
backward MV resolution for B-frames (MPEG-4)
uint16_t pb_time
time distance between the last b and p,s,i frame