Compare commits

...

10 Commits
v0.2 ... v0.7

Author SHA1 Message Date
Devaev Maxim
43800a5ed6 Bump version: 0.6 → 0.7 2018-09-26 05:21:55 +03:00
Devaev Maxim
0318f33479 increased max buffer size 2018-09-26 05:21:44 +03:00
Devaev Maxim
892f87bb17 Bump version: 0.5 → 0.6 2018-09-26 00:55:55 +03:00
Devaev Maxim
09cda92c9a --fake-width, --fake-height 2018-09-26 00:55:44 +03:00
Devaev Maxim
2eb57866c2 Bump version: 0.4 → 0.5 2018-09-25 11:04:50 +03:00
Devaev Maxim
962a32e877 final cleanup 2018-09-25 11:04:39 +03:00
Devaev Maxim
3ddd1f603e Bump version: 0.3 → 0.4 2018-09-25 10:56:14 +03:00
Devaev Maxim
18368a00f5 removing pkg 2018-09-25 10:55:50 +03:00
Devaev Maxim
810a80ab09 Bump version: 0.2 → 0.3 2018-09-25 10:45:21 +03:00
Devaev Maxim
f7e30b5897 Fixed Makefile for PKGBUILD 2018-09-25 10:45:10 +03:00
9 changed files with 32 additions and 17 deletions

View File

@@ -1,7 +1,7 @@
[bumpversion] [bumpversion]
commit = True commit = True
tag = True tag = True
current_version = 0.2 current_version = 0.7
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}

5
.gitignore vendored
View File

@@ -1,3 +1,8 @@
/pkg/
/src/ustreamer-*/
/src/v*.tar.gz
/v*.tar.gz
/ustreamer-*.pkg.tar.xz
/vgcore.* /vgcore.*
/ustreamer /ustreamer
*.o *.o

View File

