aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/h263.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2003-12-21 20:06:59 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-12-21 20:06:59 +0000
commit8135f8df524706b9760c699a7bc13417acd8a516 (patch)
treeb39edd17d609b211f512415c8c626a79bd0bdf58 /libavcodec/h263.c
parentbed1707c9c274831173902542aaef1f8428e6331 (diff)
downloadffmpeg-8135f8df524706b9760c699a7bc13417acd8a516.tar.gz
rv20 / h263 b frame fix
Originally committed as revision 2628 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263.c')
-rw-r--r--libavcodec/h263.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index df520545f6..916cb764a5 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -1548,9 +1548,9 @@ int16_t *h263_pred_motion2(MpegEncContext * s, int block, int dir,
static const int off[4]= {2, 1, 1, -1};
wrap = s->b8_stride;
- xy = s->mb_x + s->mb_y * wrap;
+ xy = 2*(s->mb_x + s->mb_y * wrap);
- mot_val = s->current_picture.motion_val[0][dir] + xy;
+ mot_val = s->current_picture.motion_val[dir] + xy;
A = mot_val[ - 1];
/* special case for first (slice) line */
@@ -3815,15 +3815,15 @@ int ff_h263_decode_mb(MpegEncContext *s,
} else if(s->pict_type==B_TYPE) {
int mb_type;
const int stride= s->b8_stride;
- int16_t *mot_val0 = s->current_picture.motion_val[0][ s->mb_x + s->mb_y*stride ];
- int16_t *mot_val1 = s->current_picture.motion_val[1][ s->mb_x + s->mb_y*stride ];
+ int16_t *mot_val0 = s->current_picture.motion_val[0][ 2*(s->mb_x + s->mb_y*stride) ];
+ int16_t *mot_val1 = s->current_picture.motion_val[1][ 2*(s->mb_x + s->mb_y*stride) ];
// const int mv_xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
//FIXME ugly
- mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+stride]= mot_val0[2+stride]= 0;
- mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+stride]= mot_val0[3+stride]= 0;
- mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+stride]= mot_val1[2+stride]= 0;
- mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+stride]= mot_val1[3+stride]= 0;
+ mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*stride]= mot_val0[2+2*stride]=
+ mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*stride]= mot_val0[3+2*stride]=
+ mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*stride]= mot_val1[2+2*stride]=
+ mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*stride]= mot_val1[3+2*stride]= 0;
do{
mb_type= get_vlc2(&s->gb, h263_mbtype_b_vlc.table, H263_MBTYPE_B_VLC_BITS, 2);
@@ -3877,22 +3877,24 @@ int ff_h263_decode_mb(MpegEncContext *s,
mx = h263_decode_motion(s, mx, 1);
my = h263_decode_motion(s, my, 1);
+
s->mv[0][0][0] = mx;
s->mv[0][0][1] = my;
- mot_val[0 ]= mot_val[2 ]= mot_val[0+stride]= mot_val[2+stride]= mx;
- mot_val[1 ]= mot_val[3 ]= mot_val[1+stride]= mot_val[3+stride]= my;
+ mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
+ mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
}
if(USES_LIST(mb_type, 1)){
int16_t *mot_val= h263_pred_motion2(s, 0, 1, &mx, &my);
s->mv_dir |= MV_DIR_BACKWARD;
-
+
mx = h263_decode_motion(s, mx, 1);
my = h263_decode_motion(s, my, 1);
+
s->mv[1][0][0] = mx;
s->mv[1][0][1] = my;
- mot_val[0 ]= mot_val[2 ]= mot_val[0+stride]= mot_val[2+stride]= mx;
- mot_val[1 ]= mot_val[3 ]= mot_val[1+stride]= mot_val[3+stride]= my;
+ mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
+ mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
}
}