Browse Source

MT#56861 be explicit about SSRC passthrough

Make the decision whether or not to use SSRC passthrough handlers in the
upper level calling function, instead of implicitly in
__make_passthrough_gsl()

Change-Id: Ied88120ea4f12d50e3c5afb96023bdd86c42c6e1
pull/1657/head
Richard Fuchs 3 years ago
parent
commit
eb478bc5b6
1 changed files with 10 additions and 5 deletions
  1. +10
    -5
      daemon/codec.c

+ 10
- 5
daemon/codec.c View File

@ -573,11 +573,12 @@ void ensure_codec_def(struct rtp_payload_type *pt, struct call_media *media) {
// only called from codec_handlers_update() // only called from codec_handlers_update()
static void __make_passthrough_gsl(struct codec_handler *handler, GSList **handlers, static void __make_passthrough_gsl(struct codec_handler *handler, GSList **handlers,
struct rtp_payload_type *dtmf_pt, struct rtp_payload_type *cn_pt)
struct rtp_payload_type *dtmf_pt, struct rtp_payload_type *cn_pt,
bool use_ssrc_passthrough)
{ {
__make_passthrough(handler, dtmf_pt ? dtmf_pt->payload_type : -1, __make_passthrough(handler, dtmf_pt ? dtmf_pt->payload_type : -1,
cn_pt ? cn_pt->payload_type : -1); cn_pt ? cn_pt->payload_type : -1);
if (MEDIA_ISSET(handler->media, ECHO))
if (use_ssrc_passthrough)
__convert_passthrough_ssrc(handler); __convert_passthrough_ssrc(handler);
*handlers = g_slist_prepend(*handlers, handler); *handlers = g_slist_prepend(*handlers, handler);
} }
@ -1091,6 +1092,8 @@ bool codec_handlers_update(struct call_media *receiver, struct call_media *sink,
if (flags && flags->inject_dtmf) if (flags && flags->inject_dtmf)
sink->monologue->inject_dtmf = 1; sink->monologue->inject_dtmf = 1;
bool use_ssrc_passthrough = !!MEDIA_ISSET(receiver, ECHO);
// do we have to force everything through the transcoding engine even if codecs match? // do we have to force everything through the transcoding engine even if codecs match?
bool force_transcoding = do_pcm_dtmf_blocking || do_dtmf_blocking || use_audio_player; bool force_transcoding = do_pcm_dtmf_blocking || do_dtmf_blocking || use_audio_player;
@ -1108,7 +1111,7 @@ bool codec_handlers_update(struct call_media *receiver, struct call_media *sink,
// not supported // not supported
ilogs(codec, LOG_DEBUG, "No codec support for " STR_FORMAT, ilogs(codec, LOG_DEBUG, "No codec support for " STR_FORMAT,
STR_FMT(&pt->encoding_with_params)); STR_FMT(&pt->encoding_with_params));
__make_passthrough_gsl(handler, &passthrough_handlers, NULL, NULL);
__make_passthrough_gsl(handler, &passthrough_handlers, NULL, NULL, use_ssrc_passthrough);
goto next; goto next;
} }
@ -1172,7 +1175,8 @@ bool codec_handlers_update(struct call_media *receiver, struct call_media *sink,
if (!sink_pt) { if (!sink_pt) {
ilogs(codec, LOG_DEBUG, "No suitable output codec for " STR_FORMAT, ilogs(codec, LOG_DEBUG, "No suitable output codec for " STR_FORMAT,
STR_FMT(&pt->encoding_with_params)); STR_FMT(&pt->encoding_with_params));
__make_passthrough_gsl(handler, &passthrough_handlers, recv_dtmf_pt, recv_cn_pt);
__make_passthrough_gsl(handler, &passthrough_handlers, recv_dtmf_pt, recv_cn_pt,
use_ssrc_passthrough);
goto next; goto next;
} }
@ -1310,7 +1314,8 @@ sink_pt_fixed:;
// everything matches - we can do passthrough // everything matches - we can do passthrough
ilogs(codec, LOG_DEBUG, "Sink supports codec " STR_FORMAT " for passthrough", ilogs(codec, LOG_DEBUG, "Sink supports codec " STR_FORMAT " for passthrough",
STR_FMT(&pt->encoding_with_params)); STR_FMT(&pt->encoding_with_params));
__make_passthrough_gsl(handler, &passthrough_handlers, sink_dtmf_pt, sink_cn_pt);
__make_passthrough_gsl(handler, &passthrough_handlers, sink_dtmf_pt, sink_cn_pt,
use_ssrc_passthrough);
goto next; goto next;
transcode: transcode:


Loading…
Cancel
Save