From ccf60cf98846dfa71715c1bd2714abbd9f5190d0 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 29 Apr 2026 13:51:28 -0400 Subject: [PATCH] MT#55283 try harder to determine audio format Some containers (MP3) fill the audio format information only after reading the first frame. Do that if the information is missing. Change-Id: I7865dee130e2a109e289eca5119d38a4e00f2a32 --- daemon/media_player.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/daemon/media_player.c b/daemon/media_player.c index 22f4e4c5b..dc0732b7d 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -1024,6 +1024,13 @@ static int __media_player_setup_internal(struct media_player *mp, const rtp_payl return 0; } + +static void __probe_format(struct media_player *mp) { + media_player_read_first_frame(mp); + media_player_seek_first_frame(mp); +} + + static int __ensure_codec_handler(struct media_player *mp, const rtp_payload_type *dst_pt, str_case_value_ht codec_set) { @@ -1037,9 +1044,19 @@ static int __ensure_codec_handler(struct media_player *mp, const rtp_payload_typ ilog(LOG_ERR, "Attempting to play media from an unsupported file format/codec"); return -1; } + + if (!GET_CHANNELS(mp->coder.avstream->CODECPAR) || !mp->coder.avstream->CODECPAR->sample_rate) + __probe_format(mp); + + if (!GET_CHANNELS(mp->coder.avstream->CODECPAR) || !mp->coder.avstream->CODECPAR->sample_rate) { + ilog(LOG_ERR, "Unrecognised audio format, cannot do playback"); + return -1; + } + src_pt.encoding = src_pt.codec_def->rtpname_str; src_pt.channels = GET_CHANNELS(mp->coder.avstream->CODECPAR); src_pt.clock_rate = mp->coder.avstream->CODECPAR->sample_rate; + codec_init_payload_type(&src_pt, MT_AUDIO); if (__media_player_setup_internal(mp, &src_pt, dst_pt, codec_set))