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;