1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avformat/iamf: fix setting channel layout for Scalable layers

The way streams are coded in an IAMF struct follows a scalable model where the
channel layouts for each layer may not match the channel order our API can
represent in a Native order layout.

For example, an audio element may have six coded streams in the form of two
stereo streams, followed by two mono streams, and then by another two stereo
streams, for a total of 10 channels, and define for them four scalable layers
with loudspeaker_layout values "Stereo", "5.1ch", "5.1.2ch", and "5.1.4ch".
The first layer references the first stream, and each following layer will
reference all previous streams plus extra ones.
In this case, the "5.1ch" layer will reference four streams (the first two
stereo and the two mono) to encompass six channels, which does not match out
native layout 5.1(side) given that FC and LFE come after FL+FR but before
SL+SR, and here, they are at the end.

For this reason, we need to build Custom order layouts that properly represent
what we're exporting.

----
Before:

  Stream group #0:0[0x12c]: IAMF Audio Element:
    Layer 0: stereo
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
    Layer 1: 5.1(side)
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
      Stream #0:1[0x1]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:2[0x2]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:3[0x3]: Audio: opus, 48000 Hz, mono, fltp (dependent)
    Layer 2: 5.1.2
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
      Stream #0:1[0x1]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:2[0x2]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:3[0x3]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:4[0x4]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
    Layer 3: 5.1.4
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
      Stream #0:1[0x1]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:2[0x2]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:3[0x3]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:4[0x4]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:5[0x5]: Audio: opus, 48000 Hz, stereo, fltp (dependent)

----
AFter:

  Stream group #0:0[0x12c]: IAMF Audio Element:
    Layer 0: stereo
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
    Layer 1: 6 channels (FL+FR+SL+SR+FC+LFE)
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
      Stream #0:1[0x1]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:2[0x2]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:3[0x3]: Audio: opus, 48000 Hz, mono, fltp (dependent)
    Layer 2: 8 channels (FL+FR+SL+SR+FC+LFE+TFL+TFR)
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
      Stream #0:1[0x1]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:2[0x2]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:3[0x3]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:4[0x4]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
    Layer 3: 10 channels (FL+FR+SL+SR+FC+LFE+TFL+TFR+TBL+TBR)
      Stream #0:0[0x0]: Audio: opus, 48000 Hz, stereo, fltp (default)
      Stream #0:1[0x1]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:2[0x2]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:3[0x3]: Audio: opus, 48000 Hz, mono, fltp (dependent)
      Stream #0:4[0x4]: Audio: opus, 48000 Hz, stereo, fltp (dependent)
      Stream #0:5[0x5]: Audio: opus, 48000 Hz, stereo, fltp (dependent)

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2025-06-16 21:33:26 -03:00
parent e5f23a3c5e
commit cd2461e627
11 changed files with 135 additions and 73 deletions

View File

