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
pull/2100/head
Richard Fuchs 3 months ago
parent 96b8124b39
commit ccf60cf988

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

Loading…
Cancel
Save