mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-14 11:33:43 +00:00
refactoring
This commit is contained in:
@@ -26,9 +26,9 @@
|
|||||||
static int _sem_wait_monotonic(sem_t *sem, long double timeout);
|
static int _sem_wait_monotonic(sem_t *sem, long double timeout);
|
||||||
|
|
||||||
|
|
||||||
rawsink_s *rawsink_init(const char *name, mode_t mode, bool rm, bool master) {
|
rawsink_s *rawsink_init(const char *name, mode_t mode, bool rm, bool server) {
|
||||||
rawsink_s *rawsink;
|
rawsink_s *rawsink;
|
||||||
int flags = (master ? O_RDWR | O_CREAT : O_RDWR);
|
int flags = (server ? O_RDWR | O_CREAT : O_RDWR);
|
||||||
|
|
||||||
A_CALLOC(rawsink, 1);
|
A_CALLOC(rawsink, 1);
|
||||||
rawsink->fd = -1;
|
rawsink->fd = -1;
|
||||||
@@ -36,7 +36,7 @@ rawsink_s *rawsink_init(const char *name, mode_t mode, bool rm, bool master) {
|
|||||||
rawsink->signal_sem = SEM_FAILED;
|
rawsink->signal_sem = SEM_FAILED;
|
||||||
rawsink->lock_sem = SEM_FAILED;
|
rawsink->lock_sem = SEM_FAILED;
|
||||||
rawsink->rm = rm;
|
rawsink->rm = rm;
|
||||||
rawsink->master = master;
|
rawsink->server = server;
|
||||||
|
|
||||||
A_CALLOC(rawsink->mem_name, strlen(name) + 8);
|
A_CALLOC(rawsink->mem_name, strlen(name) + 8);
|
||||||
A_CALLOC(rawsink->signal_name, strlen(name) + 8);
|
A_CALLOC(rawsink->signal_name, strlen(name) + 8);
|
||||||
@@ -55,7 +55,7 @@ rawsink_s *rawsink_init(const char *name, mode_t mode, bool rm, bool master) {
|
|||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!master) {
|
if (!server) {
|
||||||
OPEN_SEM(lock, 1);
|
OPEN_SEM(lock, 1);
|
||||||
OPEN_SEM(signal, 0);
|
OPEN_SEM(signal, 0);
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ rawsink_s *rawsink_init(const char *name, mode_t mode, bool rm, bool master) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (master) {
|
if (server) {
|
||||||
OPEN_SEM(signal, 0);
|
OPEN_SEM(signal, 0);
|
||||||
OPEN_SEM(lock, 1);
|
OPEN_SEM(lock, 1);
|
||||||
}
|
}
|
||||||
@@ -140,7 +140,7 @@ void rawsink_destroy(rawsink_s *rawsink) {
|
|||||||
free(rawsink);
|
free(rawsink);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rawsink_put(
|
void rawsink_server_put(
|
||||||
rawsink_s *rawsink,
|
rawsink_s *rawsink,
|
||||||
const uint8_t *data, size_t size,
|
const uint8_t *data, size_t size,
|
||||||
unsigned format, unsigned width, unsigned height,
|
unsigned format, unsigned width, unsigned height,
|
||||||
@@ -148,9 +148,9 @@ void rawsink_put(
|
|||||||
|
|
||||||
long double now = get_now_monotonic();
|
long double now = get_now_monotonic();
|
||||||
|
|
||||||
assert(rawsink->master); // Master only
|
assert(rawsink->server);
|
||||||
|
|
||||||
if (rawsink->master_failed) {
|
if (rawsink->server_failed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,17 +198,17 @@ void rawsink_put(
|
|||||||
|
|
||||||
error:
|
error:
|
||||||
LOG_ERROR("RAW sink completely disabled due error");
|
LOG_ERROR("RAW sink completely disabled due error");
|
||||||
rawsink->master_failed = true;
|
rawsink->server_failed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rawsink_get(
|
int rawsink_client_get(
|
||||||
rawsink_s *rawsink,
|
rawsink_s *rawsink,
|
||||||
char *data, size_t *size,
|
char *data, size_t *size,
|
||||||
unsigned *format, unsigned *width, unsigned *height,
|
unsigned *format, unsigned *width, unsigned *height,
|
||||||
long double *grab_ts,
|
long double *grab_ts,
|
||||||
long double timeout) {
|
long double timeout) {
|
||||||
|
|
||||||
assert(!rawsink->master); // Slave only
|
assert(!rawsink->server); // Client only
|
||||||
|
|
||||||
# define WAIT_SEM(_role) { \
|
# define WAIT_SEM(_role) { \
|
||||||
if (_sem_wait_monotonic(rawsink->_role##_sem, timeout) < 0) { \
|
if (_sem_wait_monotonic(rawsink->_role##_sem, timeout) < 0) { \
|
||||||
|
|||||||
@@ -65,22 +65,22 @@ typedef struct {
|
|||||||
sem_t *lock_sem;
|
sem_t *lock_sem;
|
||||||
|
|
||||||
bool rm;
|
bool rm;
|
||||||
bool master;
|
bool server;
|
||||||
|
|
||||||
bool master_failed;
|
bool server_failed;
|
||||||
} rawsink_s;
|
} rawsink_s;
|
||||||
|
|
||||||
|
|
||||||
rawsink_s *rawsink_init(const char *name, mode_t mode, bool rm, bool master);
|
rawsink_s *rawsink_init(const char *name, mode_t mode, bool rm, bool server);
|
||||||
void rawsink_destroy(rawsink_s *rawsink);
|
void rawsink_destroy(rawsink_s *rawsink);
|
||||||
|
|
||||||
void rawsink_put(
|
void rawsink_server_put(
|
||||||
rawsink_s *rawsink,
|
rawsink_s *rawsink,
|
||||||
const uint8_t *data, size_t size,
|
const uint8_t *data, size_t size,
|
||||||
unsigned format, unsigned witdh, unsigned height,
|
unsigned format, unsigned witdh, unsigned height,
|
||||||
long double grab_ts);
|
long double grab_ts);
|
||||||
|
|
||||||
int rawsink_get(
|
int rawsink_client_get(
|
||||||
rawsink_s *rawsink,
|
rawsink_s *rawsink,
|
||||||
char *data, size_t *size,
|
char *data, size_t *size,
|
||||||
unsigned *format, unsigned *width, unsigned *height,
|
unsigned *format, unsigned *width, unsigned *height,
|
||||||
|
|||||||
@@ -220,17 +220,11 @@ void stream_loop(stream_s *stream) {
|
|||||||
LOG_VERBOSE("Fluency: delay=%.03Lf, grab_after=%.03Lf", fluency_delay, grab_after);
|
LOG_VERBOSE("Fluency: delay=%.03Lf, grab_after=%.03Lf", fluency_delay, grab_after);
|
||||||
|
|
||||||
# ifdef WITH_RAWSINK
|
# ifdef WITH_RAWSINK
|
||||||
|
# define HW(_next) DEV(run->hw_buffers[buf_index]._next)
|
||||||
if (rawsink) {
|
if (rawsink) {
|
||||||
rawsink_put(
|
rawsink_server_put(rawsink, HW(data), HW(used), HW(format), HW(width), HW(height), HW(grab_ts));
|
||||||
rawsink,
|
|
||||||
DEV(run->hw_buffers[buf_index].data),
|
|
||||||
DEV(run->hw_buffers[buf_index].used),
|
|
||||||
DEV(run->hw_buffers[buf_index].format),
|
|
||||||
DEV(run->hw_buffers[buf_index].width),
|
|
||||||
DEV(run->hw_buffers[buf_index].height),
|
|
||||||
DEV(run->hw_buffers[buf_index].grab_ts)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
# undef HW
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
_workers_pool_assign(pool, ready_wr, buf_index);
|
_workers_pool_assign(pool, ready_wr, buf_index);
|
||||||
|
|||||||
Reference in New Issue
Block a user