@ -364,7 +364,8 @@ static int scalable_channel_layout_config(void *s, AVIOContext *pb,
return AVERROR(ENOMEM);
audio_element->nb_layers = nb_layers;
for (int i = 0; i < nb_layers; i++) {
for (int i = 0, n = 0; i < nb_layers; i++) {
AVChannelLayout ch_layout = { 0 };
AVIAMFLayer *layer;
int loudspeaker_layout, output_gain_is_present_flag;
int substream_count, coupled_substream_count;
@ -394,12 +395,16 @@ static int scalable_channel_layout_config(void *s, AVIOContext *pb,
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,
if (expanded_loudspeaker_layout > 0 && expanded_loudspeaker_layout < 13) {
av_channel_layout_copy(&ch_layout, &ff_iamf_expanded_scalable_ch_layouts[expanded_loudspeaker_layout]);
if (i)
ch_layout.u.mask &= ~av_channel_layout_subset(&audio_element->element->layers[i-1]->ch_layout, UINT64_MAX);
} else if (loudspeaker_layout < 10) {
av_channel_layout_copy(&ch_layout, &ff_iamf_scalable_ch_layouts[loudspeaker_layout]);
if (i)
ch_layout.u.mask &= ~av_channel_layout_subset(&audio_element->element->layers[i-1]->ch_layout, UINT64_MAX);
} else
ch_layout = (AVChannelLayout){ .order = AV_CHANNEL_ORDER_UNSPEC,
.nb_channels = substream_count +
coupled_substream_count };
@ -414,6 +419,64 @@ static int scalable_channel_layout_config(void *s, AVIOContext *pb,
return ret;
}
if (ch_layout.order == AV_CHANNEL_ORDER_NATIVE) {
ret = av_channel_layout_custom_init(&layer->ch_layout, ch_layout.nb_channels);
if (ret < 0)
return ret;
for (int j = 0; j < n; j++)
layer->ch_layout.u.map[j].id = av_channel_layout_channel_from_index(&audio_element->element->layers[i-1]->ch_layout, j);
coupled_substream_count = audio_element->layers[i].coupled_substream_count;
while (coupled_substream_count--) {
if (ch_layout.u.mask & AV_CH_LAYOUT_STEREO) {
layer->ch_layout.u.map[n++].id = AV_CHAN_FRONT_LEFT;
layer->ch_layout.u.map[n++].id = AV_CHAN_FRONT_RIGHT;
ch_layout.u.mask &= ~AV_CH_LAYOUT_STEREO;
} else if (ch_layout.u.mask & (AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)) {
layer->ch_layout.u.map[n++].id = AV_CHAN_FRONT_LEFT_OF_CENTER;
layer->ch_layout.u.map[n++].id = AV_CHAN_FRONT_RIGHT_OF_CENTER;
ch_layout.u.mask &= ~(AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER);
} else if (ch_layout.u.mask & (AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)) {
layer->ch_layout.u.map[n++].id = AV_CHAN_SIDE_LEFT;
layer->ch_layout.u.map[n++].id = AV_CHAN_SIDE_RIGHT;
ch_layout.u.mask &= ~(AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT);
} else if (ch_layout.u.mask & (AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)) {
layer->ch_layout.u.map[n++].id = AV_CHAN_BACK_LEFT;
layer->ch_layout.u.map[n++].id = AV_CHAN_BACK_RIGHT;
ch_layout.u.mask &= ~(AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT);
} else if (ch_layout.u.mask & (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)) {
layer->ch_layout.u.map[n++].id = AV_CHAN_TOP_FRONT_LEFT;
layer->ch_layout.u.map[n++].id = AV_CHAN_TOP_FRONT_RIGHT;
ch_layout.u.mask &= ~(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT);
} else if (ch_layout.u.mask & (AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT)) {
layer->ch_layout.u.map[n++].id = AV_CHAN_TOP_SIDE_LEFT;
layer->ch_layout.u.map[n++].id = AV_CHAN_TOP_SIDE_RIGHT;
ch_layout.u.mask &= ~(AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT);
} else if (ch_layout.u.mask & (AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)) {
layer->ch_layout.u.map[n++].id = AV_CHAN_TOP_BACK_LEFT;
layer->ch_layout.u.map[n++].id = AV_CHAN_TOP_BACK_RIGHT;
ch_layout.u.mask &= ~(AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT);
}
}
substream_count -= audio_element->layers[i].coupled_substream_count;
while (substream_count--) {
if (ch_layout.u.mask & AV_CH_FRONT_CENTER) {
layer->ch_layout.u.map[n++].id = AV_CHAN_FRONT_CENTER;
ch_layout.u.mask &= ~AV_CH_FRONT_CENTER;
}
if (ch_layout.u.mask & AV_CH_LOW_FREQUENCY) {
layer->ch_layout.u.map[n++].id = AV_CHAN_LOW_FREQUENCY;
ch_layout.u.mask &= ~AV_CH_LOW_FREQUENCY;
}
}
ret = av_channel_layout_retype(&layer->ch_layout, AV_CHANNEL_ORDER_NATIVE, 0);
if (ret < 0 && ret != AVERROR(ENOSYS))
return ret;
} else // AV_CHANNEL_ORDER_UNSPEC
av_channel_layout_copy(&layer->ch_layout, &ch_layout);
}
return 0;

View File

@ -250,14 +250,18 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void
for (int j, i = 0; i < iamf_audio_element->nb_layers; i++) {
const AVIAMFLayer *layer = iamf_audio_element->layers[i];
for (j = 0; j < FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts); j++)
if (!av_channel_layout_compare(&layer->ch_layout, &ff_iamf_scalable_ch_layouts[j]))
if (av_channel_layout_subset(&layer->ch_layout, UINT64_MAX) ==
av_channel_layout_subset(&ff_iamf_scalable_ch_layouts[j], UINT64_MAX))
break;
if (j >= FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts)) {
for (j = 0; j < FF_ARRAY_ELEMS(ff_iamf_expanded_scalable_ch_layouts); j++)
if (!av_channel_layout_compare(&layer->ch_layout, &ff_iamf_expanded_scalable_ch_layouts[j]))
if (av_channel_layout_subset(&layer->ch_layout, UINT64_MAX) ==
av_channel_layout_subset(&ff_iamf_expanded_scalable_ch_layouts[j], UINT64_MAX))
break;
if (j >= FF_ARRAY_ELEMS(ff_iamf_expanded_scalable_ch_layouts)) {
av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC);
av_channel_layout_describe_bprint(&layer->ch_layout, &bp);
@ -592,12 +596,26 @@ static int scalable_channel_layout_config(const IAMFAudioElement *audio_element,
if (!av_channel_layout_compare(&layer->ch_layout, &ff_iamf_scalable_ch_layouts[layout]))
break;
}
if (layout >= FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts))
for (expanded_layout = 0; expanded_layout < FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts); expanded_layout++) {
if (layout >= FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts)) {
for (layout = 0; layout < FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts); layout++)
if (av_channel_layout_subset(&layer->ch_layout, UINT64_MAX) ==
av_channel_layout_subset(&ff_iamf_scalable_ch_layouts[layout], UINT64_MAX))
break;
}
if (layout >= FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts)) {
for (expanded_layout = 0; expanded_layout < FF_ARRAY_ELEMS(ff_iamf_expanded_scalable_ch_layouts); expanded_layout++) {
if (!av_channel_layout_compare(&layer->ch_layout, &ff_iamf_expanded_scalable_ch_layouts[expanded_layout]))
break;
}
av_assert0(expanded_layout > 0 || layout < FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts));
if (expanded_layout >= FF_ARRAY_ELEMS(ff_iamf_expanded_scalable_ch_layouts)) {
for (expanded_layout = 0; expanded_layout < FF_ARRAY_ELEMS(ff_iamf_expanded_scalable_ch_layouts); expanded_layout++)
if (av_channel_layout_subset(&layer->ch_layout, UINT64_MAX) ==
av_channel_layout_subset(&ff_iamf_expanded_scalable_ch_layouts[expanded_layout], UINT64_MAX))
break;
}
}
av_assert0((expanded_layout > 0 && expanded_layout < FF_ARRAY_ELEMS(ff_iamf_expanded_scalable_ch_layouts)) ||
layout < FF_ARRAY_ELEMS(ff_iamf_scalable_ch_layouts));
init_put_bits(&pb, header, sizeof(header));
put_bits(&pb, 4, expanded_layout >= 0 ? 15 : layout);
put_bits(&pb, 1, !!layer->output_gain_flags);

