shithub: dav1d

Download patch

ref: eb37d5cc534ed805701b315a35e5ed07f281232c
parent: 8308f4b5adc0c42649e9226534966bc4efb49eea
author: James Almer <jamrial@gmail.com>
date: Mon Jan 7 11:28:54 EST 2019

picture: properly handle Dav1dUserData references in Dav1dPicture

--- a/src/data.c
+++ b/src/data.c
@@ -113,6 +113,7 @@
     assert(dst != NULL);
     assert(src != NULL);
 
+    dav1d_ref_dec(&dst->user_data.ref);
     *dst = *src;
     if (dst->user_data.ref) dav1d_ref_inc(dst->user_data.ref);
 }
--- a/src/picture.c
+++ b/src/picture.c
@@ -92,10 +92,8 @@
 static void free_buffer(const uint8_t *const data, void *const user_data) {
     struct pic_ctx_context *pic_ctx = user_data;
 
-    struct Dav1dRef *user_data_ref = pic_ctx->pic.m.user_data.ref;
     pic_ctx->allocator.release_picture_callback(&pic_ctx->pic,
                                                 pic_ctx->allocator.cookie);
-    if (user_data_ref) dav1d_ref_dec(&user_data_ref);
     free(pic_ctx);
 }
 
@@ -203,6 +201,7 @@
         dav1d_ref_inc(src->ref);
         if (src->frame_hdr_ref) dav1d_ref_inc(src->frame_hdr_ref);
         if (src->seq_hdr_ref) dav1d_ref_inc(src->seq_hdr_ref);
+        if (src->m.user_data.ref) dav1d_ref_inc(src->m.user_data.ref);
     }
     *dst = *src;
 }
@@ -236,6 +235,7 @@
         dav1d_ref_dec(&p->ref);
         dav1d_ref_dec(&p->seq_hdr_ref);
         dav1d_ref_dec(&p->frame_hdr_ref);
+        dav1d_ref_dec(&p->m.user_data.ref);
     }
     memset(p, 0, sizeof(*p));
 }