diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2007-04-18 17:36:52 +0000 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2007-04-18 17:36:52 +0000 |
commit | a61456152d91673bd174ec7f9b23d51077f0d9de (patch) | |
tree | 9918e8a6c7c0db0e63a7a2ab7fc0128830f1da91 /libavcodec/vc1.c | |
parent | 3052ddb2a8530eff621350739c58a4dd2f06ec76 (diff) | |
download | ffmpeg-streaming-a61456152d91673bd174ec7f9b23d51077f0d9de.zip ffmpeg-streaming-a61456152d91673bd174ec7f9b23d51077f0d9de.tar.gz |
Pullback should be performed on scaled motion vectors in B-frames
Originally committed as revision 8750 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/vc1.c')
-rw-r--r-- | libavcodec/vc1.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 77d6828..23a3d91 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -2304,6 +2304,12 @@ static inline void vc1_pred_b_mv(VC1Context *v, int dmv_x[2], int dmv_y[2], int s->mv[0][0][1] = scale_mv(s->next_picture.motion_val[1][xy][1], v->bfraction, 0, s->quarter_sample); s->mv[1][0][0] = scale_mv(s->next_picture.motion_val[1][xy][0], v->bfraction, 1, s->quarter_sample); s->mv[1][0][1] = scale_mv(s->next_picture.motion_val[1][xy][1], v->bfraction, 1, s->quarter_sample); + + /* Pullback predicted motion vectors as specified in 8.4.5.4 */ + s->mv[0][0][0] = av_clip(s->mv[0][0][0], -60 - (s->mb_x << 6), (s->mb_width << 6) - 4 - (s->mb_x << 6)); + s->mv[0][0][1] = av_clip(s->mv[0][0][1], -60 - (s->mb_y << 6), (s->mb_height << 6) - 4 - (s->mb_y << 6)); + s->mv[1][0][0] = av_clip(s->mv[1][0][0], -60 - (s->mb_x << 6), (s->mb_width << 6) - 4 - (s->mb_x << 6)); + s->mv[1][0][1] = av_clip(s->mv[1][0][1], -60 - (s->mb_y << 6), (s->mb_height << 6) - 4 - (s->mb_y << 6)); if(direct) { s->current_picture.motion_val[0][xy][0] = s->mv[0][0][0]; s->current_picture.motion_val[0][xy][1] = s->mv[0][0][1]; |