mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-12 10:33:42 +00:00
soft_fps -> desired_fps
This commit is contained in:
@@ -84,7 +84,6 @@ struct device_t *device_init() {
|
|||||||
dev->standard = V4L2_STD_UNKNOWN;
|
dev->standard = V4L2_STD_UNKNOWN;
|
||||||
dev->n_buffers = max_u(sysconf(_SC_NPROCESSORS_ONLN), 1) + 1;
|
dev->n_buffers = max_u(sysconf(_SC_NPROCESSORS_ONLN), 1) + 1;
|
||||||
dev->n_workers = dev->n_buffers;
|
dev->n_workers = dev->n_buffers;
|
||||||
dev->soft_fps = 0;
|
|
||||||
dev->timeout = 1;
|
dev->timeout = 1;
|
||||||
dev->error_delay = 1;
|
dev->error_delay = 1;
|
||||||
dev->run = run;
|
dev->run = run;
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ struct device_t {
|
|||||||
bool dv_timings;
|
bool dv_timings;
|
||||||
unsigned n_buffers;
|
unsigned n_buffers;
|
||||||
unsigned n_workers;
|
unsigned n_workers;
|
||||||
unsigned soft_fps;
|
unsigned desired_fps;
|
||||||
unsigned every_frame;
|
unsigned every_frame;
|
||||||
unsigned min_frame_size;
|
unsigned min_frame_size;
|
||||||
bool persistent;
|
bool persistent;
|
||||||
|
|||||||
@@ -118,8 +118,8 @@ int http_server_listen(struct http_server_t *server) {
|
|||||||
struct timeval refresh_interval;
|
struct timeval refresh_interval;
|
||||||
|
|
||||||
refresh_interval.tv_sec = 0;
|
refresh_interval.tv_sec = 0;
|
||||||
if (server->run->stream->dev->soft_fps > 0) {
|
if (server->run->stream->dev->desired_fps > 0) {
|
||||||
refresh_interval.tv_usec = 1000000 / (server->run->stream->dev->soft_fps * 2);
|
refresh_interval.tv_usec = 1000000 / (server->run->stream->dev->desired_fps * 2);
|
||||||
} else {
|
} else {
|
||||||
refresh_interval.tv_usec = 16000; // ~60fps
|
refresh_interval.tv_usec = 16000; // ~60fps
|
||||||
}
|
}
|
||||||
@@ -203,13 +203,13 @@ static void _http_callback_state(struct evhttp_request *request, void *v_server)
|
|||||||
assert(evbuffer_add_printf(buf,
|
assert(evbuffer_add_printf(buf,
|
||||||
"{\"ok\": true, \"result\":"
|
"{\"ok\": true, \"result\":"
|
||||||
" {\"source\": {\"resolution\": {\"width\": %u, \"height\": %u},"
|
" {\"source\": {\"resolution\": {\"width\": %u, \"height\": %u},"
|
||||||
" \"online\": %s, \"quality\": %u, \"soft_fps\": %u, \"captured_fps\": %u},"
|
" \"online\": %s, \"quality\": %u, \"desired_fps\": %u, \"captured_fps\": %u},"
|
||||||
" \"stream\": {\"queued_fps\": %u, \"clients\": %u, \"clients_stat\": {",
|
" \"stream\": {\"queued_fps\": %u, \"clients\": %u, \"clients_stat\": {",
|
||||||
(server->fake_width ? server->fake_width : server->run->exposed->width),
|
(server->fake_width ? server->fake_width : server->run->exposed->width),
|
||||||
(server->fake_height ? server->fake_height : server->run->exposed->height),
|
(server->fake_height ? server->fake_height : server->run->exposed->height),
|
||||||
bool_to_string(server->run->exposed->online),
|
bool_to_string(server->run->exposed->online),
|
||||||
server->run->stream->encoder->quality,
|
server->run->stream->encoder->quality,
|
||||||
server->run->stream->dev->soft_fps,
|
server->run->stream->dev->desired_fps,
|
||||||
server->run->exposed->captured_fps,
|
server->run->exposed->captured_fps,
|
||||||
server->run->exposed->queued_fps,
|
server->run->exposed->queued_fps,
|
||||||
server->run->stream_clients_count
|
server->run->stream_clients_count
|
||||||
|
|||||||
12
src/main.c
12
src/main.c
@@ -46,9 +46,9 @@ static const struct option _long_opts[] = {
|
|||||||
{"input", required_argument, NULL, 'i'},
|
{"input", required_argument, NULL, 'i'},
|
||||||
{"width", required_argument, NULL, 'x'},
|
{"width", required_argument, NULL, 'x'},
|
||||||
{"height", required_argument, NULL, 'y'},
|
{"height", required_argument, NULL, 'y'},
|
||||||
{"format", required_argument, NULL, 'f'},
|
{"format", required_argument, NULL, 'm'},
|
||||||
{"tv-standard", required_argument, NULL, 'a'},
|
{"tv-standard", required_argument, NULL, 'a'},
|
||||||
{"soft-fps", required_argument, NULL, 'm'},
|
{"fps", required_argument, NULL, 'f'},
|
||||||
{"every-frame", required_argument, NULL, 'e'},
|
{"every-frame", required_argument, NULL, 'e'},
|
||||||
{"min-frame-size", required_argument, NULL, 'z'},
|
{"min-frame-size", required_argument, NULL, 'z'},
|
||||||
{"dv-timings", no_argument, NULL, 't'},
|
{"dv-timings", no_argument, NULL, 't'},
|
||||||
@@ -102,11 +102,11 @@ static void _help(struct device_t *dev, struct encoder_t *encoder, struct http_s
|
|||||||
printf(" -i|--input <N> -- Input channel. Default: %u.\n\n", dev->input);
|
printf(" -i|--input <N> -- Input channel. Default: %u.\n\n", dev->input);
|
||||||
printf(" -x|--width <N> -- Initial image width. Default: %d.\n\n", dev->width);
|
printf(" -x|--width <N> -- Initial image width. Default: %d.\n\n", dev->width);
|
||||||
printf(" -y|--height <N> -- Initial image height. Default: %d.\n\n", dev->height);
|
printf(" -y|--height <N> -- Initial image height. Default: %d.\n\n", dev->height);
|
||||||
printf(" -f|--format <fmt> -- Image format.\n");
|
printf(" -m|--format <fmt> -- Image format.\n");
|
||||||
printf(" Available: %s; default: YUYV.\n\n", FORMATS_STR);
|
printf(" Available: %s; default: YUYV.\n\n", FORMATS_STR);
|
||||||
printf(" -a|--tv-standard <std> -- Force TV standard.\n");
|
printf(" -a|--tv-standard <std> -- Force TV standard.\n");
|
||||||
printf(" Available: %s; default: disabled.\n\n", STANDARDS_STR);
|
printf(" Available: %s; default: disabled.\n\n", STANDARDS_STR);
|
||||||
printf(" -m|--soft-fps <N> -- Soft FPS limit; default: disabled.\n\n");
|
printf(" -f|--desired-fps <N> -- Desired FPS; default: maximum as possible.\n\n");
|
||||||
printf(" -e|--every-frame <N> -- Drop all input frames except specified. Default: disabled.\n\n");
|
printf(" -e|--every-frame <N> -- Drop all input frames except specified. Default: disabled.\n\n");
|
||||||
printf(" -z|--min-frame-size <N> -- Drop frames smaller then this limit.\n");
|
printf(" -z|--min-frame-size <N> -- Drop frames smaller then this limit.\n");
|
||||||
printf(" Useful if the device produces small-sized garbage frames.\n\n");
|
printf(" Useful if the device produces small-sized garbage frames.\n\n");
|
||||||
@@ -177,10 +177,10 @@ static int _parse_options(int argc, char *argv[], struct device_t *dev, struct e
|
|||||||
case 'y': OPT_UNSIGNED(dev->height, "--height", 180, 1200);
|
case 'y': OPT_UNSIGNED(dev->height, "--height", 180, 1200);
|
||||||
# pragma GCC diagnostic ignored "-Wsign-compare"
|
# pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
# pragma GCC diagnostic push
|
# pragma GCC diagnostic push
|
||||||
case 'f': OPT_PARSE(dev->format, device_parse_format, FORMAT_UNKNOWN, "pixel format");
|
case 'm': OPT_PARSE(dev->format, device_parse_format, FORMAT_UNKNOWN, "pixel format");
|
||||||
# pragma GCC diagnostic pop
|
# pragma GCC diagnostic pop
|
||||||
case 'a': OPT_PARSE(dev->standard, device_parse_standard, STANDARD_UNKNOWN, "TV standard");
|
case 'a': OPT_PARSE(dev->standard, device_parse_standard, STANDARD_UNKNOWN, "TV standard");
|
||||||
case 'm': OPT_UNSIGNED(dev->soft_fps, "--soft-fps", 0, 30);
|
case 'f': OPT_UNSIGNED(dev->desired_fps, "--desired-fps", 0, 30);
|
||||||
case 'e': OPT_UNSIGNED(dev->every_frame, "--every-frame", 1, 30);
|
case 'e': OPT_UNSIGNED(dev->every_frame, "--every-frame", 1, 30);
|
||||||
case 'z': OPT_UNSIGNED(dev->min_frame_size, "--min-frame-size", 0, 8192);
|
case 'z': OPT_UNSIGNED(dev->min_frame_size, "--min-frame-size", 0, 8192);
|
||||||
case 't': OPT_SET(dev->dv_timings, true);
|
case 't': OPT_SET(dev->dv_timings, true);
|
||||||
|
|||||||
@@ -337,9 +337,9 @@ static long double _stream_get_fluency_delay(struct device_t *dev, struct worker
|
|||||||
|
|
||||||
min_delay = avg_comp_time / dev->n_workers; // Среднее время работы размазывается на N воркеров
|
min_delay = avg_comp_time / dev->n_workers; // Среднее время работы размазывается на N воркеров
|
||||||
|
|
||||||
if (dev->soft_fps > 0 && min_delay > 0) {
|
if (dev->desired_fps > 0 && min_delay > 0) {
|
||||||
// Искусственное время задержки на основе желаемого FPS, если включен --soft-fps
|
// Искусственное время задержки на основе желаемого FPS, если включен --desired-fps
|
||||||
soft_delay = ((long double)1) / dev->soft_fps - sum_comp_time;
|
soft_delay = ((long double) 1) / dev->desired_fps - sum_comp_time;
|
||||||
return (min_delay > soft_delay ? min_delay : soft_delay);
|
return (min_delay > soft_delay ? min_delay : soft_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user