Index: source/libvpx/vp9/decoder/vp9_decoder.c |
diff --git a/source/libvpx/vp9/decoder/vp9_decoder.c b/source/libvpx/vp9/decoder/vp9_decoder.c |
index baf6ab7ef5243566ef425cacf1cad535bba4fa25..78eb36f360dda82b1d8596b7aa39f362c1dba06c 100644 |
--- a/source/libvpx/vp9/decoder/vp9_decoder.c |
+++ b/source/libvpx/vp9/decoder/vp9_decoder.c |
@@ -241,8 +241,19 @@ int vp9_receive_compressed_data(VP9Decoder *pbi, |
cm->new_fb_idx = get_free_fb(cm); |
if (setjmp(cm->error.jmp)) { |
+ const VP9WorkerInterface *const winterface = vp9_get_worker_interface(); |
+ int i; |
+ |
pbi->need_resync = 1; |
cm->error.setjmp = 0; |
+ |
+ // Synchronize all threads immediately as a subsequent decode call may |
+ // cause a resize invalidating some allocations. |
+ winterface->sync(&pbi->lf_worker); |
+ for (i = 0; i < pbi->num_tile_workers; ++i) { |
+ winterface->sync(&pbi->tile_workers[i]); |
+ } |
+ |
vp9_clear_system_state(); |
// We do not know if the missing frame(s) was supposed to update |