From e21c39e17247cf6a955d1747ec29a350d91d3a1b Mon Sep 17 00:00:00 2001 From: Devaev Maxim Date: Sat, 2 Jan 2021 17:18:35 +0300 Subject: [PATCH] refactoring --- src/ustreamer/stream.c | 17 ++++++++++------- src/ustreamer/workers.c | 4 ++-- src/ustreamer/workers.h | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/ustreamer/stream.c b/src/ustreamer/stream.c index 807e9f9..7470450 100644 --- a/src/ustreamer/stream.c +++ b/src/ustreamer/stream.c @@ -36,7 +36,7 @@ static workers_pool_s *_stream_init_loop(stream_s *stream); static workers_pool_s *_stream_init_one(stream_s *stream); static bool _stream_expose_frame(stream_s *stream, frame_s *frame, unsigned captured_fps); -static void *_worker_job_init(worker_s *wr); +static void *_worker_job_init(worker_s *wr, void *arg); static void _worker_job_destroy(void *v_job); static bool _worker_run_job(worker_s *wr); @@ -170,10 +170,7 @@ void stream_loop(stream_s *stream) { } # endif - _job_s *job = (_job_s *)ready_wr->job; - job->dev = stream->dev; - job->encoder = stream->encoder; - job->buf_index = buf_index; + ((_job_s *)ready_wr->job)->buf_index = buf_index; workers_pool_assign(pool, ready_wr); LOG_DEBUG("Assigned new frame in buffer %d to worker %s", buf_index, ready_wr->name); } @@ -279,7 +276,9 @@ static workers_pool_s *_stream_init_one(stream_s *stream) { return workers_pool_init( "jpeg", stream->encoder->run->n_workers, desired_interval, - _worker_job_init, _worker_job_destroy, _worker_run_job); + _worker_job_init, (void *)stream, + _worker_job_destroy, + _worker_run_job); error: device_close(stream->dev); @@ -343,10 +342,14 @@ static bool _stream_expose_frame(stream_s *stream, frame_s *frame, unsigned capt # undef VID } -static void *_worker_job_init(worker_s *wr) { +static void *_worker_job_init(worker_s *wr, void *arg) { _job_s *job; A_CALLOC(job, 1); + stream_s *stream = (stream_s *)arg; + job->dev = stream->dev; + job->encoder = stream->encoder; + const size_t dest_role_len = strlen(wr->name) + 16; A_CALLOC(job->dest_role, dest_role_len); snprintf(job->dest_role, dest_role_len, "%s_dest", wr->name); diff --git a/src/ustreamer/workers.c b/src/ustreamer/workers.c index 4482764..ec80283 100644 --- a/src/ustreamer/workers.c +++ b/src/ustreamer/workers.c @@ -28,7 +28,7 @@ static void *_worker_thread(void *v_worker); workers_pool_s *workers_pool_init( const char *name, unsigned n_workers, long double desired_interval, - void *(*job_init)(worker_s *wr), + void *(*job_init)(worker_s *wr, void *arg), void *job_init_arg, void (*job_destroy)(void *), bool (*run_job)(worker_s *)) { @@ -63,7 +63,7 @@ workers_pool_s *workers_pool_init( A_COND_INIT(&WR(has_job_cond)); WR(pool) = pool; - WR(job) = job_init(&pool->workers[number]); + WR(job) = job_init(&pool->workers[number], job_init_arg); A_THREAD_CREATE(&WR(tid), _worker_thread, (void *)&(pool->workers[number])); pool->free_workers += 1; diff --git a/src/ustreamer/workers.h b/src/ustreamer/workers.h index f743f2d..763a3ca 100644 --- a/src/ustreamer/workers.h +++ b/src/ustreamer/workers.h @@ -79,7 +79,7 @@ typedef struct workers_pool_sx { workers_pool_s *workers_pool_init( const char *name, unsigned n_workers, long double desired_interval, - void *(*job_init)(worker_s *wr), + void *(*job_init)(worker_s *wr, void *arg), void *job_init_arg, void (*job_destroy)(void *job), bool (*run_job)(worker_s *));