|
|
|
@ -1938,6 +1938,8 @@ static void packet_dtmf_fwd(struct codec_ssrc_handler *ch, struct transcode_pack |
|
|
|
// init some vars |
|
|
|
if (!ch->first_ts) |
|
|
|
ch->first_ts = output_ch->first_ts; |
|
|
|
if (!ch->first_send_ts) |
|
|
|
ch->first_send_ts = output_ch->first_send_ts; |
|
|
|
|
|
|
|
// the correct output TS is the encoder's FIFO PTS at the start of the DTMF |
|
|
|
// event. however, we must shift the FIFO PTS forward as the DTMF event goes on |
|
|
|
@ -1953,7 +1955,7 @@ static void packet_dtmf_fwd(struct codec_ssrc_handler *ch, struct transcode_pack |
|
|
|
// roll back TS to start of event |
|
|
|
ts -= ch->last_dtmf_event_ts; |
|
|
|
// adjust to output RTP TS |
|
|
|
unsigned long packet_ts = ts + output_ch->first_ts; |
|
|
|
unsigned long packet_ts = ts / output_ch->encoder->def->clockrate_mult + output_ch->first_ts; |
|
|
|
|
|
|
|
ilogs(transcoding, LOG_DEBUG, "Scaling DTMF packet timestamp and duration: TS %lu -> %lu " |
|
|
|
"(%u -> %u)", |
|
|
|
@ -1969,6 +1971,7 @@ static void packet_dtmf_fwd(struct codec_ssrc_handler *ch, struct transcode_pack |
|
|
|
|
|
|
|
// shift forward our output RTP TS |
|
|
|
output_ch->encoder->fifo_pts = ts + duration; |
|
|
|
output_ch->encoder->packet_pts += (duration - ch->last_dtmf_event_ts) * output_ch->encoder->def->clockrate_mult; |
|
|
|
ch->last_dtmf_event_ts = duration; |
|
|
|
} |
|
|
|
payload_type = ch->handler->dtmf_payload_type; |
|
|
|
|