explicitly clear some Dav1dRef pointers after calling dav1d_ref_dec()
Partially reverts b7d2b7d2f82994f70edd9bfb908a02884731d4cc, fixing a regression
introduced by it.
diff --git a/src/decode.c b/src/decode.c
index 29fd5c1..0da1093 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -3018,7 +3018,9 @@
if (f->cur_segmap_ref)
dav1d_ref_inc(f->cur_segmap_ref);
dav1d_ref_dec(&c->refs[i].refmvs);
- if (!f->frame_hdr.allow_intrabc) {
+ if (f->frame_hdr.allow_intrabc) {
+ c->refs[i].refmvs = NULL;
+ } else {
c->refs[i].refmvs = f->mvs_ref;
if (f->mvs_ref)
dav1d_ref_inc(f->mvs_ref);
@@ -3038,7 +3040,9 @@
if (c->cdf[i].cdf)
dav1d_cdf_thread_unref(&c->cdf[i]);
dav1d_ref_dec(&c->refs[i].segmap);
+ c->refs[i].segmap = NULL;
dav1d_ref_dec(&c->refs[i].refmvs);
+ c->refs[i].refmvs = NULL;
}
}
return res;
diff --git a/src/obu.c b/src/obu.c
index 57718dd..7d4fd5f 100644
--- a/src/obu.c
+++ b/src/obu.c
@@ -1060,7 +1060,9 @@
if (c->refs[i].p.p.data[0])
dav1d_thread_picture_unref(&c->refs[i].p);
dav1d_ref_dec(&c->refs[i].segmap);
+ c->refs[i].segmap = NULL;
dav1d_ref_dec(&c->refs[i].refmvs);
+ c->refs[i].refmvs = NULL;
if (c->cdf[i].cdf)
dav1d_cdf_thread_unref(&c->cdf[i]);
}
@@ -1187,6 +1189,7 @@
if (c->refs[r].segmap)
dav1d_ref_inc(c->refs[r].segmap);
dav1d_ref_dec(&c->refs[i].refmvs);
+ c->refs[i].refmvs = NULL;
c->refs[i].qidx = c->refs[r].qidx;
}
}