]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10770: [freeswitch-core] Make nack buffer bigger by default
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 2 Nov 2017 19:50:02 +0000 (14:50 -0500)
committerMuteesa Fred <muteesafred@hotmail.com>
Tue, 24 Jul 2018 07:21:35 +0000 (07:21 +0000)
src/switch_rtp.c

index a343d8ed06388e847cc9c5299404fc5476448406..2ef030feabf9ad19fa2303d25751d0c91543a6eb 100644 (file)
@@ -423,6 +423,7 @@ struct switch_rtp {
        switch_payload_t recv_te;
        switch_payload_t cng_pt;
        switch_mutex_t *flag_mutex;
+       switch_mutex_t *nack_mutex;
        switch_mutex_t *read_mutex;
        switch_mutex_t *write_mutex;
        switch_mutex_t *ice_mutex;
@@ -4210,6 +4211,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_create(switch_rtp_t **new_rtp_session
        rtp_session->session = session;
 
        switch_mutex_init(&rtp_session->flag_mutex, SWITCH_MUTEX_NESTED, pool);
+       switch_mutex_init(&rtp_session->nack_mutex, SWITCH_MUTEX_NESTED, pool);
        switch_mutex_init(&rtp_session->read_mutex, SWITCH_MUTEX_NESTED, pool);
        switch_mutex_init(&rtp_session->write_mutex, SWITCH_MUTEX_NESTED, pool);
        switch_mutex_init(&rtp_session->ice_mutex, SWITCH_MUTEX_NESTED, pool);
@@ -6475,7 +6477,12 @@ static switch_status_t process_rtcp_report(switch_rtp_t *rtp_session, rtcp_msg_t
 
 
                        for (i = 0; i < ntohs(extp->header.length) - 2; i++) {
-                               handle_nack(rtp_session, *nack);
+                               //handle_nack(rtp_session, *nack);
+                               switch_mutex_lock(rtp_session->nack_mutex);
+                               if (rtp_session->nack_idx < MAX_NACKS) {
+                                       rtp_session->nack_buf[rtp_session->nack_idx++] = *nack;
+                               }
+                               switch_mutex_unlock(rtp_session->nack_mutex);
                                nack++;
                        }
 
@@ -8603,6 +8610,17 @@ SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_fra
                return 0;
        }
 
+       switch_mutex_lock(rtp_session->nack_mutex);
+       if (rtp_session->nack_idx) {
+               int i = 0;
+               
+               for(i = 0; i < rtp_session->nack_idx; i++) {
+                       handle_nack(rtp_session, rtp_session->nack_buf[i]); 
+               }
+               rtp_session->nack_idx = 0;
+       }
+       switch_mutex_unlock(rtp_session->nack_mutex);
+       
        //if (rtp_session->flags[SWITCH_RTP_FLAG_VIDEO]) {
        //      rtp_session->flags[SWITCH_RTP_FLAG_DEBUG_RTP_READ]++;
        //      rtp_session->flags[SWITCH_RTP_FLAG_DEBUG_RTP_WRITE]++;