summaryrefslogtreecommitdiff
path: root/libavcodec/vp9mvs.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2014-01-19 19:04:58 +0100
committerAnton Khirnov <anton@khirnov.net>2014-01-24 07:02:56 +0100
commitbd01412313c728400f1fc5448ede0ad8b51da0d1 (patch)
tree1f22ea9421095b47450781cee693fc89cf42a0e4 /libavcodec/vp9mvs.c
parent2aec9e228cb317cca8cda9e03986c8482ea54404 (diff)
vp9: fix mvref finding to adhere to bug in libvpx.
Fixes a particular youtube video that I unfortunately can't share. Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavcodec/vp9mvs.c')
-rw-r--r--libavcodec/vp9mvs.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/libavcodec/vp9mvs.c b/libavcodec/vp9mvs.c
index 2f37755046..1f65aaac0a 100644
--- a/libavcodec/vp9mvs.c
+++ b/libavcodec/vp9mvs.c
@@ -191,9 +191,13 @@ static void find_ref_mvs(VP9Context *s,
if (mv->ref[0] != ref && mv->ref[0] >= 0)
RETURN_SCALE_MV(mv->mv[0],
s->signbias[mv->ref[0]] != s->signbias[ref]);
- if (mv->ref[1] != ref && mv->ref[1] >= 0)
+ if (mv->ref[1] != ref && mv->ref[1] >= 0 &&
+ // BUG - libvpx has this condition regardless of whether
+ // we used the first ref MV and pre-scaling
+ AV_RN32A(&mv->mv[0]) != AV_RN32A(&mv->mv[1])) {
RETURN_SCALE_MV(mv->mv[1],
s->signbias[mv->ref[1]] != s->signbias[ref]);
+ }
}
}
@@ -204,9 +208,13 @@ static void find_ref_mvs(VP9Context *s,
if (mv->ref[0] != ref && mv->ref[0] >= 0)
RETURN_SCALE_MV(mv->mv[0],
s->signbias[mv->ref[0]] != s->signbias[ref]);
- if (mv->ref[1] != ref && mv->ref[1] >= 0)
+ if (mv->ref[1] != ref && mv->ref[1] >= 0 &&
+ // BUG - libvpx has this condition regardless of whether
+ // we used the first ref MV and pre-scaling
+ AV_RN32A(&mv->mv[0]) != AV_RN32A(&mv->mv[1])) {
RETURN_SCALE_MV(mv->mv[1],
s->signbias[mv->ref[1]] != s->signbias[ref]);
+ }
}
AV_ZERO32(pmv);