From 60b8299ad21fd4fcdb350052fb2ff59f12b2fe8b Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 21 Oct 2022 12:37:45 -0400 Subject: [PATCH] MT#55447 amend codec_store_add_* Make these functions return the newly created payload type object so that it can be manipulated directly without having to do a lookup. Change-Id: Ib035cf7d61c61d0de6d5f87dfd497d17ba28ca5f --- daemon/codec.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/daemon/codec.c b/daemon/codec.c index 039668ef4..1c56c0b67 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -3923,18 +3923,25 @@ static int handler_func_inject_dtmf(struct codec_handler *h, struct media_packet return 0; } +#endif static struct rtp_payload_type *codec_make_payload_type_sup(const str *codec_str, struct call_media *media) { - struct rtp_payload_type *ret = codec_make_payload_type(codec_str, media->type_id); + struct rtp_payload_type *ret = codec_make_payload_type(codec_str, media ? media->type_id : MT_UNKNOWN); if (!ret) goto err2; +#ifndef WITH_TRANSCODING + + return ret; + +#else + // check for type mismatch and don't warn if it is - if (!ret->codec_def || (media->type_id && ret->codec_def->media_type != media->type_id)) { + if (!ret->codec_def || (media && media->type_id && ret->codec_def->media_type != media->type_id)) { payload_type_free(ret); return NULL; } @@ -3951,6 +3958,9 @@ static struct rtp_payload_type *codec_make_payload_type_sup(const str *codec_str err: payload_type_free(ret); + +#endif + err2: ilogs(codec, LOG_WARN, "Codec '" STR_FORMAT "' requested for transcoding is not supported", STR_FMT(codec_str)); @@ -3959,6 +3969,8 @@ err2: } +#ifdef WITH_TRANSCODING + static struct rtp_payload_type *codec_add_payload_type_pt(struct rtp_payload_type *pt, struct call_media *media, struct call_media *other_media, struct codec_store *extra_cs) { @@ -4301,21 +4313,24 @@ void codec_store_add_raw(struct codec_store *cs, struct rtp_payload_type *pt) { codec_store_add_raw_link(cs, pt, NULL); } -static void codec_store_add_link(struct codec_store *cs, struct rtp_payload_type *pt, GList *link) { +static struct rtp_payload_type *codec_store_add_link(struct codec_store *cs, + struct rtp_payload_type *pt, GList *link) +{ if (!cs->media) - return; + return NULL; ensure_codec_def(pt, cs->media); if (proto_is_not_rtp(cs->media->protocol)) - return; + return NULL; struct rtp_payload_type *copy = rtp_payload_type_dup(pt); codec_store_add_raw_link(cs, copy, link); + return copy; } // appends to the end, but before supplemental codecs -static void codec_store_add_order(struct codec_store *cs, struct rtp_payload_type *pt) { - codec_store_add_link(cs, pt, cs->supp_link); +static struct rtp_payload_type *codec_store_add_order(struct codec_store *cs, struct rtp_payload_type *pt) { + return codec_store_add_link(cs, pt, cs->supp_link); } // always add to end static void codec_store_add_end(struct codec_store *cs, struct rtp_payload_type *pt) {