Avoid a temporary throw-away buffer for mixing null output
This commit is contained in:
parent
a72c0f7470
commit
412cec73de
35
Alc/ALu.c
35
Alc/ALu.c
@ -1101,23 +1101,26 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
|
||||
}
|
||||
}
|
||||
|
||||
switch(device->FmtType)
|
||||
if(buffer)
|
||||
{
|
||||
case DevFmtByte:
|
||||
Write_ALbyte(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtUByte:
|
||||
Write_ALubyte(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtShort:
|
||||
Write_ALshort(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtUShort:
|
||||
Write_ALushort(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtFloat:
|
||||
Write_ALfloat(device, buffer, SamplesToDo);
|
||||
break;
|
||||
switch(device->FmtType)
|
||||
{
|
||||
case DevFmtByte:
|
||||
Write_ALbyte(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtUByte:
|
||||
Write_ALubyte(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtShort:
|
||||
Write_ALshort(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtUShort:
|
||||
Write_ALushort(device, buffer, SamplesToDo);
|
||||
break;
|
||||
case DevFmtFloat:
|
||||
Write_ALfloat(device, buffer, SamplesToDo);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
size -= SamplesToDo;
|
||||
|
20
Alc/null.c
20
Alc/null.c
@ -27,9 +27,6 @@
|
||||
|
||||
|
||||
typedef struct {
|
||||
ALvoid *buffer;
|
||||
ALuint size;
|
||||
|
||||
volatile int killNow;
|
||||
ALvoid *thread;
|
||||
} null_data;
|
||||
@ -68,7 +65,7 @@ static ALuint NullProc(ALvoid *ptr)
|
||||
|
||||
while(avail-done >= Device->UpdateSize)
|
||||
{
|
||||
aluMixData(Device, data->buffer, Device->UpdateSize);
|
||||
aluMixData(Device, NULL, Device->UpdateSize);
|
||||
done += Device->UpdateSize;
|
||||
}
|
||||
}
|
||||
@ -104,23 +101,11 @@ static ALCboolean null_reset_playback(ALCdevice *device)
|
||||
{
|
||||
null_data *data = (null_data*)device->ExtraData;
|
||||
|
||||
data->size = device->UpdateSize * FrameSizeFromDevFmt(device->FmtChans,
|
||||
device->FmtType);
|
||||
data->buffer = malloc(data->size);
|
||||
if(!data->buffer)
|
||||
{
|
||||
ERR("Buffer malloc failed\n");
|
||||
return ALC_FALSE;
|
||||
}
|
||||
SetDefaultWFXChannelOrder(device);
|
||||
|
||||
data->thread = StartThread(NullProc, device);
|
||||
if(data->thread == NULL)
|
||||
{
|
||||
free(data->buffer);
|
||||
data->buffer = NULL;
|
||||
return ALC_FALSE;
|
||||
}
|
||||
|
||||
return ALC_TRUE;
|
||||
}
|
||||
@ -137,9 +122,6 @@ static void null_stop_playback(ALCdevice *device)
|
||||
data->thread = NULL;
|
||||
|
||||
data->killNow = 0;
|
||||
|
||||
free(data->buffer);
|
||||
data->buffer = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user