[FFmpeg-cvslog] vp9: fix segmentation map retention across keyframe boundaries.

Ronald S. Bultje git at videolan.org
Fri Sep 4 16:07:47 CEST 2015


ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Wed Sep  2 17:56:08 2015 -0400| [8b45e87f64d5986220286e8276c3782157189294] | committer: Ronald S. Bultje

vp9: fix segmentation map retention across keyframe boundaries.

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

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

diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index 760f045..f0f54da 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -289,6 +289,7 @@ static void vp9_unref_frame(AVCodecContext *ctx, VP9Frame *f)
 {
     ff_thread_release_buffer(ctx, &f->tf);
     av_buffer_unref(&f->extradata);
+    f->segmentation_map = NULL;
 }
 
 static int vp9_ref_frame(AVCodecContext *ctx, VP9Frame *dst, VP9Frame *src)
@@ -4002,8 +4003,7 @@ static int vp9_decode_frame(AVCodecContext *ctx, void *frame,
     VP9Context *s = ctx->priv_data;
     int res, tile_row, tile_col, i, ref, row, col;
     int retain_segmap_ref = s->frames[REF_FRAME_SEGMAP].segmentation_map &&
-                            !(s->segmentation.enabled &&
-                              (s->segmentation.update_map || s->keyframe || s->intraonly));
+                            (!s->segmentation.enabled || !s->segmentation.update_map);
     ptrdiff_t yoff, uvoff, ls_y, ls_uv;
     AVFrame *f;
     int bytesperpixel;
@@ -4032,7 +4032,7 @@ static int vp9_decode_frame(AVCodecContext *ctx, void *frame,
     data += res;
     size -= res;
 
-    if (!retain_segmap_ref) {
+    if (!retain_segmap_ref || s->keyframe || s->intraonly) {
         if (s->frames[REF_FRAME_SEGMAP].tf.f->data[0])
             vp9_unref_frame(ctx, &s->frames[REF_FRAME_SEGMAP]);
         if (!s->keyframe && !s->intraonly && !s->errorres && s->frames[CUR_FRAME].tf.f->data[0] &&



More information about the ffmpeg-cvslog mailing list