mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-02-18 02:55:46 +00:00
refactoring
This commit is contained in:
parent
7225857fcc
commit
b9e4975b77
@ -26,9 +26,9 @@
|
||||
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;
|
||||
int flags = (master ? O_RDWR | O_CREAT : O_RDWR);
|
||||
int flags = (server ? O_RDWR | O_CREAT : O_RDWR);
|
||||
|
||||
A_CALLOC(rawsink, 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->lock_sem = SEM_FAILED;
|
||||
rawsink->rm = rm;
|
||||
rawsink->master = master;
|
||||
rawsink->server = server;
|
||||
|
||||
A_CALLOC(rawsink->mem_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(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(lock, 1);
|
||||
}
|
||||
@ -140,7 +140,7 @@ void rawsink_destroy(rawsink_s *rawsink) {
|
||||
free(rawsink);
|
||||
}
|
||||
|
||||
void rawsink_put(
|
||||
void rawsink_server_put(
|
||||
rawsink_s *rawsink,
|
||||
const uint8_t *data, size_t size,
|
||||
unsigned format, unsigned width, unsigned height,
|
||||
@ -148,9 +148,9 @@ void rawsink_put(
|
||||
|
||||
long double now = get_now_monotonic();
|
||||
|
||||
assert(rawsink->master); // Master only
|
||||
assert(rawsink->server);
|
||||
|
||||
if (rawsink->master_failed) {
|
||||
if (rawsink->server_failed) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -198,17 +198,17 @@ void rawsink_put(
|
||||
|
||||
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,
|
||||
char *data, size_t *size,
|
||||
unsigned *format, unsigned *width, unsigned *height,
|
||||
long double *grab_ts,
|
||||
long double timeout) {
|
||||
|
||||
assert(!rawsink->master); // Slave only
|
||||
assert(!rawsink->server); // Client only
|
||||
|
||||
# define WAIT_SEM(_role) { \
|
||||
if (_sem_wait_monotonic(rawsink->_role##_sem, timeout) < 0) { \
|
||||
|
||||
@ -65,22 +65,22 @@ typedef struct {
|
||||
sem_t *lock_sem;
|
||||
|
||||
bool rm;
|
||||
bool master;
|
||||
bool server;
|
||||
|
||||
bool master_failed;
|
||||
bool server_failed;
|
||||
} 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_put(
|
||||
void rawsink_server_put(
|
||||
rawsink_s *rawsink,
|
||||
const uint8_t *data, size_t size,
|
||||
unsigned format, unsigned witdh, unsigned height,
|
||||
long double grab_ts);
|
||||
|
||||
int rawsink_get(
|
||||
int rawsink_client_get(
|
||||
rawsink_s *rawsink,
|
||||
char *data, size_t *size,
|
||||
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);
|
||||
|
||||
# ifdef WITH_RAWSINK
|
||||
# define HW(_next) DEV(run->hw_buffers[buf_index]._next)
|
||||
if (rawsink) {
|
||||
rawsink_put(
|
||||
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)
|
||||
);
|
||||
rawsink_server_put(rawsink, HW(data), HW(used), HW(format), HW(width), HW(height), HW(grab_ts));
|
||||
}
|
||||
# undef HW
|
||||
# endif
|
||||
|
||||
_workers_pool_assign(pool, ready_wr, buf_index);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user