diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2004-03-05 18:44:04 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-03-05 18:44:04 +0000 |
commit | c0a0170c165b5fe962807e93b3b0578386a2e8db (patch) | |
tree | 9a372b8cda001b4733130e8b67d15f1edb2af9dd /libavcodec/vp3.c | |
parent | ca5b9f20b2760413a06373e5f4863f764d925c4d (diff) | |
download | ffmpeg-c0a0170c165b5fe962807e93b3b0578386a2e8db.tar.gz |
fix motion compensation with (x+1/2,y+1/2) MVs
Originally committed as revision 2849 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/vp3.c')
-rw-r--r-- | libavcodec/vp3.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c index 636d2dfd80..7dd1bd723b 100644 --- a/libavcodec/vp3.c +++ b/libavcodec/vp3.c @@ -2451,15 +2451,24 @@ av_log(s->avctx, AV_LOG_ERROR, " help! got beefy vector! (%X, %X)\n", motion_x, motion_source= temp; } } + /* first, take care of copying a block from either the * previous or the golden frame */ if (s->all_fragments[i].coding_method != MODE_INTRA) { - - s->dsp.put_no_rnd_pixels_tab[1][motion_halfpel_index]( - output_plane + s->all_fragments[i].first_pixel, - motion_source, - stride, 8); + //Note, it is possible to implement all MC cases with put_no_rnd_pixels_l2 which would look more like the VP3 source but this would be slower as put_no_rnd_pixels_tab is better optimzed + if(motion_halfpel_index != 3){ + s->dsp.put_no_rnd_pixels_tab[1][motion_halfpel_index]( + output_plane + s->all_fragments[i].first_pixel, + motion_source, stride, 8); + }else{ + int d= (motion_x ^ motion_y)>>31; // d is 0 if motion_x and _y have the same sign, else -1 + s->dsp.put_no_rnd_pixels_l2[1]( + output_plane + s->all_fragments[i].first_pixel, + motion_source - d, + motion_source + stride + 1 + d, + stride, 8); + } } /* dequantize the DCT coefficients */ |