]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5895 --resolve
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 28 Feb 2014 23:55:04 +0000 (04:55 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 28 Feb 2014 23:55:04 +0000 (04:55 +0500)
src/include/switch_types.h
src/switch_rtp.c

index fb7a0510fb8690376298c8c457916fae56ac8517..9dfe04b5eba6d93d892067be7ba6730e87850c2a 100644 (file)
@@ -706,6 +706,7 @@ typedef enum {
        SWITCH_RTP_FLAG_PAUSE,
        SWITCH_RTP_FLAG_FIR,
        SWITCH_RTP_FLAG_PLI,
+       SWITCH_RTP_FLAG_RESET,
        SWITCH_RTP_FLAG_INVALID
 } switch_rtp_flag_t;
 
index 4fcc88eee0a6dd1f81c238fcf883e0f935ce9c3b..b8c67d7d8419ba913a08debf70b5784c4d4e8afb 100644 (file)
@@ -67,7 +67,6 @@
 #define MASTER_KEY_LEN   30
 #define RTP_MAGIC_NUMBER 42
 #define MAX_SRTP_ERRS 10
-#define RTP_TS_RESET 1
 
 #define DTMF_SANITY (rtp_session->one_second * 30)
 
@@ -4273,7 +4272,8 @@ static void do_2833(switch_rtp_t *rtp_session)
 
                        rtp_session->dtmf_data.timestamp_dtmf = rtp_session->last_write_ts + samples;
                        rtp_session->last_write_ts = rtp_session->dtmf_data.timestamp_dtmf;
-                       
+                       rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 0;
+
                        wrote = switch_rtp_write_manual(rtp_session,
                                                                                        rtp_session->dtmf_data.out_digit_packet,
                                                                                        4,
@@ -4306,7 +4306,7 @@ SWITCH_DECLARE(void) rtp_flush_read_buffer(switch_rtp_t *rtp_session, switch_rtp
 
 
        if (switch_rtp_ready(rtp_session)) {
-               rtp_session->last_write_ts = RTP_TS_RESET;
+               rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
                rtp_session->flags[SWITCH_RTP_FLAG_FLUSH] = 1;
                reset_jitter_seq(rtp_session);
 
@@ -6048,7 +6048,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
                if ((rtp_session->rtp_bugs & RTP_BUG_NEVER_SEND_MARKER)) {
                        m = 0;
                } else {
-                       if ((rtp_session->last_write_ts != RTP_TS_RESET && rtp_session->ts > (rtp_session->last_write_ts + (rtp_session->samples_per_interval * 10)))
+                       if ((!rtp_session->flags[SWITCH_RTP_FLAG_RESET] && rtp_session->ts > (rtp_session->last_write_ts + (rtp_session->samples_per_interval * 10)))
                                || rtp_session->ts == rtp_session->samples_per_interval) {
                                m++;
                        }
@@ -6075,13 +6075,13 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
                }
 
                if (m) {
-                       rtp_session->last_write_ts = RTP_TS_RESET;
+                       rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
                        rtp_session->ts = 0;
                }
        
                /* If the marker was set, and the timestamp seems to have started over - set a new SSRC, to indicate this is a new stream */
                if (m && !switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_SECURE_SEND) && (rtp_session->rtp_bugs & RTP_BUG_CHANGE_SSRC_ON_MARKER) && 
-                       (rtp_session->last_write_ts == RTP_TS_RESET || (rtp_session->ts <= rtp_session->last_write_ts && rtp_session->last_write_ts > 0))) {
+                       (rtp_session->flags[SWITCH_RTP_FLAG_RESET] || (rtp_session->ts <= rtp_session->last_write_ts && rtp_session->last_write_ts > 0))) {
                        switch_rtp_set_ssrc(rtp_session, (uint32_t) ((intptr_t) rtp_session + (uint32_t) switch_epoch_time_now(NULL)));
                }
                
@@ -6269,11 +6269,11 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
                this_ts = ntohl(send_msg->header.ts);
 
                if (abs(rtp_session->last_write_ts - this_ts) > 16000) {
-                       rtp_session->last_write_ts = RTP_TS_RESET;
+                       rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
                }
 
                if (!switch_rtp_ready(rtp_session) || rtp_session->sending_dtmf || !this_ts || 
-                       (rtp_session->last_write_ts > RTP_TS_RESET && this_ts < rtp_session->last_write_ts)) {
+                       (!rtp_session->flags[SWITCH_RTP_FLAG_RESET] && this_ts < rtp_session->last_write_ts)) {
                        send = 0;
                }
        }
@@ -6386,6 +6386,7 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
                }
 
                rtp_session->last_write_ts = this_ts;
+               rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 0;
 
                if (rtp_session->queue_delay) {
                        rtp_session->delay_samples = rtp_session->queue_delay;
@@ -6597,7 +6598,7 @@ SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_fra
                
                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_WARNING, "Generating RTP locally but timestamp passthru is configured, disabling....\n");
                rtp_session->flags[SWITCH_RTP_FLAG_RAW_WRITE] = 0;
-               rtp_session->last_write_ts = RTP_TS_RESET;
+               rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 1;
        }
 
        switch_assert(frame != NULL);
@@ -6782,6 +6783,7 @@ SWITCH_DECLARE(int) switch_rtp_write_manual(switch_rtp_t *rtp_session,
 
        if (((*flags) & SFF_RTP_HEADER)) {
                rtp_session->last_write_ts = ts;
+               rtp_session->flags[SWITCH_RTP_FLAG_RESET] = 0;
        }
 
        ret = (int) bytes;