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;
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);
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++;
}
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]++;