summary refs log tree commit diff stats
path: root/system/vl.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2023-09-21 10:23:58 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2023-10-08 21:08:27 +0200
commit1ebdbff4c37d820b6a97d4c6f24aa38dae302b51 (patch)
treee0a68cb06c0fb9f8e7d8341d6452980f23baea77 /system/vl.c
parent8f527a3c0d2866df1affe8f0fb8ab73fbbb8ac52 (diff)
downloadfocaccia-qemu-1ebdbff4c37d820b6a97d4c6f24aa38dae302b51.tar.gz
focaccia-qemu-1ebdbff4c37d820b6a97d4c6f24aa38dae302b51.zip
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>
Diffstat (limited to 'system/vl.c')
-rw-r--r--system/vl.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/system/vl.c b/system/vl.c
index 7ca92d4490..72be5a4976 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -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: