mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2024-12-03 17:42:21 +00:00
pulse driver: preallocate audio buffers
This commit is contained in:
parent
2f35afe79e
commit
2b1cc566a5
1 changed files with 38 additions and 31 deletions
|
@ -46,6 +46,10 @@ typedef struct {
|
|||
int buffer_size;
|
||||
fluid_thread_t *thread;
|
||||
int cont;
|
||||
|
||||
float *left;
|
||||
float *right;
|
||||
float *buf;
|
||||
} fluid_pulse_audio_driver_t;
|
||||
|
||||
|
||||
|
@ -90,6 +94,9 @@ new_fluid_pulse_audio_driver2(fluid_settings_t* settings,
|
|||
char *media_role = NULL;
|
||||
int realtime_prio = 0;
|
||||
int err;
|
||||
float *left = NULL,
|
||||
*right = NULL,
|
||||
*buf = NULL;
|
||||
|
||||
dev = FLUID_NEW(fluid_pulse_audio_driver_t);
|
||||
if (dev == NULL) {
|
||||
|
@ -156,6 +163,29 @@ new_fluid_pulse_audio_driver2(fluid_settings_t* settings,
|
|||
|
||||
FLUID_LOG(FLUID_INFO, "Using PulseAudio driver");
|
||||
|
||||
if(func != NULL)
|
||||
{
|
||||
left = FLUID_ARRAY(float, period_size);
|
||||
right = FLUID_ARRAY(float, period_size);
|
||||
|
||||
if (left == NULL || right == NULL)
|
||||
{
|
||||
FLUID_LOG(FLUID_ERR, "Out of memory.");
|
||||
goto error_recovery;
|
||||
}
|
||||
}
|
||||
|
||||
buf = FLUID_ARRAY(float, period_size * 2);
|
||||
if(buf == NULL)
|
||||
{
|
||||
FLUID_LOG(FLUID_ERR, "Out of memory.");
|
||||
goto error_recovery;
|
||||
}
|
||||
|
||||
dev->left = left;
|
||||
dev->right = right;
|
||||
dev->buf = buf;
|
||||
|
||||
/* Create the audio thread */
|
||||
dev->thread = new_fluid_thread ("pulse-audio", func ? fluid_pulse_audio_run2 : fluid_pulse_audio_run,
|
||||
dev, realtime_prio, FALSE);
|
||||
|
@ -187,6 +217,10 @@ void delete_fluid_pulse_audio_driver(fluid_audio_driver_t* p)
|
|||
if (dev->pa_handle)
|
||||
pa_simple_free(dev->pa_handle);
|
||||
|
||||
FLUID_FREE(dev->left);
|
||||
FLUID_FREE(dev->right);
|
||||
FLUID_FREE(dev->buf);
|
||||
|
||||
FLUID_FREE(dev);
|
||||
}
|
||||
|
||||
|
@ -195,21 +229,12 @@ static fluid_thread_return_t
|
|||
fluid_pulse_audio_run(void* d)
|
||||
{
|
||||
fluid_pulse_audio_driver_t* dev = (fluid_pulse_audio_driver_t*) d;
|
||||
float *buf;
|
||||
float *buf = dev->buf;
|
||||
int buffer_size;
|
||||
int err;
|
||||
|
||||
buffer_size = dev->buffer_size;
|
||||
|
||||
/* FIXME - Probably shouldn't alloc in run() */
|
||||
buf = FLUID_ARRAY(float, buffer_size * 2);
|
||||
|
||||
if (buf == NULL)
|
||||
{
|
||||
FLUID_LOG(FLUID_ERR, "Out of memory.");
|
||||
return FLUID_THREAD_RETURN_VALUE;
|
||||
}
|
||||
|
||||
while (dev->cont)
|
||||
{
|
||||
fluid_synth_write_float(dev->data, buffer_size, buf, 0, 2, buf, 1, 2);
|
||||
|
@ -222,8 +247,6 @@ fluid_pulse_audio_run(void* d)
|
|||
}
|
||||
} /* while (dev->cont) */
|
||||
|
||||
FLUID_FREE(buf);
|
||||
|
||||
return FLUID_THREAD_RETURN_VALUE;
|
||||
}
|
||||
|
||||
|
@ -232,7 +255,9 @@ fluid_pulse_audio_run2(void* d)
|
|||
{
|
||||
fluid_pulse_audio_driver_t* dev = (fluid_pulse_audio_driver_t*) d;
|
||||
fluid_synth_t *synth = (fluid_synth_t *)(dev->data);
|
||||
float *left, *right, *buf;
|
||||
float *left = dev->left,
|
||||
*right = dev->right,
|
||||
*buf = dev->buf;
|
||||
float* handle[2];
|
||||
int buffer_size;
|
||||
int err;
|
||||
|
@ -240,20 +265,6 @@ fluid_pulse_audio_run2(void* d)
|
|||
|
||||
buffer_size = dev->buffer_size;
|
||||
|
||||
/* FIXME - Probably shouldn't alloc in run() */
|
||||
left = FLUID_ARRAY(float, buffer_size);
|
||||
right = FLUID_ARRAY(float, buffer_size);
|
||||
buf = FLUID_ARRAY(float, buffer_size * 2);
|
||||
|
||||
if (left == NULL || right == NULL || buf == NULL)
|
||||
{
|
||||
FLUID_FREE(left);
|
||||
FLUID_FREE(right);
|
||||
FLUID_FREE(buf);
|
||||
FLUID_LOG(FLUID_ERR, "Out of memory.");
|
||||
return FLUID_THREAD_RETURN_VALUE;
|
||||
}
|
||||
|
||||
handle[0] = left;
|
||||
handle[1] = right;
|
||||
|
||||
|
@ -276,10 +287,6 @@ fluid_pulse_audio_run2(void* d)
|
|||
}
|
||||
} /* while (dev->cont) */
|
||||
|
||||
FLUID_FREE(left);
|
||||
FLUID_FREE(right);
|
||||
FLUID_FREE(buf);
|
||||
|
||||
return FLUID_THREAD_RETURN_VALUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue