Restructure buffer data conversion code a bit

This commit is contained in:
Chris Robinson
2008-10-31 22:13:35 -07:00
parent 2c80a80704
commit 87f3a0dc16
+27 -60
View File
@@ -1028,82 +1028,49 @@ static void LoadData(ALbuffer *ALBuf, const ALubyte *data, ALsizei size, ALuint
if(padding < 1)
padding = 1;
switch(OrigBytes)
// Samples are converted to 16 bit here
size /= OrigBytes;
temp = realloc(ALBuf->data, (padding*NewChannels + size) * sizeof(ALshort));
if(temp)
{
case 1:
size /= sizeof(ALubyte);
ALBuf->data = temp;
// 8bit Samples are converted to 16 bit here
temp = realloc(ALBuf->data, (padding*NewChannels + size) * (1*sizeof(ALshort)));
if (temp)
switch(OrigBytes)
{
ALBuf->data = temp;
for (i = 0;i < size;i++)
case 1:
for(i = 0;i < size;i++)
ALBuf->data[i] = (ALshort)((data[i]-128) << 8);
memset(&(ALBuf->data[size]), 0, padding*NewChannels*2);
break;
ALBuf->format = NewFormat;
ALBuf->eOriginalFormat = OrigFormat;
ALBuf->size = size*1*sizeof(ALshort);
ALBuf->frequency = freq;
ALBuf->padding = padding;
}
else
alSetError(AL_OUT_OF_MEMORY);
break;
case 2:
memcpy(ALBuf->data, data, size*sizeof(ALshort));
break;
case 2:
size /= sizeof(ALshort);
// Allocate 8 extra samples
temp = realloc(ALBuf->data, (padding*NewChannels + size) * (1*sizeof(ALshort)));
if (temp)
{
ALBuf->data = temp;
memcpy(ALBuf->data, data, size*1*sizeof(ALshort));
memset(&(ALBuf->data[size]), 0, padding*NewChannels*2);
ALBuf->format = NewFormat;
ALBuf->eOriginalFormat = OrigFormat;
ALBuf->size = size*1*sizeof(ALshort);
ALBuf->frequency = freq;
ALBuf->padding = padding;
}
else
alSetError(AL_OUT_OF_MEMORY);
break;
case 4:
size /= sizeof(ALfloat);
// Allocate 8 extra samples
temp = realloc(ALBuf->data, (padding*NewChannels + size) * (1*sizeof(ALshort)));
if (temp)
{
ALint smp;
ALBuf->data = temp;
for (i = 0;i < size;i++)
case 4:
for(i = 0;i < size;i++)
{
ALint smp;
smp = (((ALfloat*)data)[i] * 32767.5f - 0.5f);
smp = min(smp, 32767);
smp = max(smp, -32768);
ALBuf->data[i] = (ALshort)smp;
}
memset(&(ALBuf->data[size]), 0, padding*NewChannels*2);
break;
ALBuf->format = NewFormat;
ALBuf->eOriginalFormat = OrigFormat;
ALBuf->size = size*1*sizeof(ALshort);
ALBuf->frequency = freq;
ALBuf->padding = padding;
default:
assert(0);
}
else
alSetError(AL_OUT_OF_MEMORY);
break;
default:
assert(0);
memset(&(ALBuf->data[size]), 0, padding*NewChannels*sizeof(ALshort));
ALBuf->format = NewFormat;
ALBuf->eOriginalFormat = OrigFormat;
ALBuf->size = size*sizeof(ALshort);
ALBuf->frequency = freq;
ALBuf->padding = padding;
}
else
alSetError(AL_OUT_OF_MEMORY);
}