shithub: dav1d

Download patch

ref: d4ddfdf519280fd0f35c897f56c1fb25fdc239a4
parent: a408309589e909f759d7ecc7adf86d939fd2fc9f
author: James Almer <jamrial@gmail.com>
date: Wed Nov 28 12:57:09 EST 2018

obu: ensure that the frame header reference is writable

--- a/src/obu.c
+++ b/src/obu.c
@@ -1267,6 +1267,8 @@
             c->frame_hdr_ref = dav1d_ref_create(sizeof(Dav1dFrameHeader));
             if (!c->frame_hdr_ref) return -ENOMEM;
         }
+        // ensure that the reference is writable
+        assert(dav1d_ref_is_writable(c->frame_hdr_ref));
         c->frame_hdr = c->frame_hdr_ref->data;
         memset(c->frame_hdr, 0, sizeof(*c->frame_hdr));
         c->frame_hdr->temporal_id = temporal_id;
--- a/src/ref.c
+++ b/src/ref.c
@@ -84,3 +84,7 @@
     }
     *pref = NULL;
 }
+
+int dav1d_ref_is_writable(Dav1dRef *const ref) {
+    return atomic_load(&ref->ref_cnt) == 1;
+}
--- a/src/ref.h
+++ b/src/ref.h
@@ -48,4 +48,6 @@
 void dav1d_ref_inc(Dav1dRef *ref);
 void dav1d_ref_dec(Dav1dRef **ref);
 
+int dav1d_ref_is_writable(Dav1dRef *ref);
+
 #endif /* __DAV1D_SRC_REF_H__ */