Skip to content

Commit 990eef8

Browse files
committed
Support rear stereo buffer formats
1 parent 3a19511 commit 990eef8

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

src/buffer.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ using voidp = void*;
3232
using cvoidp = const void*;
3333

3434
enum 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 "
3838
auto 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

Comments
 (0)