|
|
|
|
@ -2923,10 +2923,26 @@ static void __dtx_send_later(struct codec_timer *ct) {
|
|
|
|
|
input_ch = (dtxp && dtxp->input_handler) ? obj_get(&dtxp->input_handler->h) : NULL;
|
|
|
|
|
call = dtxb->call ? obj_get(dtxb->call) : NULL;
|
|
|
|
|
|
|
|
|
|
if (!call || !ch || !ps || !ps->ssrc_in[0]
|
|
|
|
|
|| dtxb->ssrc != ps->ssrc_in[0]->parent->h.ssrc
|
|
|
|
|
|| dtxb->ct.next.tv_sec == 0) {
|
|
|
|
|
// shut down or SSRC change
|
|
|
|
|
// check but DTX buffer shutdown conditions
|
|
|
|
|
bool shutdown = false;
|
|
|
|
|
if (!call)
|
|
|
|
|
shutdown = true;
|
|
|
|
|
else if (!ch)
|
|
|
|
|
shutdown = true;
|
|
|
|
|
else if (!ps)
|
|
|
|
|
shutdown = true;
|
|
|
|
|
else if (!ps->ssrc_in[0])
|
|
|
|
|
shutdown = true;
|
|
|
|
|
else if (dtxb->ssrc != ps->ssrc_in[0]->parent->h.ssrc)
|
|
|
|
|
shutdown = true;
|
|
|
|
|
else if (dtxb->ct.next.tv_sec == 0)
|
|
|
|
|
shutdown = true;
|
|
|
|
|
else if (ps->ssrc_in[0]->tracker.most_len < 1)
|
|
|
|
|
shutdown = true;
|
|
|
|
|
else if (ps->ssrc_in[0]->tracker.most[0] != ch->handler->source_pt.payload_type)
|
|
|
|
|
shutdown = true;
|
|
|
|
|
|
|
|
|
|
if (shutdown) {
|
|
|
|
|
ilogs(dtx, LOG_DEBUG, "DTX buffer for %lx has been shut down", (unsigned long) dtxb->ssrc);
|
|
|
|
|
dtxb->ct.next.tv_sec = 0;
|
|
|
|
|
dtxb->head_ts = 0;
|
|
|
|
|
|