TT#136957 move rand_code from _send to _recv

The `dtmf_send` event might not have a matching entry while handling a
received DTMF event. Move bookkeeping of the random output event into
`dtmf_recv`.

Change-Id: I5507b0b7f5eca6e29cbcaccc905ab25249b22aa3
pull/1577/head
Richard Fuchs 4 years ago
parent 202d26a729
commit f95495d4f0

@ -2649,6 +2649,7 @@ static void delay_frame_manipulate(struct delay_frame *dframe) {
switch (mode) {
case BLOCK_DTMF_OFF:
// DTMF delay mode: play original DTMF
// `dtmf_send` is valid ONLY HERE
if (dframe->ch->handler->real_dtmf_payload_type != -1) {
// add event to handler queue so the packet can be translated
// to DTMF event packet.
@ -2700,7 +2701,7 @@ static void delay_frame_manipulate(struct delay_frame *dframe) {
break;
case BLOCK_DTMF_RANDOM:
frame_fill_dtmf_samples(frame->format, frame->extended_data[0], dframe->ts,
frame->nb_samples, dtmf_send->rand_code - '0',
frame->nb_samples, dtmf_recv->rand_code - '0',
10, frame->sample_rate,
GET_CHANNELS(frame));
break;

@ -281,14 +281,14 @@ static void dtmf_code_event(struct call_media *media, char event, uint64_t ts, i
dtmf_check_trigger(media, event, ts, clockrate);
ev = g_slice_alloc0(sizeof(*ev));
*ev = (struct dtmf_event) { .code = event, .ts = ts, .volume = volume };
*ev = (struct dtmf_event) { .code = event, .ts = ts, .volume = volume,
.rand_code = '0' + (ssl_random() % 10) };
g_queue_push_tail(&media->dtmf_recv, ev);
ev = g_slice_alloc0(sizeof(*ev));
*ev = (struct dtmf_event) { .code = event, .ts = ts + media->monologue->dtmf_delay * clockrate / 1000,
.volume = volume,
.block_dtmf = media->monologue->block_dtmf,
.rand_code = '0' + (ssl_random() % 10) };
.block_dtmf = media->monologue->block_dtmf };
g_queue_push_tail(&media->dtmf_send, ev);
}

Loading…
Cancel
Save