|
|
|
@ -8,9 +8,10 @@
|
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
|
|
#define INITIAL_PACKETS 0x1E
|
|
|
|
|
#define CONT_SEQ_COUNT 0x64
|
|
|
|
|
#define CONT_SEQ_COUNT 0x1F4
|
|
|
|
|
#define CONT_MISS_COUNT 0x0A
|
|
|
|
|
#define CLOCK_DRIFT_MULT 0x14
|
|
|
|
|
#define ONE_MS 0x64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static struct timerthread jitter_buffer_thread;
|
|
|
|
@ -135,6 +136,7 @@ static int queue_packet(struct media_packet *mp, struct jb_packet *p) {
|
|
|
|
|
(long long) (ts_diff + (jb->rtptime_delta * jb->buffer_len))* 1000000 / clockrate;
|
|
|
|
|
|
|
|
|
|
ts_diff_us += (jb->clock_drift_val * seq_diff);
|
|
|
|
|
ts_diff_us += (jb->dtmf_mult_factor * ONE_MS);
|
|
|
|
|
|
|
|
|
|
if(jb->buf_decremented) {
|
|
|
|
|
ts_diff_us += 5000; //add 5ms delta when 2 packets are scheduled around same time
|
|
|
|
@ -144,7 +146,7 @@ static int queue_packet(struct media_packet *mp, struct jb_packet *p) {
|
|
|
|
|
|
|
|
|
|
ts_diff_us = timeval_diff(&p->ttq_entry.when, &rtpe_now);
|
|
|
|
|
|
|
|
|
|
if (ts_diff_us > 1000000 || ts_diff_us < -1000000) { // more/less than one second, can't be right
|
|
|
|
|
if (ts_diff_us > 1000000) { // more than one second, can't be right
|
|
|
|
|
ilog(LOG_DEBUG, "Partial reset due to timestamp");
|
|
|
|
|
jb->first_send.tv_sec = 0;
|
|
|
|
|
return 1;
|
|
|
|
@ -216,6 +218,10 @@ int buffer_packet(struct media_packet *mp, const str *s) {
|
|
|
|
|
if(rtp_pt) {
|
|
|
|
|
if(rtp_pt->codec_def && !rtp_pt->codec_def->dtmf)
|
|
|
|
|
jb->first_send.tv_sec = 0;
|
|
|
|
|
if(rtp_pt->codec_def->dtmf)
|
|
|
|
|
jb->dtmf_mult_factor++;
|
|
|
|
|
else
|
|
|
|
|
jb->dtmf_mult_factor=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -291,7 +297,6 @@ static void set_jitter_values(struct media_packet *mp) {
|
|
|
|
|
}
|
|
|
|
|
else if(curr_seq < jb->next_exp_seq) { //Might be duplicate or sequence already crossed
|
|
|
|
|
jb->cont_frames = 0;
|
|
|
|
|
jb->cont_miss++;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
jb->cont_frames++;
|
|
|
|
|