MT#55283 support passing down codec information

Change-Id: I24907b1d315171d50df7cad14c887a36e5a3ad5f
pull/2092/head
Richard Fuchs 3 weeks ago
parent 28ac65baf3
commit 5b034e571b

@ -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;

@ -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

Loading…
Cancel
Save