From 0ccb54b4f023caa88f835943f4078249832fbf9f Mon Sep 17 00:00:00 2001 From: Devaev Maxim Date: Tue, 8 Dec 2020 11:43:35 +0300 Subject: [PATCH] refactoring --- src/ustreamer/device.c | 9 --------- src/ustreamer/device.h | 9 --------- src/ustreamer/main.c | 2 +- src/ustreamer/options.c | 31 ++++++++++++++++++++----------- src/ustreamer/options.h | 5 ++++- src/ustreamer/stream.c | 17 ++++++++++++----- src/ustreamer/stream.h | 9 +++++++++ 7 files changed, 46 insertions(+), 36 deletions(-) diff --git a/src/ustreamer/device.c b/src/ustreamer/device.c index 58a457a..b7f26bc 100644 --- a/src/ustreamer/device.c +++ b/src/ustreamer/device.c @@ -100,15 +100,6 @@ struct device_t *device_init(void) { dev->n_buffers = get_cores_available() + 1; dev->min_frame_size = 128; dev->timeout = 1; - - // FIXME: Not device params - dev->error_delay = 1; -# ifdef WITH_RAWSINK - dev->rawsink_name = ""; - dev->rawsink_mode = 0660; -# endif - // end-of-fixme - dev->run = run; return dev; } diff --git a/src/ustreamer/device.h b/src/ustreamer/device.h index cfad645..1d377a6 100644 --- a/src/ustreamer/device.h +++ b/src/ustreamer/device.h @@ -139,15 +139,6 @@ struct device_t { bool persistent; unsigned timeout; - // FIXME: Not device params - unsigned error_delay; -# ifdef WITH_RAWSINK - char *rawsink_name; - mode_t rawsink_mode; - bool rawsink_rm; -# endif - // end-of-fixme - struct controls_t ctl; struct device_runtime_t *run; diff --git a/src/ustreamer/main.c b/src/ustreamer/main.c index b32d381..78f341e 100644 --- a/src/ustreamer/main.c +++ b/src/ustreamer/main.c @@ -121,7 +121,7 @@ int main(int argc, char *argv[]) { stream = stream_init(dev, encoder); server = http_server_init(stream); - if ((exit_code = options_parse(options, dev, encoder, server)) == 0) { + if ((exit_code = options_parse(options, dev, encoder, stream, server)) == 0) { # ifdef WITH_GPIO gpio_init(); # endif diff --git a/src/ustreamer/options.c b/src/ustreamer/options.c index cc0f369..fc702be 100644 --- a/src/ustreamer/options.c +++ b/src/ustreamer/options.c @@ -209,7 +209,10 @@ static int _parse_glitched_resolutions(const char *str, struct encoder_t *encode #endif static void _features(void); -static void _help(struct device_t *dev, struct encoder_t *encoder, struct http_server_t *server); + +static void _help( + struct device_t *dev, struct encoder_t *encoder, + struct stream_t *stream, struct http_server_t *server); struct options_t *options_init(int argc, char *argv[]) { @@ -236,7 +239,10 @@ void options_destroy(struct options_t *options) { } -int options_parse(struct options_t *options, struct device_t *dev, struct encoder_t *encoder, struct http_server_t *server) { +int options_parse( + struct options_t *options, struct device_t *dev, struct encoder_t *encoder, + struct stream_t *stream, struct http_server_t *server) { + # define OPT_SET(_dest, _value) { \ _dest = _value; \ break; \ @@ -349,7 +355,7 @@ int options_parse(struct options_t *options, struct device_t *dev, struct encode break; # endif case _O_DEVICE_TIMEOUT: OPT_NUMBER("--device-timeout", dev->timeout, 1, 60, 0); - case _O_DEVICE_ERROR_DELAY: OPT_NUMBER("--device-error-delay", dev->error_delay, 1, 60, 0); + case _O_DEVICE_ERROR_DELAY: OPT_NUMBER("--device-error-delay", stream->error_delay, 1, 60, 0); case _O_IMAGE_DEFAULT: OPT_CTL_DEFAULT_NOBREAK(brightness); @@ -396,9 +402,9 @@ int options_parse(struct options_t *options, struct device_t *dev, struct encode case _O_SERVER_TIMEOUT: OPT_NUMBER("--server-timeout", server->timeout, 1, 60, 0); # ifdef WITH_RAWSINK - case _O_RAWSINK: OPT_SET(dev->rawsink_name, optarg); - case _O_RAWSINK_MODE: OPT_NUMBER("--raw-sink-mode", dev->rawsink_mode, INT_MIN, INT_MAX, 8); - case _O_RAWSINK_RM: OPT_SET(dev->rawsink_rm, true); + case _O_RAWSINK: OPT_SET(stream->rawsink_name, optarg); + case _O_RAWSINK_MODE: OPT_NUMBER("--raw-sink-mode", stream->rawsink_mode, INT_MIN, INT_MAX, 8); + case _O_RAWSINK_RM: OPT_SET(stream->rawsink_rm, true); # endif # ifdef WITH_GPIO @@ -428,12 +434,12 @@ int options_parse(struct options_t *options, struct device_t *dev, struct encode case _O_FORCE_LOG_COLORS: OPT_SET(log_colored, true); case _O_NO_LOG_COLORS: OPT_SET(log_colored, false); - case _O_HELP: _help(dev, encoder, server); return 1; + case _O_HELP: _help(dev, encoder, stream, server); return 1; case _O_VERSION: puts(VERSION); return 1; case _O_FEATURES: _features(); return 1; case 0: break; - default: _help(dev, encoder, server); return -1; + default: _help(dev, encoder, stream, server); return -1; } } @@ -561,7 +567,10 @@ static void _features(void) { # endif } -static void _help(struct device_t *dev, struct encoder_t *encoder, struct http_server_t *server) { +static void _help( + struct device_t *dev, struct encoder_t *encoder, + struct stream_t *stream, struct http_server_t *server) { + printf("\nuStreamer - Lightweight and fast MJPG-HTTP streamer\n"); printf("═══════════════════════════════════════════════════\n\n"); printf("Version: %s; license: GPLv3\n", VERSION); @@ -611,7 +620,7 @@ static void _help(struct device_t *dev, struct encoder_t *encoder, struct http_s # endif printf(" --device-timeout ────────────── Timeout for device querying. Default: %u.\n\n", dev->timeout); printf(" --device-error-delay ────────── Delay before trying to connect to the device again\n"); - printf(" after an error (timeout for example). Default: %u.\n\n", dev->error_delay); + printf(" after an error (timeout for example). Default: %u.\n\n", stream->error_delay); printf("Image control options:\n"); printf("══════════════════════\n"); printf(" --image-default ────────────────────── Reset all image settings below to default. Default: no change.\n\n"); @@ -661,7 +670,7 @@ static void _help(struct device_t *dev, struct encoder_t *encoder, struct http_s printf("═════════════════\n"); printf(" --raw-sink ────── Use the shared memory to sink RAW frames before encoding.\n"); printf(" Most likely you will never need it. Default: disabled.\n\n"); - printf(" --raw-sink-mode ─ Set RAW sink permissions (like 777). Default: %o.\n\n", dev->rawsink_mode); + printf(" --raw-sink-mode ─ Set RAW sink permissions (like 777). Default: %o.\n\n", stream->rawsink_mode); printf(" --raw-sink-rm ────────── Remove shared memory on stop. Default: disabled.\n\n"); #endif #ifdef WITH_GPIO diff --git a/src/ustreamer/options.h b/src/ustreamer/options.h index e26a297..7be760b 100644 --- a/src/ustreamer/options.h +++ b/src/ustreamer/options.h @@ -39,6 +39,7 @@ #include "device.h" #include "encoder.h" +#include "stream.h" #include "http/server.h" #ifdef WITH_GPIO # include "gpio/gpio.h" @@ -55,4 +56,6 @@ struct options_t { struct options_t *options_init(int argc, char *argv[]); void options_destroy(struct options_t *options); -int options_parse(struct options_t *options, struct device_t *dev, struct encoder_t *encoder, struct http_server_t *server); +int options_parse( + struct options_t *options, struct device_t *dev, struct encoder_t *encoder, + struct stream_t *stream, struct http_server_t *server); diff --git a/src/ustreamer/stream.c b/src/ustreamer/stream.c index 9406d1d..2d57b91 100644 --- a/src/ustreamer/stream.c +++ b/src/ustreamer/stream.c @@ -91,6 +91,13 @@ struct stream_t *stream_init(struct device_t *dev, struct encoder_t *encoder) { atomic_init(&proc->slowdown, false); 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->dev = dev; stream->encoder = encoder; @@ -116,8 +123,8 @@ void stream_loop(struct stream_t *stream) { # ifdef WITH_RAWSINK struct rawsink_t *rawsink = NULL; - if (DEV(rawsink_name[0]) != '\0') { - rawsink = rawsink_init(DEV(rawsink_name), DEV(rawsink_mode), DEV(rawsink_rm), true); + if (stream->rawsink_name[0] != '\0') { + rawsink = rawsink_init(stream->rawsink_name, stream->rawsink_mode, stream->rawsink_rm, true); } # endif @@ -290,7 +297,7 @@ static struct _workers_pool_t *_stream_init_loop(struct stream_t *stream) { LOG_INFO("Waiting for the device access ..."); access_error = errno; } - sleep(stream->dev->error_delay); + sleep(stream->error_delay); continue; } else { SEP_INFO('='); @@ -298,8 +305,8 @@ static struct _workers_pool_t *_stream_init_loop(struct stream_t *stream) { } if ((pool = _stream_init_one(stream)) == NULL) { - LOG_INFO("Sleeping %u seconds before new stream init ...", stream->dev->error_delay); - sleep(stream->dev->error_delay); + LOG_INFO("Sleeping %u seconds before new stream init ...", stream->error_delay); + sleep(stream->error_delay); } else { break; } diff --git a/src/ustreamer/stream.h b/src/ustreamer/stream.h index 80b68a3..714b0b9 100644 --- a/src/ustreamer/stream.h +++ b/src/ustreamer/stream.h @@ -58,6 +58,15 @@ struct stream_t { atomic_bool updated; pthread_mutex_t mutex; + // FIXME: Config params, move other to runtime + 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;