mirror of https://github.com/xemu-project/xemu.git
audio/paaudio: fix ignored buffer_length setting
Audiodev configuration allows to set the length of the buffered data. The setting was ignored and a constant value used instead. This patch makes the code apply the setting properly, and uses the previous default if nothing is supplied. Signed-off-by: Martin Schrodt <martin@schrodt.org> Message-id: 20190315084653.120020-2-martin@schrodt.org Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
d4e65539e5
commit
baea032ec7
|
@ -577,7 +577,8 @@ static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as,
|
||||||
|
|
||||||
audio_pcm_init_info (&hw->info, &obt_as);
|
audio_pcm_init_info (&hw->info, &obt_as);
|
||||||
hw->samples = pa->samples = audio_buffer_samples(
|
hw->samples = pa->samples = audio_buffer_samples(
|
||||||
qapi_AudiodevPaPerDirectionOptions_base(ppdo), &obt_as, 46440);
|
qapi_AudiodevPaPerDirectionOptions_base(ppdo),
|
||||||
|
&obt_as, ppdo->buffer_length);
|
||||||
pa->pcm_buf = audio_calloc(__func__, hw->samples, 1 << hw->info.shift);
|
pa->pcm_buf = audio_calloc(__func__, hw->samples, 1 << hw->info.shift);
|
||||||
pa->rpos = hw->rpos;
|
pa->rpos = hw->rpos;
|
||||||
if (!pa->pcm_buf) {
|
if (!pa->pcm_buf) {
|
||||||
|
@ -637,7 +638,8 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
|
||||||
|
|
||||||
audio_pcm_init_info (&hw->info, &obt_as);
|
audio_pcm_init_info (&hw->info, &obt_as);
|
||||||
hw->samples = pa->samples = audio_buffer_samples(
|
hw->samples = pa->samples = audio_buffer_samples(
|
||||||
qapi_AudiodevPaPerDirectionOptions_base(ppdo), &obt_as, 46440);
|
qapi_AudiodevPaPerDirectionOptions_base(ppdo),
|
||||||
|
&obt_as, ppdo->buffer_length);
|
||||||
pa->pcm_buf = audio_calloc(__func__, hw->samples, 1 << hw->info.shift);
|
pa->pcm_buf = audio_calloc(__func__, hw->samples, 1 << hw->info.shift);
|
||||||
pa->wpos = hw->wpos;
|
pa->wpos = hw->wpos;
|
||||||
if (!pa->pcm_buf) {
|
if (!pa->pcm_buf) {
|
||||||
|
@ -809,7 +811,16 @@ static int qpa_ctl_in (HWVoiceIn *hw, int cmd, ...)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* common */
|
static int qpa_validate_per_direction_opts(Audiodev *dev,
|
||||||
|
AudiodevPaPerDirectionOptions *pdo)
|
||||||
|
{
|
||||||
|
if (!pdo->has_buffer_length) {
|
||||||
|
pdo->has_buffer_length = true;
|
||||||
|
pdo->buffer_length = 46440;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void *qpa_audio_init(Audiodev *dev)
|
static void *qpa_audio_init(Audiodev *dev)
|
||||||
{
|
{
|
||||||
paaudio *g;
|
paaudio *g;
|
||||||
|
@ -836,6 +847,13 @@ static void *qpa_audio_init(Audiodev *dev)
|
||||||
g = g_malloc(sizeof(paaudio));
|
g = g_malloc(sizeof(paaudio));
|
||||||
server = popts->has_server ? popts->server : NULL;
|
server = popts->has_server ? popts->server : NULL;
|
||||||
|
|
||||||
|
if (!qpa_validate_per_direction_opts(dev, popts->in)) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (!qpa_validate_per_direction_opts(dev, popts->out)) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
g->dev = dev;
|
g->dev = dev;
|
||||||
g->mainloop = NULL;
|
g->mainloop = NULL;
|
||||||
g->context = NULL;
|
g->context = NULL;
|
||||||
|
|
Loading…
Reference in New Issue