Index: source/libvpx/vp9/common/vp9_thread.h |
diff --git a/source/libvpx/vp9/common/vp9_thread.h b/source/libvpx/vp9/common/vp9_thread.h |
index 864579c03c3cb3934b0d15f956c9767e3d6836d4..12848fedeff0624b91b81a489f7bfcec31492829 100644 |
--- a/source/libvpx/vp9/common/vp9_thread.h |
+++ b/source/libvpx/vp9/common/vp9_thread.h |
@@ -22,9 +22,13 @@ |
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) |
+#if defined(_WIN32) && !HAVE_PTHREAD_H |
#include <errno.h> // NOLINT |
#include <process.h> // NOLINT |
#include <windows.h> // NOLINT |
@@ -103,8 +107,8 @@ static INLINE int pthread_cond_destroy(pthread_cond_t *const condition) { |
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 || |