summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-codec/speex/speex_jitter.h
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia-codec/speex/speex_jitter.h')
-rw-r--r--pjmedia/src/pjmedia-codec/speex/speex_jitter.h61
1 files changed, 42 insertions, 19 deletions
diff --git a/pjmedia/src/pjmedia-codec/speex/speex_jitter.h b/pjmedia/src/pjmedia-codec/speex/speex_jitter.h
index 31b5c53c..34043b37 100644
--- a/pjmedia/src/pjmedia-codec/speex/speex_jitter.h
+++ b/pjmedia/src/pjmedia-codec/speex/speex_jitter.h
@@ -43,32 +43,55 @@
extern "C" {
#endif
-#define SPEEX_JITTER_MAX_PACKET_SIZE 1500 /**< Maximum number of bytes per packet */
-#define SPEEX_JITTER_MAX_BUFFER_SIZE 20 /**< Maximum number of packets in jitter buffer */
+struct JitterBuffer_;
+
+typedef struct JitterBuffer_ JitterBuffer;
+
+typedef struct _JitterBufferPacket JitterBufferPacket;
+
+struct _JitterBufferPacket {
+ char *data;
+ spx_uint32_t len;
+ spx_uint32_t timestamp;
+ spx_uint32_t span;
+};
+
+
+#define JITTER_BUFFER_OK 0
+#define JITTER_BUFFER_MISSING 1
+#define JITTER_BUFFER_INCOMPLETE 2
+#define JITTER_BUFFER_INTERNAL_ERROR -1
+#define JITTER_BUFFER_BAD_ARGUMENT -2
+
+/** Initialise jitter buffer */
+JitterBuffer *jitter_buffer_init(int tick);
+
+/** Reset jitter buffer */
+void jitter_buffer_reset(JitterBuffer *jitter);
+
+/** Destroy jitter buffer */
+void jitter_buffer_destroy(JitterBuffer *jitter);
+
+/** Put one packet into the jitter buffer */
+void jitter_buffer_put(JitterBuffer *jitter, const JitterBufferPacket *packet);
+
+/** Get one packet from the jitter buffer */
+int jitter_buffer_get(JitterBuffer *jitter, JitterBufferPacket *packet, spx_uint32_t *current_timestamp);
+
+/** Get pointer timestamp of jitter buffer */
+int jitter_buffer_get_pointer_timestamp(JitterBuffer *jitter);
+
+/** Advance by one tick */
+void jitter_buffer_tick(JitterBuffer *jitter);
-#define MAX_MARGIN 12 /**< Number of bins in margin histogram */
/** Speex jitter-buffer state. */
typedef struct SpeexJitter {
- int buffer_size; /**< Buffer size */
- int pointer_timestamp; /**< Pointer timestamp */
-
SpeexBits current_packet; /**< Current Speex packet */
int valid_bits; /**< True if Speex bits are valid */
-
- char buf[SPEEX_JITTER_MAX_BUFFER_SIZE][SPEEX_JITTER_MAX_PACKET_SIZE]; /**< Buffer of packets */
- int timestamp[SPEEX_JITTER_MAX_BUFFER_SIZE]; /**< Timestamp of packet */
- int len[SPEEX_JITTER_MAX_BUFFER_SIZE]; /**< Number of bytes in packet */
-
+ JitterBuffer *packets;
void *dec; /**< Pointer to Speex decoder */
int frame_size; /**< Frame size of Speex decoder */
- int frame_time; /**< Frame time in [ms] of Speex decoder */
- int reset_state; /**< True if Speex state was reset */
-
- int lost_count; /**< Number of lost packets */
- float shortterm_margin[MAX_MARGIN]; /**< Short term margins */
- float longterm_margin[MAX_MARGIN]; /**< Long term margins */
- float loss_rate; /**< Loss rate */
} SpeexJitter;
/** Initialise jitter buffer */
@@ -81,7 +104,7 @@ void speex_jitter_destroy(SpeexJitter *jitter);
void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int timestamp);
/** Get one packet from the jitter buffer */
-void speex_jitter_get(SpeexJitter *jitter, short *out, int *current_timestamp);
+void speex_jitter_get(SpeexJitter *jitter, spx_int16_t *out, int *start_offset);
/** Get pointer timestamp of jitter buffer */
int speex_jitter_get_pointer_timestamp(SpeexJitter *jitter);