diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2017-04-12 19:36:47 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2018-04-13 15:51:43 +0200 |
commit | ce820763c1c527856e8f75719b958de77d8c74aa (patch) | |
tree | 3c4f88488e3c0da6a54119ba1d475bdd3c5d2a85 /include/osmocom/netif/jibuf.h | |
parent | 5c962c2f3eb1c4e1497edf0f540006c76deb06fd (diff) |
jibuf: Add initial implementation of Jitter Buffer
Change-Id: I9688ba9c4d5b733b9f29d0f15f73750f9271ef55
Diffstat (limited to 'include/osmocom/netif/jibuf.h')
-rw-r--r-- | include/osmocom/netif/jibuf.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/include/osmocom/netif/jibuf.h b/include/osmocom/netif/jibuf.h new file mode 100644 index 0000000..6273983 --- /dev/null +++ b/include/osmocom/netif/jibuf.h @@ -0,0 +1,63 @@ +#pragma once + +#include <stdint.h> +#include <stdbool.h> +#include <time.h> + +#include <osmocom/core/timer.h> + +/*! \defgroup jibuf Osmocom Jitter Buffer + * @{ + */ + +/*! \file jibuf.h + * \brief Osmocom Jitter Buffer helpers + */ + +typedef void (*osmo_jibuf_dequeue_cb)(struct msgb *msg, void *data); + +/*! \brief A structure representing a single instance of a jitter buffer */ +struct osmo_jibuf { + void *talloc_ctx; + bool started; + struct osmo_timer_list timer; + struct llist_head msg_list; /* sorted by output ts */ + uint32_t min_delay; /* in msec */ + uint32_t max_delay; /* in msec */ + uint32_t threshold_delay; /* in msec */ + + osmo_jibuf_dequeue_cb dequeue_cb; + void *dequeue_cb_data; + + /* number of pkt drops since we last changed the buffer size */ + uint32_t last_dropped; + uint32_t consecutive_drops; + + uint32_t ref_rx_ts; + uint32_t ref_tx_ts; + uint16_t ref_tx_seq; + + struct timeval last_enqueue_time; + struct timeval next_dequeue_time; + + struct { + uint32_t total_enqueued; + uint64_t total_dropped; + } stats; +}; + + +struct osmo_jibuf *osmo_jibuf_alloc(void *talloc_ctx); + +void osmo_jibuf_delete(struct osmo_jibuf *jb); + +int osmo_jibuf_enqueue(struct osmo_jibuf *jb, struct msgb *msg); + +bool osmo_jibuf_empty(struct osmo_jibuf *jb); + +void osmo_jibuf_set_min_delay(struct osmo_jibuf *jb, uint32_t min_delay); +void osmo_jibuf_set_max_delay(struct osmo_jibuf *jb, uint32_t max_delay); + +void osmo_jibuf_set_dequeue_cb(struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void* cb_data); + +/*! @} */ |