summaryrefslogtreecommitdiff
path: root/libavcodec/h261.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-05-30 21:39:38 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-05-30 21:39:38 +0000
commitb37e98c8a25440571540823250f8c2347e32204a (patch)
tree17fa6ecf2276985570ee340f7e56dfc4898d8bf7 /libavcodec/h261.c
parentfdbbf2e0fc1bb91a5d735a49f39337eb172e68a7 (diff)
simplify
Originally committed as revision 3178 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h261.c')
-rw-r--r--libavcodec/h261.c49
1 files changed, 17 insertions, 32 deletions
diff --git a/libavcodec/h261.c b/libavcodec/h261.c
index 6ec8de630a..2e025cac56 100644
--- a/libavcodec/h261.c
+++ b/libavcodec/h261.c
@@ -58,7 +58,6 @@ typedef struct H261Context{
void ff_h261_loop_filter(H261Context * h){
MpegEncContext * const s = &h->s;
- int i;
const int linesize = s->linesize;
const int uvlinesize= s->uvlinesize;
uint8_t *dest_y = s->dest[0];
@@ -229,11 +228,25 @@ static int h261_decode_mb_skipped(H261Context *h,
return 0;
}
+static int decode_mv_component(GetBitContext *gb, int v){
+ int mv_diff = get_vlc2(gb, h261_mv_vlc.table, H261_MV_VLC_BITS, 2);
+ mv_diff = mvmap[mv_diff];
+
+ if(mv_diff && !get_bits1(gb))
+ mv_diff= -mv_diff;
+
+ v += mv_diff;
+ if (v <=-16) v+= 32;
+ else if(v >= 16) v-= 32;
+
+ return v;
+}
+
static int h261_decode_mb(H261Context *h,
DCTELEM block[6][64])
{
MpegEncContext * const s = &h->s;
- int i, cbp, mv_x_diff, mv_y_diff, sign, xy;
+ int i, cbp, xy;
cbp = 63;
// Read mba
@@ -288,36 +301,8 @@ static int h261_decode_mb(H261Context *h,
h->current_mv_y = 0;
}
- mv_x_diff = get_vlc2(&s->gb, h261_mv_vlc.table, H261_MV_VLC_BITS, 2);
- mv_x_diff = mvmap[mv_x_diff];
-
- if(mv_x_diff != 0){
- sign = get_bits1(&s->gb);
-
- if(!sign)
- mv_x_diff= -mv_x_diff;
- }
-
- mv_y_diff = get_vlc2(&s->gb, h261_mv_vlc.table, H261_MV_VLC_BITS, 2);
- mv_y_diff = mvmap[mv_y_diff];
-
- if(mv_y_diff != 0){
- sign = get_bits1(&s->gb);
-
- if(!sign)
- mv_y_diff= -mv_y_diff;
- }
-
- //mv's are in the range -15...15
- if((h->current_mv_x + mv_x_diff > -16) && (h->current_mv_x + mv_x_diff < 16) )
- h->current_mv_x += mv_x_diff;
- else
- h->current_mv_x += (mv_x_diff + (mv_x_diff > 0 ? -32 : 32));
-
- if((h->current_mv_y + mv_y_diff > -16) && (h->current_mv_y + mv_y_diff < 16) )
- h->current_mv_y += mv_y_diff;
- else
- h->current_mv_y += (mv_y_diff + (mv_y_diff>0 ? -32 : 32));
+ h->current_mv_x= decode_mv_component(&s->gb, h->current_mv_x);
+ h->current_mv_y= decode_mv_component(&s->gb, h->current_mv_y);
}
// Read cbp