Implement AL_SOFT_buffer_sub_data using the current AL_EXT_buffer_sub_data spec

This extension can be useful for some applications, but a full EXT version may
not be ready for some time. Using the SOFT moniker will help differentiate it
in case changes need to be done for the EXT version.
This commit is contained in:
Chris Robinson
2010-09-21 09:43:35 -07:00
parent a2580a85a8
commit 2d4453968d
5 changed files with 28 additions and 9 deletions
+3 -1
View File
@@ -236,6 +236,8 @@ static const ALCfunction alcFunctions[] = {
{ "alBufferSubDataEXT", (ALCvoid *) alBufferSubDataEXT },
{ "alBufferSubDataSOFT", (ALCvoid *) alBufferSubDataSOFT },
{ "alGenDatabuffersEXT", (ALCvoid *) alGenDatabuffersEXT },
{ "alDeleteDatabuffersEXT", (ALCvoid *) alDeleteDatabuffersEXT },
{ "alIsDatabufferEXT", (ALCvoid *) alIsDatabufferEXT },
@@ -360,7 +362,7 @@ static const ALchar alExtList[] =
"AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXTX_loop_points "
"AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET "
"AL_EXTX_sample_buffer_object AL_EXT_source_distance_model "
"AL_LOKI_quadriphonic";
"AL_LOKI_quadriphonic AL_SOFT_buffer_sub_data";
// Mixing Priority Level
static ALint RTPrioLevel;
+7 -2
View File
@@ -547,11 +547,11 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
}
/*
* alBufferSubDataEXT(ALuint buffer,ALenum format,ALvoid *data,ALsizei offset,ALsizei length)
* alBufferSubDataSOFT(ALuint buffer,ALenum format,ALvoid *data,ALsizei offset,ALsizei length)
*
* Fill buffer with audio data
*/
AL_API ALvoid AL_APIENTRY alBufferSubDataEXT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length)
AL_API ALvoid AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length)
{
ALCcontext *Context;
ALCdevice *device;
@@ -675,6 +675,11 @@ AL_API ALvoid AL_APIENTRY alBufferSubDataEXT(ALuint buffer,ALenum format,const A
ProcessContext(Context);
}
AL_API ALvoid AL_APIENTRY alBufferSubDataEXT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length)
{
alBufferSubDataSOFT(buffer, format, data, offset, length);
}
AL_API void AL_APIENTRY alBufferf(ALuint buffer, ALenum eParam, ALfloat flValue)
{
+2
View File
@@ -68,7 +68,9 @@ static const ALenums enumeration[] = {
{ "AL_MAX_DISTANCE", AL_MAX_DISTANCE },
{ "AL_SEC_OFFSET", AL_SEC_OFFSET },
{ "AL_SAMPLE_OFFSET", AL_SAMPLE_OFFSET },
{ "AL_SAMPLE_RW_OFFSETS_SOFT", AL_SAMPLE_RW_OFFSETS_SOFT },
{ "AL_BYTE_OFFSET", AL_BYTE_OFFSET },
{ "AL_BYTE_RW_OFFSETS_SOFT", AL_BYTE_RW_OFFSETS_SOFT },
{ "AL_SOURCE_TYPE", AL_SOURCE_TYPE },
{ "AL_STATIC", AL_STATIC },
{ "AL_STREAMING", AL_STREAMING },
+6 -6
View File
@@ -1012,8 +1012,8 @@ AL_API ALvoid AL_APIENTRY alGetSourcefv(ALuint source, ALenum eParam, ALfloat *p
alGetSource3f(source, eParam, pflValues+0, pflValues+1, pflValues+2);
break;
case AL_SAMPLE_RW_OFFSETS_EXT:
case AL_BYTE_RW_OFFSETS_EXT:
case AL_SAMPLE_RW_OFFSETS_SOFT:
case AL_BYTE_RW_OFFSETS_SOFT:
updateLen = (ALdouble)pContext->Device->UpdateSize /
pContext->Device->Frequency;
GetSourceOffset(Source, eParam, Offsets, updateLen);
@@ -1248,8 +1248,8 @@ AL_API void AL_APIENTRY alGetSourceiv(ALuint source, ALenum eParam, ALint* plVal
alGetSource3i(source, eParam, plValues+0, plValues+1, plValues+2);
break;
case AL_SAMPLE_RW_OFFSETS_EXT:
case AL_BYTE_RW_OFFSETS_EXT:
case AL_SAMPLE_RW_OFFSETS_SOFT:
case AL_BYTE_RW_OFFSETS_SOFT:
updateLen = (ALdouble)pContext->Device->UpdateSize /
pContext->Device->Frequency;
GetSourceOffset(Source, eParam, Offsets, updateLen);
@@ -1873,12 +1873,12 @@ static ALvoid GetSourceOffset(ALsource *Source, ALenum name, ALdouble *offset, A
offset[1] = (ALdouble)writePos / (Channels * Bytes * BufferFreq);
break;
case AL_SAMPLE_OFFSET:
case AL_SAMPLE_RW_OFFSETS_EXT:
case AL_SAMPLE_RW_OFFSETS_SOFT:
offset[0] = (ALdouble)(readPos / (Channels * Bytes));
offset[1] = (ALdouble)(writePos / (Channels * Bytes));
break;
case AL_BYTE_OFFSET:
case AL_BYTE_RW_OFFSETS_EXT:
case AL_BYTE_RW_OFFSETS_SOFT:
// Take into account the original format of the Buffer
if((OriginalFormat == AL_FORMAT_MONO_IMA4) ||
(OriginalFormat == AL_FORMAT_STEREO_IMA4))
+10
View File
@@ -143,6 +143,16 @@ ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void);
#define AL_SOURCE_DISTANCE_MODEL 0x200
#endif
#ifndef AL_SOFT_buffer_sub_data
#define AL_SOFT_buffer_sub_data 1
#define AL_BYTE_RW_OFFSETS_SOFT 0x1031
#define AL_SAMPLE_RW_OFFSETS_SOFT 0x1032
typedef ALvoid (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei);
#ifdef AL_ALEXT_PROTOTYPES
AL_API ALvoid AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length);
#endif
#endif
#ifdef __cplusplus
}
#endif