提交 71514ca0 authored 作者: Anthony Minessale's avatar Anthony Minessale

FS-10311: [core] RTP timestamp rollover calculation is incorrect

上级 69b723b1
...@@ -2022,6 +2022,10 @@ static int check_rtcp_and_ice(switch_rtp_t *rtp_session) ...@@ -2022,6 +2022,10 @@ static int check_rtcp_and_ice(switch_rtp_t *rtp_session)
int rate = 0, nack_ttl = 0; int rate = 0, nack_ttl = 0;
uint32_t cur_nack[MAX_NACK] = { 0 }; uint32_t cur_nack[MAX_NACK] = { 0 };
if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) {
switch_core_timer_sync(&rtp_session->write_timer);
}
if (!rtp_session->flags[SWITCH_RTP_FLAG_UDPTL] && if (!rtp_session->flags[SWITCH_RTP_FLAG_UDPTL] &&
rtp_session->flags[SWITCH_RTP_FLAG_AUTO_CNG] && rtp_session->flags[SWITCH_RTP_FLAG_AUTO_CNG] &&
rtp_session->send_msg.header.ts && rtp_session->send_msg.header.ts &&
...@@ -5079,6 +5083,7 @@ static void do_2833(switch_rtp_t *rtp_session) ...@@ -5079,6 +5083,7 @@ static void do_2833(switch_rtp_t *rtp_session)
if (!rtp_session->last_write_ts) { if (!rtp_session->last_write_ts) {
if (rtp_session->timer.timer_interface) { if (rtp_session->timer.timer_interface) {
switch_core_timer_sync(&rtp_session->write_timer);
rtp_session->last_write_ts = rtp_session->write_timer.samplecount; rtp_session->last_write_ts = rtp_session->write_timer.samplecount;
} else { } else {
rtp_session->last_write_ts = rtp_session->samples_per_interval; rtp_session->last_write_ts = rtp_session->samples_per_interval;
...@@ -5129,6 +5134,7 @@ static void do_2833(switch_rtp_t *rtp_session) ...@@ -5129,6 +5134,7 @@ static void do_2833(switch_rtp_t *rtp_session)
rtp_session->need_mark = 1; rtp_session->need_mark = 1;
if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) { if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) {
switch_core_timer_sync(&rtp_session->write_timer);
rtp_session->last_write_samplecount = rtp_session->write_timer.samplecount; rtp_session->last_write_samplecount = rtp_session->write_timer.samplecount;
} }
...@@ -5146,6 +5152,7 @@ static void do_2833(switch_rtp_t *rtp_session) ...@@ -5146,6 +5152,7 @@ static void do_2833(switch_rtp_t *rtp_session)
void *pop; void *pop;
if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) { if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) {
switch_core_timer_sync(&rtp_session->write_timer);
if (rtp_session->write_timer.samplecount < rtp_session->next_write_samplecount) { if (rtp_session->write_timer.samplecount < rtp_session->next_write_samplecount) {
return; return;
} }
...@@ -5191,8 +5198,6 @@ static void do_2833(switch_rtp_t *rtp_session) ...@@ -5191,8 +5198,6 @@ static void do_2833(switch_rtp_t *rtp_session)
return; return;
} }
memset(rtp_session->dtmf_data.out_digit_packet, 0, 4); memset(rtp_session->dtmf_data.out_digit_packet, 0, 4);
rtp_session->dtmf_data.out_digit_sofar = samples; rtp_session->dtmf_data.out_digit_sofar = samples;
rtp_session->dtmf_data.out_digit_sub_sofar = samples; rtp_session->dtmf_data.out_digit_sub_sofar = samples;
...@@ -7772,6 +7777,10 @@ static int rtp_common_write(switch_rtp_t *rtp_session, ...@@ -7772,6 +7777,10 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
} }
WRITE_INC(rtp_session); WRITE_INC(rtp_session);
if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) {
switch_core_timer_sync(&rtp_session->write_timer);
}
if (send_msg) { if (send_msg) {
bytes = datalen; bytes = datalen;
...@@ -7823,6 +7832,10 @@ static int rtp_common_write(switch_rtp_t *rtp_session, ...@@ -7823,6 +7832,10 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
m++; m++;
} }
if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) {
switch_core_timer_sync(&rtp_session->write_timer);
}
if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER] && if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER] &&
(rtp_session->write_timer.samplecount - rtp_session->last_write_samplecount) > rtp_session->samples_per_interval * 10) { (rtp_session->write_timer.samplecount - rtp_session->last_write_samplecount) > rtp_session->samples_per_interval * 10) {
m++; m++;
...@@ -8260,6 +8273,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session, ...@@ -8260,6 +8273,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
} }
if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) { if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) {
switch_core_timer_sync(&rtp_session->write_timer);
rtp_session->last_write_samplecount = rtp_session->write_timer.samplecount; rtp_session->last_write_samplecount = rtp_session->write_timer.samplecount;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论