]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8130 more refactoring
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 18 Sep 2015 03:31:22 +0000 (22:31 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 18 Sep 2015 03:31:28 +0000 (22:31 -0500)
src/switch_jitterbuffer.c
src/switch_rtp.c

index ec0123d2b5cfdb8bd2e96ae940c026b37315d6b4..9481d456ad7df6fcb7334bd1f838b315734173a5 100644 (file)
@@ -402,6 +402,26 @@ static inline uint32_t jb_find_highest_ts(switch_jb_t *jb)
 }
 #endif
 
+
+static inline switch_jb_node_t *jb_find_penultimate_node(switch_jb_t *jb)
+{
+       switch_jb_node_t *np, *highest = NULL, *second_highest = NULL;
+
+       switch_mutex_lock(jb->list_mutex);
+       for (np = jb->node_list; np; np = np->next) {
+               if (!np->visible) continue;
+
+               if (!highest || ntohl(highest->packet.header.ts) < ntohl(np->packet.header.ts)) {
+                       if (highest) second_highest = highest;
+                       highest = np;
+               }
+       }
+       switch_mutex_unlock(jb->list_mutex);
+
+       return second_highest ? second_highest : highest;
+}
+
+
 static inline void jb_hit(switch_jb_t *jb)
 {
        jb->period_good_count++;
@@ -480,9 +500,9 @@ static inline void jb_miss(switch_jb_t *jb)
        jb->consec_good_count = 0;
 }
 
