Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
mdevaev committed Feb 26, 2024
1 parent 2606199 commit 2d6716a
Show file tree
Hide file tree
Showing 42 changed files with 508 additions and 373 deletions.
16 changes: 16 additions & 0 deletions janus/src/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,22 @@

#include "client.h"

#include <stdlib.h>
#include <stdatomic.h>
#include <string.h>

#include <pthread.h>
#include <janus/plugins/plugin.h>

#include "uslibs/types.h"
#include "uslibs/tools.h"
#include "uslibs/threading.h"
#include "uslibs/list.h"

#include "logging.h"
#include "queue.h"
#include "rtp.h"


static void *_video_thread(void *v_client);
static void *_audio_thread(void *v_client);
Expand Down
7 changes: 1 addition & 6 deletions janus/src/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,14 @@

#pragma once

#include <stdlib.h>
#include <stdbool.h>
#include <stdatomic.h>
#include <string.h>

#include <pthread.h>
#include <janus/plugins/plugin.h>

#include "uslibs/tools.h"
#include "uslibs/threading.h"
#include "uslibs/types.h"
#include "uslibs/list.h"

#include "logging.h"
#include "queue.h"
#include "rtp.h"

Expand Down
11 changes: 11 additions & 0 deletions janus/src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,17 @@

#include "config.h"

#include <stdlib.h>
#include <string.h>

#include <janus/config.h>
#include <janus/plugins/plugin.h>

#include "uslibs/tools.h"

#include "const.h"
#include "logging.h"


static char *_get_value(janus_config *jcfg, const char *section, const char *option);
// static bool _get_bool(janus_config *jcfg, const char *section, const char *option, bool def);
Expand Down
11 changes: 0 additions & 11 deletions janus/src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,6 @@

#pragma once

#include <stdlib.h>
#include <string.h>

#include <janus/config.h>
#include <janus/plugins/plugin.h>

#include "uslibs/tools.h"

#include "const.h"
#include "logging.h"


typedef struct {
char *video_sink_name;
Expand Down
23 changes: 17 additions & 6 deletions janus/src/memsinkfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,24 @@

#include "memsinkfd.h"

#include <unistd.h>

int us_memsink_fd_wait_frame(int fd, us_memsink_shared_s* mem, uint64_t last_id) {
const long double deadline_ts = us_get_now_monotonic() + 1; // wait_timeout
long double now;
#include <linux/videodev2.h>

#include "uslibs/types.h"
#include "uslibs/tools.h"
#include "uslibs/frame.h"
#include "uslibs/memsinksh.h"

#include "logging.h"


int us_memsink_fd_wait_frame(int fd, us_memsink_shared_s* mem, u64 last_id) {
const ldf deadline_ts = us_get_now_monotonic() + 1; // wait_timeout
ldf now_ts;
do {
const int result = us_flock_timedwait_monotonic(fd, 1); // lock_timeout
now = us_get_now_monotonic();
now_ts = us_get_now_monotonic();
if (result < 0 && errno != EWOULDBLOCK) {
US_JLOG_PERROR("video", "Can't lock memsink");
return -1;
Expand All @@ -42,11 +53,11 @@ int us_memsink_fd_wait_frame(int fd, us_memsink_shared_s* mem, uint64_t last_id)
}
}
usleep(1000); // lock_polling
} while (now < deadline_ts);
} while (now_ts < deadline_ts);
return -2;
}

