audio: do not use first -audiodev as default audio device

It is now possible to specify the options for the default audio device
using -audio, so there is no need anymore to use a fake -audiodev option.

Remove the fall back to QTAILQ_FIRST(&audio_states), instead remember the
AudioState that was created from default_audiodevs and use that one.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2023-10-05 17:09:36 +02:00
parent 1ebdbff4c3
commit 22f84d4f78
3 changed files with 22 additions and 24 deletions

View File

@ -104,6 +104,7 @@ static audio_driver *audio_driver_lookup(const char *name)
static QTAILQ_HEAD(AudioStateHead, AudioState) audio_states = static QTAILQ_HEAD(AudioStateHead, AudioState) audio_states =
QTAILQ_HEAD_INITIALIZER(audio_states); QTAILQ_HEAD_INITIALIZER(audio_states);
static AudioState *default_audio_state;
const struct mixeng_volume nominal_volume = { const struct mixeng_volume nominal_volume = {
.mute = 0, .mute = 0,
@ -1660,6 +1661,7 @@ static void free_audio_state(AudioState *s)
void audio_cleanup(void) void audio_cleanup(void)
{ {
default_audio_state = NULL;
while (!QTAILQ_EMPTY(&audio_states)) { while (!QTAILQ_EMPTY(&audio_states)) {
AudioState *s = QTAILQ_FIRST(&audio_states); AudioState *s = QTAILQ_FIRST(&audio_states);
QTAILQ_REMOVE(&audio_states, s, list); QTAILQ_REMOVE(&audio_states, s, list);
@ -1760,6 +1762,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
goto out; goto out;
} }
} else { } else {
assert(!default_audio_state);
for (;;) { for (;;) {
AudiodevListEntry *e = QSIMPLEQ_FIRST(&default_audiodevs); AudiodevListEntry *e = QSIMPLEQ_FIRST(&default_audiodevs);
if (!e) { if (!e) {
@ -1801,24 +1804,9 @@ out:
bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp) bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp)
{ {
if (!card->state) { if (!card->state) {
if (!QTAILQ_EMPTY(&audio_states)) { if (!default_audio_state) {
/* default_audio_state = audio_init(NULL, errp);
* FIXME: once it is possible to create an arbitrary if (!default_audio_state) {
* default device via -audio DRIVER,OPT=VALUE (no "model"),
* replace this special case with the default AudioState*,
* storing it in a separate global. For now, keep the
* warning to encourage moving off magic use of the first
* -audiodev.
*/
if (QSIMPLEQ_EMPTY(&default_audiodevs)) {
dolog("Device %s: audiodev default parameter is deprecated, please "
"specify audiodev=%s\n", name,
QTAILQ_FIRST(&audio_states)->dev->id);
}
card->state = QTAILQ_FIRST(&audio_states);
} else {
card->state = audio_init(NULL, errp);
if (!card->state) {
if (!QSIMPLEQ_EMPTY(&audiodevs)) { if (!QSIMPLEQ_EMPTY(&audiodevs)) {
error_append_hint(errp, "Perhaps you wanted to use -audio or set audiodev=%s?\n", error_append_hint(errp, "Perhaps you wanted to use -audio or set audiodev=%s?\n",
QSIMPLEQ_FIRST(&audiodevs)->dev->id); QSIMPLEQ_FIRST(&audiodevs)->dev->id);
@ -1826,6 +1814,7 @@ bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp)
return false; return false;
} }
} }
card->state = default_audio_state;
} }
card->name = g_strdup (name); card->name = g_strdup (name);

View File

@ -23,12 +23,6 @@ deprecated.
System emulator command line arguments System emulator command line arguments
-------------------------------------- --------------------------------------
Creating sound card devices without ``audiodev=`` property (since 4.2)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
When not using the deprecated legacy audio config, each sound card
should specify an ``audiodev=`` property.
Short-form boolean options (since 6.0) Short-form boolean options (since 6.0)
'''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''

View File

@ -442,6 +442,21 @@ line using a ``secret`` object instance.
The ``-audiodev`` and ``-audio`` command line options are now the only The ``-audiodev`` and ``-audio`` command line options are now the only
way to specify audio backend settings. way to specify audio backend settings.
Using ``-audiodev`` to define the default audio backend (removed in 8.2)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If no audiodev property is specified, previous versions would use the
first ``-audiodev`` command line option as a fallback. Starting with
version 8.2, audio backends created with ``-audiodev`` will only be
used by clients (sound cards, machines with embedded sound hardware, VNC)
that refer to it in an ``audiodev=`` property.
In order to configure a default audio backend, use the ``-audio``
command line option without specifying a ``model``; while previous
versions of QEMU required a model, starting with version 8.2
QEMU does not require a model and will not create any sound card
in this case.
Note that the default audio backend must be configured on the command Note that the default audio backend must be configured on the command
line if the ``-nodefaults`` options is used. line if the ``-nodefaults`` options is used.