[FFmpeg-cvslog] vp9: fix mvref finding to adhere to bug in libvpx.
Ronald S. Bultje
git at videolan.org
Sat Nov 9 21:35:41 CET 2013
ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Sat Nov 9 10:52:49 2013 -0500| [dd3d0f46bdb0b9bd204159c67f522cd6f3db7e7c] | committer: Clément Bœsch
vp9: fix mvref finding to adhere to bug in libvpx.
Fixes a particular youtube video that I unfortunately can't share.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=dd3d0f46bdb0b9bd204159c67f522cd6f3db7e7c
---
libavcodec/vp9.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index 3539a54..d26f122 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -984,7 +984,10 @@ 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]);
}
}
@@ -997,7 +1000,10 @@ 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]);
}
}
More information about the ffmpeg-cvslog
mailing list