us_frame_s *us_memsink_fd_get_frame(int fd, us_memsink_shared_s *mem, uint64_t *frame_id, bool key_required) {
us_frame_s *us_memsink_fd_get_frame(int fd, us_memsink_shared_s *mem, u64 *frame_id, bool key_required) {
us_frame_s *frame = us_frame_init();
us_frame_set_data(frame, mem->data, mem->used);
US_FRAME_COPY_META(mem, frame);
Expand Down
14 changes: 3 additions & 11 deletions janus/src/memsinkfd.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,10 @@

#pragma once

#include <stdbool.h>
#include <stdint.h>
#include <unistd.h>

#include <linux/videodev2.h>

#include "uslibs/tools.h"
#include "uslibs/types.h"
#include "uslibs/frame.h"
#include "uslibs/memsinksh.h"

#include "logging.h"


int us_memsink_fd_wait_frame(int fd, us_memsink_shared_s* mem, uint64_t last_id);
us_frame_s *us_memsink_fd_get_frame(int fd, us_memsink_shared_s *mem, uint64_t *frame_id, bool key_required);
int us_memsink_fd_wait_frame(int fd, us_memsink_shared_s* mem, u64 last_id);
us_frame_s *us_memsink_fd_get_frame(int fd, us_memsink_shared_s *mem, u64 *frame_id, bool key_required);
11 changes: 5 additions & 6 deletions janus/src/plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
*****************************************************************************/


#include <stdint.h>
#include <stdbool.h>
#include <stdatomic.h>
#include <stdlib.h>
#include <inttypes.h>
Expand All @@ -37,6 +35,7 @@
#include <janus/plugins/plugin.h>
#include <janus/rtcp.h>

#include "uslibs/types.h"
#include "uslibs/const.h"
#include "uslibs/tools.h"
#include "uslibs/threading.h"
Expand Down Expand Up @@ -124,7 +123,7 @@ static void *_video_sink_thread(void *arg) {
US_THREAD_RENAME("us_video_sink");
atomic_store(&_g_video_sink_tid_created, true);

uint64_t frame_id = 0;
u64 frame_id = 0;
int once = 0;

while (!_STOP) {
Expand Down Expand Up @@ -220,9 +219,9 @@ static void *_audio_thread(void *arg) {
goto close_audio;
}

size_t size = US_RTP_DATAGRAM_SIZE - US_RTP_HEADER_SIZE;
uint8_t data[size];
uint64_t pts;
uz size = US_RTP_DATAGRAM_SIZE - US_RTP_HEADER_SIZE;
u8 data[size];
u64 pts;
const int result = us_audio_get_encoded(audio, data, &size, &pts);
if (result == 0) {
_LOCK_AUDIO;
Expand Down
18 changes: 14 additions & 4 deletions janus/src/queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,18 @@

#include "queue.h"

#include <errno.h>
#include <time.h>
#include <assert.h>

us_queue_s *us_queue_init(unsigned capacity) {
#include <pthread.h>

#include "uslibs/types.h"
#include "uslibs/tools.h"
#include "uslibs/threading.h"


us_queue_s *us_queue_init(uint capacity) {
us_queue_s *queue;
US_CALLOC(queue, 1);
US_CALLOC(queue->items, capacity);
Expand Down Expand Up @@ -61,7 +71,7 @@ void us_queue_destroy(us_queue_s *queue) {
} \
}

int us_queue_put(us_queue_s *queue, void *item, long double timeout) {
int us_queue_put(us_queue_s *queue, void *item, ldf timeout) {
US_MUTEX_LOCK(queue->mutex);
if (timeout == 0) {
if (queue->size == queue->capacity) {
Expand All @@ -80,7 +90,7 @@ int us_queue_put(us_queue_s *queue, void *item, long double timeout) {
return 0;
}

int us_queue_get(us_queue_s *queue, void **item, long double timeout) {
int us_queue_get(us_queue_s *queue, void **item, ldf timeout) {
US_MUTEX_LOCK(queue->mutex);
_WAIT_OR_UNLOCK(queue->size == 0, queue->empty_cond);
*item = queue->items[queue->out];
Expand All @@ -96,7 +106,7 @@ int us_queue_get(us_queue_s *queue, void **item, long double timeout) {

int us_queue_get_free(us_queue_s *queue) {
US_MUTEX_LOCK(queue->mutex);
const unsigned size = queue->size;
const uint size = queue->size;
US_MUTEX_UNLOCK(queue->mutex);
return queue->capacity - size;
}
20 changes: 8 additions & 12 deletions janus/src/queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,20 @@

#pragma once

#include <errno.h>
#include <time.h>
#include <assert.h>

#include <pthread.h>

#include "uslibs/types.h"
#include "uslibs/tools.h"
#include "uslibs/threading.h"


// Based on https://github.com/seifzadeh/c-pthread-queue/blob/master/queue.h

typedef struct {
void **items;
unsigned size;
unsigned capacity;
unsigned in;
unsigned out;
uint size;
uint capacity;
uint in;
uint out;

pthread_mutex_t mutex;
pthread_cond_t full_cond;
Expand All @@ -60,9 +56,9 @@ typedef struct {
}


us_queue_s *us_queue_init(unsigned capacity);
us_queue_s *us_queue_init(uint capacity);
void us_queue_destroy(us_queue_s *queue);

int us_queue_put(us_queue_s *queue, void *item, long double timeout);
int us_queue_get(us_queue_s *queue, void **item, long double timeout);
int us_queue_put(us_queue_s *queue, void *item, ldf timeout);
int us_queue_get(us_queue_s *queue, void **item, ldf timeout);
int us_queue_get_free(us_queue_s *queue);
13 changes: 9 additions & 4 deletions janus/src/rtp.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,13 @@

#include "rtp.h"

#include <stdlib.h>

us_rtp_s *us_rtp_init(unsigned payload, bool video) {
#include "uslibs/types.h"
#include "uslibs/tools.h"


us_rtp_s *us_rtp_init(uint payload, bool video) {
us_rtp_s *rtp;
US_CALLOC(rtp, 1);
rtp->payload = payload;
Expand All @@ -46,8 +51,8 @@ void us_rtp_destroy(us_rtp_s *rtp) {
free(rtp);
}

void us_rtp_write_header(us_rtp_s *rtp, uint32_t pts, bool marked) {
uint32_t word0 = 0x80000000;
void us_rtp_write_header(us_rtp_s *rtp, u32 pts, bool marked) {
u32 word0 = 0x80000000;
if (marked) {
word0 |= 1 << 23;
}
Expand All @@ -56,7 +61,7 @@ void us_rtp_write_header(us_rtp_s *rtp, uint32_t pts, bool marked) {
++rtp->seq;

# define WRITE_BE_U32(x_offset, x_value) \
*((uint32_t *)(rtp->datagram + x_offset)) = __builtin_bswap32(x_value)
*((u32 *)(rtp->datagram + x_offset)) = __builtin_bswap32(x_value)
WRITE_BE_U32(0, word0);
WRITE_BE_U32(4, pts);
WRITE_BE_U32(8, rtp->ssrc);
Expand Down
28 changes: 11 additions & 17 deletions janus/src/rtp.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,7 @@

#pragma once

#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>

#include <sys/types.h>

#include "uslibs/tools.h"
#include "uslibs/types.h"


// https://stackoverflow.com/questions/47635545/why-webrtc-chose-rtp-max-packet-size-to-1200-bytes
Expand All @@ -37,21 +31,21 @@


typedef struct {
unsigned payload;
bool video;
uint32_t ssrc;

uint16_t seq;
uint8_t datagram[US_RTP_DATAGRAM_SIZE];
size_t used;
bool zero_playout_delay;
uint payload;
bool video;
u32 ssrc;

u16 seq;
u8 datagram[US_RTP_DATAGRAM_SIZE];
uz used;
bool zero_playout_delay;
} us_rtp_s;

typedef void (*us_rtp_callback_f)(const us_rtp_s *rtp);


us_rtp_s *us_rtp_init(unsigned payload, bool video);
us_rtp_s *us_rtp_init(uint payload, bool video);
us_rtp_s *us_rtp_dup(const us_rtp_s *rtp);
void us_rtp_destroy(us_rtp_s *rtp);

void us_rtp_write_header(us_rtp_s *rtp, uint32_t pts, bool marked);
void us_rtp_write_header(us_rtp_s *rtp, u32 pts, bool marked);
10 changes: 8 additions & 2 deletions janus/src/rtpa.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@

#include "rtpa.h"

#include <stdlib.h>
#include <inttypes.h>

#include "uslibs/types.h"
#include "uslibs/tools.h"


us_rtpa_s *us_rtpa_init(us_rtp_callback_f callback) {
us_rtpa_s *rtpa;
Expand All @@ -37,7 +43,7 @@ void us_rtpa_destroy(us_rtpa_s *rtpa) {
}

char *us_rtpa_make_sdp(us_rtpa_s *rtpa) {
const unsigned pl = rtpa->rtp->payload;
const uint pl = rtpa->rtp->payload;
char *sdp;
US_ASPRINTF(sdp,
"m=audio 1 RTP/SAVPF %u" RN
Expand All @@ -55,7 +61,7 @@ char *us_rtpa_make_sdp(us_rtpa_s *rtpa) {
return sdp;
}

void us_rtpa_wrap(us_rtpa_s *rtpa, const uint8_t *data, size_t size, uint32_t pts) {
void us_rtpa_wrap(us_rtpa_s *rtpa, const u8 *data, uz size, u32 pts) {
if (size + US_RTP_HEADER_SIZE <= US_RTP_DATAGRAM_SIZE) {
us_rtp_write_header(rtpa->rtp, pts, false);
memcpy(rtpa->rtp->datagram + US_RTP_HEADER_SIZE, data, size);
Expand Down
Loading

0 comments on commit 2d6716a

Please sign in to comment.