diff --git a/daemon/call.c b/daemon/call.c index 4b1e623e4..4e817c4a7 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -3109,6 +3109,18 @@ static void media_set_audio_player(struct call_media *media, sdp_ng_flags *flags MEDIA_CLEAR(media, AUDIO_PLAYER); } +static void media_make_audio_player(struct call_media *media, rtp_payload_type *pref_dest_codec, + sdp_ng_flags *flags) +{ + if (!MEDIA_ISSET(media, AUDIO_PLAYER)) + return; + + audio_player_setup(media, pref_dest_codec, rtpe_config.audio_buffer_length, + rtpe_config.audio_buffer_delay, + flags->codec_set); + +} + __attribute__((nonnull(1, 2))) static void media_init_from_flags(struct call_media *media, sdp_ng_flags *flags) { if (flags->opmode == OP_OFFER && flags->reset) { @@ -6581,13 +6593,23 @@ bool monologue_call_create_answer(struct call_monologue *ml, sdp_ng_flags *flags MEDIA_SET(media, INITIALIZED); - codec_update_media_source_handlers(media, .flags = flags); + rtp_payload_type *pref_dest_codec = NULL; + g_auto(supp_ht) supplemental_sinks; + check_codec_list(&supplemental_sinks, &pref_dest_codec, media); + + codec_update_media_source_handlers(media, .flags = flags, + .pref_dest_codec = pref_dest_codec, .supp_sinks = supplemental_sinks); codec_update_media_handlers(media); + media_make_audio_player(media, pref_dest_codec, flags); + update_init_subscribers(media, sp, flags, flags->opmode); __media_unconfirm(media, "create answer event"); + if (flags->early_media) + audio_player_activate(media); + sdp_sp_move(&media->sp, sp); } diff --git a/include/audio_player.h b/include/audio_player.h index eecde3b28..e9f9e9b20 100644 --- a/include/audio_player.h +++ b/include/audio_player.h @@ -34,6 +34,8 @@ void audio_player_add_frame(struct audio_player *, uint32_t ssrc, AVFrame *); #else +INLINE void audio_player_setup(struct call_media *m, const rtp_payload_type *, + unsigned int size_ms, unsigned int delay_ms, str_case_value_ht codec_set) { } INLINE void audio_player_start(struct call_media *m) { } INLINE void audio_player_free(struct call_media *m) { } INLINE void audio_player_stop(struct call_media *m) { }