summary refs log tree commit diff stats
path: root/audio/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/audio.c')
-rw-r--r--audio/audio.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/audio/audio.c b/audio/audio.c
index bd4bcabcca..73b65dc3b9 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1801,20 +1801,28 @@ out:
     return NULL;
 }
 
-bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp)
+AudioState *audio_get_default_audio_state(Error **errp)
 {
-    if (!card->state) {
+    if (!default_audio_state) {
+        default_audio_state = audio_init(NULL, errp);
         if (!default_audio_state) {
-            default_audio_state = audio_init(NULL, errp);
-            if (!default_audio_state) {
-                if (!QSIMPLEQ_EMPTY(&audiodevs)) {
-                    error_append_hint(errp, "Perhaps you wanted to use -audio or set audiodev=%s?\n",
-                                      QSIMPLEQ_FIRST(&audiodevs)->dev->id);
-                }
-                return false;
+            if (!QSIMPLEQ_EMPTY(&audiodevs)) {
+                error_append_hint(errp, "Perhaps you wanted to use -audio or set audiodev=%s?\n",
+                                  QSIMPLEQ_FIRST(&audiodevs)->dev->id);
             }
         }
-        card->state = default_audio_state;
+    }
+
+    return default_audio_state;
+}
+
+bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp)
+{
+    if (!card->state) {
+        card->state = audio_get_default_audio_state(errp);
+        if (!card->state) {
+            return false;
+        }
     }
 
     card->name = g_strdup (name);