From 5b034e571b0aab7b3dbb5dfde5921d55638f2ae1 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 7 Apr 2026 11:23:47 -0400 Subject: [PATCH] MT#55283 support passing down codec information Change-Id: I24907b1d315171d50df7cad14c887a36e5a3ad5f --- daemon/codec.c | 18 ++++++++++++++---- include/codec.h | 7 +++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/daemon/codec.c b/daemon/codec.c index 09d1d4bb4..93ff292e7 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -1515,12 +1515,16 @@ void __codec_handlers_update(struct call_media *source, struct call_media *sink, } // first gather info about what we can send - g_auto(supp_ht) supplemental_sinks = {0}; - rtp_payload_type *pref_dest_codec = NULL; - check_codec_list(&supplemental_sinks, &pref_dest_codec, sink); + g_auto(supp_ht) supplemental_sinks_store = {0}; + supp_ht supplemental_sinks = a.supp_sinks; + rtp_payload_type *pref_dest_codec = a.pref_dest_codec; + if (!pref_dest_codec && !t_hash_table_is_set(supplemental_sinks)) { + check_codec_list(&supplemental_sinks_store, &pref_dest_codec, sink); + supplemental_sinks = supplemental_sinks_store; + } // then do the same with what we can receive - g_auto(supp_ht) supplemental_srcs = {0}; + g_auto(supp_ht) supplemental_srcs; check_codec_list(&supplemental_srcs, NULL, source); // if multiple input codecs transcode to the same output codec, we want to make sure @@ -4945,6 +4949,12 @@ void codec_update_all_handlers(struct call_monologue *ml) { } void __codec_update_media_source_handlers(struct call_media *sink_media, struct chu_args a) { + g_auto(supp_ht) supplemental_sinks = {0}; + if (!a.pref_dest_codec && !t_hash_table_is_set(a.supp_sinks)) { + check_codec_list(&supplemental_sinks, &a.pref_dest_codec, sink_media); + a.supp_sinks = supplemental_sinks; + } + IQUEUE_FOREACH(&sink_media->media_subscriptions, ms) { struct call_media *source_media = ms->media; diff --git a/include/codec.h b/include/codec.h index b229ef914..21e14bd79 100644 --- a/include/codec.h +++ b/include/codec.h @@ -235,6 +235,8 @@ TYPED_GHASHTABLE(supp_ht, char, codecs_ht, g_str_hash, g_str_equal, NULL, codecs struct chu_args { const sdp_ng_flags *flags; const struct stream_params *sp; + rtp_payload_type *pref_dest_codec; + supp_ht supp_sinks; bool allow_asymmetric; bool reset_transcoding; // when false (default if not passed) the delay buffer is flushed as normal @@ -320,6 +322,11 @@ INLINE void codec_handler_free(struct codec_handler **handler) { } INLINE void codec_tracker_update(struct codec_store *cs, struct codec_store *ocs) { } INLINE void codec_handlers_stop(codec_handlers_q *q, struct call_media *sink, bool clear_delay_buffer) { } INLINE void ensure_codec_def(rtp_payload_type *pt, struct call_media *media) { } +INLINE void check_codec_list(supp_ht *supplemental_sinks, rtp_payload_type **pref_dest_codec, + struct call_media *sink) +{ + *supplemental_sinks = supp_ht_null(); +} #endif