-static inline int verify_oldest_frame(switch_jb_t *jb)
+static inline int verify_penultimate_frame(switch_jb_t *jb)
 {
-       switch_jb_node_t *lowest = jb_find_lowest_node(jb), *np = NULL;
+       switch_jb_node_t *lowest = jb_find_penultimate_node(jb), *np = NULL;
        int r = 0;
 
        if (!lowest || !(lowest = jb_find_lowest_seq(jb, lowest->packet.header.ts))) {
@@ -511,9 +531,9 @@ static inline int verify_oldest_frame(switch_jb_t *jb)
 
  end:
 
-       if (!r && jb->session) {
-               switch_core_session_request_video_refresh(jb->session);
-       }
+       //if (!r && jb->session) {
+               //switch_core_session_request_video_refresh(jb->session);
+       //}
 
        return r;
 }
@@ -572,7 +592,7 @@ static inline void add_node(switch_jb_t *jb, switch_rtp_packet_t *packet, switch
                        jb->complete_frames++;
                        jb_debug(jb, 2, "WRITE frame ts: %u complete=%u/%u n:%u\n", ntohl(node->packet.header.ts), jb->complete_frames , jb->frame_len, jb->visible_nodes);
                        jb->highest_wrote_ts = packet->header.ts;
-                       verify_oldest_frame(jb);
+                       verify_penultimate_frame(jb);
                } else if (!jb->write_init) {
                        jb->highest_wrote_ts = packet->header.ts;
                }
@@ -653,9 +673,9 @@ static inline switch_status_t jb_next_packet_by_seq(switch_jb_t *jb, switch_jb_n
                if (jb->type == SJB_VIDEO) {
                        int x;
 
-                       if (jb->session) {
-                               switch_core_session_request_video_refresh(jb->session);
-                       }
+                       //if (jb->session) {
+                       //      switch_core_session_request_video_refresh(jb->session);
+                       //}
                        
                        for (x = 0; x < 10; x++) {
                                increment_seq(jb);
@@ -785,6 +805,10 @@ SWITCH_DECLARE(void) switch_jb_reset(switch_jb_t *jb)
                switch_core_inthash_destroy(&jb->missing_seq_hash);
                switch_core_inthash_init(&jb->missing_seq_hash);
                switch_mutex_unlock(jb->mutex);
+
+               if (jb->session) {
+                       switch_core_session_request_video_refresh(jb->session);
+               }
        }
 
        jb_debug(jb, 2, "%s", "RESET BUFFER\n");
@@ -1187,7 +1211,7 @@ SWITCH_DECLARE(switch_status_t) switch_jb_get_packet(switch_jb_t *jb, switch_rtp
 
        switch_mutex_unlock(jb->mutex);
 
-       if (status == SWITCH_STATUS_SUCCESS) {
+       if (status == SWITCH_STATUS_SUCCESS && jb->type == SJB_AUDIO) {
                if (jb->complete_frames > jb->max_frame_len) {
                        drop_oldest_frame(jb);
                }
index 44aac5b134306a24091f43b4e520f2eafe2505f7..46ddbb7964f641a7080b16e0172ad8a4483cc22d 100644 (file)
@@ -1895,14 +1895,14 @@ static int using_ice(switch_rtp_t *rtp_session)
        return 0;
 }
 
-#define MAX_NACK 10
+#define MAX_NACK 1
 static int check_rtcp_and_ice(switch_rtp_t *rtp_session)
 {
        int ret = 0;
        int rtcp_ok = 0, rtcp_fb = 0;
        switch_time_t now = switch_micro_time_now();
        int rate = 0, nack_ttl = 0;
-       uint32_t cur_nack[MAX_NACK];
+       uint32_t cur_nack[MAX_NACK] = { 0 };
 
        if (rtp_session->flags[SWITCH_RTP_FLAG_AUTO_CNG] && rtp_session->send_msg.header.ts && rtp_session->cng_pt != INVALID_PT &&
                (rtp_session->timer.samplecount - rtp_session->last_write_samplecount >= rtp_session->samples_per_interval * 60)) {
@@ -7031,31 +7031,31 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
                }
 
                if (!rtp_session->ts_norm.last_ssrc || send_msg->header.ssrc != rtp_session->ts_norm.last_ssrc) {
-#define USE_DELTA
-#ifdef USE_DELTA
-                       if (rtp_session->ts_norm.last_ssrc) {
-                               rtp_session->ts_norm.delta_ct = 1;
-                               rtp_session->ts_norm.delta_ttl = 0;
-                               if (rtp_session->ts_norm.delta) {
-                                       rtp_session->ts_norm.ts += rtp_session->ts_norm.delta;
+                       if (switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_GEN_TS_DELTA)) {
+                               if (rtp_session->ts_norm.last_ssrc) {
+                                       rtp_session->ts_norm.delta_ct = 1;
+                                       rtp_session->ts_norm.delta_ttl = 0;
+                                       if (rtp_session->ts_norm.delta) {
+                                               rtp_session->ts_norm.ts += rtp_session->ts_norm.delta;
+                                       }
                                }
                        }
-#endif
+
                        rtp_session->ts_norm.last_ssrc = send_msg->header.ssrc;
                        rtp_session->ts_norm.last_frame = ntohl(send_msg->header.ts);
                }
                
 
                if (ntohl(send_msg->header.ts) != rtp_session->ts_norm.last_frame) {
-#ifdef USE_DELTA
-                       int32_t delta = (int32_t) (ntohl(send_msg->header.ts) - rtp_session->ts_norm.last_frame);
+                       if (switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_GEN_TS_DELTA)) {
+                               int32_t delta = (int32_t) (ntohl(send_msg->header.ts) - rtp_session->ts_norm.last_frame);
                        
-                       rtp_session->ts_norm.delta = delta;
-                       rtp_session->ts_norm.ts += rtp_session->ts_norm.delta;
-#else
-                       switch_core_timer_sync(&rtp_session->timer);
-                       rtp_session->ts_norm.ts = rtp_session->timer.samplecount;
-#endif
+                               rtp_session->ts_norm.delta = delta;
+                               rtp_session->ts_norm.ts += rtp_session->ts_norm.delta;
+                       } else {
+                               switch_core_timer_sync(&rtp_session->timer);
+                               rtp_session->ts_norm.ts = rtp_session->timer.samplecount;
+                       }
                }
                
                rtp_session->ts_norm.last_frame = ntohl(send_msg->header.ts);