aboutsummaryrefslogtreecommitdiffstats
path: root/al/buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'al/buffer.cpp')
-rw-r--r--al/buffer.cpp13
1 files changed, 13 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;