mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-02-27 04:06:30 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74bf710bb6 | ||
|
|
1d3b428a75 | ||
|
|
749bc5caf7 |
@@ -1,7 +1,7 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
current_version = 3.22
|
current_version = 3.23
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)(\.(?P<patch>\d+)(\-(?P<release>[a-z]+))?)?
|
parse = (?P<major>\d+)\.(?P<minor>\d+)(\.(?P<patch>\d+)(\-(?P<release>[a-z]+))?)?
|
||||||
serialize =
|
serialize =
|
||||||
{major}.{minor}
|
{major}.{minor}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.\" Manpage for ustreamer-dump.
|
.\" Manpage for ustreamer-dump.
|
||||||
.\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos
|
.\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos
|
||||||
.TH USTREAMER-DUMP 1 "version 3.22" "January 2021"
|
.TH USTREAMER-DUMP 1 "version 3.23" "January 2021"
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ustreamer-dump \- Dump uStreamer's memory sink to file
|
ustreamer-dump \- Dump uStreamer's memory sink to file
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.\" Manpage for ustreamer.
|
.\" Manpage for ustreamer.
|
||||||
.\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos
|
.\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos
|
||||||
.TH USTREAMER 1 "version 3.22" "November 2020"
|
.TH USTREAMER 1 "version 3.23" "November 2020"
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ustreamer \- stream MJPG video from any V4L2 device to the network
|
ustreamer \- stream MJPG video from any V4L2 device to the network
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
|
|
||||||
pkgname=ustreamer
|
pkgname=ustreamer
|
||||||
pkgver=3.22
|
pkgver=3.23
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Lightweight and fast MJPG-HTTP streamer"
|
pkgdesc="Lightweight and fast MJPG-HTTP streamer"
|
||||||
url="https://github.com/pikvm/ustreamer"
|
url="https://github.com/pikvm/ustreamer"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=ustreamer
|
PKG_NAME:=ustreamer
|
||||||
PKG_VERSION:=3.22
|
PKG_VERSION:=3.23
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_MAINTAINER:=Maxim Devaev <mdevaev@gmail.com>
|
PKG_MAINTAINER:=Maxim Devaev <mdevaev@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from distutils.core import setup
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
setup(
|
setup(
|
||||||
name="ustreamer",
|
name="ustreamer",
|
||||||
version="3.22",
|
version="3.23",
|
||||||
description="uStreamer tools",
|
description="uStreamer tools",
|
||||||
author="Maxim Devaev",
|
author="Maxim Devaev",
|
||||||
author_email="mdevaev@gmail.com",
|
author_email="mdevaev@gmail.com",
|
||||||
|
|||||||
@@ -23,5 +23,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef VERSION
|
#ifndef VERSION
|
||||||
# define VERSION "3.22"
|
# define VERSION "3.23"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -39,13 +39,15 @@
|
|||||||
#define A_REALLOC(_dest, _nmemb) assert((_dest = realloc(_dest, _nmemb * sizeof(*(_dest)))))
|
#define A_REALLOC(_dest, _nmemb) assert((_dest = realloc(_dest, _nmemb * sizeof(*(_dest)))))
|
||||||
#define MEMSET_ZERO(_obj) memset(&(_obj), 0, sizeof(_obj))
|
#define MEMSET_ZERO(_obj) memset(&(_obj), 0, sizeof(_obj))
|
||||||
|
|
||||||
|
#define A_ASPRINTF(_dest, _fmt, ...) assert(asprintf(&(_dest), _fmt, ##__VA_ARGS__) >= 0)
|
||||||
|
|
||||||
#define ARRAY_LEN(_array) (sizeof(_array) / sizeof(_array[0]))
|
#define ARRAY_LEN(_array) (sizeof(_array) / sizeof(_array[0]))
|
||||||
|
|
||||||
#define INLINE inline __attribute__((always_inline))
|
#define INLINE inline __attribute__((always_inline))
|
||||||
#define UNUSED __attribute__((unused))
|
#define UNUSED __attribute__((unused))
|
||||||
|
|
||||||
|
|
||||||
INLINE char *bool_to_string(bool flag) {
|
INLINE const char *bool_to_string(bool flag) {
|
||||||
return (flag ? "true" : "false");
|
return (flag ? "true" : "false");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -217,9 +217,7 @@ static void *_worker_job_init(worker_s *wr, void *v_enc) {
|
|||||||
A_CALLOC(job, 1);
|
A_CALLOC(job, 1);
|
||||||
job->enc = (encoder_s *)v_enc;
|
job->enc = (encoder_s *)v_enc;
|
||||||
|
|
||||||
const size_t dest_role_len = strlen(wr->name) + 16;
|
A_ASPRINTF(job->dest_role, "%s_dest", wr->name);
|
||||||
A_CALLOC(job->dest_role, dest_role_len);
|
|
||||||
snprintf(job->dest_role, dest_role_len, "%s_dest", wr->name);
|
|
||||||
job->dest = frame_init(job->dest_role);
|
job->dest = frame_init(job->dest_role);
|
||||||
|
|
||||||
return (void *)job;
|
return (void *)job;
|
||||||
|
|||||||
@@ -102,8 +102,7 @@ static void _gpio_output_init(gpio_output_s *output) {
|
|||||||
assert(gpio.chip);
|
assert(gpio.chip);
|
||||||
assert(output->line == NULL);
|
assert(output->line == NULL);
|
||||||
|
|
||||||
A_CALLOC(output->consumer, strlen(gpio.consumer_prefix) + strlen(output->role) + 16);
|
A_ASPRINTF(output->consumer, "%s::%s", gpio.consumer_prefix, output->role);
|
||||||
sprintf(output->consumer, "%s::%s", gpio.consumer_prefix, output->role);
|
|
||||||
|
|
||||||
if (output->pin >= 0) {
|
if (output->pin >= 0) {
|
||||||
if ((output->line = gpiod_chip_get_line(gpio.chip, output->pin)) != NULL) {
|
if ((output->line = gpiod_chip_get_line(gpio.chip, output->pin)) != NULL) {
|
||||||
|
|||||||
@@ -145,16 +145,14 @@ int server_listen(server_s *server) {
|
|||||||
evhttp_set_timeout(RUN(http), server->timeout);
|
evhttp_set_timeout(RUN(http), server->timeout);
|
||||||
|
|
||||||
if (server->user[0] != '\0') {
|
if (server->user[0] != '\0') {
|
||||||
char *raw_token;
|
|
||||||
char *encoded_token = NULL;
|
char *encoded_token = NULL;
|
||||||
|
|
||||||
A_CALLOC(raw_token, strlen(server->user) + strlen(server->passwd) + 16);
|
char *raw_token;
|
||||||
sprintf(raw_token, "%s:%s", server->user, server->passwd);
|
A_ASPRINTF(raw_token, "%s:%s", server->user, server->passwd);
|
||||||
base64_encode((uint8_t *)raw_token, strlen(raw_token), &encoded_token, NULL);
|
base64_encode((uint8_t *)raw_token, strlen(raw_token), &encoded_token, NULL);
|
||||||
free(raw_token);
|
free(raw_token);
|
||||||
|
|
||||||
A_CALLOC(RUN(auth_token), strlen(encoded_token) + 16);
|
A_ASPRINTF(RUN(auth_token), "Basic %s", encoded_token);
|
||||||
sprintf(RUN(auth_token), "Basic %s", encoded_token);
|
|
||||||
free(encoded_token);
|
free(encoded_token);
|
||||||
|
|
||||||
LOG_INFO("Using HTTP basic auth");
|
LOG_INFO("Using HTTP basic auth");
|
||||||
@@ -857,10 +855,7 @@ static char *_http_get_client_hostport(struct evhttp_request *request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *hostport;
|
char *hostport;
|
||||||
size_t hostport_len = strlen(addr) + 64;
|
A_ASPRINTF(hostport, "[%s]:%u", addr, port);
|
||||||
A_CALLOC(hostport, hostport_len);
|
|
||||||
|
|
||||||
snprintf(hostport, hostport_len, "[%s]:%u", addr, port);
|
|
||||||
free(addr);
|
free(addr);
|
||||||
return hostport;
|
return hostport;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ char *find_static_file_path(const char *root_path, const char *request_path) {
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
A_CALLOC(path, strlen(root_path) + strlen(simplified_path) + 16);
|
A_CALLOC(path, strlen(root_path) + strlen(simplified_path) + 16); // + reserved for /index.html
|
||||||
sprintf(path, "%s/%s", root_path, simplified_path);
|
sprintf(path, "%s/%s", root_path, simplified_path);
|
||||||
|
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|||||||
@@ -49,14 +49,11 @@ workers_pool_s *workers_pool_init(
|
|||||||
A_MUTEX_INIT(&pool->free_workers_mutex);
|
A_MUTEX_INIT(&pool->free_workers_mutex);
|
||||||
A_COND_INIT(&pool->free_workers_cond);
|
A_COND_INIT(&pool->free_workers_cond);
|
||||||
|
|
||||||
const size_t wr_name_len = strlen(wr_prefix) + 64;
|
|
||||||
|
|
||||||
for (unsigned number = 0; number < pool->n_workers; ++number) {
|
for (unsigned number = 0; number < pool->n_workers; ++number) {
|
||||||
# define WR(_next) pool->workers[number]._next
|
# define WR(_next) pool->workers[number]._next
|
||||||
|
|
||||||
WR(number) = number;
|
WR(number) = number;
|
||||||
A_CALLOC(WR(name), wr_name_len);
|
A_ASPRINTF(WR(name), "%s-%u", wr_prefix, number);
|
||||||
snprintf(WR(name), wr_name_len, "%s-%u", wr_prefix, number);
|
|
||||||
|
|
||||||
A_MUTEX_INIT(&WR(has_job_mutex));
|
A_MUTEX_INIT(&WR(has_job_mutex));
|
||||||
atomic_init(&WR(has_job), false);
|
atomic_init(&WR(has_job), false);
|
||||||
|
|||||||
Reference in New Issue
Block a user