1
0
mirror of https://gitlab.com/qemu-project/qemu synced 2024-07-05 17:29:18 +00:00

audio: extend -audio to allow creating a default backend

If "-audio BACKEND" is used without a model, the resulting backend
will be used whenever the audiodev property is not specified.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2023-09-21 10:23:58 +02:00
parent 8f527a3c0d
commit 1ebdbff4c3
3 changed files with 37 additions and 21 deletions

View File

@ -1820,7 +1820,7 @@ bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp)
card->state = audio_init(NULL, errp);
if (!card->state) {
if (!QSIMPLEQ_EMPTY(&audiodevs)) {
error_append_hint(errp, "Perhaps you wanted to set audiodev=%s?\n",
error_append_hint(errp, "Perhaps you wanted to use -audio or set audiodev=%s?\n",
QSIMPLEQ_FIRST(&audiodevs)->dev->id);
}
return false;

View File

@ -728,20 +728,22 @@ ERST
DEF("audio", HAS_ARG, QEMU_OPTION_audio,
"-audio [driver=]driver[,prop[=value][,...]]\n"
" specifies default audio backend when `audiodev` is not\n"
" used to create a machine or sound device;"
" options are the same as for -audiodev\n"
"-audio [driver=]driver,model=value[,prop[=value][,...]]\n"
" specifies the audio backend and device to use;\n"
" apart from 'model', options are the same as for -audiodev.\n"
" use '-audio model=help' to show possible devices.\n",
QEMU_ARCH_ALL)
SRST
``-audio [driver=]driver,model=value[,prop[=value][,...]]``
This option is a shortcut for configuring both the guest audio
hardware and the host audio backend in one go.
The driver option is the same as with the corresponding ``-audiodev`` option below.
The guest hardware model can be set with ``model=modelname``.
Use ``driver=help`` to list the available drivers,
and ``model=help`` to list the available device types.
``-audio [driver=]driver[,model=value][,prop[=value][,...]]``
If the ``model`` option is specified, ``-audio`` is a shortcut
for configuring both the guest audio hardware and the host audio
backend in one go. The guest hardware model can be set with
``model=modelname``. Use ``model=help`` to list the available
device types.
The following two example do exactly the same, to show how ``-audio``
can be used to shorten the command line length:
@ -750,6 +752,17 @@ SRST
|qemu_system| -audiodev pa,id=pa -device sb16,audiodev=pa
|qemu_system| -audio pa,model=sb16
If the ``model`` option is not specified, ``-audio`` is used to
configure a default audio backend that will be used whenever the
``audiodev`` property is not set on a device or machine. In
particular, ``-audio none`` ensures that no audio is produced even
for machines that have embedded sound hardware.
In both cases, the driver option is the same as with the corresponding
``-audiodev`` option below. Use ``driver=help`` to list the available
drivers.
ERST
DEF("audiodev", HAS_ARG, QEMU_OPTION_audiodev,

View File

@ -2935,7 +2935,7 @@ void qemu_init(int argc, char **argv)
break;
case QEMU_OPTION_audio: {
bool help;
char *model;
char *model = NULL;
Audiodev *dev = NULL;
Visitor *v;
QDict *dict = keyval_parse(optarg, "driver", &help, &error_fatal);
@ -2948,22 +2948,25 @@ void qemu_init(int argc, char **argv)
if (!qdict_haskey(dict, "id")) {
qdict_put_str(dict, "id", "audiodev0");
}
if (!qdict_haskey(dict, "model")) {
error_setg(&error_fatal, "Parameter 'model' is missing");
}
model = g_strdup(qdict_get_str(dict, "model"));
qdict_del(dict, "model");
if (is_help_option(model)) {
show_valid_soundhw();
exit(0);
if (qdict_haskey(dict, "model")) {
model = g_strdup(qdict_get_str(dict, "model"));
qdict_del(dict, "model");
if (is_help_option(model)) {
show_valid_soundhw();
exit(0);
}
}
v = qobject_input_visitor_new_keyval(QOBJECT(dict));
qobject_unref(dict);
visit_type_Audiodev(v, NULL, &dev, &error_fatal);
visit_free(v);
audio_define(dev);
select_soundhw(model, dev->id);
g_free(model);
if (model) {
audio_define(dev);
select_soundhw(model, dev->id);
g_free(model);
} else {
audio_define_default(dev, &error_fatal);
}
break;
}
case QEMU_OPTION_h: