Skip to content

Commit 493699c

Browse files
committed
fix ambisonic-decoder 5.1 channel order
1 parent 6936489 commit 493699c

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

src/modules/spatialaudio/filter_ambisonic-decoder.cpp

+16-4
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ class SpatialAudio
7272
{
7373
bool error = false;
7474
if (decoder.GetChannelCount() == 0) {
75-
mlt_log_verbose(MLT_FILTER_SERVICE(filter()), "configuring spatial audio decoder\n");
75+
mlt_log_verbose(MLT_FILTER_SERVICE(filter()),
76+
"configuring spatial audio decoder for %d channels\n",
77+
channels);
7678
error = !decoder.Configure(AMBISONICS_ORDER,
7779
true,
78-
/*AMBISONICS_BLOCK_SIZE*/ samples,
80+
AMBISONICS_BLOCK_SIZE,
7981
channels == 6 ? kAmblib_51
8082
: channels == 2 ? kAmblib_Stereo
8183
: channels == 4 ? kAmblib_Quad
@@ -115,8 +117,18 @@ class SpatialAudio
115117
zoomer.Refresh();
116118
zoomer.Process(&bformat, samples);
117119

118-
for (int i = 0; i < channels; ++i)
119-
speakers[i] = &buffer[samples * i];
120+
if (channels == 6) {
121+
// libspatialaudio has a different channel order for 5.1
122+
speakers[0] = &buffer[samples * 0]; // left
123+
speakers[1] = &buffer[samples * 1]; // right
124+
speakers[2] = &buffer[samples * 4]; // center
125+
speakers[3] = &buffer[samples * 5]; // LFE (subwoofer)
126+
speakers[4] = &buffer[samples * 2]; // left surround
127+
speakers[5] = &buffer[samples * 3]; // right surround
128+
} else {
129+
for (int i = 0; i < channels; ++i)
130+
speakers[i] = &buffer[samples * i];
131+
}
120132
decoder.Process(&bformat, samples, speakers);
121133
}
122134
return error;

0 commit comments

Comments
 (0)