diff --git a/src/ustreamer/encoder.c b/src/ustreamer/encoder.c index aecbd1d..27ef65a 100644 --- a/src/ustreamer/encoder.c +++ b/src/ustreamer/encoder.c @@ -46,10 +46,13 @@ static const struct { const char *name; const enum encoder_type_t type; } _ENCODER_TYPES[] = { - {"CPU", ENCODER_TYPE_CPU}, - {"HW", ENCODER_TYPE_HW}, + {"CPU", ENCODER_TYPE_CPU}, + {"HW", ENCODER_TYPE_HW}, # ifdef WITH_OMX - {"OMX", ENCODER_TYPE_OMX}, + {"OMX", ENCODER_TYPE_OMX}, +# endif +# ifdef WITH_RAWSINK + {"NOOP", ENCODER_TYPE_NOOP}, # endif }; @@ -183,6 +186,10 @@ void encoder_prepare(struct encoder_t *encoder, struct device_t *dev) { ok: if (quality == 0) { LOG_INFO("Using JPEG quality: encoder default"); +# ifdef WITH_RAWSINK + } else if (type == ENCODER_TYPE_NOOP) { + LOG_INFO("Using JPEG NOOP encoder"); +# endif } else { LOG_INFO("Using JPEG quality: %u%%", quality); } @@ -221,6 +228,12 @@ int encoder_compress_buffer(struct encoder_t *encoder, struct device_t *dev, uns } } # endif +# ifdef WITH_RAWSINK + else if (encoder->run->type == ENCODER_TYPE_NOOP) { + LOG_VERBOSE("Compressing buffer %u using NOOP (do nothing)", buf_index); + } +# endif + dev->run->pictures[buf_index]->encode_end_ts = get_now_monotonic(); diff --git a/src/ustreamer/encoder.h b/src/ustreamer/encoder.h index a8b3281..025b18b 100644 --- a/src/ustreamer/encoder.h +++ b/src/ustreamer/encoder.h @@ -41,10 +41,17 @@ # define ENCODER_TYPES_OMX_HINT "" #endif +#ifdef WITH_RAWSINK +# define ENCODER_TYPES_NOOP_HINT ", NOOP" +#else +# define ENCODER_TYPES_NOOP_HINT "" +#endif + #define ENCODER_TYPES_STR \ "CPU, HW" \ - ENCODER_TYPES_OMX_HINT + ENCODER_TYPES_OMX_HINT \ + ENCODER_TYPES_NOOP_HINT enum encoder_type_t { ENCODER_TYPE_UNKNOWN, // Only for encoder_parse_type() and main() @@ -53,6 +60,9 @@ enum encoder_type_t { # ifdef WITH_OMX ENCODER_TYPE_OMX, # endif +# ifdef WITH_RAWSINK + ENCODER_TYPE_NOOP, +# endif }; struct encoder_runtime_t { diff --git a/src/ustreamer/options.c b/src/ustreamer/options.c index 5db88d3..5e9c061 100644 --- a/src/ustreamer/options.c +++ b/src/ustreamer/options.c @@ -619,11 +619,14 @@ static void _help(struct device_t *dev, struct encoder_t *encoder, struct http_s printf(" for sources that already output MJPG.\n\n"); printf(" -c|--encoder ───────────────── Use specified encoder. It may affect the number of workers.\n"); printf(" Available:\n"); - printf(" * CPU ─ Software MJPG encoding (default);\n"); + printf(" * CPU ── Software MJPG encoding (default);\n"); # ifdef WITH_OMX - printf(" * OMX ─ GPU hardware accelerated MJPG encoding with OpenMax;\n"); + printf(" * OMX ── GPU hardware accelerated MJPG encoding with OpenMax;\n"); +# endif + printf(" * HW ─── Use pre-encoded MJPG frames directly from camera hardware.\n"); +# ifdef WITH_RAWSINK + printf(" * NOOP ─ Don't compress stream. Useful for the RAW sink.\n\n"); # endif - printf(" * HW ── Use pre-encoded MJPG frames directly from camera hardware.\n\n"); # ifdef WITH_OMX printf(" -g|--glitched-resolutions ─ Comma-separated list of resolutions that require forced\n"); printf(" encoding on CPU instead of OMX. Default: disabled.\n\n"); diff --git a/ustreamer.1 b/ustreamer.1 index a0629de..3d848fa 100644 --- a/ustreamer.1 +++ b/ustreamer.1 @@ -93,6 +93,8 @@ CPU ─ Software MJPG encoding (default). OMX ─ GPU hardware accelerated MJPG encoding with OpenMax (required \fBWITH_OMX\fR feature). HW ─ Use pre-encoded MJPG frames directly from camera hardware. + +NOOP ─ Don't compress stream. Useful for the RAW sink. .TP .BR \-g\ \fIWxH,... ", " \-\-glitched\-resolutions\ \fIWxH,... Comma-separated list of resolutions that require forced