diff options
-rw-r--r-- | al/buffer.cpp | 13 | ||||
-rw-r--r-- | alc/context.cpp | 1 | ||||
-rw-r--r-- | include/AL/alext.h | 7 |
3 files changed, 21 insertions, 0 deletions
diff --git a/al/buffer.cpp b/al/buffer.cpp index 05657a2a..ae7bf0d9 100644 --- a/al/buffer.cpp +++ b/al/buffer.cpp @@ -1191,6 +1191,11 @@ START_API_FUNC context->setError(AL_INVALID_VALUE, "NULL pointer"); else switch(param) { + case AL_SEC_LENGTH_SOFT: + *value = (albuf->mSampleRate < 1) ? 0.0f : + (static_cast<float>(albuf->mSampleLen) / static_cast<float>(albuf->mSampleRate)); + break; + default: context->setError(AL_INVALID_ENUM, "Invalid buffer float property 0x%04x", param); } @@ -1276,10 +1281,18 @@ START_API_FUNC break; case AL_SIZE: + *value = albuf->mCallback ? 0 : static_cast<ALint>(albuf->mData.size()); + break; + + case AL_BYTE_LENGTH_SOFT: *value = static_cast<ALint>(albuf->mSampleLen / albuf->mBlockAlign * albuf->blockSizeFromFmt()); break; + case AL_SAMPLE_LENGTH_SOFT: + *value = static_cast<ALint>(albuf->mSampleLen); + break; + case AL_UNPACK_BLOCK_ALIGNMENT_SOFT: *value = static_cast<ALint>(albuf->UnpackAlign); break; diff --git a/alc/context.cpp b/alc/context.cpp index 288f5965..cff666e8 100644 --- a/alc/context.cpp +++ b/alc/context.cpp @@ -62,6 +62,7 @@ constexpr ALchar alExtList[] = "AL_SOFT_bformat_ex " "AL_SOFTX_bformat_hoa " "AL_SOFT_block_alignment " + "AL_SOFT_buffer_length_query " "AL_SOFT_callback_buffer " "AL_SOFTX_convolution_reverb " "AL_SOFT_deferred_updates " diff --git a/include/AL/alext.h b/include/AL/alext.h index 5d04a839..ae899315 100644 --- a/include/AL/alext.h +++ b/include/AL/alext.h @@ -391,6 +391,13 @@ AL_API void AL_APIENTRY alProcessUpdatesSOFT(void); /*#define AL_SEC_LENGTH_SOFT 0x200B*/ #endif +#ifndef AL_SOFT_buffer_length_query +#define AL_SOFT_buffer_length_query 1 +/*#define AL_BYTE_LENGTH_SOFT 0x2009*/ +/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/ +/*#define AL_SEC_LENGTH_SOFT 0x200B*/ +#endif + #ifndef ALC_SOFT_pause_device #define ALC_SOFT_pause_device 1 typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device); |