@@ -72,10 +72,12 @@ class SpatialAudio
72
72
{
73
73
bool error = false ;
74
74
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);
76
78
error = !decoder.Configure (AMBISONICS_ORDER,
77
79
true ,
78
- /* AMBISONICS_BLOCK_SIZE*/ samples ,
80
+ AMBISONICS_BLOCK_SIZE,
79
81
channels == 6 ? kAmblib_51
80
82
: channels == 2 ? kAmblib_Stereo
81
83
: channels == 4 ? kAmblib_Quad
@@ -115,8 +117,18 @@ class SpatialAudio
115
117
zoomer.Refresh ();
116
118
zoomer.Process (&bformat, samples);
117
119
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
+ }
120
132
decoder.Process (&bformat, samples, speakers);
121
133
}
122
134
return error;
0 commit comments