vp9: don't allow compound references if error_resilience is enabled.
authorRonald S. Bultje <rsbultje@gmail.com>
Fri, 15 May 2015 18:15:46 +0000 (14:15 -0400)
committerRonald S. Bultje <rsbultje@gmail.com>
Fri, 15 May 2015 19:43:24 +0000 (15:43 -0400)
libvpx (probably accidentally) clears the bits if error_res is set,
along with keyframe/intraonly. This probably wasn't the intention
(since it's local data), but it's behaviour we have to copy...

libavcodec/vp9.c

index bc88bf9..9540f3d 100644 (file)
@@ -648,8 +648,9 @@ static int decode_frame_header(AVCodecContext *ctx,
             s->highprecisionmvs = get_bits1(&s->gb);
             s->filtermode = get_bits1(&s->gb) ? FILTER_SWITCHABLE :
                                                 get_bits(&s->gb, 2);
-            s->allowcompinter = s->signbias[0] != s->signbias[1] ||
-                                s->signbias[0] != s->signbias[2];
+            s->allowcompinter = !s->errorres &&
+                                (s->signbias[0] != s->signbias[1] ||
+                                 s->signbias[0] != s->signbias[2]);
             if (s->allowcompinter) {
                 if (s->signbias[0] == s->signbias[1]) {
                     s->fixcompref    = 2;