Swap back and forward motion vectors to achieve correct picture
authorKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 12 Sep 2006 04:35:11 +0000 (04:35 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 12 Sep 2006 04:35:11 +0000 (04:35 +0000)
Originally committed as revision 6237 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vc1.c

index 8ce58af..c9c07cf 100644 (file)
@@ -2104,6 +2104,16 @@ static always_inline int scale_mv(int value, int bfrac, int inv, int qs)
  */
 static inline void vc1_b_mc(VC1Context *v, int dmv_x[2], int dmv_y[2], int direct, int mode)
 {
+    int t;
+
+    //XXX: more elegant solution is possible
+    t = v->s.mv[0][0][0];
+    v->s.mv[0][0][0] = v->s.mv[1][0][0];
+    v->s.mv[1][0][0] = t;
+    t = v->s.mv[0][0][1];
+    v->s.mv[0][0][1] = v->s.mv[1][0][1];
+    v->s.mv[1][0][1] = t;
+
     if(direct) {
         vc1_mc_1mv(v, 0);
         vc1_interp_mc(v);
@@ -2115,7 +2125,7 @@ static inline void vc1_b_mc(VC1Context *v, int dmv_x[2], int dmv_y[2], int direc
         return;
     }
 
-    vc1_mc_1mv(v, (mode == BMV_TYPE_FORWARD));
+    vc1_mc_1mv(v, (mode == BMV_TYPE_BACKWARD));
 }
 
 static inline void vc1_pred_b_mv(VC1Context *v, int dmv_x[2], int dmv_y[2], int direct, int mvtype)