mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
Make AUD_init failure fatal
Failure to initialize the audio subsystem is not handled consistently. Where it is handled it has guest visible effects, which is wrong. We already have a "nosound" audio driver as a last resort, so trying to proceed without an audio backend seems pointless. Also protect against multiple calls to AUD_init so that this can be pushed down into individual devices. Signed-off-by: Paul Brook <paul@codesourcery.com>
This commit is contained in:
parent
f0f26a06d5
commit
0d9acba8fd
6 changed files with 35 additions and 50 deletions
|
@ -1711,6 +1711,10 @@ AudioState *AUD_init (void)
|
|||
const char *drvname;
|
||||
AudioState *s = &glob_audio_state;
|
||||
|
||||
if (s->drv) {
|
||||
return s;
|
||||
}
|
||||
|
||||
LIST_INIT (&s->hw_head_out);
|
||||
LIST_INIT (&s->hw_head_in);
|
||||
LIST_INIT (&s->cap_head);
|
||||
|
@ -1718,8 +1722,7 @@ AudioState *AUD_init (void)
|
|||
|
||||
s->ts = qemu_new_timer (vm_clock, audio_timer, s);
|
||||
if (!s->ts) {
|
||||
dolog ("Could not create audio timer\n");
|
||||
return NULL;
|
||||
hw_error("Could not create audio timer\n");
|
||||
}
|
||||
|
||||
audio_process_options ("AUDIO", audio_options);
|
||||
|
@ -1772,37 +1775,30 @@ AudioState *AUD_init (void)
|
|||
if (!done) {
|
||||
done = !audio_driver_init (s, &no_audio_driver);
|
||||
if (!done) {
|
||||
dolog ("Could not initialize audio subsystem\n");
|
||||
hw_error("Could not initialize audio subsystem\n");
|
||||
}
|
||||
else {
|
||||
dolog ("warning: Using timer based audio emulation\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (done) {
|
||||
VMChangeStateEntry *e;
|
||||
VMChangeStateEntry *e;
|
||||
|
||||
if (conf.period.hertz <= 0) {
|
||||
if (conf.period.hertz < 0) {
|
||||
dolog ("warning: Timer period is negative - %d "
|
||||
"treating as zero\n",
|
||||
conf.period.hertz);
|
||||
}
|
||||
conf.period.ticks = 1;
|
||||
}
|
||||
else {
|
||||
conf.period.ticks = ticks_per_sec / conf.period.hertz;
|
||||
}
|
||||
|
||||
e = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s);
|
||||
if (!e) {
|
||||
dolog ("warning: Could not register change state handler\n"
|
||||
"(Audio can continue looping even after stopping the VM)\n");
|
||||
if (conf.period.hertz <= 0) {
|
||||
if (conf.period.hertz < 0) {
|
||||
dolog ("warning: Timer period is negative - %d "
|
||||
"treating as zero\n",
|
||||
conf.period.hertz);
|
||||
}
|
||||
conf.period.ticks = 1;
|
||||
} else {
|
||||
conf.period.ticks = ticks_per_sec / conf.period.hertz;
|
||||
}
|
||||
else {
|
||||
qemu_del_timer (s->ts);
|
||||
return NULL;
|
||||
|
||||
e = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s);
|
||||
if (!e) {
|
||||
dolog ("warning: Could not register change state handler\n"
|
||||
"(Audio can continue looping even after stopping the VM)\n");
|
||||
}
|
||||
|
||||
LIST_INIT (&s->card_head);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue