shithub: libvpx

Download patch

ref: 1cdb5439e74061234e518519e7768f543d8d5a37
parent: 07eb8c8da3d0cd5b6339d90a677c3d824d787c86
parent: dd88f482964a0fb4c8044ff7ff82adbc014daa5b
author: hkuang <[email protected]>
date: Mon Feb 9 11:25:20 EST 2015

Merge "Set the maximum decode threads to be 8."

--- a/vp9/common/vp9_thread.h
+++ b/vp9/common/vp9_thread.h
@@ -22,6 +22,10 @@
 extern "C" {
 #endif
 
+// Set maximum decode threads to be 8 due to the limit of frame buffers
+// and not enough semaphores in the emulation layer on windows.
+#define MAX_DECODE_THREADS 8
+
 #if CONFIG_MULTITHREAD
 
 #if defined(_WIN32)
@@ -103,8 +107,8 @@
 static INLINE int pthread_cond_init(pthread_cond_t *const condition,
                                     void* cond_attr) {
   (void)cond_attr;
-  condition->waiting_sem_ = CreateSemaphore(NULL, 0, 1, NULL);
-  condition->received_sem_ = CreateSemaphore(NULL, 0, 1, NULL);
+  condition->waiting_sem_ = CreateSemaphore(NULL, 0, MAX_DECODE_THREADS, NULL);
+  condition->received_sem_ = CreateSemaphore(NULL, 0, MAX_DECODE_THREADS, NULL);
   condition->signal_event_ = CreateEvent(NULL, FALSE, FALSE, NULL);
   if (condition->waiting_sem_ == NULL ||
       condition->received_sem_ == NULL ||
--- a/vp9/vp9_dx_iface.c
+++ b/vp9/vp9_dx_iface.c
@@ -363,6 +363,8 @@
   ctx->num_cache_frames = 0;
   ctx->num_frame_workers =
       (ctx->frame_parallel_decode == 1) ? ctx->cfg.threads: 1;
+  if (ctx->num_frame_workers > MAX_DECODE_THREADS)
+    ctx->num_frame_workers = MAX_DECODE_THREADS;
   ctx->available_threads = ctx->num_frame_workers;
   ctx->flushed = 0;