mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-19 05:53:42 +00:00
memsink magic
This commit is contained in:
@@ -146,6 +146,7 @@ int memsink_server_put(memsink_s *sink, const frame_s *frame) {
|
|||||||
COPY(encode_end_ts);
|
COPY(encode_end_ts);
|
||||||
sink->has_clients = (sink->mem->last_client_ts + sink->client_ttl > get_now_monotonic());
|
sink->has_clients = (sink->mem->last_client_ts + sink->client_ttl > get_now_monotonic());
|
||||||
memcpy(sink->mem->data, frame->data, frame->used);
|
memcpy(sink->mem->data, frame->data, frame->used);
|
||||||
|
sink->mem->magic = MEMSINK_MAGIC;
|
||||||
# undef COPY
|
# undef COPY
|
||||||
|
|
||||||
if (flock(sink->fd, LOCK_UN) < 0) {
|
if (flock(sink->fd, LOCK_UN) < 0) {
|
||||||
@@ -176,7 +177,9 @@ int memsink_client_get(memsink_s *sink, frame_s *frame) { // cppcheck-suppress u
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool updated = (sink->mem->id != sink->last_id);
|
bool updated = false;
|
||||||
|
if (sink->mem->magic == MEMSINK_MAGIC) {
|
||||||
|
updated = (sink->mem->id != sink->last_id);
|
||||||
if (updated) {
|
if (updated) {
|
||||||
# define COPY(_field) frame->_field = sink->mem->_field
|
# define COPY(_field) frame->_field = sink->mem->_field
|
||||||
sink->last_id = sink->mem->id;
|
sink->last_id = sink->mem->id;
|
||||||
@@ -192,6 +195,7 @@ int memsink_client_get(memsink_s *sink, frame_s *frame) { // cppcheck-suppress u
|
|||||||
# undef COPY
|
# undef COPY
|
||||||
}
|
}
|
||||||
sink->mem->last_client_ts = get_now_monotonic();
|
sink->mem->last_client_ts = get_now_monotonic();
|
||||||
|
}
|
||||||
|
|
||||||
if (flock(sink->fd, LOCK_UN) < 0) {
|
if (flock(sink->fd, LOCK_UN) < 0) {
|
||||||
LOG_PERROR("%s-sink: Can't unlock memory", sink->name);
|
LOG_PERROR("%s-sink: Can't unlock memory", sink->name);
|
||||||
|
|||||||
@@ -39,6 +39,8 @@
|
|||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define MEMSINK_MAGIC ((uint64_t)0xCAFEBABECAFEBABE)
|
||||||
|
|
||||||
#ifndef CFG_MEMSINK_MAX_DATA
|
#ifndef CFG_MEMSINK_MAX_DATA
|
||||||
# define CFG_MEMSINK_MAX_DATA 33554432
|
# define CFG_MEMSINK_MAX_DATA 33554432
|
||||||
#endif
|
#endif
|
||||||
@@ -46,6 +48,7 @@
|
|||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint64_t magic;
|
||||||
uint64_t id;
|
uint64_t id;
|
||||||
size_t used;
|
size_t used;
|
||||||
unsigned width;
|
unsigned width;
|
||||||
|
|||||||
Reference in New Issue
Block a user