[FFmpeg-cvslog] vp9: disable use_last_frame_mvs on resolution change (scalable).

Ronald S. Bultje git at videolan.org
Sun Jan 26 20:17:28 CET 2014


ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Sat Jan 25 20:11:28 2014 -0500| [d9343c348412d9b790c6da6b64c07ef85aefd145] | committer: Michael Niedermayer

vp9: disable use_last_frame_mvs on resolution change (scalable).

Prevents some invalid memory accesses after resolution change in
vp90-2-05-resize.webm, and libvpx does this too.

Reviewed-by: ubitux
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d9343c348412d9b790c6da6b64c07ef85aefd145
---

 libavcodec/vp9.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index 2965394..e85a099 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -467,7 +467,6 @@ static int decode_frame_header(AVCodecContext *ctx,
     last_invisible    = s->invisible;
     s->invisible      = !get_bits1(&s->gb);
     s->errorres       = get_bits1(&s->gb);
-    // FIXME disable this upon resolution change
     s->use_last_frame_mvs = !s->errorres && !last_invisible;
     if (s->keyframe) {
         if (get_bits_long(&s->gb, 24) != VP9_SYNCCODE) { // synccode
@@ -526,6 +525,8 @@ static int decode_frame_header(AVCodecContext *ctx,
                 w = get_bits(&s->gb, 16) + 1;
                 h = get_bits(&s->gb, 16) + 1;
             }
+            s->use_last_frame_mvs &= s->frames[LAST_FRAME].tf.f->width == w &&
+                                     s->frames[LAST_FRAME].tf.f->height == h;
             if (get_bits1(&s->gb)) // display size
                 skip_bits(&s->gb, 32);
             s->highprecisionmvs = get_bits1(&s->gb);



More information about the ffmpeg-cvslog mailing list