diff options
author | James Almer <jamrial@gmail.com> | 2024-12-10 10:01:09 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2024-12-13 16:36:10 -0300 |
commit | d255f902428665d545cf325a0cb6740193b276eb (patch) | |
tree | 39f3355dddfce9761c21670d00165611abeedc95 /libavformat/iamf_parse.c | |
parent | 21d3dab31c3f3dca59af8d7375135327567e288f (diff) | |
download | ffmpeg-d255f902428665d545cf325a0cb6740193b276eb.tar.gz |
avformat/iamf_parse: add support for expanded channel layouts
Defined in Immersive Audio Model and Formats 1.1.0, sections 3.6.2 and 3.7.3
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat/iamf_parse.c')
-rw-r--r-- | libavformat/iamf_parse.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index 1e1de167e6..6c2efc0a6c 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -356,6 +356,7 @@ static int scalable_channel_layout_config(void *s, AVIOContext *pb, AVIAMFLayer *layer; int loudspeaker_layout, output_gain_is_present_flag; int substream_count, coupled_substream_count; + int expanded_loudspeaker_layout = -1; int ret, byte = avio_r8(pb); layer = av_iamf_audio_element_add_layer(audio_element->element); @@ -379,7 +380,11 @@ static int scalable_channel_layout_config(void *s, AVIOContext *pb, layer->output_gain = av_make_q(sign_extend(avio_rb16(pb), 16), 1 << 8); } - if (loudspeaker_layout < 10) + if (!i && loudspeaker_layout == 15) + expanded_loudspeaker_layout = avio_r8(pb); + if (expanded_loudspeaker_layout > 0 && expanded_loudspeaker_layout < 13) + av_channel_layout_copy(&layer->ch_layout, &ff_iamf_expanded_scalable_ch_layouts[expanded_loudspeaker_layout]); + else if (loudspeaker_layout < 10) av_channel_layout_copy(&layer->ch_layout, &ff_iamf_scalable_ch_layouts[loudspeaker_layout]); else layer->ch_layout = (AVChannelLayout){ .order = AV_CHANNEL_ORDER_UNSPEC, |