]> granicus.if.org Git - libvpx/commitdiff
Fix potential encoder dead-lock after picture resize
authorAttila Nagy <attilanagy@google.com>
Tue, 31 Jul 2012 11:04:45 +0000 (14:04 +0300)
committerAttila Nagy <attilanagy@google.com>
Wed, 1 Aug 2012 05:28:54 +0000 (08:28 +0300)
The sync interval for the multithreaded encoder was considered as not changing
during the encoding. This is not true if picture size is changed.
The encoder could dead-lock because the main thread and the other threads were
using different sync interval.

Change-Id: I75232bbdbc6c02d77f830d870fd8b4e96697c64e

vp8/encoder/ethreading.c

index 919bc70a09ba2f4aafe7f9e14dd4a7f4fee985ba..e0bb1b09fd90538fce4b3dc267b32ef7857d20fe 100644 (file)
@@ -59,8 +59,6 @@ THREAD_FUNCTION thread_encoding_proc(void *p_data)
     MB_ROW_COMP *mbri = (MB_ROW_COMP *)(((ENCODETHREAD_DATA *)p_data)->ptr2);
     ENTROPY_CONTEXT_PLANES mb_row_left_context;
 
-    const int nsync = cpi->mt_sync_range;
-
     while (1)
     {
         if (cpi->b_multi_threaded == 0)
@@ -68,6 +66,7 @@ THREAD_FUNCTION thread_encoding_proc(void *p_data)
 
         if (sem_wait(&cpi->h_event_start_encoding[ithread]) == 0)
         {
+            const int nsync = cpi->mt_sync_range;
             VP8_COMMON *cm = &cpi->common;
             int mb_row;
             MACROBLOCK *x = &mbri->mb;