memsink magic

This commit is contained in:
Devaev Maxim
2021-01-18 11:27:57 +03:00
parent 3d28dcbaff
commit 9be264e176
2 changed files with 22 additions and 15 deletions

View File

@@ -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);

View File

@@ -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;