mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-02-27 20:26:31 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b233a4c71 | ||
|
|
8a81158276 |
@@ -1,7 +1,7 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
current_version = 5.26
|
current_version = 5.27
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)
|
parse = (?P<major>\d+)\.(?P<minor>\d+)
|
||||||
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 5.26" "January 2021"
|
.TH USTREAMER-DUMP 1 "version 5.27" "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 5.26" "November 2020"
|
.TH USTREAMER 1 "version 5.27" "November 2020"
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ustreamer \- stream MJPEG video from any V4L2 device to the network
|
ustreamer \- stream MJPEG video from any V4L2 device to the network
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
|
|
||||||
pkgname=ustreamer
|
pkgname=ustreamer
|
||||||
pkgver=5.26
|
pkgver=5.27
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Lightweight and fast MJPEG-HTTP streamer"
|
pkgdesc="Lightweight and fast MJPEG-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:=5.26
|
PKG_VERSION:=5.27
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_MAINTAINER:=Maxim Devaev <mdevaev@gmail.com>
|
PKG_MAINTAINER:=Maxim Devaev <mdevaev@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ def _find_sources(suffix: str) -> list[str]:
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
setup(
|
setup(
|
||||||
name="ustreamer",
|
name="ustreamer",
|
||||||
version="5.26",
|
version="5.27",
|
||||||
description="uStreamer tools",
|
description="uStreamer tools",
|
||||||
author="Maxim Devaev",
|
author="Maxim Devaev",
|
||||||
author_email="mdevaev@gmail.com",
|
author_email="mdevaev@gmail.com",
|
||||||
|
|||||||
@@ -52,11 +52,11 @@ void us_output_file_write(void *v_output, const us_frame_s *frame) {
|
|||||||
us_base64_encode(frame->data, frame->used, &output->base64_data, &output->base64_allocated);
|
us_base64_encode(frame->data, frame->used, &output->base64_data, &output->base64_allocated);
|
||||||
fprintf(output->fp,
|
fprintf(output->fp,
|
||||||
"{\"size\": %zu, \"width\": %u, \"height\": %u,"
|
"{\"size\": %zu, \"width\": %u, \"height\": %u,"
|
||||||
" \"format\": %u, \"stride\": %u, \"online\": %u,"
|
" \"format\": %u, \"stride\": %u, \"online\": %u, \"key\": %u,"
|
||||||
" \"grab_ts\": %.3Lf, \"encode_begin_ts\": %.3Lf, \"encode_end_ts\": %.3Lf,"
|
" \"grab_ts\": %.3Lf, \"encode_begin_ts\": %.3Lf, \"encode_end_ts\": %.3Lf,"
|
||||||
" \"data\": \"%s\"}\n",
|
" \"data\": \"%s\"}\n",
|
||||||
frame->used, frame->width, frame->height,
|
frame->used, frame->width, frame->height,
|
||||||
frame->format, frame->stride, frame->online,
|
frame->format, frame->stride, frame->online, frame->key,
|
||||||
frame->grab_ts, frame->encode_begin_ts, frame->encode_end_ts,
|
frame->grab_ts, frame->encode_begin_ts, frame->encode_end_ts,
|
||||||
output->base64_data);
|
output->base64_data);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -251,7 +251,8 @@ static int _dump_sink(
|
|||||||
long double last_ts = 0;
|
long double last_ts = 0;
|
||||||
|
|
||||||
while (!_g_stop) {
|
while (!_g_stop) {
|
||||||
const int error = us_memsink_client_get(sink, frame, key_required);
|
bool key_requested;
|
||||||
|
const int error = us_memsink_client_get(sink, frame, &key_requested, key_required);
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
key_required = false;
|
key_required = false;
|
||||||
|
|
||||||
@@ -259,11 +260,12 @@ static int _dump_sink(
|
|||||||
const long long now_second = us_floor_ms(now);
|
const long long now_second = us_floor_ms(now);
|
||||||
|
|
||||||
char fourcc_str[8];
|
char fourcc_str[8];
|
||||||
US_LOG_VERBOSE("Frame: size=%zu, res=%ux%u, fourcc=%s, stride=%u, online=%d, key=%d, latency=%.3Lf, diff=%.3Lf",
|
US_LOG_VERBOSE("Frame: res=%ux%u, fmt=%s, stride=%u, online=%d, key=%d, kr=%d, latency=%.3Lf, diff=%.3Lf, size=%zu",
|
||||||
frame->used, frame->width, frame->height,
|
frame->width, frame->height,
|
||||||
us_fourcc_to_string(frame->format, fourcc_str, 8),
|
us_fourcc_to_string(frame->format, fourcc_str, 8),
|
||||||
frame->stride, frame->online, frame->key,
|
frame->stride, frame->online, frame->key, key_requested,
|
||||||
now - frame->grab_ts, (last_ts ? now - last_ts : 0));
|
now - frame->grab_ts, (last_ts ? now - last_ts : 0),
|
||||||
|
frame->used);
|
||||||
last_ts = now;
|
last_ts = now;
|
||||||
|
|
||||||
US_LOG_DEBUG(" grab_ts=%.3Lf, encode_begin_ts=%.3Lf, encode_end_ts=%.3Lf",
|
US_LOG_DEBUG(" grab_ts=%.3Lf, encode_begin_ts=%.3Lf, encode_end_ts=%.3Lf",
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define US_VERSION_MAJOR 5
|
#define US_VERSION_MAJOR 5
|
||||||
#define US_VERSION_MINOR 26
|
#define US_VERSION_MINOR 27
|
||||||
|
|
||||||
#define US_MAKE_VERSION2(_major, _minor) #_major "." #_minor
|
#define US_MAKE_VERSION2(_major, _minor) #_major "." #_minor
|
||||||
#define US_MAKE_VERSION1(_major, _minor) US_MAKE_VERSION2(_major, _minor)
|
#define US_MAKE_VERSION1(_major, _minor) US_MAKE_VERSION2(_major, _minor)
|
||||||
|
|||||||
@@ -136,9 +136,7 @@ int us_memsink_server_put(us_memsink_s *sink, const us_frame_s *frame, bool *con
|
|||||||
if (sink->mem->key_requested && frame->key) {
|
if (sink->mem->key_requested && frame->key) {
|
||||||
sink->mem->key_requested = false;
|
sink->mem->key_requested = false;
|
||||||
}
|
}
|
||||||
if (key_requested != NULL) {
|
*key_requested = sink->mem->key_requested;
|
||||||
*key_requested = sink->mem->key_requested;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(sink->mem->data, frame->data, frame->used);
|
memcpy(sink->mem->data, frame->data, frame->used);
|
||||||
sink->mem->used = frame->used;
|
sink->mem->used = frame->used;
|
||||||
@@ -166,7 +164,7 @@ int us_memsink_server_put(us_memsink_s *sink, const us_frame_s *frame, bool *con
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int us_memsink_client_get(us_memsink_s *sink, us_frame_s *frame, bool key_required) { // cppcheck-suppress unusedFunction
|
int us_memsink_client_get(us_memsink_s *sink, us_frame_s *frame, bool *const key_requested, bool key_required) { // cppcheck-suppress unusedFunction
|
||||||
assert(!sink->server); // Client only
|
assert(!sink->server); // Client only
|
||||||
|
|
||||||
if (us_flock_timedwait_monotonic(sink->fd, sink->timeout) < 0) {
|
if (us_flock_timedwait_monotonic(sink->fd, sink->timeout) < 0) {
|
||||||
@@ -189,6 +187,7 @@ int us_memsink_client_get(us_memsink_s *sink, us_frame_s *frame, bool key_requir
|
|||||||
sink->last_id = sink->mem->id;
|
sink->last_id = sink->mem->id;
|
||||||
us_frame_set_data(frame, sink->mem->data, sink->mem->used);
|
us_frame_set_data(frame, sink->mem->data, sink->mem->used);
|
||||||
US_FRAME_COPY_META(sink->mem, frame);
|
US_FRAME_COPY_META(sink->mem, frame);
|
||||||
|
*key_requested = sink->mem->key_requested;
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
}
|
||||||
sink->mem->last_client_ts = us_get_now_monotonic();
|
sink->mem->last_client_ts = us_get_now_monotonic();
|
||||||
|
|||||||
@@ -65,4 +65,4 @@ void us_memsink_destroy(us_memsink_s *sink);
|
|||||||
bool us_memsink_server_check(us_memsink_s *sink, const us_frame_s *frame);
|
bool us_memsink_server_check(us_memsink_s *sink, const us_frame_s *frame);
|
||||||
int us_memsink_server_put(us_memsink_s *sink, const us_frame_s *frame, bool *const key_requested);
|
int us_memsink_server_put(us_memsink_s *sink, const us_frame_s *frame, bool *const key_requested);
|
||||||
|
|
||||||
int us_memsink_client_get(us_memsink_s *sink, us_frame_s *frame, bool key_required);
|
int us_memsink_client_get(us_memsink_s *sink, us_frame_s *frame, bool *const key_requested, bool key_required);
|
||||||
|
|||||||
@@ -32,7 +32,8 @@ static void _stream_expose_frame(us_stream_s *stream, us_frame_s *frame, unsigne
|
|||||||
|
|
||||||
#define _SINK_PUT(x_sink, x_frame) { \
|
#define _SINK_PUT(x_sink, x_frame) { \
|
||||||
if (stream->x_sink && us_memsink_server_check(stream->x_sink, x_frame)) {\
|
if (stream->x_sink && us_memsink_server_check(stream->x_sink, x_frame)) {\
|
||||||
us_memsink_server_put(stream->x_sink, x_frame, NULL); \
|
bool m_key_requested; /* Unused */ \
|
||||||
|
us_memsink_server_put(stream->x_sink, x_frame, &m_key_requested); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user