View File

@ -81,10 +81,8 @@ static int iamf_read_header(AVFormatContext *s)
for (int i = 0; i < iamf->nb_audio_elements; i++) {
IAMFAudioElement *audio_element = iamf->audio_elements[i];
const AVIAMFLayer *layer = audio_element->element->layers[audio_element->nb_layers - 1];
AVStreamGroup *stg = avformat_stream_group_create(s, AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT, NULL);
int coupled_substream_count = audio_element->layers[audio_element->nb_layers - 1].coupled_substream_count;
int side_substream_id = -1, back_substream_id = -1;
if (!stg)
return AVERROR(ENOMEM);
@ -114,28 +112,11 @@ static int iamf_read_header(AVFormatContext *s)
st->disposition |= AV_DISPOSITION_DEFAULT;
else if (audio_element->nb_layers > 1 || audio_element->layers[0].substream_count > 1)
st->disposition |= AV_DISPOSITION_DEPENDENT;
if (k == av_channel_layout_index_from_channel(&layer->ch_layout, AV_CHAN_BACK_LEFT))
back_substream_id = j;
else if (k == av_channel_layout_index_from_channel(&layer->ch_layout, AV_CHAN_SIDE_LEFT))
side_substream_id = j;
st->id = substream->audio_substream_id;
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate);
k += 1 + (coupled_substream_count-- > 0);
}
// Swap back and side stream ids as our native channel layout ordering doen't match the
// order from ITU-R - BS.2051-3 for Systems I and J (where side channels come before back ones).
if (back_substream_id >= 0 && side_substream_id >= 0 && av_channel_layout_compare(&layer->ch_layout,
&(AVChannelLayout)AV_CHANNEL_LAYOUT_9POINT1POINT6)) {
const IAMFSubStream *back_substream = &audio_element->substreams[back_substream_id];
const IAMFSubStream *side_substream = &audio_element->substreams[side_substream_id];
AVStream *back_st = stg->streams[back_substream_id];
AVStream *side_st = stg->streams[side_substream_id];
back_st->id = side_substream->audio_substream_id;
side_st->id = back_substream->audio_substream_id;
}
}
for (int i = 0; i < iamf->nb_mix_presentations; i++) {

View File

@ -37,7 +37,7 @@ output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1(side)
channel_layout=6 channels (FL+FR+SL+SR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]

View File

@ -37,7 +37,7 @@ output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1(side)
channel_layout=6 channels (FL+FR+SL+SR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]

View File

@ -111,17 +111,17 @@ output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1(side)
channel_layout=6 channels (FL+FR+SL+SR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1.2
channel_layout=8 channels (FL+FR+SL+SR+FC+LFE+TFL+TFR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1.4
channel_layout=10 channels (FL+FR+SL+SR+FC+LFE+TFL+TFR+TBL+TBR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]

View File

@ -45,72 +45,72 @@
0, 0, 0, 4608, 1399, 0x6e89566e
1, 0, 0, 4608, 1399, 0x6e89566e
2, 0, 0, 4608, 1396, 0x0dcb5677
3, 0, 0, 4608, 1399, 0x6e89566e
3, 0, 0, 4608, 1396, 0x0dcb5677
4, 0, 0, 4608, 1399, 0x6e89566e
5, 0, 0, 4608, 1396, 0x0dcb5677
5, 0, 0, 4608, 1399, 0x6e89566e
6, 0, 0, 4608, 1399, 0x6e89566e
0, 4608, 4608, 4608, 1442, 0x6c3c5b13
1, 4608, 4608, 4608, 1442, 0x6c3c5b13
2, 4608, 4608, 4608, 1439, 0xc46b5ac5
3, 4608, 4608, 4608, 1442, 0x6c3c5b13
3, 4608, 4608, 4608, 1439, 0xc46b5ac5
4, 4608, 4608, 4608, 1442, 0x6c3c5b13
5, 4608, 4608, 4608, 1439, 0xc46b5ac5
5, 4608, 4608, 4608, 1442, 0x6c3c5b13
6, 4608, 4608, 4608, 1442, 0x6c3c5b13
0, 9216, 9216, 4608, 1380, 0xc497571b
1, 9216, 9216, 4608, 1380, 0xc497571b
2, 9216, 9216, 4608, 1377, 0x5b2a55fe
3, 9216, 9216, 4608, 1380, 0xc497571b
3, 9216, 9216, 4608, 1377, 0x5b2a55fe
4, 9216, 9216, 4608, 1380, 0xc497571b
5, 9216, 9216, 4608, 1377, 0x5b2a55fe
5, 9216, 9216, 4608, 1380, 0xc497571b
6, 9216, 9216, 4608, 1380, 0xc497571b
0, 13824, 13824, 4608, 1383, 0x48e9510f
1, 13824, 13824, 4608, 1383, 0x48e9510f
2, 13824, 13824, 4608, 1380, 0x045550d3
3, 13824, 13824, 4608, 1383, 0x48e9510f
3, 13824, 13824, 4608, 1380, 0x045550d3
4, 13824, 13824, 4608, 1383, 0x48e9510f
5, 13824, 13824, 4608, 1380, 0x045550d3
5, 13824, 13824, 4608, 1383, 0x48e9510f
6, 13824, 13824, 4608, 1383, 0x48e9510f
0, 18432, 18432, 4608, 1572, 0x9a514719
1, 18432, 18432, 4608, 1572, 0x9a514719
2, 18432, 18432, 4608, 1568, 0xa2bc45f4
3, 18432, 18432, 4608, 1572, 0x9a514719
3, 18432, 18432, 4608, 1568, 0xa2bc45f4
4, 18432, 18432, 4608, 1572, 0x9a514719
5, 18432, 18432, 4608, 1568, 0xa2bc45f4
5, 18432, 18432, 4608, 1572, 0x9a514719
6, 18432, 18432, 4608, 1572, 0x9a514719
0, 23040, 23040, 4608, 1391, 0x74ac5014
1, 23040, 23040, 4608, 1391, 0x74ac5014
2, 23040, 23040, 4608, 1388, 0x96c85007
3, 23040, 23040, 4608, 1391, 0x74ac5014
3, 23040, 23040, 4608, 1388, 0x96c85007
4, 23040, 23040, 4608, 1391, 0x74ac5014
5, 23040, 23040, 4608, 1388, 0x96c85007
5, 23040, 23040, 4608, 1391, 0x74ac5014
6, 23040, 23040, 4608, 1391, 0x74ac5014
0, 27648, 27648, 4608, 1422, 0x2f9d47c5
1, 27648, 27648, 4608, 1422, 0x2f9d47c5
2, 27648, 27648, 4608, 1419, 0x4d4d466a
3, 27648, 27648, 4608, 1422, 0x2f9d47c5
3, 27648, 27648, 4608, 1419, 0x4d4d466a
4, 27648, 27648, 4608, 1422, 0x2f9d47c5
5, 27648, 27648, 4608, 1419, 0x4d4d466a
5, 27648, 27648, 4608, 1422, 0x2f9d47c5
6, 27648, 27648, 4608, 1422, 0x2f9d47c5
0, 32256, 32256, 4608, 1768, 0x2a044b99
1, 32256, 32256, 4608, 1768, 0x2a044b99
2, 32256, 32256, 4608, 1765, 0xacb84b24
3, 32256, 32256, 4608, 1768, 0x2a044b99
3, 32256, 32256, 4608, 1765, 0xacb84b24
4, 32256, 32256, 4608, 1768, 0x2a044b99
5, 32256, 32256, 4608, 1765, 0xacb84b24
5, 32256, 32256, 4608, 1768, 0x2a044b99
6, 32256, 32256, 4608, 1768, 0x2a044b99
0, 36864, 36864, 4608, 1534, 0xb0b35a3f
1, 36864, 36864, 4608, 1534, 0xb0b35a3f
2, 36864, 36864, 4608, 1531, 0x996458aa
3, 36864, 36864, 4608, 1534, 0xb0b35a3f
3, 36864, 36864, 4608, 1531, 0x996458aa
4, 36864, 36864, 4608, 1534, 0xb0b35a3f
5, 36864, 36864, 4608, 1531, 0x996458aa
5, 36864, 36864, 4608, 1534, 0xb0b35a3f
6, 36864, 36864, 4608, 1534, 0xb0b35a3f
0, 41472, 41472, 4608, 926, 0xc26a5eae
1, 41472, 41472, 4608, 926, 0xc26a5eae
2, 41472, 41472, 4608, 923, 0xa7225edf
3, 41472, 41472, 4608, 926, 0xc26a5eae
3, 41472, 41472, 4608, 923, 0xa7225edf
4, 41472, 41472, 4608, 926, 0xc26a5eae
5, 41472, 41472, 4608, 923, 0xa7225edf
5, 41472, 41472, 4608, 926, 0xc26a5eae
6, 41472, 41472, 4608, 926, 0xc26a5eae
[STREAM_GROUP]
index=0
@ -127,17 +127,17 @@ output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=3.1.2
channel_layout=6 channels (FL+FR+TFL+TFR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=7.1.2
channel_layout=10 channels (FL+FR+TFL+TFR+FC+LFE+SL+SR+BL+BR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=7.1.4
channel_layout=12 channels (FL+FR+TFL+TFR+FC+LFE+SL+SR+BL+BR+TBL+TBR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
@ -226,7 +226,7 @@ DISPOSITION:multilayer=0
[/STREAM]
[STREAM]
index=3
id=0x5
id=0x3
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
@ -272,7 +272,7 @@ DISPOSITION:multilayer=0
[/STREAM]
[STREAM]
index=5
id=0x3
id=0x5
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
@ -462,7 +462,7 @@ DISPOSITION:multilayer=0
[/STREAM]
[STREAM]
index=3
id=0x5
id=0x3
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
@ -508,7 +508,7 @@ DISPOSITION:multilayer=0
[/STREAM]
[STREAM]
index=5
id=0x3
id=0x5
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0

View File

@ -170,7 +170,7 @@ nb_layers=1
audio_element_type=0
default_w=0
[SUBCOMPONENT]
channel_layout=9.1.6
channel_layout=16 channels (FL+FR+FLC+FRC+SL+SR+BL+BR+TFL+TFR+TSL+TSR+TBL+TBR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]

View File

@ -111,17 +111,17 @@ output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1(side)
channel_layout=6 channels (FL+FR+SL+SR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1.2
channel_layout=8 channels (FL+FR+SL+SR+FC+LFE+TFL+TFR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=5.1.4
channel_layout=10 channels (FL+FR+SL+SR+FC+LFE+TFL+TFR+TBL+TBR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]

View File

@ -158,17 +158,17 @@ output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=3.1.2
channel_layout=6 channels (FL+FR+TFL+TFR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=7.1.2
channel_layout=10 channels (FL+FR+TFL+TFR+FC+LFE+SL+SR+BL+BR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=7.1.4
channel_layout=12 channels (FL+FR+TFL+TFR+FC+LFE+SL+SR+BL+BR+TBL+TBR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]

View File

@ -158,17 +158,17 @@ output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=3.1.2
channel_layout=6 channels (FL+FR+TFL+TFR+FC+LFE)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=7.1.2
channel_layout=10 channels (FL+FR+TFL+TFR+FC+LFE+SL+SR+BL+BR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]
[SUBCOMPONENT]
channel_layout=7.1.4
channel_layout=12 channels (FL+FR+TFL+TFR+FC+LFE+SL+SR+BL+BR+TBL+TBR)
output_gain_flags=0
output_gain=0/1
[/SUBCOMPONENT]