|
|
|
@ -1032,6 +1032,9 @@ static void packet_dtmf_fwd(struct codec_ssrc_handler *ch, struct transcode_pack |
|
|
|
// this is actually a DTMF -> PCM handler |
|
|
|
// grab our underlying PCM transcoder |
|
|
|
struct codec_ssrc_handler *output_ch = __output_ssrc_handler(ch, mp); |
|
|
|
if (G_UNLIKELY(!ch->encoder)) |
|
|
|
goto skip; |
|
|
|
|
|
|
|
// init some vars |
|
|
|
if (!ch->first_ts) |
|
|
|
ch->first_ts = output_ch->first_ts; |
|
|
|
@ -1072,6 +1075,7 @@ static void packet_dtmf_fwd(struct codec_ssrc_handler *ch, struct transcode_pack |
|
|
|
obj_put(&output_ch->h); |
|
|
|
} |
|
|
|
|
|
|
|
skip:; |
|
|
|
char *buf = malloc(packet->payload->len + sizeof(struct rtp_header) + RTP_BUFFER_TAIL_ROOM); |
|
|
|
memcpy(buf + sizeof(struct rtp_header), packet->payload->s, packet->payload->len); |
|
|
|
if (packet->ignore_seq) // inject original seq |
|
|
|
@ -1567,6 +1571,13 @@ static int __packet_decoded(decoder_t *decoder, AVFrame *frame, void *u1, void * |
|
|
|
goto discard; |
|
|
|
} |
|
|
|
|
|
|
|
if (G_UNLIKELY(!ch->encoder)) { |
|
|
|
ilog(LOG_INFO | LOG_FLAG_LIMIT, |
|
|
|
"Discarding decoded %i PCM samples due to lack of output encoder", |
|
|
|
frame->nb_samples); |
|
|
|
goto discard; |
|
|
|
} |
|
|
|
|
|
|
|
__dtmf_detect(ch, frame); |
|
|
|
|
|
|
|
encoder_input_fifo(ch->encoder, frame, __packet_encoded, ch, mp); |
|
|
|
|