@@ -5,7 +5,7 @@ LDFLAGS ?=
CC = gcc CC = gcc
LIBS = -lm -ljpeg -pthread -levent -levent_pthreads LIBS = -lm -ljpeg -pthread -levent -levent_pthreads
CFLAGS += -c -std=c99 -Wall -Wextra -D_GNU_SOURCE override CFLAGS += -c -std=c99 -Wall -Wextra -D_GNU_SOURCE
SOURCES = $(shell ls src/*.c src/jpeg/*.c) SOURCES = $(shell ls src/*.c src/jpeg/*.c)
OBJECTS = $(SOURCES:.c=.o) OBJECTS = $(SOURCES:.c=.o)
PROG = ustreamer PROG = ustreamer
@@ -14,7 +14,7 @@ PROG = ustreamer
ifeq ($(shell ls -d /opt/vc/include 2>/dev/null), /opt/vc/include) ifeq ($(shell ls -d /opt/vc/include 2>/dev/null), /opt/vc/include)
SOURCES += $(shell ls src/omx/*.c) SOURCES += $(shell ls src/omx/*.c)
LIBS += -lbcm_host -lvcos -lopenmaxil -L/opt/vc/lib LIBS += -lbcm_host -lvcos -lopenmaxil -L/opt/vc/lib
CFLAGS += -DOMX_ENCODER -DOMX_SKIP64BIT -I/opt/vc/include override CFLAGS += -DOMX_ENCODER -DOMX_SKIP64BIT -I/opt/vc/include
endif endif
@@ -56,3 +56,4 @@ push:
clean: clean:
rm -f src/*.o src/{jpeg,omx}/*.o vgcore.* $(PROG) rm -f src/*.o src/{jpeg,omx}/*.o vgcore.* $(PROG)
rm -rf pkg src/$(PROG)-* src/v*.tar.gz v*.tar.gz $(PROG)-*.pkg.tar.xz

View File

@@ -3,7 +3,7 @@
pkgname=ustreamer pkgname=ustreamer
pkgver=0.2 pkgver=0.7
pkgrel=1 pkgrel=1
pkgdesc="Lightweight and fast MJPG-HTTP streamer" pkgdesc="Lightweight and fast MJPG-HTTP streamer"
url="https://github.com/pi-kvm/ustreamer" url="https://github.com/pi-kvm/ustreamer"

View File

@@ -21,4 +21,4 @@
#pragma once #pragma once
#define VERSION "0.2" #define VERSION "0.7"

View File

@@ -409,9 +409,9 @@ static void _device_open_alloc_picbufs(struct device_t *dev) {
LOG_DEBUG("Allocating picture buffers ..."); LOG_DEBUG("Allocating picture buffers ...");
A_CALLOC(dev->run->pictures, dev->run->n_buffers); A_CALLOC(dev->run->pictures, dev->run->n_buffers);
dev->run->max_picture_size = (dev->run->width * dev->run->height) << 1; dev->run->max_picture_size = ((dev->run->width * dev->run->height) << 1) * 2;
for (unsigned index = 0; index < dev->run->n_buffers; ++index) { for (unsigned index = 0; index < dev->run->n_buffers; ++index) {
LOG_DEBUG("Allocating picture buffer %d ...", index); LOG_DEBUG("Allocating picture buffer %d sized %lu bytes... ", index, dev->run->max_picture_size);
A_CALLOC(dev->run->pictures[index].data, dev->run->max_picture_size); A_CALLOC(dev->run->pictures[index].data, dev->run->max_picture_size);
dev->run->pictures[index].allocated = dev->run->max_picture_size; dev->run->pictures[index].allocated = dev->run->max_picture_size;
} }

View File

@@ -85,7 +85,7 @@ struct http_server_t *http_server_init(struct stream_t *stream) {
evhttp_set_allowed_methods(run->http, EVHTTP_REQ_GET|EVHTTP_REQ_HEAD); evhttp_set_allowed_methods(run->http, EVHTTP_REQ_GET|EVHTTP_REQ_HEAD);
assert(!evhttp_set_cb(run->http, "/", _http_callback_root, NULL)); assert(!evhttp_set_cb(run->http, "/", _http_callback_root, NULL));
assert(!evhttp_set_cb(run->http, "/ping", _http_callback_ping, (void *)exposed)); assert(!evhttp_set_cb(run->http, "/ping", _http_callback_ping, (void *)server));
assert(!evhttp_set_cb(run->http, "/snapshot", _http_callback_snapshot, (void *)exposed)); assert(!evhttp_set_cb(run->http, "/snapshot", _http_callback_snapshot, (void *)exposed));
assert(!evhttp_set_cb(run->http, "/stream", _http_callback_stream, (void *)server)); assert(!evhttp_set_cb(run->http, "/stream", _http_callback_stream, (void *)server));
@@ -158,8 +158,8 @@ static void _http_callback_root(struct evhttp_request *request, UNUSED void *arg
evbuffer_free(buf); evbuffer_free(buf);
} }
static void _http_callback_ping(struct evhttp_request *request, void *v_exposed) { static void _http_callback_ping(struct evhttp_request *request, void *v_server) {
struct exposed_t *exposed = (struct exposed_t *)v_exposed; struct http_server_t *server = (struct http_server_t *)v_server;
struct evbuffer *buf; struct evbuffer *buf;
PROCESS_HEAD_REQUEST; PROCESS_HEAD_REQUEST;
@@ -169,8 +169,9 @@ static void _http_callback_ping(struct evhttp_request *request, void *v_exposed)
"{\"stream\": {\"resolution\":" "{\"stream\": {\"resolution\":"
" {\"width\": %u, \"height\": %u}," " {\"width\": %u, \"height\": %u},"
" \"online\": %s}}", " \"online\": %s}}",
exposed->width, exposed->height, (server->fake_width ? server->fake_width : server->run->exposed->width),
(exposed->online ? "true" : "false") (server->fake_height ? server->fake_height : server->run->exposed->height),
(server->run->exposed->online ? "true" : "false")
)); ));
ADD_HEADER("Content-Type", "application/json"); ADD_HEADER("Content-Type", "application/json");
evhttp_send_reply(request, HTTP_OK, "OK", buf); evhttp_send_reply(request, HTTP_OK, "OK", buf);

View File

@@ -59,6 +59,8 @@ struct http_server_runtime_t {
struct http_server_t { struct http_server_t {
char *host; char *host;
unsigned port; unsigned port;
unsigned fake_width;
unsigned fake_height;
unsigned timeout; unsigned timeout;
struct http_server_runtime_t *run; struct http_server_runtime_t *run;

View File

@@ -59,7 +59,9 @@ static const struct option _long_opts[] = {
{"host", required_argument, NULL, 's'}, {"host", required_argument, NULL, 's'},
{"port", required_argument, NULL, 'p'}, {"port", required_argument, NULL, 'p'},
{"server-timeout", required_argument, NULL, 2000}, {"fake-width", required_argument, NULL, 2000},
{"fake-height", required_argument, NULL, 2001},
{"server-timeout", required_argument, NULL, 2002},
{"debug", no_argument, NULL, 5000}, {"debug", no_argument, NULL, 5000},
{"log-level", required_argument, NULL, 5001}, {"log-level", required_argument, NULL, 5001},
@@ -90,7 +92,7 @@ static void _help(struct device_t *dev, struct http_server_t *server) {
printf(" Each buffer may processed using an intermediate thread.\n"); printf(" Each buffer may processed using an intermediate thread.\n");
printf(" Default: %d (number of CPU cores + 1)\n\n", dev->n_buffers); printf(" Default: %d (number of CPU cores + 1)\n\n", dev->n_buffers);
printf(" -w|--workers <N> -- The number of compressing threads. Default: %d (== --buffers).\n\n", dev->n_workers); printf(" -w|--workers <N> -- The number of compressing threads. Default: %d (== --buffers).\n\n", dev->n_workers);
printf(" -q|--jpeg-quality <N> -- Set quality of JPEG encoding from 1 to 100 (best). Default: %d\n\n", dev->jpeg_quality); printf(" -q|--jpeg-quality <N> -- Set quality of JPEG encoding from 1 to 100 (best). Default: %d.\n\n", dev->jpeg_quality);
printf(" --encoder <type> -- Use specified encoder. It may affects to workers number.\n"); printf(" --encoder <type> -- Use specified encoder. It may affects to workers number.\n");
printf(" -- Available: %s; default: CPU.\n\n", ENCODER_TYPES_STR); printf(" -- Available: %s; default: CPU.\n\n", ENCODER_TYPES_STR);
printf(" --device-timeout <seconds> -- Timeout for device querying. Default: %d\n\n", dev->timeout); printf(" --device-timeout <seconds> -- Timeout for device querying. Default: %d\n\n", dev->timeout);
@@ -100,6 +102,8 @@ static void _help(struct device_t *dev, struct http_server_t *server) {
printf("--------------------\n"); printf("--------------------\n");
printf(" --host <address> -- Listen on Hostname or IP. Default: %s\n\n", server->host); printf(" --host <address> -- Listen on Hostname or IP. Default: %s\n\n", server->host);
printf(" --port <N> -- Bind to this TCP port. Default: %d\n\n", server->port); printf(" --port <N> -- Bind to this TCP port. Default: %d\n\n", server->port);
printf(" --fake-width <N> -- Override image width for /ping. Default: disabled\n\n");
printf(" --fake-height <N> -- Override image height for /ping. Default: disabled.\n\n");
printf(" --server-timeout <seconds> -- Timeout for client connections. Default: %d\n\n", server->timeout); printf(" --server-timeout <seconds> -- Timeout for client connections. Default: %d\n\n", server->timeout);
printf("Misc options:\n"); printf("Misc options:\n");
printf("-------------\n"); printf("-------------\n");
@@ -107,8 +111,8 @@ static void _help(struct device_t *dev, struct http_server_t *server) {
printf(" --log-level <N> -- Verbosity level of messages from 0 (info) to 3 (debug).\n"); printf(" --log-level <N> -- Verbosity level of messages from 0 (info) to 3 (debug).\n");
printf(" Enabling debugging messages can slow down the program.\n"); printf(" Enabling debugging messages can slow down the program.\n");
printf(" Available levels: 0=info, 1=performance, 2=verbose, 3=debug.\n"); printf(" Available levels: 0=info, 1=performance, 2=verbose, 3=debug.\n");
printf(" Default: %d\n\n", log_level); printf(" Default: %d.\n\n", log_level);
printf(" -h|--help -- Print this messages and exit\n\n"); printf(" -h|--help -- Print this messages and exit.\n\n");
} }
static int _parse_options(int argc, char *argv[], struct device_t *dev, struct encoder_t *encoder, struct http_server_t *server) { static int _parse_options(int argc, char *argv[], struct device_t *dev, struct encoder_t *encoder, struct http_server_t *server) {
@@ -155,7 +159,9 @@ static int _parse_options(int argc, char *argv[], struct device_t *dev, struct e
case 's': server->host = optarg; break; case 's': server->host = optarg; break;
case 'p': OPT_UNSIGNED(server->port, "--port", 1, 65535); case 'p': OPT_UNSIGNED(server->port, "--port", 1, 65535);
case 2000: OPT_UNSIGNED(server->timeout, "--server-timeout", 1, 60); case 2000: OPT_UNSIGNED(server->fake_width, "--fake-width", 0, 1920);
case 2001: OPT_UNSIGNED(server->fake_height, "--fake-height", 0, 1200);
case 2002: OPT_UNSIGNED(server->timeout, "--server-timeout", 1, 60);
case 5000: log_level = LOG_LEVEL_DEBUG; break; case 5000: log_level = LOG_LEVEL_DEBUG; break;
case 5001: OPT_UNSIGNED(log_level, "--log-level", 0, 3); case 5001: OPT_UNSIGNED(log_level, "--log-level", 0, 3);