mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-18 05:23:43 +00:00
free_worker -> ready_worker
This commit is contained in:
34
src/stream.c
34
src/stream.c
@@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
static bool _stream_wait_worker(struct stream_t *stream, struct workers_pool_t *pool, struct worker_t **ready_worker);
|
static bool _stream_wait_worker(struct stream_t *stream, struct workers_pool_t *pool, struct worker_t **ready_worker);
|
||||||
static void _stream_expose_picture(struct stream_t *stream, unsigned buf_index);
|
static void _stream_expose_picture(struct stream_t *stream, unsigned buf_index);
|
||||||
static void _stream_give_buf_to_worker(struct workers_pool_t *pool, struct worker_t *free_worker, unsigned buf_index);
|
static void _stream_give_buf_to_worker(struct workers_pool_t *pool, struct worker_t *ready_worker, unsigned buf_index);
|
||||||
static long double _stream_get_fluency_delay(struct device_t *dev, struct workers_pool_t *pool);
|
static long double _stream_get_fluency_delay(struct device_t *dev, struct workers_pool_t *pool);
|
||||||
|
|
||||||
static int _stream_init_loop(struct stream_t *stream, struct workers_pool_t *pool);
|
static int _stream_init_loop(struct stream_t *stream, struct workers_pool_t *pool);
|
||||||
@@ -199,8 +199,6 @@ void stream_loop(struct stream_t *stream) {
|
|||||||
LOG_VERBOSE("Fluency: delay=%.03Lf; grab_after=%.03Lf", fluency_delay, grab_after);
|
LOG_VERBOSE("Fluency: delay=%.03Lf; grab_after=%.03Lf", fluency_delay, grab_after);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("Grabbed a new frame to buffer %u", buf_index);
|
|
||||||
|
|
||||||
_stream_give_buf_to_worker(&pool, ready_worker, buf_index);
|
_stream_give_buf_to_worker(&pool, ready_worker, buf_index);
|
||||||
|
|
||||||
goto next_handlers; // Поток сам освободит буфер
|
goto next_handlers; // Поток сам освободит буфер
|
||||||
@@ -309,32 +307,34 @@ static void _stream_expose_picture(struct stream_t *stream, unsigned buf_index)
|
|||||||
# undef PICTURE
|
# undef PICTURE
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _stream_give_buf_to_worker(struct workers_pool_t *pool, struct worker_t *free_worker, unsigned buf_index) {
|
static void _stream_give_buf_to_worker(struct workers_pool_t *pool, struct worker_t *ready_worker, unsigned buf_index) {
|
||||||
if (pool->oldest_worker == NULL) {
|
if (pool->oldest_worker == NULL) {
|
||||||
pool->oldest_worker = free_worker;
|
pool->oldest_worker = ready_worker;
|
||||||
pool->latest_worker = pool->oldest_worker;
|
pool->latest_worker = pool->oldest_worker;
|
||||||
} else {
|
} else {
|
||||||
if (free_worker->order_next) {
|
if (ready_worker->order_next) {
|
||||||
free_worker->order_next->order_prev = free_worker->order_prev;
|
ready_worker->order_next->order_prev = ready_worker->order_prev;
|
||||||
}
|
}
|
||||||
if (free_worker->order_prev) {
|
if (ready_worker->order_prev) {
|
||||||
free_worker->order_prev->order_next = free_worker->order_next;
|
ready_worker->order_prev->order_next = ready_worker->order_next;
|
||||||
}
|
}
|
||||||
free_worker->order_prev = pool->latest_worker;
|
ready_worker->order_prev = pool->latest_worker;
|
||||||
pool->latest_worker->order_next = free_worker;
|
pool->latest_worker->order_next = ready_worker;
|
||||||
pool->latest_worker = free_worker;
|
pool->latest_worker = ready_worker;
|
||||||
}
|
}
|
||||||
pool->latest_worker->order_next = NULL;
|
pool->latest_worker->order_next = NULL;
|
||||||
|
|
||||||
A_MUTEX_LOCK(&free_worker->has_job_mutex);
|
A_MUTEX_LOCK(&ready_worker->has_job_mutex);
|
||||||
free_worker->buf_index = buf_index;
|
ready_worker->buf_index = buf_index;
|
||||||
atomic_store(&free_worker->has_job, true);
|
atomic_store(&ready_worker->has_job, true);
|
||||||
A_MUTEX_UNLOCK(&free_worker->has_job_mutex);
|
A_MUTEX_UNLOCK(&ready_worker->has_job_mutex);
|
||||||
A_COND_SIGNAL(&free_worker->has_job_cond);
|
A_COND_SIGNAL(&ready_worker->has_job_cond);
|
||||||
|
|
||||||
A_MUTEX_LOCK(&pool->free_workers_mutex);
|
A_MUTEX_LOCK(&pool->free_workers_mutex);
|
||||||
pool->free_workers -= 1;
|
pool->free_workers -= 1;
|
||||||
A_MUTEX_UNLOCK(&pool->free_workers_mutex);
|
A_MUTEX_UNLOCK(&pool->free_workers_mutex);
|
||||||
|
|
||||||
|
LOG_DEBUG("Assigned new frame in buffer %u to worker %u", buf_index, ready_worker->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
static long double _stream_get_fluency_delay(struct device_t *dev, struct workers_pool_t *pool) {
|
static long double _stream_get_fluency_delay(struct device_t *dev, struct workers_pool_t *pool) {
|
||||||
|
|||||||
Reference in New Issue
Block a user