[FFmpeg-cvslog] r15747 - trunk/libavcodec/rv34.c

kostya subversion
Thu Oct 30 07:08:47 CET 2008


Author: kostya
Date: Thu Oct 30 07:08:47 2008
New Revision: 15747

Log:
Correct motion vector scaling in B-frames for RV3/4

Modified:
   trunk/libavcodec/rv34.c

Modified: trunk/libavcodec/rv34.c
==============================================================================
--- trunk/libavcodec/rv34.c	(original)
+++ trunk/libavcodec/rv34.c	Thu Oct 30 07:08:47 2008
@@ -474,13 +474,12 @@ static void rv34_pred_mv(RV34DecContext 
 static int calc_add_mv(RV34DecContext *r, int dir, int val)
 {
     int refdist = GET_PTS_DIFF(r->next_pts, r->last_pts);
-    int dist = dir ? GET_PTS_DIFF(r->next_pts, r->cur_pts) : GET_PTS_DIFF(r->cur_pts, r->last_pts);
+    int dist = dir ? -GET_PTS_DIFF(r->next_pts, r->cur_pts) : GET_PTS_DIFF(r->cur_pts, r->last_pts);
+    int mul;
 
     if(!refdist) return 0;
-    if(!dir)
-        return (val * dist + refdist - 1) / refdist;
-    else
-        return -(val * dist / refdist);
+    mul = (dist << 14) / refdist;
+    return (val * mul + 0x2000) >> 14;
 }
 
 /**




More information about the ffmpeg-cvslog mailing list