VP8: fix broken sign bias code in MV pred
authorJason Garrett-Glaser <darkshikari@gmail.com>
Fri, 23 Jul 2010 06:41:35 +0000 (06:41 +0000)
committerJason Garrett-Glaser <darkshikari@gmail.com>
Fri, 23 Jul 2010 06:41:35 +0000 (06:41 +0000)
Apparently the official conformance test vectors don't test this feature,
even though libvpx uses it.

Originally committed as revision 24456 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vp8.c

index 744627c..8ff6fba 100644 (file)
@@ -557,7 +557,8 @@ static void find_near_mvs(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y,
             if (mv) {\
                 if (cur_sign_bias != sign_bias[edge_ref]) {\
                     /* SWAR negate of the values in mv. */\
-                    mv = ((mv&0x80008000) + 0x00010001) ^ (mv&0x7fff7fff);\
+                    mv = ~mv;\
+                    mv = ((mv&0x7fff7fff) + 0x00010001) ^ (mv&0x80008000);\
                 }\
                 if (!n || mv != AV_RN32A(&near_mv[idx]))\
                     AV_WN32A(&near_mv[++idx], mv);\