libosmo-netif
1.2.0.67-9ee4
Osmocom network interface library
|
Files | |
file | jibuf.h |
Osmocom Jitter Buffer helpers. | |
file | jibuf.c |
Osmocom Jitter Buffer helpers. | |
Data Structures | |
struct | osmo_jibuf |
A structure representing a single instance of a jitter buffer. More... | |
struct | osmo_jibuf_msgb_cb |
Macros | |
#define | SAMPLES_PER_PKT 160 |
#define | SAMPLE_RATE 8000 |
#define | JIBUF_DEFAULT_MIN_DELAY_MS 60 |
#define | JIBUF_DEFAULT_MAX_DELAY_MS 200 |
#define | JIBUF_REFERENCE_TS_FREQ 60 |
#define | JIBUF_BUFFER_RECALC_FREQ 40 |
#define | JIBUF_ALLOWED_PKT_DROP 3 |
#define | JIBUF_ALLOWED_PKT_CONSECUTIVE_DROP 1 |
#define | JIBUF_BUFFER_INC_STEP 20 |
#define | JIBUF_BUFFER_DEC_STEP 5 |
#define | JIBUF_SKEW_WEIGHT ((double)1/32) |
#define | JIBUF_MSGB_CB(__msgb) ((struct osmo_jibuf_msgb_cb *)&((__msgb)->cb[0])) |
Typedefs | |
typedef void(* | osmo_jibuf_dequeue_cb) (struct msgb *msg, void *data) |
Functions | |
struct osmo_jibuf * | osmo_jibuf_alloc (void *talloc_ctx) |
Allocate a new jitter buffer instance. More... | |
void | osmo_jibuf_delete (struct osmo_jibuf *jb) |
Destroy a previously allocated jitter buffer instance. More... | |
int | osmo_jibuf_enqueue (struct osmo_jibuf *jb, struct msgb *msg) |
Try to enqueue a packet into the jitter buffer. More... | |
bool | osmo_jibuf_empty (struct osmo_jibuf *jb) |
Check whether the jitter buffer instance has packets queued or not. More... | |
void | osmo_jibuf_set_min_delay (struct osmo_jibuf *jb, uint32_t min_delay) |
Set minimum buffer size for the jitter buffer. More... | |
void | osmo_jibuf_set_max_delay (struct osmo_jibuf *jb, uint32_t max_delay) |
Set maximum buffer size for the jitter buffer. More... | |
void | osmo_jibuf_enable_skew_compensation (struct osmo_jibuf *jb, bool enable) |
Toggle use of skew detection and compensation mechanism. More... | |
void | osmo_jibuf_set_dequeue_cb (struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void *cb_data) |
Set dequeue callback for the jitter buffer. More... | |
static void | ms2timeval (struct timeval *ts, uint32_t ms) |
static uint32_t | timeval2ms (const struct timeval *ts) |
static int | clock_gettime_timeval (clockid_t clk_id, struct timeval *tp) |
static struct timeval * | msgb_scheduled_ts (const struct msgb *msg) |
static void | llist_add_sorted (struct msgb *msg, struct llist_head *msg_list) |
static void | enqueue_pkt (struct osmo_jibuf *jb, struct msgb *msg, bool is_syncpoint) |
static bool | msg_get_marker (struct msgb *msg) |
static uint16_t | msg_get_sequence (struct msgb *msg) |
static uint32_t | msg_get_timestamp (struct msgb *msg) |
static int32_t | samples2ms (int32_t samples) |
static int | calc_pkt_rel_delay (struct osmo_jibuf *jb, struct msgb *msg) |
static bool | msg_is_in_sequence (struct osmo_jibuf *jb, struct msgb *msg) |
static bool | msg_is_syncpoint (struct osmo_jibuf *jb, struct msgb *msg) |
static void | msg_set_as_reference (struct osmo_jibuf *jb, struct msgb *msg) |
static void | dequeue_msg (struct osmo_jibuf *jb, struct msgb *msg) |
static void | timer_expired (void *data) |
static void | recalc_clock_skew (struct osmo_jibuf *jb, int32_t rel_delay) |
static void | recalc_threshold_delay (struct osmo_jibuf *jb) |
Variables | |
struct osmo_jibuf | __attribute__ |
struct osmo_jibuf * osmo_jibuf_alloc | ( | void * | talloc_ctx | ) |
Allocate a new jitter buffer instance.
void osmo_jibuf_delete | ( | struct osmo_jibuf * | jb | ) |
Destroy a previously allocated jitter buffer instance.
[in] | jb | Previously allocated (non-null) jitter buffer instance |
All the queued packets are dequeued before deleting the instance.
bool osmo_jibuf_empty | ( | struct osmo_jibuf * | jb | ) |
Check whether the jitter buffer instance has packets queued or not.
[in] | jb | jitter buffer instance |
void osmo_jibuf_enable_skew_compensation | ( | struct osmo_jibuf * | jb, |
bool | enable | ||
) |
Toggle use of skew detection and compensation mechanism.
[in] | jb | jitter buffer instance |
[in] | enable | Whether to enable or not (default) the skew estimation and compensation mechanism |
When this function is called, the estimated skew is reset.
int osmo_jibuf_enqueue | ( | struct osmo_jibuf * | jb, |
struct msgb * | msg | ||
) |
Try to enqueue a packet into the jitter buffer.
[in] | jb | jitter buffer instance |
[in] | msg | msgb to enqueue, containing an RTP packet |
This function calculates the delay for the enqueued packet. If the delay is bigger than the current buffer size, the function returns -1 and the caller owns the packet again and can free it if required. If the packet is enqueued, 0 is returned and the exact same packet (ownership transfer, no copy is made) will be available again through the dequeue_cb() when the queue timer for this packet expires.
void osmo_jibuf_set_dequeue_cb | ( | struct osmo_jibuf * | jb, |
osmo_jibuf_dequeue_cb | dequeue_cb, | ||
void * | cb_data | ||
) |
Set dequeue callback for the jitter buffer.
[in] | jb | jitter buffer instance |
[in] | dequeue_cb | function pointer to call back when the dequeue timer for a given packet expires |
[in] | cb_data | data pointer to be passed to dequeue_cb together with the msgb. |
void osmo_jibuf_set_max_delay | ( | struct osmo_jibuf * | jb, |
uint32_t | max_delay | ||
) |
Set maximum buffer size for the jitter buffer.
[in] | jb | jitter buffer instance |
[in] | max_delay | Maximum buffer size, as in maximum delay in milliseconds |
void osmo_jibuf_set_min_delay | ( | struct osmo_jibuf * | jb, |
uint32_t | min_delay | ||
) |
Set minimum buffer size for the jitter buffer.
[in] | jb | jitter buffer instance |
[in] | min_delay | Minimum buffer size, as in minimum delay in milliseconds |