aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/iamf_parse.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2024-12-10 10:01:09 -0300
committerJames Almer <jamrial@gmail.com>2024-12-13 16:36:10 -0300
commitd255f902428665d545cf325a0cb6740193b276eb (patch)
tree39f3355dddfce9761c21670d00165611abeedc95 /libavformat/iamf_parse.c
parent21d3dab31c3f3dca59af8d7375135327567e288f (diff)
downloadffmpeg-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.c7
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,