diff options
author | Henrik Gramner <gramner@twoorioles.com> | 2020-12-09 00:34:43 +0300 |
---|---|---|
committer | Henrik Gramner <henrik@gramner.com> | 2020-12-11 00:26:29 +0300 |
commit | 135286f4796fe5dc26cf37b73a2c3df4cfa85792 (patch) | |
tree | 25e59939a504df0f48b6c166ea51a156d4d5f165 /src/decode.c | |
parent | e705519d406941886431300ca432d33980cb554c (diff) |
Fix use of references to buffers after calling dav1d_close()
9057d286 had the side effect of causing references to buffers allocated
using memory pools to no longer be valid after closing the decoder.
Restore this functionality by making buffer pools reference counted.
Diffstat (limited to 'src/decode.c')
-rw-r--r-- | src/decode.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/decode.c b/src/decode.c index 8462c0f..4b076ca 100644 --- a/src/decode.c +++ b/src/decode.c @@ -3462,7 +3462,7 @@ int dav1d_submit_frame(Dav1dContext *const c) { // ref_mvs if ((f->frame_hdr->frame_type & 1) || f->frame_hdr->allow_intrabc) { - f->mvs_ref = dav1d_ref_create_using_pool(&c->refmvs_pool, + f->mvs_ref = dav1d_ref_create_using_pool(c->refmvs_pool, sizeof(*f->mvs) * f->sb128h * 16 * (f->b4_stride >> 1)); if (!f->mvs_ref) { res = DAV1D_ERR(ENOMEM); @@ -3526,7 +3526,7 @@ int dav1d_submit_frame(Dav1dContext *const c) { // We're updating an existing map, but need somewhere to // put the new values. Allocate them here (the data // actually gets set elsewhere) - f->cur_segmap_ref = dav1d_ref_create_using_pool(&c->segmap_pool, + f->cur_segmap_ref = dav1d_ref_create_using_pool(c->segmap_pool, sizeof(*f->cur_segmap) * f->b4_stride * 32 * f->sb128h); if (!f->cur_segmap_ref) { dav1d_ref_dec(&f->prev_segmap_ref); @@ -3543,7 +3543,7 @@ int dav1d_submit_frame(Dav1dContext *const c) { } else { // We need to make a new map. Allocate one here and zero it out. const size_t segmap_size = sizeof(*f->cur_segmap) * f->b4_stride * 32 * f->sb128h; - f->cur_segmap_ref = dav1d_ref_create_using_pool(&c->segmap_pool, segmap_size); + f->cur_segmap_ref = dav1d_ref_create_using_pool(c->segmap_pool, segmap_size); if (!f->cur_segmap_ref) { res = DAV1D_ERR(ENOMEM); goto error; |