From c42887a2cdd742c9739e04de076db44c15567681 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 9 Aug 2023 10:00:44 -0400 Subject: [PATCH] MT#55283 use fancy "named args" syntax ... for codec_store functions Change-Id: I593291daa97a5364000e455262018903cd958a4f --- daemon/call.c | 37 ++++++++++++++++++++----------------- daemon/codec.c | 20 +++++++++----------- include/codec.h | 13 +++++++++++-- 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 4854d144e..e6cb84c2e 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2382,11 +2382,11 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi other_media->index); if (flags) { if (flags->reuse_codec) - codec_store_populate_reuse(&other_media->codecs, &sp->codecs, flags->codec_set, - false); + codec_store_populate_reuse(&other_media->codecs, &sp->codecs, + .codec_set = flags->codec_set); else - codec_store_populate(&other_media->codecs, &sp->codecs, flags->codec_set, - false); + codec_store_populate(&other_media->codecs, &sp->codecs, + .codec_set = flags->codec_set); codec_store_strip(&other_media->codecs, &flags->codec_strip, flags->codec_except); codec_store_offer(&other_media->codecs, &flags->codec_offer, &sp->codecs); if (!other_media->codecs.strip_full) @@ -2396,8 +2396,7 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi codec_store_accept(&other_media->codecs, &flags->codec_consume, &sp->codecs); codec_store_track(&other_media->codecs, &flags->codec_mask); } else - codec_store_populate(&other_media->codecs, &sp->codecs, NULL, - false); + codec_store_populate(&other_media->codecs, &sp->codecs); // we don't update the answerer side if the offer is not RTP but is going // to RTP (i.e. T.38 transcoding) - instead we leave the existing codec list @@ -2412,9 +2411,9 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi STR_FMT(&media->monologue->tag), media->index); if (flags && flags->reuse_codec) - codec_store_populate_reuse(&media->codecs, &sp->codecs, NULL, false); + codec_store_populate_reuse(&media->codecs, &sp->codecs); else - codec_store_populate(&media->codecs, &sp->codecs, NULL, false); + codec_store_populate(&media->codecs, &sp->codecs); } if (flags) { codec_store_strip(&media->codecs, &flags->codec_strip, flags->codec_except); @@ -2452,11 +2451,13 @@ void codecs_offer_answer(struct call_media *media, struct call_media *other_medi codec_answer_only = false; if (flags->reuse_codec) - codec_store_populate_reuse(&other_media->codecs, &sp->codecs, flags->codec_set, - codec_answer_only); + codec_store_populate_reuse(&other_media->codecs, &sp->codecs, + .codec_set = flags->codec_set, + .answer_only = codec_answer_only); else - codec_store_populate(&other_media->codecs, &sp->codecs, flags->codec_set, - codec_answer_only); + codec_store_populate(&other_media->codecs, &sp->codecs, + .codec_set = flags->codec_set, + .answer_only = codec_answer_only); codec_store_strip(&other_media->codecs, &flags->codec_strip, flags->codec_except); codec_store_offer(&other_media->codecs, &flags->codec_offer, &sp->codecs); codec_store_check_empty(&other_media->codecs, &sp->codecs); @@ -3054,8 +3055,8 @@ int monologue_publish(struct call_monologue *ml, GQueue *streams, struct sdp_ng_ __media_init_from_flags(media, NULL, sp, flags); - codec_store_populate(&media->codecs, &sp->codecs, NULL, false); - if (codec_store_accept_one(&media->codecs, &flags->codec_accept, flags->accept_any ? true : false)) + codec_store_populate(&media->codecs, &sp->codecs); + if (codec_store_accept_one(&media->codecs, &flags->codec_accept, !!flags->accept_any)) return -1; // the most we can do is receive @@ -3126,7 +3127,7 @@ static int monologue_subscribe_request1(struct call_monologue *src_ml, struct ca __media_init_from_flags(src_media, dst_media, sp, flags); - codec_store_populate(&dst_media->codecs, &src_media->codecs, NULL, false); + codec_store_populate(&dst_media->codecs, &src_media->codecs); codec_store_strip(&dst_media->codecs, &flags->codec_strip, flags->codec_except); codec_store_strip(&dst_media->codecs, &flags->codec_consume, flags->codec_except); codec_store_strip(&dst_media->codecs, &flags->codec_mask, flags->codec_except); @@ -3238,12 +3239,14 @@ int monologue_subscribe_answer(struct call_monologue *dst_ml, struct sdp_ng_flag __media_init_from_flags(dst_media, NULL, sp, flags); if (flags->allow_transcoding) { - codec_store_populate(&dst_media->codecs, &sp->codecs, flags->codec_set, true); + codec_store_populate(&dst_media->codecs, &sp->codecs, + .codec_set = flags->codec_set, + .answer_only = true); codec_store_strip(&dst_media->codecs, &flags->codec_strip, flags->codec_except); codec_store_offer(&dst_media->codecs, &flags->codec_offer, &sp->codecs); } else { - codec_store_populate(&dst_media->codecs, &sp->codecs, NULL, true); + codec_store_populate(&dst_media->codecs, &sp->codecs, .answer_only = true); if (!codec_store_is_full_answer(&src_media->codecs, &dst_media->codecs)) return -1; } diff --git a/daemon/codec.c b/daemon/codec.c index fcc5ec9c9..6bccca6b9 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -4792,17 +4792,17 @@ static struct rtp_payload_type *codec_store_add_link(struct codec_store *cs, } // appends to the end, but before supplemental codecs +__attribute__((nonnull(1, 2))) 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 +__attribute__((nonnull(1, 2))) static void codec_store_add_end(struct codec_store *cs, struct rtp_payload_type *pt) { codec_store_add_link(cs, pt, NULL); } -void codec_store_populate_reuse(struct codec_store *dst, struct codec_store *src, GHashTable *codec_set, - bool answer_only) -{ +void __codec_store_populate_reuse(struct codec_store *dst, struct codec_store *src, struct codec_store_args a) { // start fresh struct call_media *media = dst->media; struct call *call = media ? media->call : NULL; @@ -4817,11 +4817,11 @@ void codec_store_populate_reuse(struct codec_store *dst, struct codec_store *src STR_FMT(&pt->encoding_with_params), pt->payload_type); else { - if (!answer_only) { + if (!a.answer_only) { ilogs(codec, LOG_DEBUG, "Adding codec " STR_FORMAT " (%i) to end of list", STR_FMT(&pt->encoding_with_params), pt->payload_type); - __codec_options_set(call, pt, codec_set); + __codec_options_set(call, pt, a.codec_set); codec_store_add_end(dst, pt); } else @@ -4851,12 +4851,10 @@ void codec_store_check_empty(struct codec_store *dst, struct codec_store *src) { ilog(LOG_WARN, "Usage error: List of codecs empty. Restoring original list of codecs. " "Results may be unexpected."); - codec_store_populate(dst, src, NULL, false); + codec_store_populate(dst, src); } -void codec_store_populate(struct codec_store *dst, struct codec_store *src, GHashTable *codec_set, - bool answer_only) -{ +void __codec_store_populate(struct codec_store *dst, struct codec_store *src, struct codec_store_args a) { // start fresh struct codec_store orig_dst; codec_store_move(&orig_dst, dst); @@ -4868,7 +4866,7 @@ void codec_store_populate(struct codec_store *dst, struct codec_store *src, GHas struct rtp_payload_type *pt = l->data; struct rtp_payload_type *orig_pt = g_hash_table_lookup(orig_dst.codecs, GINT_TO_POINTER(pt->payload_type)); - if (answer_only && !orig_pt) { + if (a.answer_only && !orig_pt) { ilogs(codec, LOG_DEBUG, "Not adding stray answer codec " STR_FORMAT " (%i)", STR_FMT(&pt->encoding_with_params), pt->payload_type); @@ -4889,7 +4887,7 @@ void codec_store_populate(struct codec_store *dst, struct codec_store *src, GHas if (pt->for_transcoding) codec_touched(dst, pt); } - __codec_options_set(call, pt, codec_set); + __codec_options_set(call, pt, a.codec_set); codec_store_add_end(dst, pt); } diff --git a/include/codec.h b/include/codec.h index 968c42547..a26d4aa2e 100644 --- a/include/codec.h +++ b/include/codec.h @@ -111,10 +111,19 @@ void codec_calc_jitter(struct ssrc_ctx *, unsigned long ts, unsigned int clockra void codec_update_all_handlers(struct call_monologue *ml); void codec_update_all_source_handlers(struct call_monologue *ml, const struct sdp_ng_flags *flags); +struct codec_store_args { + GHashTable *codec_set; + bool answer_only; +}; + void codec_store_cleanup(struct codec_store *cs); void codec_store_init(struct codec_store *cs, struct call_media *); -void codec_store_populate(struct codec_store *, struct codec_store *, GHashTable *, bool answer_only); -void codec_store_populate_reuse(struct codec_store *, struct codec_store *, GHashTable *, bool answer_only); +void __codec_store_populate(struct codec_store *dst, struct codec_store *src, struct codec_store_args); +#define codec_store_populate(dst, src, ...) \ + __codec_store_populate(dst, src, (struct codec_store_args) {__VA_ARGS__}) +void __codec_store_populate_reuse(struct codec_store *, struct codec_store *, struct codec_store_args); +#define codec_store_populate_reuse(dst, src, ...) \ + __codec_store_populate_reuse(dst, src, (struct codec_store_args) {__VA_ARGS__}) void codec_store_add_raw(struct codec_store *cs, struct rtp_payload_type *pt); void codec_store_strip(struct codec_store *, GQueue *strip, GHashTable *except); void codec_store_offer(struct codec_store *, GQueue *, struct codec_store *);