refactoring

This commit is contained in:
Devaev Maxim
2020-12-10 14:03:53 +03:00
parent 7225857fcc
commit b9e4975b77
3 changed files with 19 additions and 25 deletions

View File

@@ -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) { \

View File

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

View File

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