From: Kostya Shishkov Date: Thu, 30 Oct 2008 06:08:47 +0000 (+0000) Subject: Correct motion vector scaling in B-frames for RV3/4 X-Git-Tag: v0.5~2053 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5f621dd28aa8c7c71edc97c2867cacde346af353;p=platform%2Fupstream%2Flibav.git Correct motion vector scaling in B-frames for RV3/4 Originally committed as revision 15747 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c index de1ce52..3baa471 100644 --- a/libavcodec/rv34.c +++ b/libavcodec/rv34.c @@ -474,13 +474,12 @@ static void rv34_pred_mv(RV34DecContext *r, int block_type, int subblock_no, int 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; } /**