@@ -32,7 +32,7 @@ using voidp = void*;
3232using cvoidp = const void *;
3333
3434enum class SampleType { UInt8, Int16, Float32 };
35- enum class ChannelConfig { Mono, Stereo, Quad, X51 , X71 };
35+ enum class ChannelConfig { Mono, Stereo, RearStereo, Quad, X51 , X71 };
3636
3737#define PREFIX " ConvertFormat "
3838auto ConvertFormat (WAVEFORMATEXTENSIBLE &dst, WAVEFORMATEX const &src) noexcept
@@ -167,6 +167,13 @@ auto ConvertFormat(WAVEFORMATEXTENSIBLE &dst, WAVEFORMATEXTENSIBLE const &src) n
167167 default : return unsupported_format ();
168168 }
169169 break ;
170+ case SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT :
171+ switch (dst.Format .nChannels )
172+ {
173+ case 2 : channelConfig = ChannelConfig::RearStereo; break ;
174+ default : return unsupported_format ();
175+ }
176+ break ;
170177 case KSAUDIO_SPEAKER_QUAD :
171178 switch (dst.Format .nChannels )
172179 {
@@ -244,6 +251,10 @@ auto GetALFormat(WAVEFORMATEXTENSIBLE const &dst, SampleType const sampleType,
244251 {
245252 case ChannelConfig::Mono: return AL_FORMAT_MONO8 ;
246253 case ChannelConfig::Stereo: return AL_FORMAT_STEREO8 ;
254+ case ChannelConfig::RearStereo:
255+ if (exts.test (EXT_MCFORMATS ))
256+ return AL_FORMAT_REAR8 ;
257+ break ;
247258 case ChannelConfig::Quad:
248259 if (exts.test (EXT_MCFORMATS ))
249260 return AL_FORMAT_QUAD8 ;
@@ -263,6 +274,10 @@ auto GetALFormat(WAVEFORMATEXTENSIBLE const &dst, SampleType const sampleType,
263274 {
264275 case ChannelConfig::Mono: return AL_FORMAT_MONO16 ;
265276 case ChannelConfig::Stereo: return AL_FORMAT_STEREO16 ;
277+ case ChannelConfig::RearStereo:
278+ if (exts.test (EXT_MCFORMATS ))
279+ return AL_FORMAT_REAR16 ;
280+ break ;
266281 case ChannelConfig::Quad:
267282 if (exts.test (EXT_MCFORMATS ))
268283 return AL_FORMAT_QUAD16 ;
@@ -284,6 +299,10 @@ auto GetALFormat(WAVEFORMATEXTENSIBLE const &dst, SampleType const sampleType,
284299 {
285300 case ChannelConfig::Mono: return AL_FORMAT_MONO_FLOAT32 ;
286301 case ChannelConfig::Stereo: return AL_FORMAT_STEREO_FLOAT32 ;
302+ case ChannelConfig::RearStereo:
303+ if (exts.test (EXT_MCFORMATS ))
304+ return AL_FORMAT_REAR32 ;
305+ break ;
287306 case ChannelConfig::Quad:
288307 if (exts.test (EXT_MCFORMATS ))
289308 return AL_FORMAT_QUAD32 ;
0 commit comments