From eebd8307c54eebc139ceb7d2bb78c1bf529e0cee Mon Sep 17 00:00:00 2001 From: Devaev Maxim Date: Tue, 8 Dec 2020 15:39:53 +0300 Subject: [PATCH] refactoring --- src/ustreamer/http/server.c | 16 +++++++-------- src/ustreamer/stream.c | 41 ++++++++++++++++++++----------------- src/ustreamer/stream.h | 10 +++++---- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/ustreamer/http/server.c b/src/ustreamer/http/server.c index 60a3672..3b458b6 100644 --- a/src/ustreamer/http/server.c +++ b/src/ustreamer/http/server.c @@ -805,14 +805,14 @@ static void _http_exposed_refresh(UNUSED int fd, UNUSED short what, void *v_serv bool picture_updated = false; # define UNLOCK_STREAM { \ - atomic_store(&STREAM(updated), false); \ - A_MUTEX_UNLOCK(&STREAM(mutex)); \ + atomic_store(&STREAM(video->updated), false); \ + A_MUTEX_UNLOCK(&STREAM(video->mutex)); \ } - if (atomic_load(&STREAM(updated))) { + if (atomic_load(&STREAM(video->updated))) { LOG_DEBUG("Refreshing HTTP exposed ..."); - A_MUTEX_LOCK(&STREAM(mutex)); - if (STREAM(online)) { + A_MUTEX_LOCK(&STREAM(video->mutex)); + if (STREAM(video->online)) { picture_updated = _expose_new_picture_unsafe(server); UNLOCK_STREAM; } else { @@ -847,14 +847,14 @@ static void _http_exposed_refresh(UNUSED int fd, UNUSED short what, void *v_serv } static bool _expose_new_picture_unsafe(struct http_server_t *server) { - EX(captured_fps) = STREAM(captured_fps); + EX(captured_fps) = STREAM(video->captured_fps); EX(expose_begin_ts) = get_now_monotonic(); if (server->drop_same_frames) { if ( EX(online) && EX(dropped) < server->drop_same_frames - && picture_compare(EX(picture), STREAM(picture)) + && picture_compare(EX(picture), STREAM(video->picture)) ) { EX(expose_cmp_ts) = get_now_monotonic(); EX(expose_end_ts) = EX(expose_cmp_ts); @@ -869,7 +869,7 @@ static bool _expose_new_picture_unsafe(struct http_server_t *server) { } } - picture_copy(STREAM(picture), EX(picture)); + picture_copy(STREAM(video->picture), EX(picture)); EX(online) = true; EX(dropped) = 0; diff --git a/src/ustreamer/stream.c b/src/ustreamer/stream.c index 2d57b91..d6e1fa7 100644 --- a/src/ustreamer/stream.c +++ b/src/ustreamer/stream.c @@ -84,32 +84,35 @@ static long double _workers_pool_get_fluency_delay(struct _workers_pool_t *pool, struct stream_t *stream_init(struct device_t *dev, struct encoder_t *encoder) { struct process_t *proc; + struct video_t *video; struct stream_t *stream; A_CALLOC(proc, 1); atomic_init(&proc->stop, false); atomic_init(&proc->slowdown, false); + A_CALLOC(video, 1); + video->picture = picture_init(); + atomic_init(&video->updated, false); + A_MUTEX_INIT(&video->mutex); + A_CALLOC(stream, 1); - // FIXME stream->error_delay = 1; # ifdef WITH_RAWSINK stream->rawsink_name = ""; stream->rawsink_mode = 0660; # endif - // end-of-fixme - stream->picture = picture_init(); + stream->proc = proc; + stream->video = video; stream->dev = dev; stream->encoder = encoder; - atomic_init(&stream->updated, false); - A_MUTEX_INIT(&stream->mutex); - stream->proc = proc; return stream; } void stream_destroy(struct stream_t *stream) { - A_MUTEX_DESTROY(&stream->mutex); - picture_destroy(stream->picture); + A_MUTEX_DESTROY(&stream->video->mutex); + picture_destroy(stream->video->picture); + free(stream->video); free(stream->proc); free(stream); } @@ -138,7 +141,7 @@ void stream_loop(struct stream_t *stream) { LOG_INFO("Capturing ..."); LOG_DEBUG("Pre-allocating memory for stream picture ..."); - picture_realloc_data(stream->picture, picture_get_generous_size(DEV(run->width), DEV(run->height))); + picture_realloc_data(stream->video->picture, picture_get_generous_size(DEV(run->width), DEV(run->height))); while (!atomic_load(&stream->proc->stop)) { struct _worker_t *ready_wr; @@ -252,10 +255,10 @@ void stream_loop(struct stream_t *stream) { } } - A_MUTEX_LOCK(&stream->mutex); - stream->online = false; - atomic_store(&stream->updated, true); - A_MUTEX_UNLOCK(&stream->mutex); + A_MUTEX_LOCK(&stream->video->mutex); + stream->video->online = false; + atomic_store(&stream->video->updated, true); + A_MUTEX_UNLOCK(&stream->video->mutex); _workers_pool_destroy(pool); device_switch_capturing(stream->dev, false); @@ -331,15 +334,15 @@ static struct _workers_pool_t *_stream_init_one(struct stream_t *stream) { } static void _stream_expose_picture(struct stream_t *stream, struct picture_t *picture, unsigned captured_fps) { - A_MUTEX_LOCK(&stream->mutex); + A_MUTEX_LOCK(&stream->video->mutex); - picture_copy(picture, stream->picture); + picture_copy(picture, stream->video->picture); - stream->online = true; - stream->captured_fps = captured_fps; - atomic_store(&stream->updated, true); + stream->video->online = true; + stream->video->captured_fps = captured_fps; + atomic_store(&stream->video->updated, true); - A_MUTEX_UNLOCK(&stream->mutex); + A_MUTEX_UNLOCK(&stream->video->mutex); } static struct _workers_pool_t *_workers_pool_init(struct stream_t *stream) { diff --git a/src/ustreamer/stream.h b/src/ustreamer/stream.h index 714b0b9..54b47c2 100644 --- a/src/ustreamer/stream.h +++ b/src/ustreamer/stream.h @@ -51,25 +51,27 @@ struct process_t { atomic_bool slowdown; }; -struct stream_t { +struct video_t { struct picture_t *picture; bool online; unsigned captured_fps; atomic_bool updated; pthread_mutex_t mutex; +}; - // FIXME: Config params, move other to runtime +struct stream_t { unsigned error_delay; # ifdef WITH_RAWSINK char *rawsink_name; mode_t rawsink_mode; bool rawsink_rm; # endif - // end-of-fixme - struct process_t *proc; struct device_t *dev; struct encoder_t *encoder; + + struct process_t *proc; + struct video_t *video; };