ref: 380d64ecb19984a1466e727244a41445ae919060
parent: 6f9457ec12a98b3aceefbcb79783c084268d0b36
author: Attila Nagy <attilanagy@google.com>
date: Fri Sep 16 09:54:06 EDT 2011
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
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -3764,6 +3764,17 @@
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 @@
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);
}