mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-13 11:03:43 +00:00
renamed v4l2 encoder to m2m
This commit is contained in:
@@ -68,7 +68,7 @@ The recommended way of running µStreamer with [Auvidea B101](https://www.raspbe
|
|||||||
$ export LD_LIBRARY_PATH=/opt/vc/lib/ # on bullseye
|
$ export LD_LIBRARY_PATH=/opt/vc/lib/ # on bullseye
|
||||||
$ ./ustreamer \
|
$ ./ustreamer \
|
||||||
--format=uyvy \ # Device input format
|
--format=uyvy \ # Device input format
|
||||||
--encoder=v4l2 \ # Hardware encoding on V4L2 M2M driver
|
--encoder=m2m \ # Hardware encoding on V4L2 M2M driver
|
||||||
--workers=3 \ # Workers number
|
--workers=3 \ # Workers number
|
||||||
--persistent \ # Don't re-initialize device on timeout (for example when HDMI cable was disconnected)
|
--persistent \ # Don't re-initialize device on timeout (for example when HDMI cable was disconnected)
|
||||||
--dv-timings \ # Use DV-timings
|
--dv-timings \ # Use DV-timings
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ $ ./ustreamer --help
|
|||||||
```bash
|
```bash
|
||||||
$ ./ustreamer \
|
$ ./ustreamer \
|
||||||
--format=uyvy \ # Настройка входного формата устройства
|
--format=uyvy \ # Настройка входного формата устройства
|
||||||
--encoder=v4l2 \ # Аппаратное кодирование с помощью драйвер V4L2 M2M
|
--encoder=m2m \ # Аппаратное кодирование с помощью драйвер V4L2 M2M
|
||||||
--workers=3 \ # Максимум воркеров
|
--workers=3 \ # Максимум воркеров
|
||||||
--persistent \ # Не переинициализировать устройство при таймауте (например, когда был отключен HDMI-кабель)
|
--persistent \ # Не переинициализировать устройство при таймауте (например, когда был отключен HDMI-кабель)
|
||||||
--dv-timings \ # Включение DV-таймингов
|
--dv-timings \ # Включение DV-таймингов
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ static const struct {
|
|||||||
} _ENCODER_TYPES[] = {
|
} _ENCODER_TYPES[] = {
|
||||||
{"CPU", ENCODER_TYPE_CPU},
|
{"CPU", ENCODER_TYPE_CPU},
|
||||||
{"HW", ENCODER_TYPE_HW},
|
{"HW", ENCODER_TYPE_HW},
|
||||||
{"V4L2", ENCODER_TYPE_V4L2},
|
{"M2M", ENCODER_TYPE_M2M},
|
||||||
{"NOOP", ENCODER_TYPE_NOOP},
|
{"NOOP", ENCODER_TYPE_NOOP},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ void encoder_destroy(encoder_s *enc) {
|
|||||||
|
|
||||||
encoder_type_e encoder_parse_type(const char *str) {
|
encoder_type_e encoder_parse_type(const char *str) {
|
||||||
if (!strcasecmp(str, "OMX")) {
|
if (!strcasecmp(str, "OMX")) {
|
||||||
return ENCODER_TYPE_V4L2; // Just for compatibility
|
return ENCODER_TYPE_M2M; // Just for compatibility
|
||||||
}
|
}
|
||||||
for (unsigned index = 0; index < ARRAY_LEN(_ENCODER_TYPES); ++index) {
|
for (unsigned index = 0; index < ARRAY_LEN(_ENCODER_TYPES); ++index) {
|
||||||
if (!strcasecmp(str, _ENCODER_TYPES[index].name)) {
|
if (!strcasecmp(str, _ENCODER_TYPES[index].name)) {
|
||||||
@@ -113,8 +113,8 @@ workers_pool_s *encoder_workers_pool_init(encoder_s *enc, device_s *dev) {
|
|||||||
quality = DR(jpeg_quality);
|
quality = DR(jpeg_quality);
|
||||||
n_workers = 1;
|
n_workers = 1;
|
||||||
|
|
||||||
} else if (type == ENCODER_TYPE_V4L2) {
|
} else if (type == ENCODER_TYPE_M2M) {
|
||||||
LOG_DEBUG("Preparing V4L2 encoder ...");
|
LOG_DEBUG("Preparing M2M encoder ...");
|
||||||
if (ER(m2ms) == NULL) {
|
if (ER(m2ms) == NULL) {
|
||||||
A_CALLOC(ER(m2ms), n_workers);
|
A_CALLOC(ER(m2ms), n_workers);
|
||||||
}
|
}
|
||||||
@@ -220,8 +220,8 @@ static bool _worker_run_job(worker_s *wr) {
|
|||||||
LOG_VERBOSE("Compressing buffer using HW (just copying)");
|
LOG_VERBOSE("Compressing buffer using HW (just copying)");
|
||||||
hw_encoder_compress(src, dest);
|
hw_encoder_compress(src, dest);
|
||||||
|
|
||||||
} else if (ER(type) == ENCODER_TYPE_V4L2) {
|
} else if (ER(type) == ENCODER_TYPE_M2M) {
|
||||||
LOG_VERBOSE("Compressing buffer using V4L2");
|
LOG_VERBOSE("Compressing buffer using M2M");
|
||||||
if (m2m_encoder_ensure_ready(ER(m2ms[wr->number]), src) < 0) {
|
if (m2m_encoder_ensure_ready(ER(m2ms[wr->number]), src) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,13 +43,13 @@
|
|||||||
#include "encoders/hw/encoder.h"
|
#include "encoders/hw/encoder.h"
|
||||||
|
|
||||||
|
|
||||||
#define ENCODER_TYPES_STR "CPU, HW, V4L2, NOOP"
|
#define ENCODER_TYPES_STR "CPU, HW, M2M, NOOP"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ENCODER_TYPE_UNKNOWN, // Only for encoder_parse_type() and main()
|
ENCODER_TYPE_UNKNOWN, // Only for encoder_parse_type() and main()
|
||||||
ENCODER_TYPE_CPU,
|
ENCODER_TYPE_CPU,
|
||||||
ENCODER_TYPE_HW,
|
ENCODER_TYPE_HW,
|
||||||
ENCODER_TYPE_V4L2,
|
ENCODER_TYPE_M2M,
|
||||||
ENCODER_TYPE_NOOP,
|
ENCODER_TYPE_NOOP,
|
||||||
} encoder_type_e;
|
} encoder_type_e;
|
||||||
|
|
||||||
|
|||||||
@@ -606,7 +606,7 @@ static void _help(FILE *fp, device_s *dev, encoder_s *enc, stream_s *stream, ser
|
|||||||
SAY(" Available:");
|
SAY(" Available:");
|
||||||
SAY(" * CPU ── Software MJPG encoding (default);");
|
SAY(" * CPU ── Software MJPG encoding (default);");
|
||||||
SAY(" * HW ─── Use pre-encoded MJPG frames directly from camera hardware;");
|
SAY(" * HW ─── Use pre-encoded MJPG frames directly from camera hardware;");
|
||||||
SAY(" * V4L2 ─ GPU-accelerated MJPG encoding using V4L2 M2M interface;");
|
SAY(" * M2M ── GPU-accelerated MJPG encoding using V4L2 M2M interface;");
|
||||||
SAY(" * NOOP ─ Don't compress MJPG stream (do nothing).\n");
|
SAY(" * NOOP ─ Don't compress MJPG stream (do nothing).\n");
|
||||||
SAY(" -g|--glitched-resolutions <WxH,...> ─ It doesn't do anything. Still here for compatibility.\n");
|
SAY(" -g|--glitched-resolutions <WxH,...> ─ It doesn't do anything. Still here for compatibility.\n");
|
||||||
SAY(" -k|--blank <path> ─────────────────── Path to JPEG file that will be shown when the device is disconnected");
|
SAY(" -k|--blank <path> ─────────────────── Path to JPEG file that will be shown when the device is disconnected");
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ static workers_pool_s *_stream_init_one(stream_s *stream) {
|
|||||||
if (device_open(stream->dev) < 0) {
|
if (device_open(stream->dev) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (stream->enc->type == ENCODER_TYPE_V4L2 || (RUN(h264) && !is_jpeg(stream->dev->run->format))) {
|
if (stream->enc->type == ENCODER_TYPE_M2M || (RUN(h264) && !is_jpeg(stream->dev->run->format))) {
|
||||||
device_export_to_dma(stream->dev);
|
device_export_to_dma(stream->dev);
|
||||||
}
|
}
|
||||||
if (device_switch_capturing(stream->dev, true) < 0) {
|
if (device_switch_capturing(stream->dev, true) < 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user