From c51984c9d91511a411bb22bef4e52204fa1b5aae Mon Sep 17 00:00:00 2001 From: Maxim Devaev Date: Fri, 26 Nov 2021 06:34:20 +0300 Subject: [PATCH] common --m2m-device option --- src/ustreamer/encoder.c | 3 ++- src/ustreamer/encoder.h | 1 + src/ustreamer/options.c | 8 ++++---- src/ustreamer/stream.c | 3 +-- src/ustreamer/stream.h | 1 - 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ustreamer/encoder.c b/src/ustreamer/encoder.c index 581c301..81c3a39 100644 --- a/src/ustreamer/encoder.c +++ b/src/ustreamer/encoder.c @@ -53,6 +53,7 @@ encoder_s *encoder_init(void) { A_CALLOC(enc, 1); enc->type = run->type; enc->n_workers = get_cores_available(); + enc->m2m_path = "/dev/video11"; enc->run = run; return enc; } @@ -136,7 +137,7 @@ workers_pool_s *encoder_workers_pool_init(encoder_s *enc, device_s *dev) { {"BITRATE", true, V4L2_CID_MPEG_VIDEO_BITRATE, bitrate * 1000}, {NULL, false, 0, 0}, }; - ER(m2ms[ER(n_m2ms)]) = m2m_encoder_init(name, "/dev/video11", V4L2_PIX_FMT_MJPEG, 0, options); + ER(m2ms[ER(n_m2ms)]) = m2m_encoder_init(name, enc->m2m_path, V4L2_PIX_FMT_MJPEG, 0, options); } } diff --git a/src/ustreamer/encoder.h b/src/ustreamer/encoder.h index 5c1d517..7bea977 100644 --- a/src/ustreamer/encoder.h +++ b/src/ustreamer/encoder.h @@ -83,6 +83,7 @@ typedef struct { typedef struct { encoder_type_e type; unsigned n_workers; + char *m2m_path; encoder_runtime_s *run; } encoder_s; diff --git a/src/ustreamer/options.c b/src/ustreamer/options.c index bfee98d..2f057f3 100644 --- a/src/ustreamer/options.c +++ b/src/ustreamer/options.c @@ -61,6 +61,7 @@ enum _OPT_VALUES { _O_DEVICE_TIMEOUT = 10000, _O_DEVICE_ERROR_DELAY, + _O_M2M_DEVICE, _O_IMAGE_DEFAULT, _O_BRIGHTNESS, @@ -93,7 +94,6 @@ enum _OPT_VALUES { ADD_SINK(SINK) ADD_SINK(RAW_SINK) ADD_SINK(H264_SINK) - _O_H264_DEVICE, _O_H264_BITRATE, _O_H264_GOP, # undef ADD_SINK @@ -146,6 +146,7 @@ static const struct option _LONG_OPTS[] = { {"slowdown", no_argument, NULL, _O_SLOWDOWN}, {"device-timeout", required_argument, NULL, _O_DEVICE_TIMEOUT}, {"device-error-delay", required_argument, NULL, _O_DEVICE_ERROR_DELAY}, + {"m2m-device", required_argument, NULL, _O_M2M_DEVICE}, {"image-default", no_argument, NULL, _O_IMAGE_DEFAULT}, {"brightness", required_argument, NULL, _O_BRIGHTNESS}, @@ -188,7 +189,6 @@ static const struct option _LONG_OPTS[] = { ADD_SINK("", SINK) ADD_SINK("raw-", RAW_SINK) ADD_SINK("h264-", H264_SINK) - {"h264-device", required_argument, NULL, _O_H264_DEVICE}, {"h264-bitrate", required_argument, NULL, _O_H264_BITRATE}, {"h264-gop", required_argument, NULL, _O_H264_GOP}, # undef ADD_SINK @@ -380,6 +380,7 @@ int options_parse(options_s *options, device_s *dev, encoder_s *enc, stream_s *s case _O_SLOWDOWN: OPT_SET(stream->slowdown, true); case _O_DEVICE_TIMEOUT: OPT_NUMBER("--device-timeout", dev->timeout, 1, 60, 0); case _O_DEVICE_ERROR_DELAY: OPT_NUMBER("--device-error-delay", stream->error_delay, 1, 60, 0); + case _O_M2M_DEVICE: OPT_SET(enc->m2m_path, optarg); case _O_IMAGE_DEFAULT: OPT_CTL_DEFAULT_NOBREAK(brightness); @@ -436,7 +437,6 @@ int options_parse(options_s *options, device_s *dev, encoder_s *enc, stream_s *s ADD_SINK("", sink, SINK) ADD_SINK("raw-", raw_sink, RAW_SINK) ADD_SINK("h264-", h264_sink, H264_SINK) - case _O_H264_DEVICE: OPT_SET(stream->h264_path, optarg); case _O_H264_BITRATE: OPT_NUMBER("--h264-bitrate", stream->h264_bitrate, 25, 25000, 0); case _O_H264_GOP: OPT_NUMBER("--h264-gop", stream->h264_gop, 0, 60, 0); # undef ADD_SINK @@ -621,6 +621,7 @@ static void _help(FILE *fp, device_s *dev, encoder_s *enc, stream_s *stream, ser SAY(" --device-timeout ────────────── Timeout for device querying. Default: %u.\n", dev->timeout); SAY(" --device-error-delay ────────── Delay before trying to connect to the device again"); SAY(" after an error (timeout for example). Default: %u.\n", stream->error_delay); + SAY(" --m2m-device ──────────── Path to V4L2 M2M encoder device. Default: %s.\n", enc->m2m_path); SAY("Image control options:"); SAY("══════════════════════"); SAY(" --image-default ────────────────────── Reset all image settings below to default. Default: no change.\n"); @@ -672,7 +673,6 @@ static void _help(FILE *fp, device_s *dev, encoder_s *enc, stream_s *stream, ser ADD_SINK("JPEG", "") ADD_SINK("RAW", "raw-") ADD_SINK("H264", "h264-") - SAY(" --h264-device ──── Path to V4L2 H.264 encoder device. Default: %s.\n", stream->h264_path); SAY(" --h264-bitrate ──────── H264 bitrate in Kbps. Default: %u.\n", stream->h264_bitrate); SAY(" --h264-gop ─────────────── Intarval between keyframes. Default: %u.\n", stream->h264_gop); # undef ADD_SINK diff --git a/src/ustreamer/stream.c b/src/ustreamer/stream.c index fee7244..41b5eca 100644 --- a/src/ustreamer/stream.c +++ b/src/ustreamer/stream.c @@ -62,7 +62,6 @@ stream_s *stream_init(device_s *dev, encoder_s *enc) { stream->enc = enc; stream->last_as_blank = -1; stream->error_delay = 1; - stream->h264_path = "/dev/video11"; stream->h264_bitrate = 5000; // Kbps stream->h264_gop = 30; stream->run = run; @@ -84,7 +83,7 @@ void stream_loop(stream_s *stream) { LOG_INFO("Using desired FPS: %u", stream->dev->desired_fps); if (stream->h264_sink) { - RUN(h264) = h264_stream_init(stream->h264_sink, stream->h264_path, stream->h264_bitrate, stream->h264_gop); + RUN(h264) = h264_stream_init(stream->h264_sink, stream->enc->m2m_path, stream->h264_bitrate, stream->h264_gop); } for (workers_pool_s *pool; (pool = _stream_init_loop(stream)) != NULL;) { diff --git a/src/ustreamer/stream.h b/src/ustreamer/stream.h index a1e8e5d..abb42f2 100644 --- a/src/ustreamer/stream.h +++ b/src/ustreamer/stream.h @@ -79,7 +79,6 @@ typedef struct { memsink_s *raw_sink; memsink_s *h264_sink; - char *h264_path; unsigned h264_bitrate; unsigned h264_gop;