changeset 667:5446a41a00fe libavcodec

10l (field select readed at the wrong place ...)
author michaelni
date Fri, 13 Sep 2002 11:47:57 +0000
parents f5b8b5dd50d7
children acd1a808343b
files h263.c
diffstat 1 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/h263.c	Fri Sep 13 11:24:58 2002 +0000
+++ b/h263.c	Fri Sep 13 11:47:57 2002 +0000
@@ -2840,10 +2840,21 @@
                 if(cbp)
                     s->interlaced_dct= get_bits1(&s->gb);
 
-                if(mb_type!=MB_TYPE_B_DIRECT && get_bits1(&s->gb))
+                if(mb_type!=MB_TYPE_B_DIRECT && get_bits1(&s->gb)){
                     field_mv=1;
+
+                    if(mb_type!=MB_TYPE_B_BACKW){
+                        s->field_select[0][0]= get_bits1(&s->gb);
+                        s->field_select[0][1]= get_bits1(&s->gb);
+                    }
+                    if(mb_type!=MB_TYPE_B_FORW){
+                        s->field_select[1][0]= get_bits1(&s->gb);
+                        s->field_select[1][1]= get_bits1(&s->gb);
+                    }
+                }
             }
 
+            s->mv_dir = 0;
             if(mb_type!=MB_TYPE_B_DIRECT && !field_mv){
                 s->mv_type= MV_TYPE_16X16;
                 if(mb_type!=MB_TYPE_B_BACKW){
@@ -2853,8 +2864,7 @@
                     my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code);
                     s->last_mv[0][1][0]= s->last_mv[0][0][0]= s->mv[0][0][0] = mx;
                     s->last_mv[0][1][1]= s->last_mv[0][0][1]= s->mv[0][0][1] = my;
-                }else
-                    s->mv_dir = 0;
+                }
     
                 if(mb_type!=MB_TYPE_B_FORW){
                     s->mv_dir |= MV_DIR_BACKWARD;
@@ -2868,10 +2878,9 @@
                     PRINT_MB_TYPE(mb_type==MB_TYPE_B_FORW ? "F" : (mb_type==MB_TYPE_B_BACKW ? "B" : "T"));
             }else if(mb_type!=MB_TYPE_B_DIRECT){
                 s->mv_type= MV_TYPE_FIELD;
+
                 if(mb_type!=MB_TYPE_B_BACKW){
                     s->mv_dir = MV_DIR_FORWARD;
-                    s->field_select[0][0]= get_bits1(&s->gb);
-                    s->field_select[0][1]= get_bits1(&s->gb);
                 
                     for(i=0; i<2; i++){
                         mx = h263_decode_motion(s, s->last_mv[0][i][0]  , s->f_code);
@@ -2879,13 +2888,10 @@
                         s->last_mv[0][i][0]=  s->mv[0][i][0] = mx;
                         s->last_mv[0][i][1]= (s->mv[0][i][1] = my)*2;
                     }
-                }else
-                    s->mv_dir = 0;
+                }
     
                 if(mb_type!=MB_TYPE_B_FORW){
                     s->mv_dir |= MV_DIR_BACKWARD;
-                    s->field_select[1][0]= get_bits1(&s->gb);
-                    s->field_select[1][1]= get_bits1(&s->gb);
 
                     for(i=0; i<2; i++){
                         mx = h263_decode_motion(s, s->last_mv[1][i][0]  , s->b_code);