aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2016-04-19 18:58:19 -0700
committerChris Robinson <[email protected]>2016-04-19 18:58:19 -0700
commit42531703cc1010dd736650024de67ef8ea7d744c (patch)
treee8eeb5f69d31b3769518d1bcd780f7127d37cc2a
parenta59332f6221cbb0b0aedae90ff9b2becf464f543 (diff)
Increase max output channels to 16
This also enables fully periphonic 3rd order HQ decoding.
-rw-r--r--Alc/panning.c25
-rw-r--r--OpenAL32/Include/alMain.h9
2 files changed, 22 insertions, 12 deletions
diff --git a/Alc/panning.c b/Alc/panning.c
index ed10c321..51b8e5cc 100644
--- a/Alc/panning.c
+++ b/Alc/panning.c
@@ -262,6 +262,13 @@ DECL_CONST static inline const char *GetLabelFromChannel(enum Channel channel)
case Aux6: return "aux-6";
case Aux7: return "aux-7";
case Aux8: return "aux-8";
+ case Aux9: return "aux-9";
+ case Aux10: return "aux-10";
+ case Aux11: return "aux-11";
+ case Aux12: return "aux-12";
+ case Aux13: return "aux-13";
+ case Aux14: return "aux-14";
+ case Aux15: return "aux-15";
case InvalidChannel: break;
}
@@ -613,7 +620,8 @@ static void InitHQPanning(ALCdevice *device, const AmbDecConf *conf, const ALuin
if((conf->ChanMask & ~0x831b))
{
- count = (conf->ChanMask > 0xf) ? 9 : 4;
+ count = (conf->ChanMask > 0x1ff) ? 16 :
+ (conf->ChanMask > 0xf) ? 9 : 4;
for(i = 0;i < count;i++)
{
device->Dry.Ambi.Map[i].Scale = 1.0f;
@@ -624,7 +632,8 @@ static void InitHQPanning(ALCdevice *device, const AmbDecConf *conf, const ALuin
{
static int map[MAX_AMBI_COEFFS] = { 0, 1, 3, 4, 8, 9, 15 };
- count = (conf->ChanMask > 0xf) ? (conf->ChanMask > 0x1ff) ? 7 : 5 : 3;
+ count = (conf->ChanMask > 0x1ff) ? 7 :
+ (conf->ChanMask > 0xf) ? 5 : 3;
for(i = 0;i < count;i++)
{
device->Dry.Ambi.Map[i].Scale = 1.0f;
@@ -664,7 +673,8 @@ static void InitHrtfPanning(ALCdevice *device)
static const enum Channel CubeChannels[MAX_OUTPUT_CHANNELS] = {
UpperFrontLeft, UpperFrontRight, UpperBackLeft, UpperBackRight,
LowerFrontLeft, LowerFrontRight, LowerBackLeft, LowerBackRight,
- InvalidChannel
+ InvalidChannel, InvalidChannel, InvalidChannel, InvalidChannel,
+ InvalidChannel, InvalidChannel, InvalidChannel, InvalidChannel
};
static const ChannelMap Cube8Cfg[8] = {
{ UpperFrontLeft, { 0.176776695f, 0.072168784f, 0.072168784f, 0.072168784f } },
@@ -789,14 +799,7 @@ void aluInitRenderer(ALCdevice *device, ALint hrtf_id, enum HrtfRequestMode hrtf
if(pconf && GetConfigValueBool(devname, "decoder", "hq-mode", 0))
{
- if((conf.ChanMask & ~0x831b) && conf.ChanMask > 0x1ff)
- {
- ERR("Third-order is unsupported for periphonic HQ decoding (mask 0x%04x)\n",
- conf.ChanMask);
- bformatdec_free(device->AmbiDecoder);
- device->AmbiDecoder = NULL;
- }
- else if(!device->AmbiDecoder)
+ if(!device->AmbiDecoder)
device->AmbiDecoder = bformatdec_alloc();
}
else
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index da4c5567..fba9c012 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -336,6 +336,13 @@ enum Channel {
Aux6,
Aux7,
Aux8,
+ Aux9,
+ Aux10,
+ Aux11,
+ Aux12,
+ Aux13,
+ Aux14,
+ Aux15,
InvalidChannel
};
@@ -368,7 +375,7 @@ enum DevFmtChannels {
DevFmtChannelsDefault = DevFmtStereo
};
-#define MAX_OUTPUT_CHANNELS (9)
+#define MAX_OUTPUT_CHANNELS (16)
ALuint BytesFromDevFmt(enum DevFmtType type) DECL_CONST;
ALuint ChannelsFromDevFmt(enum DevFmtChannels chans) DECL_CONST;