diff options
author | Chris Robinson <[email protected]> | 2020-01-05 03:45:35 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2020-01-05 03:45:35 -0800 |
commit | 6ed8061cbf6bbc17c4591d7e50bf9c97aad7a889 (patch) | |
tree | bd0f3854d489db423857710d5abe9d1af4005ee8 | |
parent | 0d0ea586b6e7e8440fec807309cc97aa727d2bb0 (diff) |
Finalize AL_SOFT_bformat_ex
-rw-r--r-- | alc/alc.cpp | 9 | ||||
-rw-r--r-- | alc/inprogext.h | 15 | ||||
-rw-r--r-- | examples/alffplay.cpp | 24 | ||||
-rw-r--r-- | include/AL/alext.h | 15 |
4 files changed, 35 insertions, 28 deletions
diff --git a/alc/alc.cpp b/alc/alc.cpp index 31b57e35..4b2717fb 100644 --- a/alc/alc.cpp +++ b/alc/alc.cpp @@ -785,6 +785,13 @@ constexpr struct { DECL(AL_DROP_UNMATCHED_SOFT), DECL(AL_REMIX_UNMATCHED_SOFT), + + DECL(AL_AMBISONIC_LAYOUT_SOFT), + DECL(AL_AMBISONIC_SCALING_SOFT), + DECL(AL_FUMA_SOFT), + DECL(AL_ACN_SOFT), + DECL(AL_SN3D_SOFT), + DECL(AL_N3D_SOFT), }; #undef DECL @@ -828,7 +835,7 @@ constexpr ALchar alExtList[] = "AL_EXT_SOURCE_RADIUS " "AL_EXT_STEREO_ANGLES " "AL_LOKI_quadriphonic " - "AL_SOFTX_bformat_ex " + "AL_SOFT_bformat_ex " "AL_SOFT_block_alignment " "AL_SOFT_deferred_updates " "AL_SOFT_direct_channels " diff --git a/alc/inprogext.h b/alc/inprogext.h index d1890e70..ad3ea288 100644 --- a/alc/inprogext.h +++ b/alc/inprogext.h @@ -77,21 +77,6 @@ AL_API void AL_APIENTRY alGetPointervSOFT(ALenum pname, void **values); #define AL_EFFECTSLOT_TARGET_SOFT 0xf000 #endif -#ifndef AL_SOFT_bformat_ex -#define AL_SOFT_bformat_ex -#define AL_AMBISONIC_LAYOUT_SOFT 0x1997 -#define AL_AMBISONIC_SCALING_SOFT 0x1998 - -/* Ambisonic layouts */ -#define AL_FUMA_SOFT 0x0000 -#define AL_ACN_SOFT 0x0001 - -/* Ambisonic scalings (normalization) */ -/*#define AL_FUMA_SOFT*/ -#define AL_SN3D_SOFT 0x0001 -#define AL_N3D_SOFT 0x0002 -#endif - #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/examples/alffplay.cpp b/examples/alffplay.cpp index 040a9e69..a8f692a7 100644 --- a/examples/alffplay.cpp +++ b/examples/alffplay.cpp @@ -95,16 +95,6 @@ typedef void (AL_APIENTRY*LPALEVENTCALLBACKSOFT)(ALEVENTPROCSOFT callback, void typedef void* (AL_APIENTRY*LPALGETPOINTERSOFT)(ALenum pname); typedef void (AL_APIENTRY*LPALGETPOINTERVSOFT)(ALenum pname, void **values); #endif - -#ifndef AL_SOFT_bformat_ex -#define AL_SOFT_bformat_ex -#define AL_AMBISONIC_LAYOUT_SOFT 0x1997 -#define AL_AMBISONIC_SCALING_SOFT 0x1998 -#define AL_FUMA_SOFT 0x0000 -#define AL_ACN_SOFT 0x0001 -#define AL_SN3D_SOFT 0x0001 -#define AL_N3D_SOFT 0x0002 -#endif #endif /* ALLOW_EXPERIMENTAL_EXTS */ } @@ -788,7 +778,7 @@ int AudioState::handler() } #endif #ifdef AL_SOFT_bformat_ex - const bool has_bfmt_ex{alIsExtensionPresent("AL_SOFTX_bformat_ex") != AL_FALSE}; + const bool has_bfmt_ex{alIsExtensionPresent("AL_SOFT_bformat_ex") != AL_FALSE}; ALenum ambi_layout{AL_FUMA_SOFT}; ALenum ambi_scale{AL_FUMA_SOFT}; #endif @@ -976,7 +966,17 @@ int AudioState::handler() #ifdef AL_SOFT_bformat_ex ambi_layout = AL_ACN_SOFT; ambi_scale = AL_SN3D_SOFT; - if(!has_bfmt_ex) + if(has_bfmt_ex) + { + /* An identity matrix that doesn't remix any channels. */ + std::vector<double> mtx(64*64, 0.0); + mtx[0 + 0*64] = 1.0; + mtx[1 + 1*64] = 1.0; + mtx[2 + 2*64] = 1.0; + mtx[3 + 3*64] = 1.0; + swr_set_matrix(mSwresCtx.get(), mtx.data(), 64); + } + else #endif { /* Without AL_SOFT_bformat_ex, OpenAL only supports FuMa channel diff --git a/include/AL/alext.h b/include/AL/alext.h index 1979baa2..bfc7c104 100644 --- a/include/AL/alext.h +++ b/include/AL/alext.h @@ -515,6 +515,21 @@ ALC_API void ALC_APIENTRY alcGetInteger64vSOFT(ALCdevice *device, ALCenum pname, #define AL_REMIX_UNMATCHED_SOFT 0x0002 #endif +#ifndef AL_SOFT_bformat_ex +#define AL_SOFT_bformat_ex 1 +#define AL_AMBISONIC_LAYOUT_SOFT 0x1997 +#define AL_AMBISONIC_SCALING_SOFT 0x1998 + +/* Ambisonic layouts */ +#define AL_FUMA_SOFT 0x0000 +#define AL_ACN_SOFT 0x0001 + +/* Ambisonic scalings (normalization) */ +/*#define AL_FUMA_SOFT*/ +#define AL_SN3D_SOFT 0x0001 +#define AL_N3D_SOFT 0x0002 +#endif + #ifdef __cplusplus } #endif |