From 46d208e1e097ab0bb37aea8f3ffa80a25b4d0eef Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sat, 22 Jun 2013 21:16:11 -0700 Subject: vp8: Wait for prev_frame to parse segment_map before reading it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes occasional failures of vp8-test-vector-010 with frame-level multithreading enabled. Signed-off-by: Martin Storsjö --- libavcodec/vp8.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'libavcodec/vp8.c') diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index 068764827b..17b79f5fc4 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -1679,6 +1679,11 @@ static void vp8_decode_mb_row_no_filter(AVCodecContext *avctx, void *tdata, if (s->mb_layout == 1) mb = s->macroblocks_base + ((s->mb_width+1)*(mb_y + 1) + 1); else { + // Make sure the previous frame has read its segmentation map, + // if we re-use the same map. + if (prev_frame && s->segmentation.enabled && + !s->segmentation.update_map) + ff_thread_await_progress(&prev_frame->tf, mb_y, 0); mb = s->macroblocks + (s->mb_height - mb_y - 1)*2; memset(mb - 1, 0, sizeof(*mb)); // zero left macroblock AV_WN32A(s->intra4x4_pred_mode_left, DC_PRED*0x01010101); @@ -1960,13 +1965,14 @@ static int vp8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, memset(s->ref_count, 0, sizeof(s->ref_count)); - // Make sure the previous frame has read its segmentation map, - // if we re-use the same map. - if (prev_frame && s->segmentation.enabled && !s->segmentation.update_map) - ff_thread_await_progress(&prev_frame->tf, 1, 0); - - if (s->mb_layout == 1) + if (s->mb_layout == 1) { + // Make sure the previous frame has read its segmentation map, + // if we re-use the same map. + if (prev_frame && s->segmentation.enabled && + !s->segmentation.update_map) + ff_thread_await_progress(&prev_frame->tf, 1, 0); vp8_decode_mv_mb_modes(avctx, curframe, prev_frame); + } if (avctx->active_thread_type == FF_THREAD_FRAME) num_jobs = 1; -- cgit v1.2.3