From: Attila Nagy Date: Fri, 16 Sep 2011 10:54:06 +0000 (+0300) Subject: Multithreaded encoder, late sync loopfilter X-Git-Tag: v1.0.0~131^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=380d64ecb19984a1466e727244a41445ae919060;p=libvpx Multithreaded encoder, late sync loopfilter Sync with loopfilter thread just at the beginning of next frame encoding. This returns control to application faster and allows a better multicore scaling. When PSNR packets are generated the final filtered frame is needed imediatly so we cannot delay the sync. Change-Id: I288d97b5e331d41d6f5bb49d97986fa12ac6f066 --- diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index 35e187e54..efe98944e 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -3764,6 +3764,17 @@ static void encode_frame_to_data_rate vp8_setup_key_frame(cpi); } +#if CONFIG_MULTITHREAD + /* wait for loopfilter thread done (for last picture) + * don't do it for first frame, re-code and when PSNR is calculated + */ + if (cpi->b_multi_threaded && cm->current_video_frame && (!Loop) && + (!cpi->b_calculate_psnr)) + { + sem_wait(&cpi->h_event_end_lpf); + } +#endif + // transform / motion compensation build reconstruction frame vp8_encode_frame(cpi); @@ -4136,8 +4147,8 @@ static void encode_frame_to_data_rate vp8_pack_bitstream(cpi, dest, size); #if CONFIG_MULTITHREAD - /* wait for loopfilter thread done */ - if (cpi->b_multi_threaded) + /* if PSNR packets are generated we have to wait for the lpf */ + if (cpi->b_multi_threaded && cpi->b_calculate_psnr) { sem_wait(&cpi->h_event_end_lpf); }