Loop points should be specified in sample offsets

This commit is contained in:
Chris Robinson
2010-05-21 15:52:35 -07:00
parent 3676fdc4db
commit 58e5404d61
2 changed files with 27 additions and 31 deletions
+25 -22
View File
@@ -339,11 +339,11 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->size = newsize*NewBytes;
ALBuf->frequency = freq;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / NewChannels;
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = OrigBytes * 2;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = size;
}
else
alSetError(Context, AL_OUT_OF_MEMORY);
@@ -415,11 +415,11 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->size = newsize*NewBytes;
ALBuf->frequency = freq;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / OrigChans;
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = 36 * OrigChans;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = size;
}
else
alSetError(Context, AL_OUT_OF_MEMORY);
@@ -462,11 +462,11 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->size = size*NewBytes;
ALBuf->frequency = freq;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = size / Channels;
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = 1 * Channels;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = size;
}
else
alSetError(Context, AL_OUT_OF_MEMORY);
@@ -499,11 +499,11 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->size = newsize*NewBytes;
ALBuf->frequency = freq;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / NewChannels;
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = 1 * OrigChans;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = size;
}
else
alSetError(Context, AL_OUT_OF_MEMORY);
@@ -834,16 +834,19 @@ AL_API void AL_APIENTRY alBufferiv(ALuint buffer, ALenum eParam, const ALint* pl
if(ALBuf->refcount > 0)
alSetError(pContext, AL_INVALID_OPERATION);
else if(plValues[0] < 0 || plValues[1] < 0 ||
plValues[0] > ALBuf->OriginalSize ||
plValues[1] > ALBuf->OriginalSize ||
(plValues[0]%ALBuf->OriginalAlign) ||
(plValues[0]%ALBuf->OriginalAlign) ||
plValues[0] >= plValues[1])
plValues[0] >= plValues[1] || ALBuf->size == 0)
alSetError(pContext, AL_INVALID_VALUE);
else
{
ALBuf->LoopStart = plValues[0];
ALBuf->LoopEnd = plValues[1];
ALint maxlen = ALBuf->size / aluBytesFromFormat(ALBuf->format) /
aluChannelsFromFormat(ALBuf->format);
if(plValues[0] > maxlen || plValues[1] > maxlen)
alSetError(pContext, AL_INVALID_VALUE);
else
{
ALBuf->LoopStart = plValues[0];
ALBuf->LoopEnd = plValues[1];
}
}
break;
@@ -1130,12 +1133,12 @@ static ALenum LoadData(ALbuffer *ALBuf, const ALvoid *data, ALsizei size, ALuint
ALBuf->size = newsize*NewBytes;
ALBuf->frequency = freq;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / NewChannels;
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = OrigBytes * OrigChannels;
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = size;
return AL_NO_ERROR;
}
+2 -9
View File
@@ -553,8 +553,6 @@ AL_API ALvoid AL_APIENTRY alSourcei(ALuint source,ALenum eParam,ALint lValue)
// Add the buffer to the queue (as long as it is NOT the NULL buffer)
if(lValue != 0)
{
ALuint channels;
// Source is now in STATIC mode
Source->lSourceType = AL_STATIC;
@@ -566,13 +564,8 @@ AL_API ALvoid AL_APIENTRY alSourcei(ALuint source,ALenum eParam,ALint lValue)
Source->queue = BufferListItem;
Source->BuffersInQueue = 1;
channels = aluChannelsFromFormat(buffer->format);
Source->LoopStart = FramesFromBytes(buffer->LoopStart,
buffer->eOriginalFormat,
channels);
Source->LoopEnd = FramesFromBytes(buffer->LoopEnd,
buffer->eOriginalFormat,
channels);
Source->LoopStart = buffer->LoopStart;
Source->LoopEnd = buffer->LoopEnd;
// Increment reference counter for buffer
buffer->refcount++;