mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-02-27 04:06:30 +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);
|
||||
sink->has_clients = (sink->mem->last_client_ts + sink->client_ttl > get_now_monotonic());
|
||||
memcpy(sink->mem->data, frame->data, frame->used);
|
||||
sink->mem->magic = MEMSINK_MAGIC;
|
||||
# undef COPY
|
||||
|
||||
if (flock(sink->fd, LOCK_UN) < 0) {
|
||||
@@ -176,22 +177,25 @@ int memsink_client_get(memsink_s *sink, frame_s *frame) { // cppcheck-suppress u
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool updated = (sink->mem->id != sink->last_id);
|
||||
if (updated) {
|
||||
# define COPY(_field) frame->_field = sink->mem->_field
|
||||
sink->last_id = sink->mem->id;
|
||||
COPY(width);
|
||||
COPY(height);
|
||||
COPY(format);
|
||||
COPY(stride);
|
||||
COPY(online);
|
||||
COPY(grab_ts);
|
||||
COPY(encode_begin_ts);
|
||||
COPY(encode_end_ts);
|
||||
frame_set_data(frame, sink->mem->data, sink->mem->used);
|
||||
# undef COPY
|
||||
bool updated = false;
|
||||
if (sink->mem->magic == MEMSINK_MAGIC) {
|
||||
updated = (sink->mem->id != sink->last_id);
|
||||
if (updated) {
|
||||
# define COPY(_field) frame->_field = sink->mem->_field
|
||||
sink->last_id = sink->mem->id;
|
||||
COPY(width);
|
||||
COPY(height);
|
||||
COPY(format);
|
||||
COPY(stride);
|
||||
COPY(online);
|
||||
COPY(grab_ts);
|
||||
COPY(encode_begin_ts);
|
||||
COPY(encode_end_ts);
|
||||
frame_set_data(frame, sink->mem->data, sink->mem->used);
|
||||
# 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) {
|
||||
LOG_PERROR("%s-sink: Can't unlock memory", sink->name);
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
#include "frame.h"
|
||||
|
||||
|
||||
#define MEMSINK_MAGIC ((uint64_t)0xCAFEBABECAFEBABE)
|
||||
|
||||
#ifndef CFG_MEMSINK_MAX_DATA
|
||||
# define CFG_MEMSINK_MAX_DATA 33554432
|
||||
#endif
|
||||
@@ -46,6 +48,7 @@
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint64_t magic;
|
||||
uint64_t id;
|
||||
size_t used;
|
||||
unsigned width;
|
||||
|
||||
Reference in New Issue
Block a user