diff options
author | Chris Robinson <[email protected]> | 2016-04-19 18:58:19 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2016-04-19 18:58:19 -0700 |
commit | 42531703cc1010dd736650024de67ef8ea7d744c (patch) | |
tree | e8eeb5f69d31b3769518d1bcd780f7127d37cc2a | |
parent | a59332f6221cbb0b0aedae90ff9b2becf464f543 (diff) |
Increase max output channels to 16
This also enables fully periphonic 3rd order HQ decoding.
-rw-r--r-- | Alc/panning.c | 25 | ||||
-rw-r--r-- | OpenAL32/Include/alMain.h | 9 |
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; |