Browse Source

MT#56861 refactor packet_dtmf_event

Add special return value to indicate that an event was a duplicate and
should be discarded.

Functional no-op.

Change-Id: I5d40bcc4a0bc45ba7875f4132873e7b8d747e132
pull/1657/head
Richard Fuchs 3 years ago
parent
commit
5433aa05a3
1 changed files with 17 additions and 13 deletions
  1. +17
    -13
      daemon/codec.c

+ 17
- 13
daemon/codec.c View File

@ -2134,30 +2134,34 @@ static struct codec_handler *__input_handler(struct codec_handler *h, struct med
return h;
}
// returns: -1 = error, 0 = processed ok, 1 = duplicate, already processed
static int packet_dtmf_event(struct codec_ssrc_handler *ch, struct codec_ssrc_handler *input_ch,
struct transcode_packet *packet, struct media_packet *mp)
{
LOCK(&mp->media->dtmf_lock);
if (mp->media->dtmf_ts != packet->ts) { // ignore already processed events
int ret = dtmf_event_packet(mp, packet->payload, ch->handler->source_pt.clock_rate, packet->ts);
if (G_UNLIKELY(ret == -1)) // error
return -1;
if (ret == 1) {
// END event
mp->media->dtmf_ts = packet->ts;
input_ch->dtmf_start_ts = 0;
}
else
input_ch->dtmf_start_ts = packet->ts ? packet->ts : 1;
if (mp->media->dtmf_ts == packet->ts)
return 1; // ignore already processed events
int ret = dtmf_event_packet(mp, packet->payload, ch->handler->source_pt.clock_rate, packet->ts);
if (G_UNLIKELY(ret == -1)) // error
return -1;
if (ret == 1) {
// END event
mp->media->dtmf_ts = packet->ts;
input_ch->dtmf_start_ts = 0;
}
else
input_ch->dtmf_start_ts = packet->ts ? packet->ts : 1;
return 0;
}
static int packet_dtmf(struct codec_ssrc_handler *ch, struct codec_ssrc_handler *input_ch,
struct transcode_packet *packet, struct media_packet *mp)
{
if (packet_dtmf_event(ch, input_ch, packet, mp))
int dtmf_event_processed = packet_dtmf_event(ch, input_ch, packet, mp);
if (dtmf_event_processed == -1)
return -1;
int ret = 0;
@ -4015,7 +4019,7 @@ static int packet_decode(struct codec_ssrc_handler *ch, struct codec_ssrc_handle
ch->csch.first_ts = packet->ts;
if (ch->decoder->def->dtmf) {
if (packet_dtmf_event(ch, input_ch, packet, mp))
if (packet_dtmf_event(ch, input_ch, packet, mp) == -1)
goto out;
}
else {


Loading…
Cancel
Save