summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2022-04-19 17:24:26 -0700
committerJames Zern <jzern@google.com>2022-04-19 17:27:39 -0700
commit8da05d39b94ab09ca1993e5c1cb6430f0d3000db (patch)
tree1b07f1d558595d0d1772b0eb8d6c2ee207ed4fe3
parent665f6a3065555317e75915af2561cf9b776e50b6 (diff)
downloadlibvpx-8da05d39b94ab09ca1993e5c1cb6430f0d3000db.tar.gz
vp8_decode: free mt buffers early on resolution change
this avoids a desynchronization of mb_rows if an allocation prior to vp8mt_alloc_temp_buffers() fails and the decoder is then destroyed Bug: webm:1759 Change-Id: I75457ef9ceb24c8a8fd213c3690e7c1cf0ec425f
-rw-r--r--vp8/vp8_dx_iface.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/vp8/vp8_dx_iface.c b/vp8/vp8_dx_iface.c
index ba0714abe..6d88e5154 100644
--- a/vp8/vp8_dx_iface.c
+++ b/vp8/vp8_dx_iface.c
@@ -371,8 +371,6 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
pc->Width = ctx->si.w;
pc->Height = ctx->si.h;
{
- int prev_mb_rows = pc->mb_rows;
-
if (setjmp(pbi->common.error.jmp)) {
pbi->common.error.setjmp = 0;
/* on failure clear the cached resolution to ensure a full
@@ -398,6 +396,12 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
"Invalid frame height");
}
+#if CONFIG_MULTITHREAD
+ if (vpx_atomic_load_acquire(&pbi->b_multithreaded_rd)) {
+ vp8mt_de_alloc_temp_buffers(pbi, pc->mb_rows);
+ }
+#endif
+
if (vp8_alloc_frame_buffers(pc, pc->Width, pc->Height)) {
vpx_internal_error(&pc->error, VPX_CODEC_MEM_ERROR,
"Failed to allocate frame buffers");
@@ -442,10 +446,8 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
#if CONFIG_MULTITHREAD
if (vpx_atomic_load_acquire(&pbi->b_multithreaded_rd)) {
- vp8mt_alloc_temp_buffers(pbi, pc->Width, prev_mb_rows);
+ vp8mt_alloc_temp_buffers(pbi, pc->Width, 0);
}
-#else
- (void)prev_mb_rows;
#endif
}