aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2020-01-05 03:45:35 -0800
committerChris Robinson <[email protected]>2020-01-05 03:45:35 -0800
commit6ed8061cbf6bbc17c4591d7e50bf9c97aad7a889 (patch)
treebd0f3854d489db423857710d5abe9d1af4005ee8
parent0d0ea586b6e7e8440fec807309cc97aa727d2bb0 (diff)
Finalize AL_SOFT_bformat_ex
-rw-r--r--alc/alc.cpp9
-rw-r--r--alc/inprogext.h15
-rw-r--r--examples/alffplay.cpp24
-rw-r--r--include/AL/alext.h15
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