Browse Source

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>
tags/n2.2-rc1
Ronald S. Bultje Anton Khirnov 11 years ago
parent
commit
bd01412313
1 changed files with 10 additions and 2 deletions
  1. +10
    -2
      libavcodec/vp9mvs.c

+ 10
- 2
libavcodec/vp9mvs.c View File

@@ -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);


Loading…
Cancel
Save