# HG changeset patch # User michaelni # Date 1031855297 0 # Node ID a0901e38c564381e1f3df0c67031c461eb72633f # Parent b8e268337a1d3e457f216cee86b00916ad923ee5 fixing interlaced mpeg4 decoding diff -r b8e268337a1d -r a0901e38c564 h263.c --- a/h263.c Thu Sep 12 15:22:14 2002 +0000 +++ b/h263.c Thu Sep 12 18:28:17 2002 +0000 @@ -2722,7 +2722,7 @@ return -1; s->mv[0][i][0] = mx; - s->mv[0][i][1] = my*2; + s->mv[0][i][1] = my; } }else{ PRINT_MB_TYPE("P"); @@ -3194,7 +3194,9 @@ goto not_coded; rl = &rl_intra; rl_vlc = rl_intra.rl_vlc[0]; - if (s->ac_pred) { + if(s->alternate_scan) + scan_table = ff_alternate_vertical_scan; /* left */ + else if (s->ac_pred) { if (dc_pred_dir == 0) scan_table = ff_alternate_vertical_scan; /* left */ else @@ -3211,7 +3213,12 @@ return 0; } rl = &rl_inter; - scan_table = zigzag_direct; + + if(s->alternate_scan) + scan_table = ff_alternate_vertical_scan; /* left */ + else + scan_table = zigzag_direct; + if(s->mpeg_quant){ qmul=1; qadd=0; @@ -4054,8 +4061,8 @@ if(!s->progressive_sequence){ s->top_field_first= get_bits1(&s->gb); s->alternate_scan= get_bits1(&s->gb); -//printf("top:%d alt:%d\n", s->top_field_first, s->alternate_scan); - } + }else + s->alternate_scan= 0; } if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){ @@ -4090,7 +4097,8 @@ }else s->b_code=1; -//printf("quant:%d fcode:%d bcode:%d type:%d size:%d\n", s->qscale, s->f_code, s->b_code, s->pict_type, s->gb.size); +//printf("qpuant:%d fcode:%d bcode:%d type:%d size:%d pro:%d alt:%d\n", +// s->qscale, s->f_code, s->b_code, s->pict_type, s->gb.size,s->progressive_sequence, s->alternate_scan); if(!s->scalability){ if (s->shape!=RECT_SHAPE && s->pict_type!=I_TYPE) { skip_bits1(&s->gb); // vop shape coding type diff -r b8e268337a1d -r a0901e38c564 mpegvideo.c --- a/mpegvideo.c Thu Sep 12 15:22:14 2002 +0000 +++ b/mpegvideo.c Thu Sep 12 18:28:17 2002 +0000 @@ -1480,7 +1480,6 @@ motion_x = s->mv[0][0][0] + s->mv[0][1][0]; motion_y = s->mv[0][0][1] + s->mv[0][1][1]; motion_x = (motion_x>>1) | (motion_x&1); - motion_y = (motion_y>>1) | (motion_y&1); } /* no update if 8X8 because it has been done during parsing */ s->motion_val[xy][0] = motion_x;