From 2b31fea52da313a2c7517043fba136656f0beee3 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 13 Dec 2022 12:13:35 -0500 Subject: [PATCH] MT#55283 determine dest PT early We're already determining the destination media section in media_player_play_init() (looking for audio media), so it makes sense to determine the payload type there as well. Change-Id: I33d4a15005c2146864f74663fe8de2893454345b --- daemon/media_player.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/daemon/media_player.c b/daemon/media_player.c index aa22b4d3e..66c58f346 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -496,7 +496,8 @@ void media_player_set_media(struct media_player *mp, struct call_media *media) { // call->master_lock held in W -static int media_player_play_init(struct media_player *mp) { +// returns destination payload type, or NULL on failure +static const struct rtp_payload_type *media_player_play_init(struct media_player *mp) { media_player_shutdown(mp); // find call media suitable for playback @@ -515,16 +516,17 @@ static int media_player_play_init(struct media_player *mp) { found: if (!media) { ilog(LOG_ERR, "No suitable SDP section for media playback"); - return -1; + return NULL; } media_player_set_media(mp, media); - - return 0; + return media_player_get_dst_pt(mp); } // call->master_lock held in W -static void media_player_play_start(struct media_player *mp, long long repeat, long long start_pos) { +static void media_player_play_start(struct media_player *mp, const struct rtp_payload_type *dst_pt, + long long repeat, long long start_pos) +{ // needed to have usable duration for some formats. ignore errors. avformat_find_stream_info(mp->fmtctx, NULL); @@ -533,9 +535,6 @@ static void media_player_play_start(struct media_player *mp, long long repeat, l ilog(LOG_ERR, "No AVStream present in format context"); return; } - const struct rtp_payload_type *dst_pt = media_player_get_dst_pt(mp); - if (!dst_pt) - return; if (__ensure_codec_handler(mp, avs, dst_pt)) return; @@ -557,7 +556,8 @@ static void media_player_play_start(struct media_player *mp, long long repeat, l // call->master_lock held in W int media_player_play_file(struct media_player *mp, const str *file, long long repeat, long long start_pos) { #ifdef WITH_TRANSCODING - if (media_player_play_init(mp)) + const struct rtp_payload_type *dst_pt = media_player_play_init(mp); + if (!dst_pt) return -1; char file_s[PATH_MAX]; @@ -569,7 +569,7 @@ int media_player_play_file(struct media_player *mp, const str *file, long long r return -1; } - media_player_play_start(mp, repeat, start_pos); + media_player_play_start(mp, dst_pt, repeat, start_pos); return 0; @@ -632,7 +632,8 @@ int media_player_play_blob(struct media_player *mp, const str *blob, long long r const char *err; int av_ret = 0; - if (media_player_play_init(mp)) + const struct rtp_payload_type *dst_pt = media_player_play_init(mp); + if (!dst_pt) return -1; mp->blob = str_dup(blob); @@ -665,7 +666,7 @@ int media_player_play_blob(struct media_player *mp, const str *blob, long long r if (av_ret < 0) goto err; - media_player_play_start(mp, repeat, start_pos); + media_player_play_start(mp, dst_pt, repeat, start_pos); return 0;