]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10311: [core] RTP timestamp rollover calculation is incorrect
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 15 May 2017 23:00:40 +0000 (18:00 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Mon, 15 May 2017 23:00:40 +0000 (18:00 -0500)
src/switch_rtp.c

index 40983a46d08222aa13a584658c04b3bbcef6782b..c60b097db7c5aaa48c9d92a4fc11fd9adf29d283 100644 (file)
@@ -2022,6 +2022,10 @@ static int check_rtcp_and_ice(switch_rtp_t *rtp_session)
        int rate = 0, nack_ttl = 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] &&
                rtp_session->flags[SWITCH_RTP_FLAG_AUTO_CNG] &&
                rtp_session->send_msg.header.ts &&
@@ -5079,6 +5083,7 @@ static void do_2833(switch_rtp_t *rtp_session)
 
                if (!rtp_session->last_write_ts) {
                        if (rtp_session->timer.timer_interface) {
+                               switch_core_timer_sync(&rtp_session->write_timer);
                                rtp_session->last_write_ts = rtp_session->write_timer.samplecount;
                        } else {
                                rtp_session->last_write_ts = rtp_session->samples_per_interval;
@@ -5129,6 +5134,7 @@ static void do_2833(switch_rtp_t *rtp_session)
                        rtp_session->need_mark = 1;
 
                        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;
                        }
 
@@ -5146,6 +5152,7 @@ static void do_2833(switch_rtp_t *rtp_session)
                void *pop;
 
                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) {
                                return;
                        }
@@ -5191,8 +5198,6 @@ static void do_2833(switch_rtp_t *rtp_session)
                                return;
                        }
 
-
-
                        memset(rtp_session->dtmf_data.out_digit_packet, 0, 4);
                        rtp_session->dtmf_data.out_digit_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,
        }
 
        WRITE_INC(rtp_session);
+       
+       if (rtp_session->flags[SWITCH_RTP_FLAG_USE_TIMER]) {
+               switch_core_timer_sync(&rtp_session->write_timer);
+       }
 
        if (send_msg) {
                bytes = datalen;
@@ -7823,6 +7832,10 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
                                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] &&
                                (rtp_session->write_timer.samplecount - rtp_session->last_write_samplecount) > rtp_session->samples_per_interval * 10) {
                                m++;
@@ -8260,6 +8273,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
                }
 
                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;
                }