* [PATCH v3 00/35] Audio clean-ups
@ 2025-10-27 15:10 marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 01/35] qdev: add qdev_find_default_bus() marcandre.lureau
` (35 more replies)
0 siblings, 36 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Hi,
This is part of continuous and overdue clean up / modernization effort for the
audio subsystem. (there is more in the pipe)
v3:
- rebased and dropped applied patches
- fix some checkpatch formatting errors
- tweak commit message
- added r-b tags
v2:
- renamed AudioBE AudioBackend
- "qdev: add qdev_find_default_bus()" report different error for full bus
- added "remove QEMUSoundCard" & drop AudioFE renaming patch
- added "docs: Update mentions of removed '-soundhw' command line option" patch from philmd
- added r-b tags
thanks
Marc-André Lureau (33):
qdev: add qdev_find_default_bus()
hw/audio: look up the default bus from the device class
audio: rename audio_define->audio_add_audiodev()
hw/audio: use better naming for -audio model handling code
hw/audio/virtio-snd-pci: remove custom model callback
hw/audio: simplify 'hda' audio init code
hw/audio: generalize audio_model.init()
hw/audio: drop audio_model.isa
audio: start making AudioState a QOM Object
audio: register backends in /audiodevs container
audio: use /audiodevs QOM container
audio/paaudio: remove needless return value
audio/dsound: simplify init()
audio/dsound: report init error via **errp
audio: simplify audio_driver_init()
audio: move period tick initialization
audio: drop needless error message
audio: keep vmstate handle with AudioState
audio: register and unregister vmstate with AudioState
audio: initialize card_head during object init
audio: remove some needless headers
audio: remove AUDIO_HOST_ENDIANNESS
audio: introduce AUD_set_volume_{in,out}_lr()
audio/replay: fix type punning
audio: move internal APIs to audio_int.h
audio: rename AudioState -> AudioBackend
audio: remove QEMUSoundCard
audio/dbus: use a helper function to set the backend dbus server
audio: move audio.h under include/qemu/
audio: remove dependency on spice header
audio: cleanup, use bool for booleans
audio: move capture API to own header
audio: drop needless audio_driver "descr" field
Philippe Mathieu-Daudé (2):
audio: Remove pointless local variables
audio: Rename @endianness argument as @big_endian for clarity
MAINTAINERS | 1 +
audio/audio_int.h | 67 ++--
audio/audio_template.h | 44 ++-
audio/mixeng.h | 1 -
hw/audio/lm4549.h | 4 +-
include/hw/audio/asc.h | 4 +-
include/hw/audio/model.h | 14 +
include/hw/audio/soundhw.h | 13 -
include/hw/audio/virtio-snd.h | 4 +-
include/hw/display/xlnx_dp.h | 4 +-
include/hw/isa/vt82c686.h | 4 +-
include/hw/qdev-properties-system.h | 2 +-
include/monitor/qdev.h | 3 +
include/qemu/audio-capture.h | 43 +++
{audio => include/qemu}/audio.h | 137 +++-----
include/system/replay.h | 3 +-
ui/vnc.h | 4 +-
audio/alsaaudio.c | 37 +--
audio/audio-hmp-cmds.c | 4 +-
audio/audio.c | 313 +++++++++---------
audio/audio_win_int.c | 2 +-
audio/dbusaudio.c | 20 +-
audio/dsoundaudio.c | 213 +++++-------
audio/jackaudio.c | 3 +-
audio/mixeng.c | 12 +-
audio/noaudio.c | 5 +-
audio/ossaudio.c | 33 +-
audio/paaudio.c | 24 +-
audio/pwaudio.c | 15 +-
audio/sdlaudio.c | 15 +-
audio/sndioaudio.c | 3 +-
audio/spiceaudio.c | 7 +-
audio/wavaudio.c | 6 +-
audio/wavcapture.c | 5 +-
hw/arm/integratorcp.c | 2 +-
hw/arm/musicpal.c | 2 +-
hw/arm/realview.c | 2 +-
hw/arm/versatilepb.c | 2 +-
hw/arm/vexpress.c | 2 +-
hw/arm/xlnx-zcu102.c | 2 +-
hw/audio/ac97.c | 36 +-
hw/audio/adlib.c | 17 +-
hw/audio/asc.c | 15 +-
hw/audio/cs4231a.c | 16 +-
hw/audio/es1370.c | 30 +-
hw/audio/gus.c | 17 +-
hw/audio/hda-codec.c | 21 +-
hw/audio/intel-hda.c | 22 +-
hw/audio/lm4549.c | 12 +-
hw/audio/marvell_88w8618.c | 2 +-
hw/audio/{soundhw.c => model.c} | 86 ++---
hw/audio/pcspk.c | 13 +-
hw/audio/pl041.c | 2 +-
hw/audio/sb16.c | 23 +-
hw/audio/via-ac97.c | 11 +-
hw/audio/virtio-snd-pci.c | 18 +-
hw/audio/virtio-snd.c | 17 +-
hw/audio/wm8750.c | 37 +--
hw/core/machine.c | 4 +-
hw/core/qdev-properties-system.c | 17 +-
hw/display/xlnx_dp.c | 8 +-
hw/ppc/prep.c | 2 +-
hw/usb/dev-audio.c | 17 +-
qom/object.c | 1 +
replay/replay-audio.c | 4 +-
replay/stubs-system.c | 2 +-
system/qdev-monitor.c | 25 +-
system/runstate.c | 2 +-
system/vl.c | 14 +-
ui/dbus.c | 13 +-
ui/vnc.c | 10 +-
audio/coreaudio.m | 3 +-
audio/meson.build | 2 +-
hw/audio/meson.build | 2 +-
.../codeconverter/test_regexps.py | 4 +-
75 files changed, 758 insertions(+), 848 deletions(-)
create mode 100644 include/hw/audio/model.h
delete mode 100644 include/hw/audio/soundhw.h
create mode 100644 include/qemu/audio-capture.h
rename {audio => include/qemu}/audio.h (50%)
rename hw/audio/{soundhw.c => model.c} (54%)
--
2.51.0
^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v3 01/35] qdev: add qdev_find_default_bus()
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:58 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 02/35] hw/audio: look up the default bus from the device class marcandre.lureau
` (34 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
This helper is used next by -audio code.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/monitor/qdev.h | 3 +++
system/qdev-monitor.c | 25 +++++++++++++++++++++----
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/include/monitor/qdev.h b/include/monitor/qdev.h
index 1d57bf6577..de33637869 100644
--- a/include/monitor/qdev.h
+++ b/include/monitor/qdev.h
@@ -1,6 +1,8 @@
#ifndef MONITOR_QDEV_H
#define MONITOR_QDEV_H
+#include "hw/qdev-core.h"
+
/*** monitor commands ***/
void hmp_info_qtree(Monitor *mon, const QDict *qdict);
@@ -11,6 +13,7 @@ int qdev_device_help(QemuOpts *opts);
DeviceState *qdev_device_add(QemuOpts *opts, Error **errp);
DeviceState *qdev_device_add_from_qdict(const QDict *opts,
bool from_json, Error **errp);
+BusState *qdev_find_default_bus(DeviceClass *dc, Error **errp);
/**
* qdev_set_id: parent the device and set its id if provided.
diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c
index ec4a2394ce..f2aa400a77 100644
--- a/system/qdev-monitor.c
+++ b/system/qdev-monitor.c
@@ -621,6 +621,25 @@ const char *qdev_set_id(DeviceState *dev, char *id, Error **errp)
return prop->name;
}
+BusState *qdev_find_default_bus(DeviceClass *dc, Error **errp)
+{
+ BusState *bus = NULL;
+
+ assert(dc->bus_type != NULL);
+ bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type);
+ if (!bus) {
+ error_setg(errp, "No '%s' bus found for device '%s'",
+ dc->bus_type, object_class_get_name(OBJECT_CLASS(dc)));
+ return NULL;
+ }
+ if (qbus_is_full(bus)) {
+ error_setg(errp, "A '%s' bus was found but is full", dc->bus_type);
+ return NULL;
+ }
+
+ return bus;
+}
+
DeviceState *qdev_device_add_from_qdict(const QDict *opts,
bool from_json, Error **errp)
{
@@ -657,10 +676,8 @@ DeviceState *qdev_device_add_from_qdict(const QDict *opts,
return NULL;
}
} else if (dc->bus_type != NULL) {
- bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type);
- if (!bus || qbus_is_full(bus)) {
- error_setg(errp, "No '%s' bus found for device '%s'",
- dc->bus_type, driver);
+ bus = qdev_find_default_bus(dc, errp);
+ if (!bus) {
return NULL;
}
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 02/35] hw/audio: look up the default bus from the device class
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 01/35] qdev: add qdev_find_default_bus() marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 14:01 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 03/35] audio: rename audio_define->audio_add_audiodev() marcandre.lureau
` (33 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Generalize and simplify the device model creation.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/audio/soundhw.c | 20 ++++----------------
1 file changed, 4 insertions(+), 16 deletions(-)
diff --git a/hw/audio/soundhw.c b/hw/audio/soundhw.c
index 63a6855635..29158c115c 100644
--- a/hw/audio/soundhw.c
+++ b/hw/audio/soundhw.c
@@ -22,6 +22,8 @@
* THE SOFTWARE.
*/
#include "qemu/osdep.h"
+#include "hw/qdev-core.h"
+#include "monitor/qdev.h"
#include "qemu/option.h"
#include "qemu/help_option.h"
#include "qemu/error-report.h"
@@ -110,33 +112,19 @@ void select_soundhw(const char *name, const char *audiodev)
void soundhw_init(void)
{
struct soundhw *c = selected;
- ISABus *isa_bus = (ISABus *) object_resolve_path_type("", TYPE_ISA_BUS, NULL);
- PCIBus *pci_bus = (PCIBus *) object_resolve_path_type("", TYPE_PCI_BUS, NULL);
- BusState *bus;
if (!c) {
return;
}
- if (c->isa) {
- if (!isa_bus) {
- error_report("ISA bus not available for %s", c->name);
- exit(1);
- }
- bus = BUS(isa_bus);
- } else {
- if (!pci_bus) {
- error_report("PCI bus not available for %s", c->name);
- exit(1);
- }
- bus = BUS(pci_bus);
- }
if (c->typename) {
DeviceState *dev = qdev_new(c->typename);
+ BusState *bus = qdev_find_default_bus(DEVICE_GET_CLASS(dev), &error_fatal);
qdev_prop_set_string(dev, "audiodev", audiodev_id);
qdev_realize_and_unref(dev, bus, &error_fatal);
} else {
assert(!c->isa);
+ PCIBus *pci_bus = (PCIBus *) object_resolve_path_type("", TYPE_PCI_BUS, NULL);
c->init_pci(pci_bus, audiodev_id);
}
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 03/35] audio: rename audio_define->audio_add_audiodev()
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 01/35] qdev: add qdev_find_default_bus() marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 02/35] hw/audio: look up the default bus from the device class marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 04/35] hw/audio: use better naming for -audio model handling code marcandre.lureau
` (32 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
For readability.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
audio/audio.h | 4 ++--
audio/audio.c | 8 ++++----
system/vl.c | 6 +++---
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index fcc22307be..eb5b5d662d 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -168,8 +168,8 @@ void audio_sample_to_uint64(const void *samples, int pos,
void audio_sample_from_uint64(void *samples, int pos,
uint64_t left, uint64_t right);
-void audio_define(Audiodev *audio);
-void audio_define_default(Audiodev *dev, Error **errp);
+void audio_add_audiodev(Audiodev *audio);
+void audio_add_default_audiodev(Audiodev *dev, Error **errp);
void audio_parse_option(const char *opt);
void audio_create_default_audiodevs(void);
void audio_init_audiodevs(void);
diff --git a/audio/audio.c b/audio/audio.c
index 89f091bc88..6197fa1788 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1712,7 +1712,7 @@ void audio_create_default_audiodevs(void)
visit_type_Audiodev(v, NULL, &dev, &error_fatal);
visit_free(v);
- audio_define_default(dev, &error_abort);
+ audio_add_default_audiodev(dev, &error_abort);
}
}
}
@@ -2142,10 +2142,10 @@ void audio_parse_option(const char *opt)
visit_type_Audiodev(v, NULL, &dev, &error_fatal);
visit_free(v);
- audio_define(dev);
+ audio_add_audiodev(dev);
}
-void audio_define(Audiodev *dev)
+void audio_add_audiodev(Audiodev *dev)
{
AudiodevListEntry *e;
@@ -2156,7 +2156,7 @@ void audio_define(Audiodev *dev)
QSIMPLEQ_INSERT_TAIL(&audiodevs, e, next);
}
-void audio_define_default(Audiodev *dev, Error **errp)
+void audio_add_default_audiodev(Audiodev *dev, Error **errp)
{
AudiodevListEntry *e;
diff --git a/system/vl.c b/system/vl.c
index 17bbc092c8..4814ef11da 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -2265,7 +2265,7 @@ static void qemu_record_config_group(const char *group, QDict *dict,
Audiodev *dev = NULL;
Visitor *v = qobject_input_visitor_new_keyval(QOBJECT(dict));
if (visit_type_Audiodev(v, NULL, &dev, errp)) {
- audio_define(dev);
+ audio_add_audiodev(dev);
}
visit_free(v);
@@ -3087,11 +3087,11 @@ void qemu_init(int argc, char **argv)
visit_type_Audiodev(v, NULL, &dev, &error_fatal);
visit_free(v);
if (model) {
- audio_define(dev);
+ audio_add_audiodev(dev);
select_soundhw(model, dev->id);
g_free(model);
} else {
- audio_define_default(dev, &error_fatal);
+ audio_add_default_audiodev(dev, &error_fatal);
}
break;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 04/35] hw/audio: use better naming for -audio model handling code
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (2 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 03/35] audio: rename audio_define->audio_add_audiodev() marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 05/35] hw/audio/virtio-snd-pci: remove custom model callback marcandre.lureau
` (31 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
All the functions are about "-audio model=" handling, a simpler
way to setup audio. Rename functions/variables to reflect this better.
audio_register_model_with_cb() dropped "pci" from the name, since it
will be generalized next.
deprecated_register_soundhw() was actually not a function to be
removed since it's used for "-audio model=" aliasing.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/audio/model.h | 14 +++++
include/hw/audio/soundhw.h | 13 -----
hw/audio/ac97.c | 5 +-
hw/audio/adlib.c | 4 +-
hw/audio/cs4231a.c | 4 +-
hw/audio/es1370.c | 5 +-
hw/audio/gus.c | 4 +-
hw/audio/intel-hda.c | 4 +-
hw/audio/{soundhw.c => model.c} | 58 +++++++++----------
hw/audio/pcspk.c | 2 +-
hw/audio/sb16.c | 5 +-
hw/audio/virtio-snd-pci.c | 4 +-
system/vl.c | 6 +-
hw/audio/meson.build | 2 +-
.../codeconverter/test_regexps.py | 2 +-
15 files changed, 65 insertions(+), 67 deletions(-)
create mode 100644 include/hw/audio/model.h
delete mode 100644 include/hw/audio/soundhw.h
rename hw/audio/{soundhw.c => model.c} (68%)
diff --git a/include/hw/audio/model.h b/include/hw/audio/model.h
new file mode 100644
index 0000000000..aa237e9eb6
--- /dev/null
+++ b/include/hw/audio/model.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#ifndef HW_AUDIO_MODEL_H
+#define HW_AUDIO_MODEL_H
+
+void audio_register_model_with_cb(const char *name, const char *descr,
+ int (*init_pci)(PCIBus *bus, const char *audiodev));
+void audio_register_model(const char *name, const char *descr,
+ int isa, const char *typename);
+
+void audio_model_init(void);
+void audio_print_available_models(void);
+void audio_set_model(const char *name, const char *audiodev);
+
+#endif
diff --git a/include/hw/audio/soundhw.h b/include/hw/audio/soundhw.h
deleted file mode 100644
index 83b3011083..0000000000
--- a/include/hw/audio/soundhw.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef HW_SOUNDHW_H
-#define HW_SOUNDHW_H
-
-void pci_register_soundhw(const char *name, const char *descr,
- int (*init_pci)(PCIBus *bus, const char *audiodev));
-void deprecated_register_soundhw(const char *name, const char *descr,
- int isa, const char *typename);
-
-void soundhw_init(void);
-void audio_print_available_models(void);
-void select_soundhw(const char *name, const char *audiodev);
-
-#endif
diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
index 828333b66a..9dee5bb143 100644
--- a/hw/audio/ac97.c
+++ b/hw/audio/ac97.c
@@ -18,7 +18,7 @@
*/
#include "qemu/osdep.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "hw/pci/pci_device.h"
#include "hw/qdev-properties.h"
@@ -1362,8 +1362,7 @@ static const TypeInfo ac97_info = {
static void ac97_register_types(void)
{
type_register_static(&ac97_info);
- deprecated_register_soundhw("ac97", "Intel 82801AA AC97 Audio",
- 0, TYPE_AC97);
+ audio_register_model("ac97", "Intel 82801AA AC97 Audio", 0, TYPE_AC97);
}
type_init(ac97_register_types)
diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index 772435f04c..d0b2817843 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -25,7 +25,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "qemu/module.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
@@ -323,7 +323,7 @@ static const TypeInfo adlib_info = {
static void adlib_register_types (void)
{
type_register_static (&adlib_info);
- deprecated_register_soundhw("adlib", ADLIB_DESC, 1, TYPE_ADLIB);
+ audio_register_model("adlib", ADLIB_DESC, 1, TYPE_ADLIB);
}
type_init (adlib_register_types)
diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c
index 7931fcfec8..0979cf5f16 100644
--- a/hw/audio/cs4231a.c
+++ b/hw/audio/cs4231a.c
@@ -23,7 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "hw/irq.h"
#include "hw/isa/isa.h"
@@ -723,7 +723,7 @@ static const TypeInfo cs4231a_info = {
static void cs4231a_register_types (void)
{
type_register_static (&cs4231a_info);
- deprecated_register_soundhw("cs4231a", "CS4231A", 1, TYPE_CS4231A);
+ audio_register_model("cs4231a", "CS4231A", 1, TYPE_CS4231A);
}
type_init (cs4231a_register_types)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 6b0da0746e..066b9906fa 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -26,7 +26,7 @@
#define VERBOSE_ES1370 0
#include "qemu/osdep.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "hw/pci/pci_device.h"
#include "migration/vmstate.h"
@@ -905,8 +905,7 @@ static const TypeInfo es1370_info = {
static void es1370_register_types (void)
{
type_register_static (&es1370_info);
- deprecated_register_soundhw("es1370", "ENSONIQ AudioPCI ES1370",
- 0, TYPE_ES1370);
+ audio_register_model("es1370", "ENSONIQ AudioPCI ES1370", 0, TYPE_ES1370);
}
type_init (es1370_register_types)
diff --git a/hw/audio/gus.c b/hw/audio/gus.c
index 91d07e0f81..d5b1e62135 100644
--- a/hw/audio/gus.c
+++ b/hw/audio/gus.c
@@ -25,7 +25,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "qemu/module.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "hw/irq.h"
#include "hw/isa/isa.h"
@@ -320,7 +320,7 @@ static const TypeInfo gus_info = {
static void gus_register_types (void)
{
type_register_static (&gus_info);
- deprecated_register_soundhw("gus", "Gravis Ultrasound GF1", 1, TYPE_GUS);
+ audio_register_model("gus", "Gravis Ultrasound GF1", 1, TYPE_GUS);
}
type_init (gus_register_types)
diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index b256c8ccea..6a0db0dd9e 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -26,7 +26,7 @@
#include "qemu/log.h"
#include "qemu/module.h"
#include "qemu/error-report.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "intel-hda.h"
#include "migration/vmstate.h"
#include "intel-hda-defs.h"
@@ -1324,7 +1324,7 @@ static void intel_hda_register_types(void)
type_register_static(&intel_hda_info_ich6);
type_register_static(&intel_hda_info_ich9);
type_register_static(&hda_codec_device_type_info);
- pci_register_soundhw("hda", "Intel HD Audio", intel_hda_and_codec_init);
+ audio_register_model_with_cb("hda", "Intel HD Audio", intel_hda_and_codec_init);
}
type_init(intel_hda_register_types)
diff --git a/hw/audio/soundhw.c b/hw/audio/model.c
similarity index 68%
rename from hw/audio/soundhw.c
rename to hw/audio/model.c
index 29158c115c..ddfefea706 100644
--- a/hw/audio/soundhw.c
+++ b/hw/audio/model.c
@@ -32,9 +32,9 @@
#include "hw/qdev-properties.h"
#include "hw/isa/isa.h"
#include "hw/pci/pci.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
-struct soundhw {
+struct audio_model {
const char *name;
const char *descr;
const char *typename;
@@ -42,38 +42,38 @@ struct soundhw {
int (*init_pci) (PCIBus *bus, const char *audiodev);
};
-static struct soundhw soundhw[9];
-static int soundhw_count;
+static struct audio_model audio_models[9];
+static int audio_models_count;
-void pci_register_soundhw(const char *name, const char *descr,
- int (*init_pci)(PCIBus *bus, const char *audiodev))
+void audio_register_model_with_cb(const char *name, const char *descr,
+ int (*init_pci)(PCIBus *bus, const char *audiodev))
{
- assert(soundhw_count < ARRAY_SIZE(soundhw) - 1);
- soundhw[soundhw_count].name = name;
- soundhw[soundhw_count].descr = descr;
- soundhw[soundhw_count].isa = 0;
- soundhw[soundhw_count].init_pci = init_pci;
- soundhw_count++;
+ assert(audio_models_count < ARRAY_SIZE(audio_models) - 1);
+ audio_models[audio_models_count].name = name;
+ audio_models[audio_models_count].descr = descr;
+ audio_models[audio_models_count].isa = 0;
+ audio_models[audio_models_count].init_pci = init_pci;
+ audio_models_count++;
}
-void deprecated_register_soundhw(const char *name, const char *descr,
- int isa, const char *typename)
+void audio_register_model(const char *name, const char *descr,
+ int isa, const char *typename)
{
- assert(soundhw_count < ARRAY_SIZE(soundhw) - 1);
- soundhw[soundhw_count].name = name;
- soundhw[soundhw_count].descr = descr;
- soundhw[soundhw_count].isa = isa;
- soundhw[soundhw_count].typename = typename;
- soundhw_count++;
+ assert(audio_models_count < ARRAY_SIZE(audio_models) - 1);
+ audio_models[audio_models_count].name = name;
+ audio_models[audio_models_count].descr = descr;
+ audio_models[audio_models_count].isa = isa;
+ audio_models[audio_models_count].typename = typename;
+ audio_models_count++;
}
void audio_print_available_models(void)
{
- struct soundhw *c;
+ struct audio_model *c;
- if (soundhw_count) {
+ if (audio_models_count) {
printf("Valid audio device model names:\n");
- for (c = soundhw; c->name; ++c) {
+ for (c = audio_models; c->name; ++c) {
printf("%-11s %s\n", c->name, c->descr);
}
} else {
@@ -82,19 +82,19 @@ void audio_print_available_models(void)
}
}
-static struct soundhw *selected = NULL;
+static struct audio_model *selected;
static const char *audiodev_id;
-void select_soundhw(const char *name, const char *audiodev)
+void audio_set_model(const char *name, const char *audiodev)
{
- struct soundhw *c;
+ struct audio_model *c;
if (selected) {
error_report("only one -audio option is allowed");
exit(1);
}
- for (c = soundhw; c->name; ++c) {
+ for (c = audio_models; c->name; ++c) {
if (g_str_equal(c->name, name)) {
selected = c;
audiodev_id = audiodev;
@@ -109,9 +109,9 @@ void select_soundhw(const char *name, const char *audiodev)
}
}
-void soundhw_init(void)
+void audio_model_init(void)
{
- struct soundhw *c = selected;
+ struct audio_model *c = selected;
if (!c) {
return;
diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c
index a719912872..48ef830292 100644
--- a/hw/audio/pcspk.c
+++ b/hw/audio/pcspk.c
@@ -24,7 +24,7 @@
#include "qemu/osdep.h"
#include "hw/isa/isa.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "qemu/module.h"
#include "qemu/timer.h"
diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c
index 03c82f2777..5faa3f5fe3 100644
--- a/hw/audio/sb16.c
+++ b/hw/audio/sb16.c
@@ -23,7 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "hw/irq.h"
#include "hw/isa/isa.h"
@@ -1470,8 +1470,7 @@ static const TypeInfo sb16_info = {
static void sb16_register_types (void)
{
type_register_static (&sb16_info);
- deprecated_register_soundhw("sb16", "Creative Sound Blaster 16",
- 1, TYPE_SB16);
+ audio_register_model("sb16", "Creative Sound Blaster 16", 1, TYPE_SB16);
}
type_init (sb16_register_types)
diff --git a/hw/audio/virtio-snd-pci.c b/hw/audio/virtio-snd-pci.c
index 9eb0007392..613538e46f 100644
--- a/hw/audio/virtio-snd-pci.c
+++ b/hw/audio/virtio-snd-pci.c
@@ -11,7 +11,7 @@
#include "qemu/osdep.h"
#include "qom/object.h"
#include "qapi/error.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "hw/virtio/virtio-pci.h"
#include "hw/audio/virtio-snd.h"
@@ -88,7 +88,7 @@ static int virtio_snd_pci_init(PCIBus *bus, const char *audiodev)
static void virtio_snd_pci_register(void)
{
virtio_pci_types_register(&virtio_snd_pci_info);
- pci_register_soundhw("virtio", "Virtio Sound", virtio_snd_pci_init);
+ audio_register_model_with_cb("virtio", "Virtio Sound", virtio_snd_pci_init);
}
type_init(virtio_snd_pci_register);
diff --git a/system/vl.c b/system/vl.c
index 4814ef11da..dc2ea4c298 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -86,7 +86,7 @@
#include "migration/snapshot.h"
#include "system/tpm.h"
#include "system/dma.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "system/cpus.h"
#include "system/cpu-timers.h"
@@ -2732,7 +2732,7 @@ static void qemu_create_cli_devices(void)
{
DeviceOption *opt;
- soundhw_init();
+ audio_model_init();
qemu_opts_foreach(qemu_find_opts("fw_cfg"),
parse_fw_cfg, fw_cfg_find(), &error_fatal);
@@ -3088,7 +3088,7 @@ void qemu_init(int argc, char **argv)
visit_free(v);
if (model) {
audio_add_audiodev(dev);
- select_soundhw(model, dev->id);
+ audio_set_model(model, dev->id);
g_free(model);
} else {
audio_add_default_audiodev(dev, &error_fatal);
diff --git a/hw/audio/meson.build b/hw/audio/meson.build
index 2990974449..2154cbdb57 100644
--- a/hw/audio/meson.build
+++ b/hw/audio/meson.build
@@ -1,4 +1,4 @@
-system_ss.add(files('soundhw.c'))
+system_ss.add(files('model.c'))
system_ss.add(when: 'CONFIG_AC97', if_true: files('ac97.c'))
system_ss.add(when: 'CONFIG_ADLIB', if_true: files('fmopl.c', 'adlib.c'))
system_ss.add(when: 'CONFIG_ASC', if_true: files('asc.c'))
diff --git a/scripts/codeconverter/codeconverter/test_regexps.py b/scripts/codeconverter/codeconverter/test_regexps.py
index 4526268ae8..fe7354b473 100644
--- a/scripts/codeconverter/codeconverter/test_regexps.py
+++ b/scripts/codeconverter/codeconverter/test_regexps.py
@@ -264,7 +264,7 @@ def test_initial_includes():
#define SILENT_ES1370
#include "qemu/osdep.h"
-#include "hw/audio/soundhw.h"
+#include "hw/audio/model.h"
#include "audio/audio.h"
#include "hw/pci/pci.h"
#include "migration/vmstate.h"
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 05/35] hw/audio/virtio-snd-pci: remove custom model callback
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (3 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 04/35] hw/audio: use better naming for -audio model handling code marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 21:44 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 06/35] hw/audio: simplify 'hda' audio init code marcandre.lureau
` (30 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
virtio-snd can rely on the default code to instantiate the device and
set the audiodev.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/audio/virtio-snd-pci.c | 16 +---------------
1 file changed, 1 insertion(+), 15 deletions(-)
diff --git a/hw/audio/virtio-snd-pci.c b/hw/audio/virtio-snd-pci.c
index 613538e46f..b78eaff851 100644
--- a/hw/audio/virtio-snd-pci.c
+++ b/hw/audio/virtio-snd-pci.c
@@ -71,24 +71,10 @@ static const VirtioPCIDeviceTypeInfo virtio_snd_pci_info = {
.class_init = virtio_snd_pci_class_init,
};
-/* Create a Virtio Sound PCI device, so '-audio driver,model=virtio' works. */
-static int virtio_snd_pci_init(PCIBus *bus, const char *audiodev)
-{
- DeviceState *vdev = NULL;
- VirtIOSoundPCI *dev = NULL;
-
- vdev = qdev_new(TYPE_VIRTIO_SND_PCI);
- assert(vdev);
- dev = VIRTIO_SND_PCI(vdev);
- qdev_prop_set_string(DEVICE(&dev->vdev), "audiodev", audiodev);
- qdev_realize_and_unref(vdev, BUS(bus), &error_fatal);
- return 0;
-}
-
static void virtio_snd_pci_register(void)
{
virtio_pci_types_register(&virtio_snd_pci_info);
- audio_register_model_with_cb("virtio", "Virtio Sound", virtio_snd_pci_init);
+ audio_register_model("virtio", "Virtio Sound", 0, TYPE_VIRTIO_SND_PCI);
}
type_init(virtio_snd_pci_register);
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 06/35] hw/audio: simplify 'hda' audio init code
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (4 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 05/35] hw/audio/virtio-snd-pci: remove custom model callback marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 21:46 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 07/35] hw/audio: generalize audio_model.init() marcandre.lureau
` (29 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
For consistency, use only qdev_device_add() to instantiate the devices.
We can't rely on automatic bus lookup for the "hda-duplex" device though
as it may end up on a different "intel-hda" bus...
This allows to make init() callback bus-agnostic next.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/audio/intel-hda.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index 6a0db0dd9e..c46b195b62 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -21,16 +21,16 @@
#include "hw/pci/pci.h"
#include "hw/qdev-properties.h"
#include "hw/pci/msi.h"
+#include "monitor/qdev.h"
#include "qemu/timer.h"
#include "qemu/bitops.h"
#include "qemu/log.h"
#include "qemu/module.h"
-#include "qemu/error-report.h"
#include "hw/audio/model.h"
#include "intel-hda.h"
#include "migration/vmstate.h"
#include "intel-hda-defs.h"
-#include "system/dma.h"
+#include "qobject/qdict.h"
#include "qapi/error.h"
#include "qom/object.h"
@@ -1305,15 +1305,19 @@ static const TypeInfo hda_codec_device_type_info = {
*/
static int intel_hda_and_codec_init(PCIBus *bus, const char *audiodev)
{
- DeviceState *controller;
+ g_autoptr(QDict) props = qdict_new();
+ DeviceState *intel_hda, *codec;
BusState *hdabus;
- DeviceState *codec;
- controller = DEVICE(pci_create_simple(bus, -1, "intel-hda"));
- hdabus = QLIST_FIRST(&controller->child_bus);
+ qdict_put_str(props, "driver", "intel-hda");
+ intel_hda = qdev_device_add_from_qdict(props, false, &error_fatal);
+ hdabus = QLIST_FIRST(&intel_hda->child_bus);
+
codec = qdev_new("hda-duplex");
qdev_prop_set_string(codec, "audiodev", audiodev);
qdev_realize_and_unref(codec, hdabus, &error_fatal);
+ object_unref(intel_hda);
+
return 0;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 07/35] hw/audio: generalize audio_model.init()
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (5 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 06/35] hw/audio: simplify 'hda' audio init code marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 21:47 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 08/35] hw/audio: drop audio_model.isa marcandre.lureau
` (28 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
It is no longer PCI bus only.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/hw/audio/model.h | 2 +-
hw/audio/intel-hda.c | 4 +---
hw/audio/model.c | 12 ++++--------
3 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/include/hw/audio/model.h b/include/hw/audio/model.h
index aa237e9eb6..4d0be93042 100644
--- a/include/hw/audio/model.h
+++ b/include/hw/audio/model.h
@@ -3,7 +3,7 @@
#define HW_AUDIO_MODEL_H
void audio_register_model_with_cb(const char *name, const char *descr,
- int (*init_pci)(PCIBus *bus, const char *audiodev));
+ void (*init_audio_model)(const char *audiodev));
void audio_register_model(const char *name, const char *descr,
int isa, const char *typename);
diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index c46b195b62..758e130c93 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -1303,7 +1303,7 @@ static const TypeInfo hda_codec_device_type_info = {
* create intel hda controller with codec attached to it,
* so '-soundhw hda' works.
*/
-static int intel_hda_and_codec_init(PCIBus *bus, const char *audiodev)
+static void intel_hda_and_codec_init(const char *audiodev)
{
g_autoptr(QDict) props = qdict_new();
DeviceState *intel_hda, *codec;
@@ -1317,8 +1317,6 @@ static int intel_hda_and_codec_init(PCIBus *bus, const char *audiodev)
qdev_prop_set_string(codec, "audiodev", audiodev);
qdev_realize_and_unref(codec, hdabus, &error_fatal);
object_unref(intel_hda);
-
- return 0;
}
static void intel_hda_register_types(void)
diff --git a/hw/audio/model.c b/hw/audio/model.c
index ddfefea706..7af0d960f5 100644
--- a/hw/audio/model.c
+++ b/hw/audio/model.c
@@ -24,14 +24,11 @@
#include "qemu/osdep.h"
#include "hw/qdev-core.h"
#include "monitor/qdev.h"
-#include "qemu/option.h"
-#include "qemu/help_option.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
#include "qom/object.h"
#include "hw/qdev-properties.h"
#include "hw/isa/isa.h"
-#include "hw/pci/pci.h"
#include "hw/audio/model.h"
struct audio_model {
@@ -39,20 +36,20 @@ struct audio_model {
const char *descr;
const char *typename;
int isa;
- int (*init_pci) (PCIBus *bus, const char *audiodev);
+ void (*init)(const char *audiodev);
};
static struct audio_model audio_models[9];
static int audio_models_count;
void audio_register_model_with_cb(const char *name, const char *descr,
- int (*init_pci)(PCIBus *bus, const char *audiodev))
+ void (*init_audio_model)(const char *audiodev))
{
assert(audio_models_count < ARRAY_SIZE(audio_models) - 1);
audio_models[audio_models_count].name = name;
audio_models[audio_models_count].descr = descr;
audio_models[audio_models_count].isa = 0;
- audio_models[audio_models_count].init_pci = init_pci;
+ audio_models[audio_models_count].init = init_audio_model;
audio_models_count++;
}
@@ -124,7 +121,6 @@ void audio_model_init(void)
qdev_realize_and_unref(dev, bus, &error_fatal);
} else {
assert(!c->isa);
- PCIBus *pci_bus = (PCIBus *) object_resolve_path_type("", TYPE_PCI_BUS, NULL);
- c->init_pci(pci_bus, audiodev_id);
+ c->init(audiodev_id);
}
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 08/35] hw/audio: drop audio_model.isa
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (6 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 07/35] hw/audio: generalize audio_model.init() marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 09/35] audio: start making AudioState a QOM Object marcandre.lureau
` (27 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
That's no longer necessary, the code is bus-agnostic.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/audio/model.h | 2 +-
hw/audio/ac97.c | 2 +-
hw/audio/adlib.c | 2 +-
hw/audio/cs4231a.c | 2 +-
hw/audio/es1370.c | 2 +-
hw/audio/gus.c | 2 +-
hw/audio/model.c | 8 +-------
hw/audio/sb16.c | 2 +-
hw/audio/virtio-snd-pci.c | 2 +-
9 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/include/hw/audio/model.h b/include/hw/audio/model.h
index 4d0be93042..c38b359413 100644
--- a/include/hw/audio/model.h
+++ b/include/hw/audio/model.h
@@ -5,7 +5,7 @@
void audio_register_model_with_cb(const char *name, const char *descr,
void (*init_audio_model)(const char *audiodev));
void audio_register_model(const char *name, const char *descr,
- int isa, const char *typename);
+ const char *typename);
void audio_model_init(void);
void audio_print_available_models(void);
diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
index 9dee5bb143..6b9013ebb8 100644
--- a/hw/audio/ac97.c
+++ b/hw/audio/ac97.c
@@ -1362,7 +1362,7 @@ static const TypeInfo ac97_info = {
static void ac97_register_types(void)
{
type_register_static(&ac97_info);
- audio_register_model("ac97", "Intel 82801AA AC97 Audio", 0, TYPE_AC97);
+ audio_register_model("ac97", "Intel 82801AA AC97 Audio", TYPE_AC97);
}
type_init(ac97_register_types)
diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index d0b2817843..6aae365f47 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -323,7 +323,7 @@ static const TypeInfo adlib_info = {
static void adlib_register_types (void)
{
type_register_static (&adlib_info);
- audio_register_model("adlib", ADLIB_DESC, 1, TYPE_ADLIB);
+ audio_register_model("adlib", ADLIB_DESC, TYPE_ADLIB);
}
type_init (adlib_register_types)
diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c
index 0979cf5f16..3b80a61378 100644
--- a/hw/audio/cs4231a.c
+++ b/hw/audio/cs4231a.c
@@ -723,7 +723,7 @@ static const TypeInfo cs4231a_info = {
static void cs4231a_register_types (void)
{
type_register_static (&cs4231a_info);
- audio_register_model("cs4231a", "CS4231A", 1, TYPE_CS4231A);
+ audio_register_model("cs4231a", "CS4231A", TYPE_CS4231A);
}
type_init (cs4231a_register_types)
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 066b9906fa..721c02be0a 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -905,7 +905,7 @@ static const TypeInfo es1370_info = {
static void es1370_register_types (void)
{
type_register_static (&es1370_info);
- audio_register_model("es1370", "ENSONIQ AudioPCI ES1370", 0, TYPE_ES1370);
+ audio_register_model("es1370", "ENSONIQ AudioPCI ES1370", TYPE_ES1370);
}
type_init (es1370_register_types)
diff --git a/hw/audio/gus.c b/hw/audio/gus.c
index d5b1e62135..45ea04bf89 100644
--- a/hw/audio/gus.c
+++ b/hw/audio/gus.c
@@ -320,7 +320,7 @@ static const TypeInfo gus_info = {
static void gus_register_types (void)
{
type_register_static (&gus_info);
- audio_register_model("gus", "Gravis Ultrasound GF1", 1, TYPE_GUS);
+ audio_register_model("gus", "Gravis Ultrasound GF1", TYPE_GUS);
}
type_init (gus_register_types)
diff --git a/hw/audio/model.c b/hw/audio/model.c
index 7af0d960f5..40929c6e77 100644
--- a/hw/audio/model.c
+++ b/hw/audio/model.c
@@ -26,16 +26,13 @@
#include "monitor/qdev.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
-#include "qom/object.h"
#include "hw/qdev-properties.h"
-#include "hw/isa/isa.h"
#include "hw/audio/model.h"
struct audio_model {
const char *name;
const char *descr;
const char *typename;
- int isa;
void (*init)(const char *audiodev);
};
@@ -48,18 +45,16 @@ void audio_register_model_with_cb(const char *name, const char *descr,
assert(audio_models_count < ARRAY_SIZE(audio_models) - 1);
audio_models[audio_models_count].name = name;
audio_models[audio_models_count].descr = descr;
- audio_models[audio_models_count].isa = 0;
audio_models[audio_models_count].init = init_audio_model;
audio_models_count++;
}
void audio_register_model(const char *name, const char *descr,
- int isa, const char *typename)
+ const char *typename)
{
assert(audio_models_count < ARRAY_SIZE(audio_models) - 1);
audio_models[audio_models_count].name = name;
audio_models[audio_models_count].descr = descr;
- audio_models[audio_models_count].isa = isa;
audio_models[audio_models_count].typename = typename;
audio_models_count++;
}
@@ -120,7 +115,6 @@ void audio_model_init(void)
qdev_prop_set_string(dev, "audiodev", audiodev_id);
qdev_realize_and_unref(dev, bus, &error_fatal);
} else {
- assert(!c->isa);
c->init(audiodev_id);
}
}
diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c
index 5faa3f5fe3..e86aafd488 100644
--- a/hw/audio/sb16.c
+++ b/hw/audio/sb16.c
@@ -1470,7 +1470,7 @@ static const TypeInfo sb16_info = {
static void sb16_register_types (void)
{
type_register_static (&sb16_info);
- audio_register_model("sb16", "Creative Sound Blaster 16", 1, TYPE_SB16);
+ audio_register_model("sb16", "Creative Sound Blaster 16", TYPE_SB16);
}
type_init (sb16_register_types)
diff --git a/hw/audio/virtio-snd-pci.c b/hw/audio/virtio-snd-pci.c
index b78eaff851..230581ed63 100644
--- a/hw/audio/virtio-snd-pci.c
+++ b/hw/audio/virtio-snd-pci.c
@@ -74,7 +74,7 @@ static const VirtioPCIDeviceTypeInfo virtio_snd_pci_info = {
static void virtio_snd_pci_register(void)
{
virtio_pci_types_register(&virtio_snd_pci_info);
- audio_register_model("virtio", "Virtio Sound", 0, TYPE_VIRTIO_SND_PCI);
+ audio_register_model("virtio", "Virtio Sound", TYPE_VIRTIO_SND_PCI);
}
type_init(virtio_snd_pci_register);
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 09/35] audio: start making AudioState a QOM Object
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (7 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 08/35] hw/audio: drop audio_model.isa marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 16:26 ` BALATON Zoltan
2025-10-27 15:10 ` [PATCH v3 10/35] audio: register backends in /audiodevs container marcandre.lureau
` (26 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
QOM brings some conveniences for introspection, type checking, reference
counting, interfaces etc. This is only the first step to introduce QOM
in audio/ (I have more in the pipeline)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
audio/audio.h | 7 +++++++
audio/audio_int.h | 2 ++
audio/audio.c | 43 ++++++++++++++++++++++++++++++++-----------
3 files changed, 41 insertions(+), 11 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index eb5b5d662d..e41c5bc55a 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -80,6 +80,10 @@ typedef struct SWVoiceOut SWVoiceOut;
typedef struct CaptureVoiceOut CaptureVoiceOut;
typedef struct SWVoiceIn SWVoiceIn;
+struct AudioStateClass {
+ ObjectClass parent_class;
+};
+
typedef struct AudioState AudioState;
typedef struct QEMUSoundCard {
char *name;
@@ -182,4 +186,7 @@ const char *audio_get_id(QEMUSoundCard *card);
#define DEFINE_AUDIO_PROPERTIES(_s, _f) \
DEFINE_PROP_AUDIODEV("audiodev", _s, _f)
+#define TYPE_AUDIO_STATE "audio-state"
+OBJECT_DECLARE_TYPE(AudioState, AudioStateClass, AUDIO_STATE)
+
#endif /* QEMU_AUDIO_H */
diff --git a/audio/audio_int.h b/audio/audio_int.h
index f78ca05f92..b2b4d2d10e 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -217,6 +217,8 @@ struct SWVoiceCap {
};
typedef struct AudioState {
+ Object parent;
+
struct audio_driver *drv;
Audiodev *dev;
void *drv_opaque;
diff --git a/audio/audio.c b/audio/audio.c
index 6197fa1788..e1696403ae 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1617,8 +1617,19 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
audio_reset_timer (s);
}
-static void free_audio_state(AudioState *s)
+static void audio_state_init(Object *obj)
{
+ AudioState *s = AUDIO_STATE(obj);
+
+ QLIST_INIT(&s->hw_head_out);
+ QLIST_INIT(&s->hw_head_in);
+ QLIST_INIT(&s->cap_head);
+ s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
+}
+
+static void audio_state_finalize(Object *obj)
+{
+ AudioState *s = AUDIO_STATE(obj);
HWVoiceOut *hwo, *hwon;
HWVoiceIn *hwi, *hwin;
@@ -1663,8 +1674,6 @@ static void free_audio_state(AudioState *s)
timer_free(s->ts);
s->ts = NULL;
}
-
- g_free(s);
}
void audio_cleanup(void)
@@ -1673,7 +1682,7 @@ void audio_cleanup(void)
while (!QTAILQ_EMPTY(&audio_states)) {
AudioState *s = QTAILQ_FIRST(&audio_states);
QTAILQ_REMOVE(&audio_states, s, list);
- free_audio_state(s);
+ object_unref(s);
}
}
@@ -1732,18 +1741,13 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
AudioState *s;
struct audio_driver *driver;
- s = g_new0(AudioState, 1);
+ s = AUDIO_STATE(object_new(TYPE_AUDIO_STATE));
- QLIST_INIT (&s->hw_head_out);
- QLIST_INIT (&s->hw_head_in);
- QLIST_INIT (&s->cap_head);
if (!atexit_registered) {
atexit(audio_cleanup);
atexit_registered = true;
}
- s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
-
if (dev) {
/* -audiodev option */
s->dev = dev;
@@ -1796,7 +1800,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
return s;
out:
- free_audio_state(s);
+ object_unref(s);
return NULL;
}
@@ -2320,3 +2324,20 @@ AudiodevList *qmp_query_audiodevs(Error **errp)
}
return ret;
}
+
+static const TypeInfo audio_state_info = {
+ .name = TYPE_AUDIO_STATE,
+ .parent = TYPE_OBJECT,
+ .instance_size = sizeof(AudioState),
+ .instance_init = audio_state_init,
+ .instance_finalize = audio_state_finalize,
+ .abstract = false, /* TODO: subclass drivers and make it abstract */
+ .class_size = sizeof(AudioStateClass),
+};
+
+static void register_types(void)
+{
+ type_register_static(&audio_state_info);
+}
+
+type_init(register_types);
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 10/35] audio: register backends in /audiodevs container
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (8 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 09/35] audio: start making AudioState a QOM Object marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 11/35] audio: use /audiodevs QOM container marcandre.lureau
` (25 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
QOM tree now has /audiodevs objects.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
audio/audio.c | 8 ++++++++
qom/object.c | 1 +
2 files changed, 9 insertions(+)
diff --git a/audio/audio.c b/audio/audio.c
index e1696403ae..c291fd3e65 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1676,6 +1676,11 @@ static void audio_state_finalize(Object *obj)
}
}
+static Object *get_audiodevs_root(void)
+{
+ return object_get_container("audiodevs");
+}
+
void audio_cleanup(void)
{
default_audio_state = NULL;
@@ -1742,6 +1747,9 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
struct audio_driver *driver;
s = AUDIO_STATE(object_new(TYPE_AUDIO_STATE));
+ if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
+ goto out;
+ }
if (!atexit_registered) {
atexit(audio_cleanup);
diff --git a/qom/object.c b/qom/object.c
index 1856bb36c7..4f32c1aba7 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1730,6 +1730,7 @@ const char *object_property_get_type(Object *obj, const char *name, Error **errp
}
static const char *const root_containers[] = {
+ "audiodevs",
"chardevs",
"objects",
"backend"
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 11/35] audio: use /audiodevs QOM container
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (9 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 10/35] audio: register backends in /audiodevs container marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 21:47 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 12/35] audio/paaudio: remove needless return value marcandre.lureau
` (24 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
audio_cleanup() is already called at exit (similar to chardev)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio_int.h | 2 --
audio/audio.c | 38 +++++++++++++-------------------------
2 files changed, 13 insertions(+), 27 deletions(-)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index b2b4d2d10e..4187a2dbfc 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -235,8 +235,6 @@ typedef struct AudioState {
bool timer_running;
uint64_t timer_last;
-
- QTAILQ_ENTRY(AudioState) list;
} AudioState;
extern const struct mixeng_volume nominal_volume;
diff --git a/audio/audio.c b/audio/audio.c
index c291fd3e65..5bf4307fbd 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -102,8 +102,6 @@ static audio_driver *audio_driver_lookup(const char *name)
return NULL;
}
-static QTAILQ_HEAD(AudioStateHead, AudioState) audio_states =
- QTAILQ_HEAD_INITIALIZER(audio_states);
static AudioState *default_audio_state;
const struct mixeng_volume nominal_volume = {
@@ -1684,11 +1682,8 @@ static Object *get_audiodevs_root(void)
void audio_cleanup(void)
{
default_audio_state = NULL;
- while (!QTAILQ_EMPTY(&audio_states)) {
- AudioState *s = QTAILQ_FIRST(&audio_states);
- QTAILQ_REMOVE(&audio_states, s, list);
- object_unref(s);
- }
+
+ object_unparent(get_audiodevs_root());
}
static bool vmstate_audio_needed(void *opaque)
@@ -1739,7 +1734,6 @@ void audio_create_default_audiodevs(void)
*/
static AudioState *audio_init(Audiodev *dev, Error **errp)
{
- static bool atexit_registered;
int done = 0;
const char *drvname;
VMChangeStateEntry *vmse;
@@ -1747,14 +1741,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
struct audio_driver *driver;
s = AUDIO_STATE(object_new(TYPE_AUDIO_STATE));
- if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
- goto out;
- }
-
- if (!atexit_registered) {
- atexit(audio_cleanup);
- atexit_registered = true;
- }
if (dev) {
/* -audiodev option */
@@ -1802,7 +1788,10 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
"(Audio can continue looping even after stopping the VM)\n");
}
- QTAILQ_INSERT_TAIL(&audio_states, s, list);
+ if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
+ goto out;
+ }
+ object_unref(s);
QLIST_INIT (&s->card_head);
vmstate_register_any(NULL, &vmstate_audio, s);
return s;
@@ -2249,15 +2238,14 @@ int audio_buffer_bytes(AudiodevPerDirectionOptions *pdo,
AudioState *audio_state_by_name(const char *name, Error **errp)
{
- AudioState *s;
- QTAILQ_FOREACH(s, &audio_states, list) {
- assert(s->dev);
- if (strcmp(name, s->dev->id) == 0) {
- return s;
- }
+ Object *obj = object_resolve_path_component(get_audiodevs_root(), name);
+
+ if (!obj) {
+ error_setg(errp, "audiodev '%s' not found", name);
+ return NULL;
+ } else {
+ return AUDIO_STATE(obj);
}
- error_setg(errp, "audiodev '%s' not found", name);
- return NULL;
}
const char *audio_get_id(QEMUSoundCard *card)
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 12/35] audio/paaudio: remove needless return value
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (10 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 11/35] audio: use /audiodevs QOM container marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 13/35] audio/dsound: simplify init() marcandre.lureau
` (23 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
audio/paaudio.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/audio/paaudio.c b/audio/paaudio.c
index f3193b08c3..93030f3fc8 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -747,14 +747,13 @@ static void qpa_volume_in(HWVoiceIn *hw, Volume *vol)
pa_threaded_mainloop_unlock(c->mainloop);
}
-static int qpa_validate_per_direction_opts(Audiodev *dev,
- AudiodevPaPerDirectionOptions *pdo)
+static void qpa_validate_per_direction_opts(Audiodev *dev,
+ AudiodevPaPerDirectionOptions *pdo)
{
if (!pdo->has_latency) {
pdo->has_latency = true;
pdo->latency = 46440;
}
- return 1;
}
/* common */
@@ -844,12 +843,8 @@ static void *qpa_audio_init(Audiodev *dev, Error **errp)
}
}
- if (!qpa_validate_per_direction_opts(dev, popts->in)) {
- return NULL;
- }
- if (!qpa_validate_per_direction_opts(dev, popts->out)) {
- return NULL;
- }
+ qpa_validate_per_direction_opts(dev, popts->in);
+ qpa_validate_per_direction_opts(dev, popts->out);
g = g_new0(paaudio, 1);
server = popts->server;
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 13/35] audio/dsound: simplify init()
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (11 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 12/35] audio/paaudio: remove needless return value marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:42 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 14/35] audio/dsound: report init error via **errp marcandre.lureau
` (22 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Use dsound_audio_fini() on error & fail if the capture failed to
initialize too.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/dsoundaudio.c | 29 +++++++++++------------------
1 file changed, 11 insertions(+), 18 deletions(-)
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c
index f3bb48d007..c8745a3df0 100644
--- a/audio/dsoundaudio.c
+++ b/audio/dsoundaudio.c
@@ -638,7 +638,7 @@ static void *dsound_audio_init(Audiodev *dev, Error **errp)
hr = CoInitialize (NULL);
if (FAILED (hr)) {
dsound_logerr (hr, "Could not initialize COM\n");
- g_free(s);
+ dsound_audio_fini(s);
return NULL;
}
@@ -651,19 +651,14 @@ static void *dsound_audio_init(Audiodev *dev, Error **errp)
);
if (FAILED (hr)) {
dsound_logerr (hr, "Could not create DirectSound instance\n");
- g_free(s);
+ dsound_audio_fini(s);
return NULL;
}
hr = IDirectSound_Initialize (s->dsound, NULL);
if (FAILED (hr)) {
dsound_logerr (hr, "Could not initialize DirectSound\n");
-
- hr = IDirectSound_Release (s->dsound);
- if (FAILED (hr)) {
- dsound_logerr (hr, "Could not release DirectSound\n");
- }
- g_free(s);
+ dsound_audio_fini(s);
return NULL;
}
@@ -676,17 +671,15 @@ static void *dsound_audio_init(Audiodev *dev, Error **errp)
);
if (FAILED (hr)) {
dsound_logerr (hr, "Could not create DirectSoundCapture instance\n");
- } else {
- hr = IDirectSoundCapture_Initialize (s->dsound_capture, NULL);
- if (FAILED (hr)) {
- dsound_logerr (hr, "Could not initialize DirectSoundCapture\n");
+ dsound_audio_fini(s);
+ return NULL;
+ }
- hr = IDirectSoundCapture_Release (s->dsound_capture);
- if (FAILED (hr)) {
- dsound_logerr (hr, "Could not release DirectSoundCapture\n");
- }
- s->dsound_capture = NULL;
- }
+ hr = IDirectSoundCapture_Initialize (s->dsound_capture, NULL);
+ if (FAILED(hr)) {
+ dsound_logerr(hr, "Could not initialize DirectSoundCapture\n");
+ dsound_audio_fini(s);
+ return NULL;
}
err = dsound_set_cooperative_level(s);
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 14/35] audio/dsound: report init error via **errp
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (12 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 13/35] audio/dsound: simplify init() marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:43 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 15/35] audio: simplify audio_driver_init() marcandre.lureau
` (21 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Whenever NULL is returned, errp should be set.
Inline SetCooperativeLevel call to simplify code.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/dsoundaudio.c | 182 +++++++++++++++++++-------------------------
1 file changed, 79 insertions(+), 103 deletions(-)
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c
index c8745a3df0..d476e9b441 100644
--- a/audio/dsoundaudio.c
+++ b/audio/dsoundaudio.c
@@ -33,6 +33,7 @@
#include "audio_int.h"
#include "qemu/host-utils.h"
#include "qemu/module.h"
+#include "qapi/error.h"
#include <windows.h>
#include <mmsystem.h>
@@ -64,162 +65,154 @@ typedef struct {
dsound *s;
} DSoundVoiceIn;
-static void dsound_log_hresult (HRESULT hr)
+static const char *dserror(HRESULT hr)
{
- const char *str = "BUG";
-
switch (hr) {
case DS_OK:
- str = "The method succeeded";
- break;
+ return "The method succeeded";
#ifdef DS_NO_VIRTUALIZATION
case DS_NO_VIRTUALIZATION:
- str = "The buffer was created, but another 3D algorithm was substituted";
- break;
+ return "The buffer was created, but another 3D algorithm was substituted";
#endif
#ifdef DS_INCOMPLETE
case DS_INCOMPLETE:
- str = "The method succeeded, but not all the optional effects were obtained";
- break;
+ return "The method succeeded, but not all the optional effects were obtained";
#endif
#ifdef DSERR_ACCESSDENIED
case DSERR_ACCESSDENIED:
- str = "The request failed because access was denied";
- break;
+ return "The request failed because access was denied";
#endif
#ifdef DSERR_ALLOCATED
case DSERR_ALLOCATED:
- str = "The request failed because resources, "
- "such as a priority level, were already in use "
- "by another caller";
- break;
+ return "The request failed because resources, "
+ "such as a priority level, were already in use "
+ "by another caller";
#endif
#ifdef DSERR_ALREADYINITIALIZED
case DSERR_ALREADYINITIALIZED:
- str = "The object is already initialized";
- break;
+ return "The object is already initialized";
#endif
#ifdef DSERR_BADFORMAT
case DSERR_BADFORMAT:
- str = "The specified wave format is not supported";
- break;
+ return "The specified wave format is not supported";
#endif
#ifdef DSERR_BADSENDBUFFERGUID
case DSERR_BADSENDBUFFERGUID:
- str = "The GUID specified in an audiopath file "
- "does not match a valid mix-in buffer";
- break;
+ return "The GUID specified in an audiopath file "
+ "does not match a valid mix-in buffer";
#endif
#ifdef DSERR_BUFFERLOST
case DSERR_BUFFERLOST:
- str = "The buffer memory has been lost and must be restored";
- break;
+ return "The buffer memory has been lost and must be restored";
#endif
#ifdef DSERR_BUFFERTOOSMALL
case DSERR_BUFFERTOOSMALL:
- str = "The buffer size is not great enough to "
- "enable effects processing";
- break;
+ return "The buffer size is not great enough to "
+ "enable effects processing";
#endif
#ifdef DSERR_CONTROLUNAVAIL
case DSERR_CONTROLUNAVAIL:
- str = "The buffer control (volume, pan, and so on) "
- "requested by the caller is not available. "
- "Controls must be specified when the buffer is created, "
- "using the dwFlags member of DSBUFFERDESC";
- break;
+ return "The buffer control (volume, pan, and so on) "
+ "requested by the caller is not available. "
+ "Controls must be specified when the buffer is created, "
+ "using the dwFlags member of DSBUFFERDESC";
#endif
#ifdef DSERR_DS8_REQUIRED
case DSERR_DS8_REQUIRED:
- str = "A DirectSound object of class CLSID_DirectSound8 or later "
- "is required for the requested functionality. "
- "For more information, see IDirectSound8 Interface";
- break;
+ return "A DirectSound object of class CLSID_DirectSound8 or later "
+ "is required for the requested functionality. "
+ "For more information, see IDirectSound8 Interface";
#endif
#ifdef DSERR_FXUNAVAILABLE
case DSERR_FXUNAVAILABLE:
- str = "The effects requested could not be found on the system, "
- "or they are in the wrong order or in the wrong location; "
- "for example, an effect expected in hardware "
- "was found in software";
- break;
+ return "The effects requested could not be found on the system, "
+ "or they are in the wrong order or in the wrong location; "
+ "for example, an effect expected in hardware "
+ "was found in software";
#endif
#ifdef DSERR_GENERIC
case DSERR_GENERIC:
- str = "An undetermined error occurred inside the DirectSound subsystem";
- break;
+ return "An undetermined error occurred inside the DirectSound subsystem";
#endif
#ifdef DSERR_INVALIDCALL
case DSERR_INVALIDCALL:
- str = "This function is not valid for the current state of this object";
- break;
+ return "This function is not valid for the current state of this object";
#endif
#ifdef DSERR_INVALIDPARAM
case DSERR_INVALIDPARAM:
- str = "An invalid parameter was passed to the returning function";
- break;
+ return "An invalid parameter was passed to the returning function";
#endif
#ifdef DSERR_NOAGGREGATION
case DSERR_NOAGGREGATION:
- str = "The object does not support aggregation";
- break;
+ return "The object does not support aggregation";
#endif
#ifdef DSERR_NODRIVER
case DSERR_NODRIVER:
- str = "No sound driver is available for use, "
- "or the given GUID is not a valid DirectSound device ID";
- break;
+ return "No sound driver is available for use, "
+ "or the given GUID is not a valid DirectSound device ID";
#endif
#ifdef DSERR_NOINTERFACE
case DSERR_NOINTERFACE:
- str = "The requested COM interface is not available";
- break;
+ return "The requested COM interface is not available";
#endif
#ifdef DSERR_OBJECTNOTFOUND
case DSERR_OBJECTNOTFOUND:
- str = "The requested object was not found";
- break;
+ return "The requested object was not found";
#endif
#ifdef DSERR_OTHERAPPHASPRIO
case DSERR_OTHERAPPHASPRIO:
- str = "Another application has a higher priority level, "
+ return "Another application has a higher priority level, "
"preventing this call from succeeding";
- break;
#endif
#ifdef DSERR_OUTOFMEMORY
case DSERR_OUTOFMEMORY:
- str = "The DirectSound subsystem could not allocate "
+ return "The DirectSound subsystem could not allocate "
"sufficient memory to complete the caller's request";
- break;
#endif
#ifdef DSERR_PRIOLEVELNEEDED
case DSERR_PRIOLEVELNEEDED:
- str = "A cooperative level of DSSCL_PRIORITY or higher is required";
- break;
+ return "A cooperative level of DSSCL_PRIORITY or higher is required";
#endif
#ifdef DSERR_SENDLOOP
case DSERR_SENDLOOP:
- str = "A circular loop of send effects was detected";
- break;
+ return "A circular loop of send effects was detected";
#endif
#ifdef DSERR_UNINITIALIZED
case DSERR_UNINITIALIZED:
- str = "The Initialize method has not been called "
- "or has not been called successfully "
- "before other methods were called";
- break;
+ return "The Initialize method has not been called "
+ "or has not been called successfully "
+ "before other methods were called";
#endif
#ifdef DSERR_UNSUPPORTED
case DSERR_UNSUPPORTED:
- str = "The function called is not supported at this time";
- break;
+ return "The function called is not supported at this time";
#endif
default:
- AUD_log (AUDIO_CAP, "Reason: Unknown (HRESULT 0x%lx)\n", hr);
- return;
+ return NULL;
}
- AUD_log (AUDIO_CAP, "Reason: %s\n", str);
+}
+
+static void dserror_set(Error **errp, HRESULT hr, const char *msg)
+{
+ const char *str = dserror(hr);
+
+ if (str) {
+ error_setg(errp, "%s: %s", msg, str);
+ } else {
+ error_setg(errp, "%s: Unknown (HRESULT: 0x%lx)", msg, hr);
+ }
+}
+
+static void dsound_log_hresult(HRESULT hr)
+{
+ const char *str = dserror(hr);
+
+ if (str) {
+ AUD_log (AUDIO_CAP, "Reason: %s\n", str);
+ } else {
+ AUD_log (AUDIO_CAP, "Reason: Unknown (HRESULT: 0x%lx)\n", hr);
+ }
}
static void G_GNUC_PRINTF (2, 3) dsound_logerr (
@@ -359,27 +352,6 @@ static void dsound_clear_sample (HWVoiceOut *hw, LPDIRECTSOUNDBUFFER dsb,
dsound_unlock_out (dsb, p1, p2, blen1, blen2);
}
-static int dsound_set_cooperative_level(dsound *s)
-{
- HRESULT hr;
- HWND hwnd;
-
- hwnd = GetDesktopWindow();
- hr = IDirectSound_SetCooperativeLevel (
- s->dsound,
- hwnd,
- DSSCL_PRIORITY
- );
-
- if (FAILED (hr)) {
- dsound_logerr (hr, "Could not set cooperative level for window %p\n",
- hwnd);
- return -1;
- }
-
- return 0;
-}
-
static void dsound_enable_out(HWVoiceOut *hw, bool enable)
{
HRESULT hr;
@@ -621,7 +593,6 @@ static void dsound_audio_fini (void *opaque)
static void *dsound_audio_init(Audiodev *dev, Error **errp)
{
- int err;
HRESULT hr;
dsound *s = g_new0(dsound, 1);
AudiodevDsoundOptions *dso;
@@ -637,7 +608,7 @@ static void *dsound_audio_init(Audiodev *dev, Error **errp)
hr = CoInitialize (NULL);
if (FAILED (hr)) {
- dsound_logerr (hr, "Could not initialize COM\n");
+ dserror_set(errp, hr, "Could not initialize COM");
dsound_audio_fini(s);
return NULL;
}
@@ -650,14 +621,14 @@ static void *dsound_audio_init(Audiodev *dev, Error **errp)
(void **) &s->dsound
);
if (FAILED (hr)) {
- dsound_logerr (hr, "Could not create DirectSound instance\n");
+ dserror_set(errp, hr, "Could not create DirectSound instance");
dsound_audio_fini(s);
return NULL;
}
hr = IDirectSound_Initialize (s->dsound, NULL);
if (FAILED (hr)) {
- dsound_logerr (hr, "Could not initialize DirectSound\n");
+ dserror_set(errp, hr, "Could not initialize DirectSound");
dsound_audio_fini(s);
return NULL;
}
@@ -670,21 +641,26 @@ static void *dsound_audio_init(Audiodev *dev, Error **errp)
(void **) &s->dsound_capture
);
if (FAILED (hr)) {
- dsound_logerr (hr, "Could not create DirectSoundCapture instance\n");
+ dserror_set(errp, hr, "Could not create DirectSoundCapture instance");
dsound_audio_fini(s);
return NULL;
}
hr = IDirectSoundCapture_Initialize (s->dsound_capture, NULL);
if (FAILED(hr)) {
- dsound_logerr(hr, "Could not initialize DirectSoundCapture\n");
+ dserror_set(errp, hr, "Could not initialize DirectSoundCapture");
dsound_audio_fini(s);
return NULL;
}
- err = dsound_set_cooperative_level(s);
- if (err) {
- dsound_audio_fini (s);
+ hr = IDirectSound_SetCooperativeLevel (
+ s->dsound,
+ GetDesktopWindow(),
+ DSSCL_PRIORITY
+ );
+ if (FAILED(hr)) {
+ dserror_set(errp, hr, "Could not set cooperative level");
+ dsound_audio_fini(s);
return NULL;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 15/35] audio: simplify audio_driver_init()
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (13 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 14/35] audio/dsound: report init error via **errp marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 21:50 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 16/35] audio: move period tick initialization marcandre.lureau
` (20 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Catch and return from error early to avoid indentations and ease the
flow & return a bool for success value. All driver init() calls have
been checked to set errp on error.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.c | 48 ++++++++++++++++++++----------------------------
1 file changed, 20 insertions(+), 28 deletions(-)
diff --git a/audio/audio.c b/audio/audio.c
index 5bf4307fbd..087e1946e7 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1562,35 +1562,27 @@ size_t audio_generic_read(HWVoiceIn *hw, void *buf, size_t size)
return total;
}
-static int audio_driver_init(AudioState *s, struct audio_driver *drv,
- Audiodev *dev, Error **errp)
+static bool audio_driver_init(AudioState *s, struct audio_driver *drv,
+ Audiodev *dev, Error **errp)
{
- Error *local_err = NULL;
-
- s->drv_opaque = drv->init(dev, &local_err);
-
- if (s->drv_opaque) {
- if (!drv->pcm_ops->get_buffer_in) {
- drv->pcm_ops->get_buffer_in = audio_generic_get_buffer_in;
- drv->pcm_ops->put_buffer_in = audio_generic_put_buffer_in;
- }
- if (!drv->pcm_ops->get_buffer_out) {
- drv->pcm_ops->get_buffer_out = audio_generic_get_buffer_out;
- drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
- }
+ s->drv_opaque = drv->init(dev, errp);
+ if (!s->drv_opaque) {
+ return false;
+ }
- audio_init_nb_voices_out(s, drv, 1);
- audio_init_nb_voices_in(s, drv, 0);
- s->drv = drv;
- return 0;
- } else {
- if (local_err) {
- error_propagate(errp, local_err);
- } else {
- error_setg(errp, "Could not init `%s' audio driver", drv->name);
- }
- return -1;
+ if (!drv->pcm_ops->get_buffer_in) {
+ drv->pcm_ops->get_buffer_in = audio_generic_get_buffer_in;
+ drv->pcm_ops->put_buffer_in = audio_generic_put_buffer_in;
}
+ if (!drv->pcm_ops->get_buffer_out) {
+ drv->pcm_ops->get_buffer_out = audio_generic_get_buffer_out;
+ drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
+ }
+
+ audio_init_nb_voices_out(s, drv, 1);
+ audio_init_nb_voices_in(s, drv, 0);
+ s->drv = drv;
+ return true;
}
static void audio_vm_change_state_handler (void *opaque, bool running,
@@ -1748,7 +1740,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
drvname = AudiodevDriver_str(dev->driver);
driver = audio_driver_lookup(drvname);
if (driver) {
- done = !audio_driver_init(s, driver, dev, errp);
+ done = audio_driver_init(s, driver, dev, errp);
} else {
error_setg(errp, "Unknown audio driver `%s'", drvname);
}
@@ -1768,7 +1760,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
g_free(e);
drvname = AudiodevDriver_str(dev->driver);
driver = audio_driver_lookup(drvname);
- if (!audio_driver_init(s, driver, dev, NULL)) {
+ if (audio_driver_init(s, driver, dev, NULL)) {
break;
}
qapi_free_Audiodev(dev);
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 16/35] audio: move period tick initialization
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (14 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 15/35] audio: simplify audio_driver_init() marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:44 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 17/35] audio: drop needless error message marcandre.lureau
` (19 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Part of QOM-ification.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/audio/audio.c b/audio/audio.c
index 087e1946e7..43db7380f0 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1582,6 +1582,13 @@ static bool audio_driver_init(AudioState *s, struct audio_driver *drv,
audio_init_nb_voices_out(s, drv, 1);
audio_init_nb_voices_in(s, drv, 0);
s->drv = drv;
+
+ if (dev->timer_period <= 0) {
+ s->period_ticks = 1;
+ } else {
+ s->period_ticks = dev->timer_period * (int64_t)SCALE_US;
+ }
+
return true;
}
@@ -1768,12 +1775,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
}
}
- if (dev->timer_period <= 0) {
- s->period_ticks = 1;
- } else {
- s->period_ticks = dev->timer_period * (int64_t)SCALE_US;
- }
-
vmse = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s);
if (!vmse) {
dolog ("warning: Could not register change state handler\n"
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 17/35] audio: drop needless error message
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (15 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 16/35] audio: move period tick initialization marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:40 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 18/35] audio: keep vmstate handle with AudioState marcandre.lureau
` (18 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The only reason it would fail to add the handler is if it's calling a
stub. But this cannot happen as audio is only supported with system qemu.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/audio/audio.c b/audio/audio.c
index 43db7380f0..155809dee7 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1776,10 +1776,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
}
vmse = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s);
- if (!vmse) {
- dolog ("warning: Could not register change state handler\n"
- "(Audio can continue looping even after stopping the VM)\n");
- }
+ assert(vmse != NULL);
if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
goto out;
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 18/35] audio: keep vmstate handle with AudioState
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (16 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 17/35] audio: drop needless error message marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:46 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 19/35] audio: register and unregister vmstate " marcandre.lureau
` (17 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
QOM-ification continues.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio_int.h | 1 +
audio/audio.c | 12 ++++++++----
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index 4187a2dbfc..4a4d69f2bf 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -235,6 +235,7 @@ typedef struct AudioState {
bool timer_running;
uint64_t timer_last;
+ VMChangeStateEntry *vmse;
} AudioState;
extern const struct mixeng_volume nominal_volume;
diff --git a/audio/audio.c b/audio/audio.c
index 155809dee7..4c3c3fd52f 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1622,6 +1622,9 @@ static void audio_state_init(Object *obj)
QLIST_INIT(&s->hw_head_in);
QLIST_INIT(&s->cap_head);
s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
+
+ s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
+ assert(s->vmse != NULL);
}
static void audio_state_finalize(Object *obj)
@@ -1671,6 +1674,11 @@ static void audio_state_finalize(Object *obj)
timer_free(s->ts);
s->ts = NULL;
}
+
+ if (s->vmse) {
+ qemu_del_vm_change_state_handler(s->vmse);
+ s->vmse = NULL;
+ }
}
static Object *get_audiodevs_root(void)
@@ -1735,7 +1743,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
{
int done = 0;
const char *drvname;
- VMChangeStateEntry *vmse;
AudioState *s;
struct audio_driver *driver;
@@ -1775,9 +1782,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
}
}
- vmse = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s);
- assert(vmse != NULL);
-
if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
goto out;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 19/35] audio: register and unregister vmstate with AudioState
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (17 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 18/35] audio: keep vmstate handle with AudioState marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:48 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 20/35] audio: initialize card_head during object init marcandre.lureau
` (16 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Proper lifecycle management with QOM state.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/audio/audio.c b/audio/audio.c
index 4c3c3fd52f..853930bb48 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1614,6 +1614,8 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
audio_reset_timer (s);
}
+static const VMStateDescription vmstate_audio;
+
static void audio_state_init(Object *obj)
{
AudioState *s = AUDIO_STATE(obj);
@@ -1625,6 +1627,8 @@ static void audio_state_init(Object *obj)
s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
assert(s->vmse != NULL);
+
+ vmstate_register_any(NULL, &vmstate_audio, s);
}
static void audio_state_finalize(Object *obj)
@@ -1679,6 +1683,8 @@ static void audio_state_finalize(Object *obj)
qemu_del_vm_change_state_handler(s->vmse);
s->vmse = NULL;
}
+
+ vmstate_unregister(NULL, &vmstate_audio, s);
}
static Object *get_audiodevs_root(void)
@@ -1787,7 +1793,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
}
object_unref(s);
QLIST_INIT (&s->card_head);
- vmstate_register_any(NULL, &vmstate_audio, s);
return s;
out:
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 20/35] audio: initialize card_head during object init
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (18 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 19/35] audio: register and unregister vmstate " marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:48 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 21/35] audio: remove some needless headers marcandre.lureau
` (15 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/audio/audio.c b/audio/audio.c
index 853930bb48..bdaee7855f 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1623,6 +1623,7 @@ static void audio_state_init(Object *obj)
QLIST_INIT(&s->hw_head_out);
QLIST_INIT(&s->hw_head_in);
QLIST_INIT(&s->cap_head);
+ QLIST_INIT(&s->card_head);
s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
@@ -1792,7 +1793,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
goto out;
}
object_unref(s);
- QLIST_INIT (&s->card_head);
return s;
out:
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 21/35] audio: remove some needless headers
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (19 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 20/35] audio: initialize card_head during object init marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:48 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 22/35] audio: remove AUDIO_HOST_ENDIANNESS marcandre.lureau
` (14 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.h | 1 -
audio/audio.c | 3 ---
audio/dbusaudio.c | 2 --
audio/dsoundaudio.c | 1 -
audio/mixeng.c | 4 +++-
audio/noaudio.c | 2 --
audio/wavaudio.c | 3 ---
audio/wavcapture.c | 1 -
8 files changed, 3 insertions(+), 14 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index e41c5bc55a..3be0c4f24f 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -27,7 +27,6 @@
#include "qemu/queue.h"
#include "qapi/qapi-types-audio.h"
-#include "hw/qdev-properties.h"
#include "hw/qdev-properties-system.h"
typedef void (*audio_callback_fn) (void *opaque, int avail);
diff --git a/audio/audio.c b/audio/audio.c
index bdaee7855f..f334030d96 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -25,7 +25,6 @@
#include "qemu/osdep.h"
#include "audio.h"
#include "migration/vmstate.h"
-#include "monitor/monitor.h"
#include "qemu/timer.h"
#include "qapi/error.h"
#include "qapi/clone-visitor.h"
@@ -33,7 +32,6 @@
#include "qapi/qapi-visit-audio.h"
#include "qapi/qapi-commands-audio.h"
#include "qobject/qdict.h"
-#include "qemu/cutils.h"
#include "qemu/error-report.h"
#include "qemu/log.h"
#include "qemu/module.h"
@@ -41,7 +39,6 @@
#include "system/system.h"
#include "system/replay.h"
#include "system/runstate.h"
-#include "ui/qemu-spice.h"
#include "trace.h"
#define AUDIO_CAP "audio"
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index b44fdd1511..908214a170 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -24,9 +24,7 @@
#include "qemu/osdep.h"
#include "qemu/error-report.h"
-#include "qemu/host-utils.h"
#include "qemu/module.h"
-#include "qemu/timer.h"
#include "qemu/dbus.h"
#ifdef G_OS_UNIX
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c
index d476e9b441..bd00c50e80 100644
--- a/audio/dsoundaudio.c
+++ b/audio/dsoundaudio.c
@@ -31,7 +31,6 @@
#define AUDIO_CAP "dsound"
#include "audio_int.h"
-#include "qemu/host-utils.h"
#include "qemu/module.h"
#include "qapi/error.h"
diff --git a/audio/mixeng.c b/audio/mixeng.c
index 703ee5448f..be38617e9b 100644
--- a/audio/mixeng.c
+++ b/audio/mixeng.c
@@ -24,11 +24,13 @@
*/
#include "qemu/osdep.h"
#include "qemu/bswap.h"
-#include "qemu/error-report.h"
#include "audio.h"
#define AUDIO_CAP "mixeng"
#include "audio_int.h"
+#ifdef FLOAT_MIXENG
+#include "qemu/error-report.h"
+#endif
/* 8 bit */
#define ENDIAN_CONVERSION natural
diff --git a/audio/noaudio.c b/audio/noaudio.c
index 1b60d8518a..34ff1d2a27 100644
--- a/audio/noaudio.c
+++ b/audio/noaudio.c
@@ -23,10 +23,8 @@
*/
#include "qemu/osdep.h"
-#include "qemu/host-utils.h"
#include "qemu/module.h"
#include "audio.h"
-#include "qemu/timer.h"
#define AUDIO_CAP "noaudio"
#include "audio_int.h"
diff --git a/audio/wavaudio.c b/audio/wavaudio.c
index a8798a1c42..a098b20cad 100644
--- a/audio/wavaudio.c
+++ b/audio/wavaudio.c
@@ -23,10 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "qemu/host-utils.h"
#include "qemu/module.h"
-#include "qemu/timer.h"
-#include "qapi/opts-visitor.h"
#include "audio.h"
#define AUDIO_CAP "wav"
diff --git a/audio/wavcapture.c b/audio/wavcapture.c
index c60286e162..b990844d48 100644
--- a/audio/wavcapture.c
+++ b/audio/wavcapture.c
@@ -1,6 +1,5 @@
#include "qemu/osdep.h"
#include "qemu/qemu-print.h"
-#include "qapi/error.h"
#include "qemu/error-report.h"
#include "audio.h"
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 22/35] audio: remove AUDIO_HOST_ENDIANNESS
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (20 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 21/35] audio: remove some needless headers marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 23/35] audio: introduce AUD_set_volume_{in,out}_lr() marcandre.lureau
` (13 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
audio/audio.h | 6 ------
audio/audio.c | 6 +++---
audio/spiceaudio.c | 4 ++--
hw/audio/adlib.c | 2 +-
hw/audio/asc.c | 2 +-
hw/audio/cs4231a.c | 2 +-
hw/audio/gus.c | 2 +-
7 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index 3be0c4f24f..0af911fd9a 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -31,12 +31,6 @@
typedef void (*audio_callback_fn) (void *opaque, int avail);
-#if HOST_BIG_ENDIAN
-#define AUDIO_HOST_ENDIANNESS 1
-#else
-#define AUDIO_HOST_ENDIANNESS 0
-#endif
-
typedef struct audsettings {
int freq;
int nchannels;
diff --git a/audio/audio.c b/audio/audio.c
index f334030d96..18bc9188db 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -274,7 +274,7 @@ static int audio_pcm_info_eq (struct audio_pcm_info *info, struct audsettings *a
&& info->is_signed == is_signed
&& info->is_float == is_float
&& info->bits == bits
- && info->swap_endianness == (as->endianness != AUDIO_HOST_ENDIANNESS);
+ && info->swap_endianness == (as->endianness != HOST_BIG_ENDIAN);
}
void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as)
@@ -320,7 +320,7 @@ void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as)
info->nchannels = as->nchannels;
info->bytes_per_frame = as->nchannels * mul;
info->bytes_per_second = info->freq * info->bytes_per_frame;
- info->swap_endianness = (as->endianness != AUDIO_HOST_ENDIANNESS);
+ info->swap_endianness = (as->endianness != HOST_BIG_ENDIAN);
}
void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len)
@@ -2179,7 +2179,7 @@ audsettings audiodev_to_audsettings(AudiodevPerDirectionOptions *pdo)
.freq = pdo->frequency,
.nchannels = pdo->channels,
.fmt = pdo->format,
- .endianness = AUDIO_HOST_ENDIANNESS,
+ .endianness = HOST_BIG_ENDIAN,
};
}
diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c
index 7f02f7285c..7e737bff9a 100644
--- a/audio/spiceaudio.c
+++ b/audio/spiceaudio.c
@@ -102,7 +102,7 @@ static int line_out_init(HWVoiceOut *hw, struct audsettings *as,
#endif
settings.nchannels = SPICE_INTERFACE_PLAYBACK_CHAN;
settings.fmt = AUDIO_FORMAT_S16;
- settings.endianness = AUDIO_HOST_ENDIANNESS;
+ settings.endianness = HOST_BIG_ENDIAN;
audio_pcm_init_info (&hw->info, &settings);
hw->samples = LINE_OUT_SAMPLES;
@@ -218,7 +218,7 @@ static int line_in_init(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
#endif
settings.nchannels = SPICE_INTERFACE_RECORD_CHAN;
settings.fmt = AUDIO_FORMAT_S16;
- settings.endianness = AUDIO_HOST_ENDIANNESS;
+ settings.endianness = HOST_BIG_ENDIAN;
audio_pcm_init_info (&hw->info, &settings);
hw->samples = LINE_IN_SAMPLES;
diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index 6aae365f47..45c0a458f2 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -272,7 +272,7 @@ static void adlib_realizefn (DeviceState *dev, Error **errp)
as.freq = s->freq;
as.nchannels = SHIFT;
as.fmt = AUDIO_FORMAT_S16;
- as.endianness = AUDIO_HOST_ENDIANNESS;
+ as.endianness = HOST_BIG_ENDIAN;
s->voice = AUD_open_out (
&s->card,
diff --git a/hw/audio/asc.c b/hw/audio/asc.c
index edd42d6d91..41472dc2e3 100644
--- a/hw/audio/asc.c
+++ b/hw/audio/asc.c
@@ -650,7 +650,7 @@ static void asc_realize(DeviceState *dev, Error **errp)
as.freq = ASC_FREQ;
as.nchannels = 2;
as.fmt = AUDIO_FORMAT_U8;
- as.endianness = AUDIO_HOST_ENDIANNESS;
+ as.endianness = HOST_BIG_ENDIAN;
s->voice = AUD_open_out(&s->card, s->voice, "asc.out", s, asc_out_cb,
&as);
diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c
index 3b80a61378..0a5d614f8b 100644
--- a/hw/audio/cs4231a.c
+++ b/hw/audio/cs4231a.c
@@ -305,7 +305,7 @@ static void cs_reset_voices (CSState *s, uint32_t val)
s->tab = ALawDecompressTable;
x_law:
as.fmt = AUDIO_FORMAT_S16;
- as.endianness = AUDIO_HOST_ENDIANNESS;
+ as.endianness = HOST_BIG_ENDIAN;
s->shift = as.nchannels == 2;
break;
diff --git a/hw/audio/gus.c b/hw/audio/gus.c
index 45ea04bf89..d13a95eb5a 100644
--- a/hw/audio/gus.c
+++ b/hw/audio/gus.c
@@ -255,7 +255,7 @@ static void gus_realizefn (DeviceState *dev, Error **errp)
as.freq = s->freq;
as.nchannels = 2;
as.fmt = AUDIO_FORMAT_S16;
- as.endianness = AUDIO_HOST_ENDIANNESS;
+ as.endianness = HOST_BIG_ENDIAN;
s->voice = AUD_open_out (
&s->card,
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 23/35] audio: introduce AUD_set_volume_{in,out}_lr()
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (21 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 22/35] audio: remove AUDIO_HOST_ENDIANNESS marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 21:53 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 24/35] audio/replay: fix type punning marcandre.lureau
` (12 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
There are 2 sets of functions since the introduction of multi-channel
Volume structure: AUD_set_volume_{in,out} and audio_set_volume_{in,out}.
Use the AUD_ prefix for consistency with other audio.c functions. Rename
the stereo function with "_lr" suffix.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.h | 21 ++++++++++++++++-----
audio/audio.c | 16 ++--------------
hw/audio/ac97.c | 4 ++--
hw/audio/asc.c | 2 +-
hw/audio/hda-codec.c | 4 ++--
hw/audio/lm4549.c | 2 +-
hw/audio/via-ac97.c | 2 +-
hw/audio/virtio-snd.c | 4 ++--
hw/audio/wm8750.c | 12 ++++++------
hw/display/xlnx_dp.c | 2 +-
hw/usb/dev-audio.c | 4 ++--
11 files changed, 36 insertions(+), 37 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index 0af911fd9a..c8515afcd2 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -119,9 +119,6 @@ int AUD_is_active_out (SWVoiceOut *sw);
void AUD_init_time_stamp_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
uint64_t AUD_get_elapsed_usec_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
-void AUD_set_volume_out (SWVoiceOut *sw, int mute, uint8_t lvol, uint8_t rvol);
-void AUD_set_volume_in (SWVoiceIn *sw, int mute, uint8_t lvol, uint8_t rvol);
-
#define AUDIO_MAX_CHANNELS 16
typedef struct Volume {
bool mute;
@@ -129,8 +126,22 @@ typedef struct Volume {
uint8_t vol[AUDIO_MAX_CHANNELS];
} Volume;
-void audio_set_volume_out(SWVoiceOut *sw, Volume *vol);
-void audio_set_volume_in(SWVoiceIn *sw, Volume *vol);
+void AUD_set_volume_out(SWVoiceOut *sw, Volume *vol);
+void AUD_set_volume_in(SWVoiceIn *sw, Volume *vol);
+
+static inline void
+AUD_set_volume_out_lr(SWVoiceOut *sw, bool mut, uint8_t lvol, uint8_t rvol) {
+ AUD_set_volume_out(sw, &(Volume) {
+ .mute = mut, .channels = 2, .vol = { lvol, rvol }
+ });
+}
+
+static inline void
+AUD_set_volume_in_lr(SWVoiceIn *sw, bool mut, uint8_t lvol, uint8_t rvol) {
+ AUD_set_volume_in(sw, &(Volume) {
+ .mute = mut, .channels = 2, .vol = { lvol, rvol }
+ });
+}
SWVoiceIn *AUD_open_in (
QEMUSoundCard *card,
diff --git a/audio/audio.c b/audio/audio.c
index 18bc9188db..8723f4e66e 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1949,13 +1949,7 @@ void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque)
}
}
-void AUD_set_volume_out (SWVoiceOut *sw, int mute, uint8_t lvol, uint8_t rvol)
-{
- Volume vol = { .mute = mute, .channels = 2, .vol = { lvol, rvol } };
- audio_set_volume_out(sw, &vol);
-}
-
-void audio_set_volume_out(SWVoiceOut *sw, Volume *vol)
+void AUD_set_volume_out(SWVoiceOut *sw, Volume *vol)
{
if (sw) {
HWVoiceOut *hw = sw->hw;
@@ -1971,13 +1965,7 @@ void audio_set_volume_out(SWVoiceOut *sw, Volume *vol)
}
}
-void AUD_set_volume_in (SWVoiceIn *sw, int mute, uint8_t lvol, uint8_t rvol)
-{
- Volume vol = { .mute = mute, .channels = 2, .vol = { lvol, rvol } };
- audio_set_volume_in(sw, &vol);
-}
-
-void audio_set_volume_in(SWVoiceIn *sw, Volume *vol)
+void AUD_set_volume_in(SWVoiceIn *sw, Volume *vol)
{
if (sw) {
HWVoiceIn *hw = sw->hw;
diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
index 6b9013ebb8..c3e5f9c8bb 100644
--- a/hw/audio/ac97.c
+++ b/hw/audio/ac97.c
@@ -416,7 +416,7 @@ static void update_combined_volume_out(AC97LinkState *s)
lvol = (lvol * plvol) / 255;
rvol = (rvol * prvol) / 255;
- AUD_set_volume_out(s->voice_po, mute, lvol, rvol);
+ AUD_set_volume_out_lr(s->voice_po, mute, lvol, rvol);
}
static void update_volume_in(AC97LinkState *s)
@@ -427,7 +427,7 @@ static void update_volume_in(AC97LinkState *s)
get_volume(mixer_load(s, AC97_Record_Gain_Mute), 0x0f, 0,
&mute, &lvol, &rvol);
- AUD_set_volume_in(s->voice_pi, mute, lvol, rvol);
+ AUD_set_volume_in_lr(s->voice_pi, mute, lvol, rvol);
}
static void set_volume(AC97LinkState *s, int index, uint32_t val)
diff --git a/hw/audio/asc.c b/hw/audio/asc.c
index 41472dc2e3..991316e984 100644
--- a/hw/audio/asc.c
+++ b/hw/audio/asc.c
@@ -489,7 +489,7 @@ static void asc_write(void *opaque, hwaddr addr, uint64_t value,
{
int vol = (value & 0xe0);
- AUD_set_volume_out(s->voice, 0, vol, vol);
+ AUD_set_volume_out_lr(s->voice, 0, vol, vol);
break;
}
}
diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c
index 66edad280f..cc87557954 100644
--- a/hw/audio/hda-codec.c
+++ b/hw/audio/hda-codec.c
@@ -466,9 +466,9 @@ static void hda_audio_set_amp(HDAAudioStream *st)
return;
}
if (st->output) {
- AUD_set_volume_out(st->voice.out, muted, left, right);
+ AUD_set_volume_out_lr(st->voice.out, muted, left, right);
} else {
- AUD_set_volume_in(st->voice.in, muted, left, right);
+ AUD_set_volume_in_lr(st->voice.in, muted, left, right);
}
}
diff --git a/hw/audio/lm4549.c b/hw/audio/lm4549.c
index a4a77c8dc6..dccbf56068 100644
--- a/hw/audio/lm4549.c
+++ b/hw/audio/lm4549.c
@@ -308,7 +308,7 @@ void lm4549_init(lm4549_state *s, lm4549_callback data_req_cb, void* opaque,
&as
);
- AUD_set_volume_out(s->voice, 0, 255, 255);
+ AUD_set_volume_out_lr(s->voice, 0, 255, 255);
s->voice_is_active = 0;
diff --git a/hw/audio/via-ac97.c b/hw/audio/via-ac97.c
index d5231e1cf2..62341e5600 100644
--- a/hw/audio/via-ac97.c
+++ b/hw/audio/via-ac97.c
@@ -53,7 +53,7 @@ static void codec_volume_set_out(ViaAC97State *s)
rvol /= 255;
mute = CODEC_REG(s, AC97_Master_Volume_Mute) >> MUTE_SHIFT;
mute |= CODEC_REG(s, AC97_PCM_Out_Volume_Mute) >> MUTE_SHIFT;
- AUD_set_volume_out(s->vo, mute, lvol, rvol);
+ AUD_set_volume_out_lr(s->vo, mute, lvol, rvol);
}
static void codec_reset(ViaAC97State *s)
diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c
index eca3319e59..88777977a9 100644
--- a/hw/audio/virtio-snd.c
+++ b/hw/audio/virtio-snd.c
@@ -463,7 +463,7 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, uint32_t stream_id)
stream,
virtio_snd_pcm_out_cb,
&as);
- AUD_set_volume_out(stream->voice.out, 0, 255, 255);
+ AUD_set_volume_out_lr(stream->voice.out, 0, 255, 255);
} else {
stream->voice.in = AUD_open_in(&s->card,
stream->voice.in,
@@ -471,7 +471,7 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, uint32_t stream_id)
stream,
virtio_snd_pcm_in_cb,
&as);
- AUD_set_volume_in(stream->voice.in, 0, 255, 255);
+ AUD_set_volume_in_lr(stream->voice.in, 0, 255, 255);
}
return cpu_to_le32(VIRTIO_SND_S_OK);
diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c
index 2846b55fe2..7a36c4bd3f 100644
--- a/hw/audio/wm8750.c
+++ b/hw/audio/wm8750.c
@@ -145,30 +145,30 @@ static void wm8750_vol_update(WM8750State *s)
{
/* FIXME: multiply all volumes by s->invol[2], s->invol[3] */
- AUD_set_volume_in(s->adc_voice[0], s->mute,
+ AUD_set_volume_in_lr(s->adc_voice[0], s->mute,
s->inmute[0] ? 0 : WM8750_INVOL_TRANSFORM(s->invol[0]),
s->inmute[1] ? 0 : WM8750_INVOL_TRANSFORM(s->invol[1]));
- AUD_set_volume_in(s->adc_voice[1], s->mute,
+ AUD_set_volume_in_lr(s->adc_voice[1], s->mute,
s->inmute[0] ? 0 : WM8750_INVOL_TRANSFORM(s->invol[0]),
s->inmute[1] ? 0 : WM8750_INVOL_TRANSFORM(s->invol[1]));
- AUD_set_volume_in(s->adc_voice[2], s->mute,
+ AUD_set_volume_in_lr(s->adc_voice[2], s->mute,
s->inmute[0] ? 0 : WM8750_INVOL_TRANSFORM(s->invol[0]),
s->inmute[1] ? 0 : WM8750_INVOL_TRANSFORM(s->invol[1]));
/* FIXME: multiply all volumes by s->outvol[0], s->outvol[1] */
/* Speaker: LOUT2VOL ROUT2VOL */
- AUD_set_volume_out(s->dac_voice[0], s->mute,
+ AUD_set_volume_out_lr(s->dac_voice[0], s->mute,
s->outmute[0] ? 0 : WM8750_OUTVOL_TRANSFORM(s->outvol[4]),
s->outmute[1] ? 0 : WM8750_OUTVOL_TRANSFORM(s->outvol[5]));
/* Headphone: LOUT1VOL ROUT1VOL */
- AUD_set_volume_out(s->dac_voice[1], s->mute,
+ AUD_set_volume_out_lr(s->dac_voice[1], s->mute,
s->outmute[0] ? 0 : WM8750_OUTVOL_TRANSFORM(s->outvol[2]),
s->outmute[1] ? 0 : WM8750_OUTVOL_TRANSFORM(s->outvol[3]));
/* MONOOUT: MONOVOL MONOVOL */
- AUD_set_volume_out(s->dac_voice[2], s->mute,
+ AUD_set_volume_out_lr(s->dac_voice[2], s->mute,
s->outmute[0] ? 0 : WM8750_OUTVOL_TRANSFORM(s->outvol[6]),
s->outmute[1] ? 0 : WM8750_OUTVOL_TRANSFORM(s->outvol[6]));
}
diff --git a/hw/display/xlnx_dp.c b/hw/display/xlnx_dp.c
index ef73e1815f..882ae3c4b4 100644
--- a/hw/display/xlnx_dp.c
+++ b/hw/display/xlnx_dp.c
@@ -1334,7 +1334,7 @@ static void xlnx_dp_realize(DeviceState *dev, Error **errp)
s,
xlnx_dp_audio_callback,
&as);
- AUD_set_volume_out(s->amixer_output_stream, 0, 255, 255);
+ AUD_set_volume_out_lr(s->amixer_output_stream, 0, 255, 255);
xlnx_dp_audio_activate(s);
s->vblank = ptimer_init(vblank_hit, s, DP_VBLANK_PTIMER_POLICY);
ptimer_transaction_begin(s->vblank);
diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c
index 26af709f31..f59e5a53f0 100644
--- a/hw/usb/dev-audio.c
+++ b/hw/usb/dev-audio.c
@@ -805,7 +805,7 @@ static int usb_audio_set_control(USBAudioState *s, uint8_t attrib,
}
fprintf(stderr, "\n");
}
- audio_set_volume_out(s->out.voice, &s->out.vol);
+ AUD_set_volume_out(s->out.voice, &s->out.vol);
}
return ret;
@@ -981,7 +981,7 @@ static void usb_audio_reinit(USBDevice *dev, unsigned channels)
s->out.voice = AUD_open_out(&s->card, s->out.voice, TYPE_USB_AUDIO,
s, output_callback, &s->out.as);
- audio_set_volume_out(s->out.voice, &s->out.vol);
+ AUD_set_volume_out(s->out.voice, &s->out.vol);
AUD_set_active_out(s->out.voice, 0);
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 24/35] audio/replay: fix type punning
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (22 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 23/35] audio: introduce AUD_set_volume_{in,out}_lr() marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 21:51 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 25/35] audio: move internal APIs to audio_int.h marcandre.lureau
` (11 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.h | 6 ++++--
audio/mixeng.h | 1 -
include/system/replay.h | 3 ++-
audio/mixeng.c | 6 ++----
replay/replay-audio.c | 2 +-
replay/stubs-system.c | 2 +-
6 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index c8515afcd2..61ff900b7e 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -171,9 +171,11 @@ int wav_start_capture(AudioState *state, CaptureState *s, const char *path,
void audio_cleanup(void);
-void audio_sample_to_uint64(const void *samples, int pos,
+typedef struct st_sample st_sample;
+
+void audio_sample_to_uint64(const st_sample *sample, int pos,
uint64_t *left, uint64_t *right);
-void audio_sample_from_uint64(void *samples, int pos,
+void audio_sample_from_uint64(st_sample *sample, int pos,
uint64_t left, uint64_t right);
void audio_add_audiodev(Audiodev *audio);
diff --git a/audio/mixeng.h b/audio/mixeng.h
index ead93ac2f7..f63283f408 100644
--- a/audio/mixeng.h
+++ b/audio/mixeng.h
@@ -33,7 +33,6 @@ struct st_sample { mixeng_real l; mixeng_real r; };
struct mixeng_volume { int mute; int64_t r; int64_t l; };
struct st_sample { int64_t l; int64_t r; };
#endif
-typedef struct st_sample st_sample;
typedef void (t_sample) (struct st_sample *dst, const void *src, int samples);
typedef void (f_sample) (void *dst, const struct st_sample *src, int samples);
diff --git a/include/system/replay.h b/include/system/replay.h
index 1c87c97fdd..1e63c0784c 100644
--- a/include/system/replay.h
+++ b/include/system/replay.h
@@ -16,6 +16,7 @@
#include "qapi/qapi-types-run-state.h"
#include "qapi/qapi-types-ui.h"
#include "block/aio.h"
+#include "audio/audio.h"
/* replay clock kinds */
enum ReplayClockKind {
@@ -165,7 +166,7 @@ void replay_net_packet_event(ReplayNetState *rns, unsigned flags,
/*! Saves/restores number of played samples of audio out operation. */
void replay_audio_out(size_t *played);
/*! Saves/restores recorded samples of audio in operation. */
-void replay_audio_in(size_t *recorded, void *samples, size_t *wpos, size_t size);
+void replay_audio_in(size_t *recorded, st_sample *samples, size_t *wpos, size_t size);
/* VM state operations */
diff --git a/audio/mixeng.c b/audio/mixeng.c
index be38617e9b..af9ec3d4d2 100644
--- a/audio/mixeng.c
+++ b/audio/mixeng.c
@@ -404,7 +404,7 @@ f_sample *mixeng_clip_float[2][2] = {
}
};
-void audio_sample_to_uint64(const void *samples, int pos,
+void audio_sample_to_uint64(const st_sample *sample, int pos,
uint64_t *left, uint64_t *right)
{
#ifdef FLOAT_MIXENG
@@ -412,14 +412,13 @@ void audio_sample_to_uint64(const void *samples, int pos,
"Coreaudio and floating point samples are not supported by replay yet");
abort();
#else
- const struct st_sample *sample = samples;
sample += pos;
*left = sample->l;
*right = sample->r;
#endif
}
-void audio_sample_from_uint64(void *samples, int pos,
+void audio_sample_from_uint64(st_sample *sample, int pos,
uint64_t left, uint64_t right)
{
#ifdef FLOAT_MIXENG
@@ -427,7 +426,6 @@ void audio_sample_from_uint64(void *samples, int pos,
"Coreaudio and floating point samples are not supported by replay yet");
abort();
#else
- struct st_sample *sample = samples;
sample += pos;
sample->l = left;
sample->r = right;
diff --git a/replay/replay-audio.c b/replay/replay-audio.c
index ed2ba2164b..3413801062 100644
--- a/replay/replay-audio.c
+++ b/replay/replay-audio.c
@@ -35,7 +35,7 @@ void replay_audio_out(size_t *played)
}
}
-void replay_audio_in(size_t *recorded, void *samples, size_t *wpos, size_t size)
+void replay_audio_in(size_t *recorded, st_sample *samples, size_t *wpos, size_t size)
{
int pos;
uint64_t left, right;
diff --git a/replay/stubs-system.c b/replay/stubs-system.c
index 8f2b2d326e..7f85764936 100644
--- a/replay/stubs-system.c
+++ b/replay/stubs-system.c
@@ -15,7 +15,7 @@ void replay_input_sync_event(void)
void replay_add_blocker(const char *feature)
{
}
-void replay_audio_in(size_t *recorded, void *samples, size_t *wpos, size_t size)
+void replay_audio_in(size_t *recorded, st_sample *samples, size_t *wpos, size_t size)
{
}
void replay_audio_out(size_t *played)
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 25/35] audio: move internal APIs to audio_int.h
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (23 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 24/35] audio/replay: fix type punning marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 26/35] audio: rename AudioState -> AudioBackend marcandre.lureau
` (10 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Fix some check-patch issues while at it.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
audio/audio.h | 21 ---------------------
audio/audio_int.h | 24 ++++++++++++++++++++++++
audio/audio-hmp-cmds.c | 2 +-
audio/wavcapture.c | 2 +-
4 files changed, 26 insertions(+), 23 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index 61ff900b7e..c0cad7d976 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -38,15 +38,6 @@ typedef struct audsettings {
int endianness;
} audsettings;
-audsettings audiodev_to_audsettings(AudiodevPerDirectionOptions *pdo);
-int audioformat_bytes_per_sample(AudioFormat fmt);
-int audio_buffer_frames(AudiodevPerDirectionOptions *pdo,
- audsettings *as, int def_usecs);
-int audio_buffer_samples(AudiodevPerDirectionOptions *pdo,
- audsettings *as, int def_usecs);
-int audio_buffer_bytes(AudiodevPerDirectionOptions *pdo,
- audsettings *as, int def_usecs);
-
typedef enum {
AUD_CNOTIFY_ENABLE,
AUD_CNOTIFY_DISABLE
@@ -88,9 +79,6 @@ typedef struct QEMUAudioTimeStamp {
uint64_t old_ts;
} QEMUAudioTimeStamp;
-void AUD_vlog (const char *cap, const char *fmt, va_list ap) G_GNUC_PRINTF(2, 0);
-void AUD_log (const char *cap, const char *fmt, ...) G_GNUC_PRINTF(2, 3);
-
bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp);
void AUD_remove_card (QEMUSoundCard *card);
CaptureVoiceOut *AUD_add_capture(
@@ -160,15 +148,6 @@ int AUD_is_active_in (SWVoiceIn *sw);
void AUD_init_time_stamp_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
uint64_t AUD_get_elapsed_usec_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
-static inline void *advance (void *p, int incr)
-{
- uint8_t *d = p;
- return (d + incr);
-}
-
-int wav_start_capture(AudioState *state, CaptureState *s, const char *path,
- int freq, int bits, int nchannels);
-
void audio_cleanup(void);
typedef struct st_sample st_sample;
diff --git a/audio/audio_int.h b/audio/audio_int.h
index 4a4d69f2bf..d1badbf235 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -29,12 +29,19 @@
#define FLOAT_MIXENG
/* #define RECIPROCAL */
#endif
+#include "audio.h"
#include "mixeng.h"
#ifdef CONFIG_GIO
#include <gio/gio.h>
#endif
+void G_GNUC_PRINTF(2, 0)
+AUD_vlog(const char *cap, const char *fmt, va_list ap);
+
+void G_GNUC_PRINTF(2, 3)
+AUD_log(const char *cap, const char *fmt, ...);
+
struct audio_pcm_ops;
struct audio_callback {
@@ -187,6 +194,23 @@ struct audio_pcm_ops {
void (*volume_in)(HWVoiceIn *hw, Volume *vol);
};
+audsettings audiodev_to_audsettings(AudiodevPerDirectionOptions *pdo);
+int audioformat_bytes_per_sample(AudioFormat fmt);
+int audio_buffer_frames(AudiodevPerDirectionOptions *pdo,
+ audsettings *as, int def_usecs);
+int audio_buffer_samples(AudiodevPerDirectionOptions *pdo,
+ audsettings *as, int def_usecs);
+int audio_buffer_bytes(AudiodevPerDirectionOptions *pdo,
+ audsettings *as, int def_usecs);
+
+static inline void *advance(void *p, size_t incr)
+{
+ return (uint8_t *)p + incr;
+}
+
+int wav_start_capture(AudioState *state, CaptureState *s, const char *path,
+ int freq, int bits, int nchannels);
+
void audio_generic_run_buffer_in(HWVoiceIn *hw);
void *audio_generic_get_buffer_in(HWVoiceIn *hw, size_t *size);
void audio_generic_put_buffer_in(HWVoiceIn *hw, void *buf, size_t size);
diff --git a/audio/audio-hmp-cmds.c b/audio/audio-hmp-cmds.c
index 8774c09f18..819f8fa9d8 100644
--- a/audio/audio-hmp-cmds.c
+++ b/audio/audio-hmp-cmds.c
@@ -23,7 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "audio/audio.h"
+#include "audio_int.h"
#include "monitor/hmp.h"
#include "monitor/monitor.h"
#include "qapi/error.h"
diff --git a/audio/wavcapture.c b/audio/wavcapture.c
index b990844d48..0fbc695d23 100644
--- a/audio/wavcapture.c
+++ b/audio/wavcapture.c
@@ -1,7 +1,7 @@
#include "qemu/osdep.h"
#include "qemu/qemu-print.h"
#include "qemu/error-report.h"
-#include "audio.h"
+#include "audio_int.h"
typedef struct {
FILE *f;
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 26/35] audio: rename AudioState -> AudioBackend
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (24 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 25/35] audio: move internal APIs to audio_int.h marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:49 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 27/35] audio: remove QEMUSoundCard marcandre.lureau
` (9 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Naming is hard. But in general in QEMU, a host "backend" is the term
used to fullfill the request made by the device or frontend.
AudioBackend will become an abstract base class in a follow-up series.
Currently the frontend is QEMUSoundCard, we are going to drop that next.
Note that "audiodev" is the corresponding QAPI type name (or configuration).
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.h | 16 +++---
audio/audio_int.h | 20 +++----
audio/audio_template.h | 20 +++----
ui/vnc.h | 2 +-
audio/alsaaudio.c | 2 +-
audio/audio-hmp-cmds.c | 2 +-
audio/audio.c | 90 ++++++++++++++++----------------
audio/dbusaudio.c | 8 +--
audio/ossaudio.c | 4 +-
audio/wavcapture.c | 2 +-
hw/audio/pcspk.c | 2 +-
hw/core/machine.c | 2 +-
hw/core/qdev-properties-system.c | 6 +--
ui/dbus.c | 8 +--
ui/vnc.c | 10 ++--
15 files changed, 97 insertions(+), 97 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index c0cad7d976..1d56f111ea 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -64,14 +64,14 @@ typedef struct SWVoiceOut SWVoiceOut;
typedef struct CaptureVoiceOut CaptureVoiceOut;
typedef struct SWVoiceIn SWVoiceIn;
-struct AudioStateClass {
+struct AudioBackendClass {
ObjectClass parent_class;
};
-typedef struct AudioState AudioState;
+typedef struct AudioBackend AudioBackend;
typedef struct QEMUSoundCard {
char *name;
- AudioState *state;
+ AudioBackend *be;
QLIST_ENTRY (QEMUSoundCard) entries;
} QEMUSoundCard;
@@ -82,7 +82,7 @@ typedef struct QEMUAudioTimeStamp {
bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp);
void AUD_remove_card (QEMUSoundCard *card);
CaptureVoiceOut *AUD_add_capture(
- AudioState *s,
+ AudioBackend *s,
struct audsettings *as,
struct audio_capture_ops *ops,
void *opaque
@@ -164,14 +164,14 @@ void audio_create_default_audiodevs(void);
void audio_init_audiodevs(void);
void audio_help(void);
-AudioState *audio_state_by_name(const char *name, Error **errp);
-AudioState *audio_get_default_audio_state(Error **errp);
+AudioBackend *audio_be_by_name(const char *name, Error **errp);
+AudioBackend *audio_get_default_audio_be(Error **errp);
const char *audio_get_id(QEMUSoundCard *card);
#define DEFINE_AUDIO_PROPERTIES(_s, _f) \
DEFINE_PROP_AUDIODEV("audiodev", _s, _f)
-#define TYPE_AUDIO_STATE "audio-state"
-OBJECT_DECLARE_TYPE(AudioState, AudioStateClass, AUDIO_STATE)
+#define TYPE_AUDIO_BACKEND "audio-backend"
+OBJECT_DECLARE_TYPE(AudioBackend, AudioBackendClass, AUDIO_BACKEND)
#endif /* QEMU_AUDIO_H */
diff --git a/audio/audio_int.h b/audio/audio_int.h
index d1badbf235..338af38fd1 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -60,7 +60,7 @@ struct audio_pcm_info {
int swap_endianness;
};
-typedef struct AudioState AudioState;
+typedef struct AudioBackend AudioBackend;
typedef struct SWVoiceCap SWVoiceCap;
typedef struct STSampleBuffer {
@@ -69,7 +69,7 @@ typedef struct STSampleBuffer {
} STSampleBuffer;
typedef struct HWVoiceOut {
- AudioState *s;
+ AudioBackend *s;
int enabled;
int poll_mode;
int pending_disable;
@@ -90,7 +90,7 @@ typedef struct HWVoiceOut {
} HWVoiceOut;
typedef struct HWVoiceIn {
- AudioState *s;
+ AudioBackend *s;
int enabled;
int poll_mode;
struct audio_pcm_info info;
@@ -112,7 +112,7 @@ typedef struct HWVoiceIn {
struct SWVoiceOut {
QEMUSoundCard *card;
- AudioState *s;
+ AudioBackend *s;
struct audio_pcm_info info;
t_sample *conv;
STSampleBuffer resample_buf;
@@ -129,7 +129,7 @@ struct SWVoiceOut {
struct SWVoiceIn {
QEMUSoundCard *card;
- AudioState *s;
+ AudioBackend *s;
int active;
struct audio_pcm_info info;
void *rate;
@@ -150,7 +150,7 @@ struct audio_driver {
void *(*init) (Audiodev *, Error **);
void (*fini) (void *);
#ifdef CONFIG_GIO
- void (*set_dbus_server) (AudioState *s, GDBusObjectManagerServer *manager, bool p2p);
+ void (*set_dbus_server)(AudioBackend *s, GDBusObjectManagerServer *manager, bool p2p);
#endif
struct audio_pcm_ops *pcm_ops;
int max_voices_out;
@@ -208,7 +208,7 @@ static inline void *advance(void *p, size_t incr)
return (uint8_t *)p + incr;
}
-int wav_start_capture(AudioState *state, CaptureState *s, const char *path,
+int wav_start_capture(AudioBackend *state, CaptureState *s, const char *path,
int freq, int bits, int nchannels);
void audio_generic_run_buffer_in(HWVoiceIn *hw);
@@ -240,7 +240,7 @@ struct SWVoiceCap {
QLIST_ENTRY (SWVoiceCap) entries;
};
-typedef struct AudioState {
+typedef struct AudioBackend {
Object parent;
struct audio_driver *drv;
@@ -260,7 +260,7 @@ typedef struct AudioState {
bool timer_running;
uint64_t timer_last;
VMChangeStateEntry *vmse;
-} AudioState;
+} AudioBackend;
extern const struct mixeng_volume nominal_volume;
@@ -273,7 +273,7 @@ void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len);
int audio_bug (const char *funcname, int cond);
-void audio_run(AudioState *s, const char *msg);
+void audio_run(AudioBackend *s, const char *msg);
const char *audio_application_name(void);
diff --git a/audio/audio_template.h b/audio/audio_template.h
index c29d79c443..b3c10a0709 100644
--- a/audio/audio_template.h
+++ b/audio/audio_template.h
@@ -36,7 +36,7 @@
#define HWBUF hw->conv_buf
#endif
-static void glue(audio_init_nb_voices_, TYPE)(AudioState *s,
+static void glue(audio_init_nb_voices_, TYPE)(AudioBackend *s,
struct audio_driver *drv, int min_voices)
{
int max_voices = glue (drv->max_voices_, TYPE);
@@ -221,7 +221,7 @@ static void glue (audio_pcm_hw_del_sw_, TYPE) (SW *sw)
static void glue (audio_pcm_hw_gc_, TYPE) (HW **hwp)
{
HW *hw = *hwp;
- AudioState *s = hw->s;
+ AudioBackend *s = hw->s;
if (!hw->sw_head.lh_first) {
#ifdef DAC
@@ -236,12 +236,12 @@ static void glue (audio_pcm_hw_gc_, TYPE) (HW **hwp)
}
}
-static HW *glue(audio_pcm_hw_find_any_, TYPE)(AudioState *s, HW *hw)
+static HW *glue(audio_pcm_hw_find_any_, TYPE)(AudioBackend *s, HW *hw)
{
return hw ? hw->entries.le_next : glue (s->hw_head_, TYPE).lh_first;
}
-static HW *glue(audio_pcm_hw_find_any_enabled_, TYPE)(AudioState *s, HW *hw)
+static HW *glue(audio_pcm_hw_find_any_enabled_, TYPE)(AudioBackend *s, HW *hw)
{
while ((hw = glue(audio_pcm_hw_find_any_, TYPE)(s, hw))) {
if (hw->enabled) {
@@ -251,7 +251,7 @@ static HW *glue(audio_pcm_hw_find_any_enabled_, TYPE)(AudioState *s, HW *hw)
return NULL;
}
-static HW *glue(audio_pcm_hw_find_specific_, TYPE)(AudioState *s, HW *hw,
+static HW *glue(audio_pcm_hw_find_specific_, TYPE)(AudioBackend *s, HW *hw,
struct audsettings *as)
{
while ((hw = glue(audio_pcm_hw_find_any_, TYPE)(s, hw))) {
@@ -262,7 +262,7 @@ static HW *glue(audio_pcm_hw_find_specific_, TYPE)(AudioState *s, HW *hw,
return NULL;
}
-static HW *glue(audio_pcm_hw_add_new_, TYPE)(AudioState *s,
+static HW *glue(audio_pcm_hw_add_new_, TYPE)(AudioBackend *s,
struct audsettings *as)
{
HW *hw;
@@ -398,7 +398,7 @@ AudiodevPerDirectionOptions *glue(audio_get_pdo_, TYPE)(Audiodev *dev)
abort();
}
-static HW *glue(audio_pcm_hw_add_, TYPE)(AudioState *s, struct audsettings *as)
+static HW *glue(audio_pcm_hw_add_, TYPE)(AudioBackend *s, struct audsettings *as)
{
HW *hw;
AudiodevPerDirectionOptions *pdo = glue(audio_get_pdo_, TYPE)(s->dev);
@@ -424,7 +424,7 @@ static HW *glue(audio_pcm_hw_add_, TYPE)(AudioState *s, struct audsettings *as)
}
static SW *glue(audio_pcm_create_voice_pair_, TYPE)(
- AudioState *s,
+ AudioBackend *s,
const char *sw_name,
struct audsettings *as
)
@@ -494,7 +494,7 @@ SW *glue (AUD_open_, TYPE) (
struct audsettings *as
)
{
- AudioState *s;
+ AudioBackend *s;
AudiodevPerDirectionOptions *pdo;
if (audio_bug(__func__, !card || !name || !callback_fn || !as)) {
@@ -503,7 +503,7 @@ SW *glue (AUD_open_, TYPE) (
goto fail;
}
- s = card->state;
+ s = card->be;
pdo = glue(audio_get_pdo_, TYPE)(s->dev);
ldebug ("open %s, freq %d, nchannels %d, fmt %d\n",
diff --git a/ui/vnc.h b/ui/vnc.h
index f2dab2f4d9..e2137c5ed1 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -184,7 +184,7 @@ struct VncDisplay
VncDisplaySASL sasl;
#endif
- AudioState *audio_state;
+ AudioBackend *audio_be;
VMChangeStateEntry *vmstate_handler_entry;
};
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index 9b6c01c0ef..797cb478e6 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -41,7 +41,7 @@ struct pollhlp {
struct pollfd *pfds;
int count;
int mask;
- AudioState *s;
+ AudioBackend *s;
};
typedef struct ALSAVoiceOut {
diff --git a/audio/audio-hmp-cmds.c b/audio/audio-hmp-cmds.c
index 819f8fa9d8..1e56af21ab 100644
--- a/audio/audio-hmp-cmds.c
+++ b/audio/audio-hmp-cmds.c
@@ -67,7 +67,7 @@ void hmp_wavcapture(Monitor *mon, const QDict *qdict)
const char *audiodev = qdict_get_str(qdict, "audiodev");
CaptureState *s;
Error *local_err = NULL;
- AudioState *as = audio_state_by_name(audiodev, &local_err);
+ AudioBackend *as = audio_be_by_name(audiodev, &local_err);
if (!as) {
error_report_err(local_err);
diff --git a/audio/audio.c b/audio/audio.c
index 8723f4e66e..8044d55c5c 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -99,7 +99,7 @@ static audio_driver *audio_driver_lookup(const char *name)
return NULL;
}
-static AudioState *default_audio_state;
+static AudioBackend *default_audio_be;
const struct mixeng_volume nominal_volume = {
.mute = 0,
@@ -380,7 +380,7 @@ void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len)
/*
* Capture
*/
-static CaptureVoiceOut *audio_pcm_capture_find_specific(AudioState *s,
+static CaptureVoiceOut *audio_pcm_capture_find_specific(AudioBackend *s,
struct audsettings *as)
{
CaptureVoiceOut *cap;
@@ -460,7 +460,7 @@ static void audio_detach_capture (HWVoiceOut *hw)
static int audio_attach_capture (HWVoiceOut *hw)
{
- AudioState *s = hw->s;
+ AudioBackend *s = hw->s;
CaptureVoiceOut *cap;
audio_detach_capture (hw);
@@ -798,7 +798,7 @@ static void audio_pcm_print_info (const char *cap, struct audio_pcm_info *info)
/*
* Timer
*/
-static int audio_is_timer_needed(AudioState *s)
+static int audio_is_timer_needed(AudioBackend *s)
{
HWVoiceIn *hwi = NULL;
HWVoiceOut *hwo = NULL;
@@ -816,7 +816,7 @@ static int audio_is_timer_needed(AudioState *s)
return 0;
}
-static void audio_reset_timer (AudioState *s)
+static void audio_reset_timer(AudioBackend *s)
{
if (audio_is_timer_needed(s)) {
timer_mod_anticipate_ns(s->ts,
@@ -838,7 +838,7 @@ static void audio_reset_timer (AudioState *s)
static void audio_timer (void *opaque)
{
int64_t now, diff;
- AudioState *s = opaque;
+ AudioBackend *s = opaque;
now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
diff = now - s->timer_last;
@@ -921,7 +921,7 @@ void AUD_set_active_out (SWVoiceOut *sw, int on)
hw = sw->hw;
if (sw->active != on) {
- AudioState *s = sw->s;
+ AudioBackend *s = sw->s;
SWVoiceOut *temp_sw;
SWVoiceCap *sc;
@@ -969,7 +969,7 @@ void AUD_set_active_in (SWVoiceIn *sw, int on)
hw = sw->hw;
if (sw->active != on) {
- AudioState *s = sw->s;
+ AudioBackend *s = sw->s;
SWVoiceIn *temp_sw;
if (on) {
@@ -1137,7 +1137,7 @@ static size_t audio_pcm_hw_run_out(HWVoiceOut *hw, size_t live)
return clipped;
}
-static void audio_run_out (AudioState *s)
+static void audio_run_out(AudioBackend *s)
{
HWVoiceOut *hw = NULL;
SWVoiceOut *sw;
@@ -1291,7 +1291,7 @@ static size_t audio_pcm_hw_run_in(HWVoiceIn *hw, size_t samples)
return conv;
}
-static void audio_run_in (AudioState *s)
+static void audio_run_in(AudioBackend *s)
{
HWVoiceIn *hw = NULL;
@@ -1339,7 +1339,7 @@ static void audio_run_in (AudioState *s)
}
}
-static void audio_run_capture (AudioState *s)
+static void audio_run_capture(AudioBackend *s)
{
CaptureVoiceOut *cap;
@@ -1386,7 +1386,7 @@ static void audio_run_capture (AudioState *s)
}
}
-void audio_run(AudioState *s, const char *msg)
+void audio_run(AudioBackend *s, const char *msg)
{
audio_run_out(s);
audio_run_in(s);
@@ -1559,7 +1559,7 @@ size_t audio_generic_read(HWVoiceIn *hw, void *buf, size_t size)
return total;
}
-static bool audio_driver_init(AudioState *s, struct audio_driver *drv,
+static bool audio_driver_init(AudioBackend *s, struct audio_driver *drv,
Audiodev *dev, Error **errp)
{
s->drv_opaque = drv->init(dev, errp);
@@ -1592,7 +1592,7 @@ static bool audio_driver_init(AudioState *s, struct audio_driver *drv,
static void audio_vm_change_state_handler (void *opaque, bool running,
RunState state)
{
- AudioState *s = opaque;
+ AudioBackend *s = opaque;
HWVoiceOut *hwo = NULL;
HWVoiceIn *hwi = NULL;
@@ -1613,9 +1613,9 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
static const VMStateDescription vmstate_audio;
-static void audio_state_init(Object *obj)
+static void audio_be_init(Object *obj)
{
- AudioState *s = AUDIO_STATE(obj);
+ AudioBackend *s = AUDIO_BACKEND(obj);
QLIST_INIT(&s->hw_head_out);
QLIST_INIT(&s->hw_head_in);
@@ -1629,9 +1629,9 @@ static void audio_state_init(Object *obj)
vmstate_register_any(NULL, &vmstate_audio, s);
}
-static void audio_state_finalize(Object *obj)
+static void audio_be_finalize(Object *obj)
{
- AudioState *s = AUDIO_STATE(obj);
+ AudioBackend *s = AUDIO_BACKEND(obj);
HWVoiceOut *hwo, *hwon;
HWVoiceIn *hwi, *hwin;
@@ -1692,7 +1692,7 @@ static Object *get_audiodevs_root(void)
void audio_cleanup(void)
{
- default_audio_state = NULL;
+ default_audio_be = NULL;
object_unparent(get_audiodevs_root());
}
@@ -1743,14 +1743,14 @@ void audio_create_default_audiodevs(void)
* if dev == NULL => legacy implicit initialization, return the already created
* state or create a new one
*/
-static AudioState *audio_init(Audiodev *dev, Error **errp)
+static AudioBackend *audio_init(Audiodev *dev, Error **errp)
{
int done = 0;
const char *drvname;
- AudioState *s;
+ AudioBackend *s;
struct audio_driver *driver;
- s = AUDIO_STATE(object_new(TYPE_AUDIO_STATE));
+ s = AUDIO_BACKEND(object_new(TYPE_AUDIO_BACKEND));
if (dev) {
/* -audiodev option */
@@ -1766,7 +1766,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
goto out;
}
} else {
- assert(!default_audio_state);
+ assert(!default_audio_be);
for (;;) {
AudiodevListEntry *e = QSIMPLEQ_FIRST(&default_audiodevs);
if (!e) {
@@ -1797,11 +1797,11 @@ out:
return NULL;
}
-AudioState *audio_get_default_audio_state(Error **errp)
+AudioBackend *audio_get_default_audio_be(Error **errp)
{
- if (!default_audio_state) {
- default_audio_state = audio_init(NULL, errp);
- if (!default_audio_state) {
+ if (!default_audio_be) {
+ default_audio_be = audio_init(NULL, errp);
+ if (!default_audio_be) {
if (!QSIMPLEQ_EMPTY(&audiodevs)) {
error_append_hint(errp, "Perhaps you wanted to use -audio or set audiodev=%s?\n",
QSIMPLEQ_FIRST(&audiodevs)->dev->id);
@@ -1809,21 +1809,21 @@ AudioState *audio_get_default_audio_state(Error **errp)
}
}
- return default_audio_state;
+ return default_audio_be;
}
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) {
+ if (!card->be) {
+ card->be = audio_get_default_audio_be(errp);
+ if (!card->be) {
return false;
}
}
card->name = g_strdup (name);
memset (&card->entries, 0, sizeof (card->entries));
- QLIST_INSERT_HEAD(&card->state->card_head, card, entries);
+ QLIST_INSERT_HEAD(&card->be->card_head, card, entries);
return true;
}
@@ -1837,7 +1837,7 @@ void AUD_remove_card (QEMUSoundCard *card)
static struct audio_pcm_ops capture_pcm_ops;
CaptureVoiceOut *AUD_add_capture(
- AudioState *s,
+ AudioBackend *s,
struct audsettings *as,
struct audio_capture_ops *ops,
void *cb_opaque
@@ -2220,7 +2220,7 @@ int audio_buffer_bytes(AudiodevPerDirectionOptions *pdo,
audioformat_bytes_per_sample(as->fmt);
}
-AudioState *audio_state_by_name(const char *name, Error **errp)
+AudioBackend *audio_be_by_name(const char *name, Error **errp)
{
Object *obj = object_resolve_path_component(get_audiodevs_root(), name);
@@ -2228,15 +2228,15 @@ AudioState *audio_state_by_name(const char *name, Error **errp)
error_setg(errp, "audiodev '%s' not found", name);
return NULL;
} else {
- return AUDIO_STATE(obj);
+ return AUDIO_BACKEND(obj);
}
}
const char *audio_get_id(QEMUSoundCard *card)
{
- if (card->state) {
- assert(card->state->dev);
- return card->state->dev->id;
+ if (card->be) {
+ assert(card->be->dev);
+ return card->be->dev->id;
} else {
return "";
}
@@ -2305,19 +2305,19 @@ AudiodevList *qmp_query_audiodevs(Error **errp)
return ret;
}
-static const TypeInfo audio_state_info = {
- .name = TYPE_AUDIO_STATE,
+static const TypeInfo audio_be_info = {
+ .name = TYPE_AUDIO_BACKEND,
.parent = TYPE_OBJECT,
- .instance_size = sizeof(AudioState),
- .instance_init = audio_state_init,
- .instance_finalize = audio_state_finalize,
+ .instance_size = sizeof(AudioBackend),
+ .instance_init = audio_be_init,
+ .instance_finalize = audio_be_finalize,
.abstract = false, /* TODO: subclass drivers and make it abstract */
- .class_size = sizeof(AudioStateClass),
+ .class_size = sizeof(AudioBackendClass),
};
static void register_types(void)
{
- type_register_static(&audio_state_info);
+ type_register_static(&audio_be_info);
}
type_init(register_types);
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index 908214a170..49cef38e3e 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -458,7 +458,7 @@ listener_in_vanished_cb(GDBusConnection *connection,
}
static gboolean
-dbus_audio_register_listener(AudioState *s,
+dbus_audio_register_listener(AudioBackend *s,
GDBusMethodInvocation *invocation,
#ifdef G_OS_UNIX
GUnixFDList *fd_list,
@@ -615,7 +615,7 @@ dbus_audio_register_listener(AudioState *s,
}
static gboolean
-dbus_audio_register_out_listener(AudioState *s,
+dbus_audio_register_out_listener(AudioBackend *s,
GDBusMethodInvocation *invocation,
#ifdef G_OS_UNIX
GUnixFDList *fd_list,
@@ -631,7 +631,7 @@ dbus_audio_register_out_listener(AudioState *s,
}
static gboolean
-dbus_audio_register_in_listener(AudioState *s,
+dbus_audio_register_in_listener(AudioBackend *s,
GDBusMethodInvocation *invocation,
#ifdef G_OS_UNIX
GUnixFDList *fd_list,
@@ -646,7 +646,7 @@ dbus_audio_register_in_listener(AudioState *s,
}
static void
-dbus_audio_set_server(AudioState *s, GDBusObjectManagerServer *server, bool p2p)
+dbus_audio_set_server(AudioBackend *s, GDBusObjectManagerServer *server, bool p2p)
{
DBusAudio *da = s->drv_opaque;
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index c5858284a1..4a549b26a2 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -107,13 +107,13 @@ static void oss_anal_close (int *fdp)
static void oss_helper_poll_out (void *opaque)
{
- AudioState *s = opaque;
+ AudioBackend *s = opaque;
audio_run(s, "oss_poll_out");
}
static void oss_helper_poll_in (void *opaque)
{
- AudioState *s = opaque;
+ AudioBackend *s = opaque;
audio_run(s, "oss_poll_in");
}
diff --git a/audio/wavcapture.c b/audio/wavcapture.c
index 0fbc695d23..b33a38ff45 100644
--- a/audio/wavcapture.c
+++ b/audio/wavcapture.c
@@ -103,7 +103,7 @@ static struct capture_ops wav_capture_ops = {
.info = wav_capture_info
};
-int wav_start_capture(AudioState *state, CaptureState *s, const char *path,
+int wav_start_capture(AudioBackend *state, CaptureState *s, const char *path,
int freq, int bits, int nchannels)
{
WAVState *wav;
diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c
index 48ef830292..e0b0949918 100644
--- a/hw/audio/pcspk.c
+++ b/hw/audio/pcspk.c
@@ -196,7 +196,7 @@ static void pcspk_realizefn(DeviceState *dev, Error **errp)
isa_register_ioport(isadev, &s->ioport, s->iobase);
- if (s->card.state && AUD_register_card(s_spk, &s->card, errp)) {
+ if (s->card.be && AUD_register_card(s_spk, &s->card, errp)) {
pcspk_audio_init(s);
}
}
diff --git a/hw/core/machine.c b/hw/core/machine.c
index cd63803000..28d2833c5d 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -760,7 +760,7 @@ static void machine_set_audiodev(Object *obj, const char *value,
{
MachineState *ms = MACHINE(obj);
- if (!audio_state_by_name(value, errp)) {
+ if (!audio_be_by_name(value, errp)) {
return;
}
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 1f810b7ddf..c83a52fc62 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -499,16 +499,16 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
{
const Property *prop = opaque;
QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
- AudioState *state;
+ AudioBackend *state;
g_autofree char *str = NULL;
if (!visit_type_str(v, name, &str, errp)) {
return;
}
- state = audio_state_by_name(str, errp);
+ state = audio_be_by_name(str, errp);
if (state) {
- card->state = state;
+ card->be = state;
}
}
diff --git a/ui/dbus.c b/ui/dbus.c
index dd0336702d..84cff47ec7 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -220,16 +220,16 @@ dbus_display_complete(UserCreatable *uc, Error **errp)
}
if (dd->audiodev && *dd->audiodev) {
- AudioState *audio_state = audio_state_by_name(dd->audiodev, errp);
- if (!audio_state) {
+ AudioBackend *audio_be = audio_be_by_name(dd->audiodev, errp);
+ if (!audio_be) {
return;
}
- if (!g_str_equal(audio_state->drv->name, "dbus")) {
+ if (!g_str_equal(audio_be->drv->name, "dbus")) {
error_setg(errp, "Audiodev '%s' is not compatible with DBus",
dd->audiodev);
return;
}
- audio_state->drv->set_dbus_server(audio_state, dd->server, dd->p2p);
+ audio_be->drv->set_dbus_server(audio_be, dd->server, dd->p2p);
}
consoles = g_array_new(FALSE, FALSE, sizeof(guint32));
diff --git a/ui/vnc.c b/ui/vnc.c
index 77c823bf2e..0094ec680c 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1276,7 +1276,7 @@ static void audio_add(VncState *vs)
ops.destroy = audio_capture_destroy;
ops.capture = audio_capture;
- vs->audio_cap = AUD_add_capture(vs->vd->audio_state, &vs->as, &ops, vs);
+ vs->audio_cap = AUD_add_capture(vs->vd->audio_be, &vs->as, &ops, vs);
if (!vs->audio_cap) {
error_report("Failed to add audio capture");
}
@@ -2193,7 +2193,7 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
send_ext_key_event_ack(vs);
break;
case VNC_ENCODING_AUDIO:
- if (vs->vd->audio_state) {
+ if (vs->vd->audio_be) {
vnc_set_feature(vs, VNC_FEATURE_AUDIO);
send_ext_audio_ack(vs);
}
@@ -4236,12 +4236,12 @@ void vnc_display_open(const char *id, Error **errp)
audiodev = qemu_opt_get(opts, "audiodev");
if (audiodev) {
- vd->audio_state = audio_state_by_name(audiodev, errp);
- if (!vd->audio_state) {
+ vd->audio_be = audio_be_by_name(audiodev, errp);
+ if (!vd->audio_be) {
goto fail;
}
} else {
- vd->audio_state = audio_get_default_audio_state(NULL);
+ vd->audio_be = audio_get_default_audio_be(NULL);
}
device_id = qemu_opt_get(opts, "display");
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 27/35] audio: remove QEMUSoundCard
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (25 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 26/35] audio: rename AudioState -> AudioBackend marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-30 16:43 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 28/35] audio/dbus: use a helper function to set the backend dbus server marcandre.lureau
` (8 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
There is no clear need for this extra intermediary structure between
the audio backend and its user.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
---
audio/audio.h | 18 ++++++------------
audio/audio_int.h | 3 ---
audio/audio_template.h | 22 ++++++++++------------
hw/audio/lm4549.h | 2 +-
include/hw/audio/asc.h | 2 +-
include/hw/audio/virtio-snd.h | 2 +-
include/hw/display/xlnx_dp.h | 2 +-
include/hw/isa/vt82c686.h | 2 +-
include/hw/qdev-properties-system.h | 2 +-
audio/audio.c | 29 ++++++++++-------------------
hw/audio/ac97.c | 25 ++++++++++++-------------
hw/audio/adlib.c | 9 ++++-----
hw/audio/asc.c | 9 +++------
hw/audio/cs4231a.c | 8 ++++----
hw/audio/es1370.c | 23 +++++++++++------------
hw/audio/gus.c | 9 ++++-----
hw/audio/hda-codec.c | 15 +++++++--------
hw/audio/lm4549.c | 8 ++++----
hw/audio/pcspk.c | 9 +++++----
hw/audio/pl041.c | 2 +-
hw/audio/sb16.c | 16 ++++++++--------
hw/audio/via-ac97.c | 9 ++++-----
hw/audio/virtio-snd.c | 13 ++++++-------
hw/audio/wm8750.c | 23 +++++++++++------------
hw/core/qdev-properties-system.c | 11 +++++------
hw/display/xlnx_dp.c | 6 +++---
hw/usb/dev-audio.c | 11 +++++------
27 files changed, 129 insertions(+), 161 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index 1d56f111ea..fdbc33ae0c 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -69,18 +69,12 @@ struct AudioBackendClass {
};
typedef struct AudioBackend AudioBackend;
-typedef struct QEMUSoundCard {
- char *name;
- AudioBackend *be;
- QLIST_ENTRY (QEMUSoundCard) entries;
-} QEMUSoundCard;
typedef struct QEMUAudioTimeStamp {
uint64_t old_ts;
} QEMUAudioTimeStamp;
-bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp);
-void AUD_remove_card (QEMUSoundCard *card);
+bool AUD_backend_check (AudioBackend **be, Error **errp);
CaptureVoiceOut *AUD_add_capture(
AudioBackend *s,
struct audsettings *as,
@@ -90,7 +84,7 @@ CaptureVoiceOut *AUD_add_capture(
void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque);
SWVoiceOut *AUD_open_out (
- QEMUSoundCard *card,
+ AudioBackend *be,
SWVoiceOut *sw,
const char *name,
void *callback_opaque,
@@ -98,7 +92,7 @@ SWVoiceOut *AUD_open_out (
struct audsettings *settings
);
-void AUD_close_out (QEMUSoundCard *card, SWVoiceOut *sw);
+void AUD_close_out (AudioBackend *be, SWVoiceOut *sw);
size_t AUD_write (SWVoiceOut *sw, void *pcm_buf, size_t size);
int AUD_get_buffer_size_out (SWVoiceOut *sw);
void AUD_set_active_out (SWVoiceOut *sw, int on);
@@ -132,7 +126,7 @@ AUD_set_volume_in_lr(SWVoiceIn *sw, bool mut, uint8_t lvol, uint8_t rvol) {
}
SWVoiceIn *AUD_open_in (
- QEMUSoundCard *card,
+ AudioBackend *be,
SWVoiceIn *sw,
const char *name,
void *callback_opaque,
@@ -140,7 +134,7 @@ SWVoiceIn *AUD_open_in (
struct audsettings *settings
);
-void AUD_close_in (QEMUSoundCard *card, SWVoiceIn *sw);
+void AUD_close_in (AudioBackend *be, SWVoiceIn *sw);
size_t AUD_read (SWVoiceIn *sw, void *pcm_buf, size_t size);
void AUD_set_active_in (SWVoiceIn *sw, int on);
int AUD_is_active_in (SWVoiceIn *sw);
@@ -166,7 +160,7 @@ void audio_help(void);
AudioBackend *audio_be_by_name(const char *name, Error **errp);
AudioBackend *audio_get_default_audio_be(Error **errp);
-const char *audio_get_id(QEMUSoundCard *card);
+const char *audio_be_get_id(AudioBackend *be);
#define DEFINE_AUDIO_PROPERTIES(_s, _f) \
DEFINE_PROP_AUDIODEV("audiodev", _s, _f)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index 338af38fd1..c4453b3a29 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -111,7 +111,6 @@ typedef struct HWVoiceIn {
} HWVoiceIn;
struct SWVoiceOut {
- QEMUSoundCard *card;
AudioBackend *s;
struct audio_pcm_info info;
t_sample *conv;
@@ -128,7 +127,6 @@ struct SWVoiceOut {
};
struct SWVoiceIn {
- QEMUSoundCard *card;
AudioBackend *s;
int active;
struct audio_pcm_info info;
@@ -248,7 +246,6 @@ typedef struct AudioBackend {
void *drv_opaque;
QEMUTimer *ts;
- QLIST_HEAD (card_listhead, QEMUSoundCard) card_head;
QLIST_HEAD (hw_in_listhead, HWVoiceIn) hw_head_in;
QLIST_HEAD (hw_out_listhead, HWVoiceOut) hw_head_out;
QLIST_HEAD (cap_listhead, CaptureVoiceOut) cap_head;
diff --git a/audio/audio_template.h b/audio/audio_template.h
index b3c10a0709..d621008f38 100644
--- a/audio/audio_template.h
+++ b/audio/audio_template.h
@@ -473,11 +473,11 @@ static void glue (audio_close_, TYPE) (SW *sw)
g_free (sw);
}
-void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw)
+void glue(AUD_close_, TYPE)(AudioBackend *be, SW *sw)
{
if (sw) {
- if (audio_bug(__func__, !card)) {
- dolog ("card=%p\n", card);
+ if (audio_bug(__func__, !be)) {
+ dolog("backend=%p\n", be);
return;
}
@@ -486,7 +486,7 @@ void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw)
}
SW *glue (AUD_open_, TYPE) (
- QEMUSoundCard *card,
+ AudioBackend *be,
SW *sw,
const char *name,
void *callback_opaque ,
@@ -494,16 +494,15 @@ SW *glue (AUD_open_, TYPE) (
struct audsettings *as
)
{
- AudioBackend *s;
+ AudioBackend *s = be;
AudiodevPerDirectionOptions *pdo;
- if (audio_bug(__func__, !card || !name || !callback_fn || !as)) {
- dolog ("card=%p name=%p callback_fn=%p as=%p\n",
- card, name, callback_fn, as);
+ if (audio_bug(__func__, !be || !name || !callback_fn || !as)) {
+ dolog("backend=%p name=%p callback_fn=%p as=%p\n",
+ be, name, callback_fn, as);
goto fail;
}
- s = card->be;
pdo = glue(audio_get_pdo_, TYPE)(s->dev);
ldebug ("open %s, freq %d, nchannels %d, fmt %d\n",
@@ -524,7 +523,7 @@ SW *glue (AUD_open_, TYPE) (
}
if (!pdo->fixed_settings && sw) {
- glue (AUD_close_, TYPE) (card, sw);
+ glue(AUD_close_, TYPE)(be, sw);
sw = NULL;
}
@@ -548,7 +547,6 @@ SW *glue (AUD_open_, TYPE) (
}
}
- sw->card = card;
sw->vol = nominal_volume;
sw->callback.fn = callback_fn;
sw->callback.opaque = callback_opaque;
@@ -562,7 +560,7 @@ SW *glue (AUD_open_, TYPE) (
return sw;
fail:
- glue (AUD_close_, TYPE) (card, sw);
+ glue(AUD_close_, TYPE)(be, sw);
return NULL;
}
diff --git a/hw/audio/lm4549.h b/hw/audio/lm4549.h
index 61c3ab12dd..1d858e2a04 100644
--- a/hw/audio/lm4549.h
+++ b/hw/audio/lm4549.h
@@ -21,7 +21,7 @@ typedef void (*lm4549_callback)(void *opaque);
typedef struct {
- QEMUSoundCard card;
+ AudioBackend *audio_be;
SWVoiceOut *voice;
uint32_t voice_is_active;
diff --git a/include/hw/audio/asc.h b/include/hw/audio/asc.h
index 04fac270b6..a60c2f597c 100644
--- a/include/hw/audio/asc.h
+++ b/include/hw/audio/asc.h
@@ -61,7 +61,7 @@ struct ASCState {
MemoryRegion mem_regs;
MemoryRegion mem_extregs;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
SWVoiceOut *voice;
uint8_t *mixbuf;
int samples;
diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h
index 8dafedb276..0ad80bc9be 100644
--- a/include/hw/audio/virtio-snd.h
+++ b/include/hw/audio/virtio-snd.h
@@ -216,7 +216,7 @@ struct VirtIOSound {
VirtQueue *queues[VIRTIO_SND_VQ_MAX];
uint64_t features;
VirtIOSoundPCM *pcm;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
VMChangeStateEntry *vmstate;
virtio_snd_config snd_conf;
QemuMutex cmdq_mutex;
diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h
index e86a87f235..802a1427c9 100644
--- a/include/hw/display/xlnx_dp.h
+++ b/include/hw/display/xlnx_dp.h
@@ -84,7 +84,7 @@ struct XlnxDPState {
struct PixmanPlane v_plane;
struct PixmanPlane bout_plane;
- QEMUSoundCard aud_card;
+ AudioBackend *audio_be;
SWVoiceOut *amixer_output_stream;
int16_t audio_buffer_0[AUD_CHBUF_MAX_DEPTH];
int16_t audio_buffer_1[AUD_CHBUF_MAX_DEPTH];
diff --git a/include/hw/isa/vt82c686.h b/include/hw/isa/vt82c686.h
index da1722daf2..48c412ce81 100644
--- a/include/hw/isa/vt82c686.h
+++ b/include/hw/isa/vt82c686.h
@@ -24,7 +24,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(ViaAC97State, VIA_AC97);
struct ViaAC97State {
PCIDevice dev;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
MemoryRegion sgd;
MemoryRegion fm;
MemoryRegion midi;
diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h
index 9601a11a09..1bd7a7634b 100644
--- a/include/hw/qdev-properties-system.h
+++ b/include/hw/qdev-properties-system.h
@@ -87,7 +87,7 @@ extern const PropertyInfo qdev_prop_virtio_gpu_output_list;
.set_default = true)
#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
+ DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, AudioBackend *)
#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) \
DEFINE_PROP(_name, _state, _field, qdev_prop_uuid, QemuUUID)
diff --git a/audio/audio.c b/audio/audio.c
index 8044d55c5c..46282f86d6 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1620,7 +1620,6 @@ static void audio_be_init(Object *obj)
QLIST_INIT(&s->hw_head_out);
QLIST_INIT(&s->hw_head_in);
QLIST_INIT(&s->cap_head);
- QLIST_INIT(&s->card_head);
s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
@@ -1812,28 +1811,20 @@ AudioBackend *audio_get_default_audio_be(Error **errp)
return default_audio_be;
}
-bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp)
+bool AUD_backend_check (AudioBackend **be, Error **errp)
{
- if (!card->be) {
- card->be = audio_get_default_audio_be(errp);
- if (!card->be) {
+ assert(be != NULL);
+
+ if (!*be) {
+ *be = audio_get_default_audio_be(errp);
+ if (!*be) {
return false;
}
}
- card->name = g_strdup (name);
- memset (&card->entries, 0, sizeof (card->entries));
- QLIST_INSERT_HEAD(&card->be->card_head, card, entries);
-
return true;
}
-void AUD_remove_card (QEMUSoundCard *card)
-{
- QLIST_REMOVE (card, entries);
- g_free (card->name);
-}
-
static struct audio_pcm_ops capture_pcm_ops;
CaptureVoiceOut *AUD_add_capture(
@@ -2232,11 +2223,11 @@ AudioBackend *audio_be_by_name(const char *name, Error **errp)
}
}
-const char *audio_get_id(QEMUSoundCard *card)
+const char *audio_be_get_id(AudioBackend *be)
{
- if (card->be) {
- assert(card->be->dev);
- return card->be->dev->id;
+ if (be) {
+ assert(be->dev);
+ return be->dev->id;
} else {
return "";
}
diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
index c3e5f9c8bb..a91bf52b95 100644
--- a/hw/audio/ac97.c
+++ b/hw/audio/ac97.c
@@ -120,7 +120,7 @@ typedef struct AC97BusMasterRegs {
struct AC97LinkState {
PCIDevice dev;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
uint32_t glob_cnt;
uint32_t glob_sta;
uint32_t cas;
@@ -320,7 +320,7 @@ static void open_voice(AC97LinkState *s, int index, int freq)
switch (index) {
case PI_INDEX:
s->voice_pi = AUD_open_in(
- &s->card,
+ s->audio_be,
s->voice_pi,
"ac97.pi",
s,
@@ -331,7 +331,7 @@ static void open_voice(AC97LinkState *s, int index, int freq)
case PO_INDEX:
s->voice_po = AUD_open_out(
- &s->card,
+ s->audio_be,
s->voice_po,
"ac97.po",
s,
@@ -342,7 +342,7 @@ static void open_voice(AC97LinkState *s, int index, int freq)
case MC_INDEX:
s->voice_mc = AUD_open_in(
- &s->card,
+ s->audio_be,
s->voice_mc,
"ac97.mc",
s,
@@ -355,17 +355,17 @@ static void open_voice(AC97LinkState *s, int index, int freq)
s->invalid_freq[index] = freq;
switch (index) {
case PI_INDEX:
- AUD_close_in(&s->card, s->voice_pi);
+ AUD_close_in(s->audio_be, s->voice_pi);
s->voice_pi = NULL;
break;
case PO_INDEX:
- AUD_close_out(&s->card, s->voice_po);
+ AUD_close_out(s->audio_be, s->voice_po);
s->voice_po = NULL;
break;
case MC_INDEX:
- AUD_close_in(&s->card, s->voice_mc);
+ AUD_close_in(s->audio_be, s->voice_mc);
s->voice_mc = NULL;
break;
}
@@ -1275,7 +1275,7 @@ static void ac97_realize(PCIDevice *dev, Error **errp)
AC97LinkState *s = AC97(dev);
uint8_t *c = s->dev.config;
- if (!AUD_register_card ("ac97", &s->card, errp)) {
+ if (!AUD_backend_check (&s->audio_be, errp)) {
return;
}
@@ -1320,14 +1320,13 @@ static void ac97_exit(PCIDevice *dev)
{
AC97LinkState *s = AC97(dev);
- AUD_close_in(&s->card, s->voice_pi);
- AUD_close_out(&s->card, s->voice_po);
- AUD_close_in(&s->card, s->voice_mc);
- AUD_remove_card(&s->card);
+ AUD_close_in(s->audio_be, s->voice_pi);
+ AUD_close_out(s->audio_be, s->voice_po);
+ AUD_close_in(s->audio_be, s->voice_mc);
}
static const Property ac97_properties[] = {
- DEFINE_AUDIO_PROPERTIES(AC97LinkState, card),
+ DEFINE_AUDIO_PROPERTIES(AC97LinkState, audio_be),
};
static void ac97_class_init(ObjectClass *klass, const void *data)
diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index 45c0a458f2..4e6c80b8e0 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -57,7 +57,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(AdlibState, ADLIB)
struct AdlibState {
ISADevice parent_obj;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
uint32_t freq;
uint32_t port;
int ticking[2];
@@ -240,7 +240,6 @@ static void Adlib_fini (AdlibState *s)
s->active = 0;
s->enabled = 0;
- AUD_remove_card (&s->card);
}
static MemoryRegionPortio adlib_portio_list[] = {
@@ -255,7 +254,7 @@ static void adlib_realizefn (DeviceState *dev, Error **errp)
AdlibState *s = ADLIB(dev);
struct audsettings as;
- if (!AUD_register_card ("adlib", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -275,7 +274,7 @@ static void adlib_realizefn (DeviceState *dev, Error **errp)
as.endianness = HOST_BIG_ENDIAN;
s->voice = AUD_open_out (
- &s->card,
+ s->audio_be,
s->voice,
"adlib",
s,
@@ -298,7 +297,7 @@ static void adlib_realizefn (DeviceState *dev, Error **errp)
}
static const Property adlib_properties[] = {
- DEFINE_AUDIO_PROPERTIES(AdlibState, card),
+ DEFINE_AUDIO_PROPERTIES(AdlibState, audio_be),
DEFINE_PROP_UINT32 ("iobase", AdlibState, port, 0x220),
DEFINE_PROP_UINT32 ("freq", AdlibState, freq, 44100),
};
diff --git a/hw/audio/asc.c b/hw/audio/asc.c
index 991316e984..5c3f6c8f86 100644
--- a/hw/audio/asc.c
+++ b/hw/audio/asc.c
@@ -634,8 +634,6 @@ static void asc_unrealize(DeviceState *dev)
g_free(s->mixbuf);
g_free(s->silentbuf);
-
- AUD_remove_card(&s->card);
}
static void asc_realize(DeviceState *dev, Error **errp)
@@ -643,7 +641,7 @@ static void asc_realize(DeviceState *dev, Error **errp)
ASCState *s = ASC(dev);
struct audsettings as;
- if (!AUD_register_card("Apple Sound Chip", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -652,10 +650,9 @@ static void asc_realize(DeviceState *dev, Error **errp)
as.fmt = AUDIO_FORMAT_U8;
as.endianness = HOST_BIG_ENDIAN;
- s->voice = AUD_open_out(&s->card, s->voice, "asc.out", s, asc_out_cb,
+ s->voice = AUD_open_out(s->audio_be, s->voice, "asc.out", s, asc_out_cb,
&as);
if (!s->voice) {
- AUD_remove_card(&s->card);
error_setg(errp, "Initializing audio stream failed");
return;
}
@@ -702,7 +699,7 @@ static void asc_init(Object *obj)
}
static const Property asc_properties[] = {
- DEFINE_AUDIO_PROPERTIES(ASCState, card),
+ DEFINE_AUDIO_PROPERTIES(ASCState, audio_be),
DEFINE_PROP_UINT8("asctype", ASCState, type, ASC_TYPE_ASC),
};
diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c
index 0a5d614f8b..ec9643b817 100644
--- a/hw/audio/cs4231a.c
+++ b/hw/audio/cs4231a.c
@@ -69,7 +69,7 @@ DECLARE_INSTANCE_CHECKER(CSState, CS4231A,
struct CSState {
ISADevice dev;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
MemoryRegion ioports;
qemu_irq pic;
uint32_t regs[CS_REGS];
@@ -328,7 +328,7 @@ static void cs_reset_voices (CSState *s, uint32_t val)
}
s->voice = AUD_open_out (
- &s->card,
+ s->audio_be,
s->voice,
"cs4231a",
s,
@@ -678,7 +678,7 @@ static void cs4231a_realizefn (DeviceState *dev, Error **errp)
return;
}
- if (!AUD_register_card ("cs4231a", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -694,7 +694,7 @@ static void cs4231a_realizefn (DeviceState *dev, Error **errp)
}
static const Property cs4231a_properties[] = {
- DEFINE_AUDIO_PROPERTIES(CSState, card),
+ DEFINE_AUDIO_PROPERTIES(CSState, audio_be),
DEFINE_PROP_UINT32 ("iobase", CSState, port, 0x534),
DEFINE_PROP_UINT32 ("irq", CSState, irq, 9),
DEFINE_PROP_UINT32 ("dma", CSState, dma, 3),
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 721c02be0a..0628f03310 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -258,7 +258,7 @@ struct chan {
struct ES1370State {
PCIDevice dev;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
MemoryRegion io;
struct chan chan[NB_CHANNELS];
SWVoiceOut *dac_voice[2];
@@ -330,10 +330,10 @@ static void es1370_reset (ES1370State *s)
d->scount = 0;
d->leftover = 0;
if (i == ADC_CHANNEL) {
- AUD_close_in (&s->card, s->adc_voice);
+ AUD_close_in(s->audio_be, s->adc_voice);
s->adc_voice = NULL;
} else {
- AUD_close_out (&s->card, s->dac_voice[i]);
+ AUD_close_out(s->audio_be, s->dac_voice[i]);
s->dac_voice[i] = NULL;
}
}
@@ -412,7 +412,7 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl)
if (i == ADC_CHANNEL) {
s->adc_voice =
AUD_open_in (
- &s->card,
+ s->audio_be,
s->adc_voice,
"es1370.adc",
s,
@@ -422,7 +422,7 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl)
} else {
s->dac_voice[i] =
AUD_open_out (
- &s->card,
+ s->audio_be,
s->dac_voice[i],
i ? "es1370.dac2" : "es1370.dac1",
s,
@@ -784,12 +784,12 @@ static int es1370_post_load (void *opaque, int version_id)
for (i = 0; i < NB_CHANNELS; ++i) {
if (i == ADC_CHANNEL) {
if (s->adc_voice) {
- AUD_close_in (&s->card, s->adc_voice);
+ AUD_close_in(s->audio_be, s->adc_voice);
s->adc_voice = NULL;
}
} else {
if (s->dac_voice[i]) {
- AUD_close_out (&s->card, s->dac_voice[i]);
+ AUD_close_out(s->audio_be, s->dac_voice[i]);
s->dac_voice[i] = NULL;
}
}
@@ -833,7 +833,7 @@ static void es1370_realize(PCIDevice *dev, Error **errp)
ES1370State *s = ES1370(dev);
uint8_t *c = s->dev.config;
- if (!AUD_register_card ("es1370", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -861,15 +861,14 @@ static void es1370_exit(PCIDevice *dev)
int i;
for (i = 0; i < 2; ++i) {
- AUD_close_out(&s->card, s->dac_voice[i]);
+ AUD_close_out(s->audio_be, s->dac_voice[i]);
}
- AUD_close_in(&s->card, s->adc_voice);
- AUD_remove_card(&s->card);
+ AUD_close_in(s->audio_be, s->adc_voice);
}
static const Property es1370_properties[] = {
- DEFINE_AUDIO_PROPERTIES(ES1370State, card),
+ DEFINE_AUDIO_PROPERTIES(ES1370State, audio_be),
};
static void es1370_class_init(ObjectClass *klass, const void *data)
diff --git a/hw/audio/gus.c b/hw/audio/gus.c
index d13a95eb5a..d253329021 100644
--- a/hw/audio/gus.c
+++ b/hw/audio/gus.c
@@ -49,7 +49,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(GUSState, GUS)
struct GUSState {
ISADevice dev;
GUSEmuState emu;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
uint32_t freq;
uint32_t port;
int pos, left, shift, irqs;
@@ -242,7 +242,7 @@ static void gus_realizefn (DeviceState *dev, Error **errp)
IsaDmaClass *k;
struct audsettings as;
- if (!AUD_register_card ("gus", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -258,7 +258,7 @@ static void gus_realizefn (DeviceState *dev, Error **errp)
as.endianness = HOST_BIG_ENDIAN;
s->voice = AUD_open_out (
- &s->card,
+ s->audio_be,
NULL,
"gus",
s,
@@ -267,7 +267,6 @@ static void gus_realizefn (DeviceState *dev, Error **errp)
);
if (!s->voice) {
- AUD_remove_card (&s->card);
error_setg(errp, "No voice");
return;
}
@@ -292,7 +291,7 @@ static void gus_realizefn (DeviceState *dev, Error **errp)
}
static const Property gus_properties[] = {
- DEFINE_AUDIO_PROPERTIES(GUSState, card),
+ DEFINE_AUDIO_PROPERTIES(GUSState, audio_be),
DEFINE_PROP_UINT32 ("freq", GUSState, freq, 44100),
DEFINE_PROP_UINT32 ("iobase", GUSState, port, 0x240),
DEFINE_PROP_UINT32 ("irq", GUSState, emu.gusirq, 7),
diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c
index cc87557954..f7ae2aa1fd 100644
--- a/hw/audio/hda-codec.c
+++ b/hw/audio/hda-codec.c
@@ -178,7 +178,7 @@ struct HDAAudioState {
HDACodecDevice hda;
const char *name;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
const desc_codec *desc;
HDAAudioStream st[4];
bool running_compat[16];
@@ -491,7 +491,7 @@ static void hda_audio_setup(HDAAudioStream *st)
} else {
cb = hda_audio_compat_output_cb;
}
- st->voice.out = AUD_open_out(&st->state->card, st->voice.out,
+ st->voice.out = AUD_open_out(st->state->audio_be, st->voice.out,
st->node->name, st, cb, &st->as);
} else {
if (use_timer) {
@@ -500,7 +500,7 @@ static void hda_audio_setup(HDAAudioStream *st)
} else {
cb = hda_audio_compat_input_cb;
}
- st->voice.in = AUD_open_in(&st->state->card, st->voice.in,
+ st->voice.in = AUD_open_in(st->state->audio_be, st->voice.in,
st->node->name, st, cb, &st->as);
}
}
@@ -696,7 +696,7 @@ static void hda_audio_init(HDACodecDevice *hda,
const desc_param *param;
uint32_t i, type;
- if (!AUD_register_card("hda", &a->card, errp)) {
+ if (!AUD_backend_check(&a->audio_be, errp)) {
return;
}
@@ -754,12 +754,11 @@ static void hda_audio_exit(HDACodecDevice *hda)
}
timer_free(st->buft);
if (st->output) {
- AUD_close_out(&a->card, st->voice.out);
+ AUD_close_out(a->audio_be, st->voice.out);
} else {
- AUD_close_in(&a->card, st->voice.in);
+ AUD_close_in(a->audio_be, st->voice.in);
}
}
- AUD_remove_card(&a->card);
}
static int hda_audio_post_load(void *opaque, int version)
@@ -858,7 +857,7 @@ static const VMStateDescription vmstate_hda_audio = {
};
static const Property hda_audio_properties[] = {
- DEFINE_AUDIO_PROPERTIES(HDAAudioState, card),
+ DEFINE_AUDIO_PROPERTIES(HDAAudioState, audio_be),
DEFINE_PROP_UINT32("debug", HDAAudioState, debug, 0),
DEFINE_PROP_BOOL("mixer", HDAAudioState, mixer, true),
DEFINE_PROP_BOOL("use-timer", HDAAudioState, use_timer, true),
diff --git a/hw/audio/lm4549.c b/hw/audio/lm4549.c
index dccbf56068..c51ec0e66f 100644
--- a/hw/audio/lm4549.c
+++ b/hw/audio/lm4549.c
@@ -190,7 +190,7 @@ void lm4549_write(lm4549_state *s,
as.endianness = 0;
s->voice = AUD_open_out(
- &s->card,
+ s->audio_be,
s->voice,
"lm4549.out",
s,
@@ -260,7 +260,7 @@ static int lm4549_post_load(void *opaque, int version_id)
as.endianness = 0;
s->voice = AUD_open_out(
- &s->card,
+ s->audio_be,
s->voice,
"lm4549.out",
s,
@@ -282,7 +282,7 @@ void lm4549_init(lm4549_state *s, lm4549_callback data_req_cb, void* opaque,
struct audsettings as;
/* Register an audio card */
- if (!AUD_register_card("lm4549", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -300,7 +300,7 @@ void lm4549_init(lm4549_state *s, lm4549_callback data_req_cb, void* opaque,
as.endianness = 0;
s->voice = AUD_open_out(
- &s->card,
+ s->audio_be,
s->voice,
"lm4549.out",
s,
diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c
index e0b0949918..a41f5b11f0 100644
--- a/hw/audio/pcspk.c
+++ b/hw/audio/pcspk.c
@@ -49,7 +49,7 @@ struct PCSpkState {
MemoryRegion ioport;
uint32_t iobase;
uint8_t sample_buf[PCSPK_BUF_LEN];
- QEMUSoundCard card;
+ AudioBackend *audio_be;
SWVoiceOut *voice;
PITCommonState *pit;
unsigned int pit_count;
@@ -123,7 +123,7 @@ static int pcspk_audio_init(PCSpkState *s)
return 0;
}
- s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as);
+ s->voice = AUD_open_out(s->audio_be, s->voice, s_spk, s, pcspk_callback, &as);
if (!s->voice) {
error_report("pcspk: Could not open voice");
return -1;
@@ -196,8 +196,9 @@ static void pcspk_realizefn(DeviceState *dev, Error **errp)
isa_register_ioport(isadev, &s->ioport, s->iobase);
- if (s->card.be && AUD_register_card(s_spk, &s->card, errp)) {
+ if (s->audio_be && AUD_backend_check(&s->audio_be, errp)) {
pcspk_audio_init(s);
+ return;
}
}
@@ -221,7 +222,7 @@ static const VMStateDescription vmstate_spk = {
};
static const Property pcspk_properties[] = {
- DEFINE_AUDIO_PROPERTIES(PCSpkState, card),
+ DEFINE_AUDIO_PROPERTIES(PCSpkState, audio_be),
DEFINE_PROP_UINT32("iobase", PCSpkState, iobase, 0x61),
DEFINE_PROP_BOOL("migrate", PCSpkState, migrate, true),
DEFINE_PROP_LINK("pit", PCSpkState, pit, TYPE_PIT_COMMON, PITCommonState *),
diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c
index 5d9d6c1178..fd3d09611f 100644
--- a/hw/audio/pl041.c
+++ b/hw/audio/pl041.c
@@ -626,7 +626,7 @@ static const VMStateDescription vmstate_pl041 = {
};
static const Property pl041_device_properties[] = {
- DEFINE_AUDIO_PROPERTIES(PL041State, codec.card),
+ DEFINE_AUDIO_PROPERTIES(PL041State, codec.audio_be),
/* Non-compact FIFO depth property */
DEFINE_PROP_UINT32("nc_fifo_depth", PL041State, fifo_depth,
DEFAULT_FIFO_DEPTH),
diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c
index e86aafd488..8109d124d1 100644
--- a/hw/audio/sb16.c
+++ b/hw/audio/sb16.c
@@ -54,7 +54,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(SB16State, SB16)
struct SB16State {
ISADevice parent_obj;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
qemu_irq pic;
uint32_t irq;
uint32_t dma;
@@ -216,7 +216,7 @@ static void continue_dma8 (SB16State *s)
as.endianness = 0;
s->voice = AUD_open_out (
- &s->card,
+ s->audio_be,
s->voice,
"sb16",
s,
@@ -379,7 +379,7 @@ static void dma_cmd (SB16State *s, uint8_t cmd, uint8_t d0, int dma_len)
as.endianness = 0;
s->voice = AUD_open_out (
- &s->card,
+ s->audio_be,
s->voice,
"sb16",
s,
@@ -880,7 +880,7 @@ static void legacy_reset (SB16State *s)
as.endianness = 0;
s->voice = AUD_open_out (
- &s->card,
+ s->audio_be,
s->voice,
"sb16",
s,
@@ -1287,7 +1287,7 @@ static int sb16_post_load (void *opaque, int version_id)
SB16State *s = opaque;
if (s->voice) {
- AUD_close_out (&s->card, s->voice);
+ AUD_close_out(s->audio_be, s->voice);
s->voice = NULL;
}
@@ -1303,7 +1303,7 @@ static int sb16_post_load (void *opaque, int version_id)
as.endianness = 0;
s->voice = AUD_open_out (
- &s->card,
+ s->audio_be,
s->voice,
"sb16",
s,
@@ -1401,7 +1401,7 @@ static void sb16_realizefn (DeviceState *dev, Error **errp)
SB16State *s = SB16 (dev);
IsaDmaClass *k;
- if (!AUD_register_card ("sb16", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -1440,7 +1440,7 @@ static void sb16_realizefn (DeviceState *dev, Error **errp)
}
static const Property sb16_properties[] = {
- DEFINE_AUDIO_PROPERTIES(SB16State, card),
+ DEFINE_AUDIO_PROPERTIES(SB16State, audio_be),
DEFINE_PROP_UINT32 ("version", SB16State, ver, 0x0405), /* 4.5 */
DEFINE_PROP_UINT32 ("iobase", SB16State, port, 0x220),
DEFINE_PROP_UINT32 ("irq", SB16State, irq, 5),
diff --git a/hw/audio/via-ac97.c b/hw/audio/via-ac97.c
index 62341e5600..019d296853 100644
--- a/hw/audio/via-ac97.c
+++ b/hw/audio/via-ac97.c
@@ -239,7 +239,7 @@ static void open_voice_out(ViaAC97State *s)
.fmt = s->aur.type & BIT(5) ? AUDIO_FORMAT_S16 : AUDIO_FORMAT_S8,
.endianness = 0,
};
- s->vo = AUD_open_out(&s->card, s->vo, "via-ac97.out", s, out_cb, &as);
+ s->vo = AUD_open_out(s->audio_be, s->vo, "via-ac97.out", s, out_cb, &as);
}
static uint64_t sgd_read(void *opaque, hwaddr addr, unsigned size)
@@ -426,7 +426,7 @@ static void via_ac97_realize(PCIDevice *pci_dev, Error **errp)
ViaAC97State *s = VIA_AC97(pci_dev);
Object *o = OBJECT(s);
- if (!AUD_register_card ("via-ac97", &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -455,12 +455,11 @@ static void via_ac97_exit(PCIDevice *dev)
{
ViaAC97State *s = VIA_AC97(dev);
- AUD_close_out(&s->card, s->vo);
- AUD_remove_card(&s->card);
+ AUD_close_out(s->audio_be, s->vo);
}
static const Property via_ac97_properties[] = {
- DEFINE_AUDIO_PROPERTIES(ViaAC97State, card),
+ DEFINE_AUDIO_PROPERTIES(ViaAC97State, audio_be),
};
static void via_ac97_class_init(ObjectClass *klass, const void *data)
diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c
index 88777977a9..9101560f38 100644
--- a/hw/audio/virtio-snd.c
+++ b/hw/audio/virtio-snd.c
@@ -78,7 +78,7 @@ static const VMStateDescription vmstate_virtio_snd = {
};
static const Property virtio_snd_properties[] = {
- DEFINE_AUDIO_PROPERTIES(VirtIOSound, card),
+ DEFINE_AUDIO_PROPERTIES(VirtIOSound, audio_be),
DEFINE_PROP_UINT32("jacks", VirtIOSound, snd_conf.jacks,
VIRTIO_SOUND_JACK_DEFAULT),
DEFINE_PROP_UINT32("streams", VirtIOSound, snd_conf.streams,
@@ -391,10 +391,10 @@ static void virtio_snd_pcm_close(VirtIOSoundPCMStream *stream)
if (stream) {
virtio_snd_pcm_flush(stream);
if (stream->info.direction == VIRTIO_SND_D_OUTPUT) {
- AUD_close_out(&stream->pcm->snd->card, stream->voice.out);
+ AUD_close_out(stream->pcm->snd->audio_be, stream->voice.out);
stream->voice.out = NULL;
} else if (stream->info.direction == VIRTIO_SND_D_INPUT) {
- AUD_close_in(&stream->pcm->snd->card, stream->voice.in);
+ AUD_close_in(stream->pcm->snd->audio_be, stream->voice.in);
stream->voice.in = NULL;
}
}
@@ -457,7 +457,7 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, uint32_t stream_id)
stream->as = as;
if (stream->info.direction == VIRTIO_SND_D_OUTPUT) {
- stream->voice.out = AUD_open_out(&s->card,
+ stream->voice.out = AUD_open_out(s->audio_be,
stream->voice.out,
"virtio-sound.out",
stream,
@@ -465,7 +465,7 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, uint32_t stream_id)
&as);
AUD_set_volume_out_lr(stream->voice.out, 0, 255, 255);
} else {
- stream->voice.in = AUD_open_in(&s->card,
+ stream->voice.in = AUD_open_in(s->audio_be,
stream->voice.in,
"virtio-sound.in",
stream,
@@ -1053,7 +1053,7 @@ static void virtio_snd_realize(DeviceState *dev, Error **errp)
return;
}
- if (!AUD_register_card("virtio-sound", &vsnd->card, errp)) {
+ if (!AUD_backend_check(&vsnd->audio_be, errp)) {
return;
}
@@ -1330,7 +1330,6 @@ static void virtio_snd_unrealize(DeviceState *dev)
g_free(vsnd->pcm);
vsnd->pcm = NULL;
}
- AUD_remove_card(&vsnd->card);
qemu_mutex_destroy(&vsnd->cmdq_mutex);
virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_CONTROL]);
virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_EVENT]);
diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c
index 7a36c4bd3f..d399c335c3 100644
--- a/hw/audio/wm8750.c
+++ b/hw/audio/wm8750.c
@@ -34,7 +34,7 @@ struct WM8750State {
uint8_t i2c_data[2];
int i2c_len;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
SWVoiceIn *adc_voice[IN_PORT_N];
SWVoiceOut *dac_voice[OUT_PORT_N];
int enable;
@@ -188,12 +188,12 @@ static void wm8750_set_format(WM8750State *s)
for (i = 0; i < IN_PORT_N; i ++)
if (s->adc_voice[i]) {
- AUD_close_in(&s->card, s->adc_voice[i]);
+ AUD_close_in(s->audio_be, s->adc_voice[i]);
s->adc_voice[i] = NULL;
}
for (i = 0; i < OUT_PORT_N; i ++)
if (s->dac_voice[i]) {
- AUD_close_out(&s->card, s->dac_voice[i]);
+ AUD_close_out(s->audio_be, s->dac_voice[i]);
s->dac_voice[i] = NULL;
}
@@ -206,11 +206,11 @@ static void wm8750_set_format(WM8750State *s)
in_fmt.freq = s->adc_hz;
in_fmt.fmt = AUDIO_FORMAT_S16;
- s->adc_voice[0] = AUD_open_in(&s->card, s->adc_voice[0],
+ s->adc_voice[0] = AUD_open_in(s->audio_be, s->adc_voice[0],
CODEC ".input1", s, wm8750_audio_in_cb, &in_fmt);
- s->adc_voice[1] = AUD_open_in(&s->card, s->adc_voice[1],
+ s->adc_voice[1] = AUD_open_in(s->audio_be, s->adc_voice[1],
CODEC ".input2", s, wm8750_audio_in_cb, &in_fmt);
- s->adc_voice[2] = AUD_open_in(&s->card, s->adc_voice[2],
+ s->adc_voice[2] = AUD_open_in(s->audio_be, s->adc_voice[2],
CODEC ".input3", s, wm8750_audio_in_cb, &in_fmt);
/* Setup output */
@@ -219,12 +219,12 @@ static void wm8750_set_format(WM8750State *s)
out_fmt.freq = s->dac_hz;
out_fmt.fmt = AUDIO_FORMAT_S16;
- s->dac_voice[0] = AUD_open_out(&s->card, s->dac_voice[0],
+ s->dac_voice[0] = AUD_open_out(s->audio_be, s->dac_voice[0],
CODEC ".speaker", s, wm8750_audio_out_cb, &out_fmt);
- s->dac_voice[1] = AUD_open_out(&s->card, s->dac_voice[1],
+ s->dac_voice[1] = AUD_open_out(s->audio_be, s->dac_voice[1],
CODEC ".headphone", s, wm8750_audio_out_cb, &out_fmt);
/* MONOMIX is also in stereo for simplicity */
- s->dac_voice[2] = AUD_open_out(&s->card, s->dac_voice[2],
+ s->dac_voice[2] = AUD_open_out(s->audio_be, s->dac_voice[2],
CODEC ".monomix", s, wm8750_audio_out_cb, &out_fmt);
/* no sense emulating OUT3 which is a mix of other outputs */
@@ -624,7 +624,7 @@ static void wm8750_realize(DeviceState *dev, Error **errp)
{
WM8750State *s = WM8750(dev);
- if (!AUD_register_card(CODEC, &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -637,7 +637,6 @@ static void wm8750_fini(I2CSlave *i2c)
WM8750State *s = WM8750(i2c);
wm8750_reset(I2C_SLAVE(s));
- AUD_remove_card(&s->card);
g_free(s);
}
#endif
@@ -707,7 +706,7 @@ void wm8750_set_bclk_in(void *opaque, int new_hz)
}
static const Property wm8750_properties[] = {
- DEFINE_AUDIO_PROPERTIES(WM8750State, card),
+ DEFINE_AUDIO_PROPERTIES(WM8750State, audio_be),
};
static void wm8750_class_init(ObjectClass *klass, const void *data)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index c83a52fc62..578cbdc015 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -487,18 +487,17 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
void *opaque, Error **errp)
{
const Property *prop = opaque;
- QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
- char *p = g_strdup(audio_get_id(card));
+ AudioBackend **be = object_field_prop_ptr(obj, prop);
+ g_autofree char *id = g_strdup(audio_be_get_id(*be));
- visit_type_str(v, name, &p, errp);
- g_free(p);
+ visit_type_str(v, name, (char **)&id, errp);
}
static void set_audiodev(Object *obj, Visitor *v, const char* name,
void *opaque, Error **errp)
{
const Property *prop = opaque;
- QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
+ AudioBackend **be = object_field_prop_ptr(obj, prop);
AudioBackend *state;
g_autofree char *str = NULL;
@@ -508,7 +507,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
state = audio_be_by_name(str, errp);
if (state) {
- card->be = state;
+ *be = state;
}
}
diff --git a/hw/display/xlnx_dp.c b/hw/display/xlnx_dp.c
index 882ae3c4b4..96cbb1b3a7 100644
--- a/hw/display/xlnx_dp.c
+++ b/hw/display/xlnx_dp.c
@@ -1306,7 +1306,7 @@ static void xlnx_dp_realize(DeviceState *dev, Error **errp)
DisplaySurface *surface;
struct audsettings as;
- if (!AUD_register_card("xlnx_dp.audio", &s->aud_card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -1328,7 +1328,7 @@ static void xlnx_dp_realize(DeviceState *dev, Error **errp)
as.fmt = AUDIO_FORMAT_S16;
as.endianness = 0;
- s->amixer_output_stream = AUD_open_out(&s->aud_card,
+ s->amixer_output_stream = AUD_open_out(s->audio_be,
s->amixer_output_stream,
"xlnx_dp.audio.out",
s,
@@ -1392,7 +1392,7 @@ static void xlnx_dp_reset(DeviceState *dev)
}
static const Property xlnx_dp_device_properties[] = {
- DEFINE_AUDIO_PROPERTIES(XlnxDPState, aud_card),
+ DEFINE_AUDIO_PROPERTIES(XlnxDPState, audio_be),
};
static void xlnx_dp_class_init(ObjectClass *oc, const void *data)
diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c
index f59e5a53f0..c8e032ab64 100644
--- a/hw/usb/dev-audio.c
+++ b/hw/usb/dev-audio.c
@@ -635,7 +635,7 @@ static uint8_t *streambuf_get(struct streambuf *buf, size_t *len)
struct USBAudioState {
/* qemu interfaces */
USBDevice dev;
- QEMUSoundCard card;
+ AudioBackend *audio_be;
/* state */
struct {
@@ -931,8 +931,7 @@ static void usb_audio_unrealize(USBDevice *dev)
}
usb_audio_set_output_altset(s, ALTSET_OFF);
- AUD_close_out(&s->card, s->out.voice);
- AUD_remove_card(&s->card);
+ AUD_close_out(s->audio_be, s->out.voice);
streambuf_fini(&s->out.buf);
}
@@ -942,7 +941,7 @@ static void usb_audio_realize(USBDevice *dev, Error **errp)
USBAudioState *s = USB_AUDIO(dev);
int i;
- if (!AUD_register_card(TYPE_USB_AUDIO, &s->card, errp)) {
+ if (!AUD_backend_check(&s->audio_be, errp)) {
return;
}
@@ -979,7 +978,7 @@ static void usb_audio_reinit(USBDevice *dev, unsigned channels)
s->out.as.endianness = 0;
streambuf_init(&s->out.buf, s->buffer, s->out.channels);
- s->out.voice = AUD_open_out(&s->card, s->out.voice, TYPE_USB_AUDIO,
+ s->out.voice = AUD_open_out(s->audio_be, s->out.voice, TYPE_USB_AUDIO,
s, output_callback, &s->out.as);
AUD_set_volume_out(s->out.voice, &s->out.vol);
AUD_set_active_out(s->out.voice, 0);
@@ -991,7 +990,7 @@ static const VMStateDescription vmstate_usb_audio = {
};
static const Property usb_audio_properties[] = {
- DEFINE_AUDIO_PROPERTIES(USBAudioState, card),
+ DEFINE_AUDIO_PROPERTIES(USBAudioState, audio_be),
DEFINE_PROP_UINT32("debug", USBAudioState, debug, 0),
DEFINE_PROP_UINT32("buffer", USBAudioState, buffer_user, 0),
DEFINE_PROP_BOOL("multi", USBAudioState, multi, false),
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 28/35] audio/dbus: use a helper function to set the backend dbus server
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (26 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 27/35] audio: remove QEMUSoundCard marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-30 16:38 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 29/35] audio: move audio.h under include/qemu/ marcandre.lureau
` (7 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/audio.h | 9 +++++++++
audio/audio_int.h | 5 ++++-
audio/audio.c | 17 +++++++++++++++++
audio/dbusaudio.c | 9 +++++++--
ui/dbus.c | 8 +-------
5 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index fdbc33ae0c..78c27462ba 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -28,6 +28,9 @@
#include "qemu/queue.h"
#include "qapi/qapi-types-audio.h"
#include "hw/qdev-properties-system.h"
+#ifdef CONFIG_GIO
+#include "gio/gio.h"
+#endif
typedef void (*audio_callback_fn) (void *opaque, int avail);
@@ -161,6 +164,12 @@ void audio_help(void);
AudioBackend *audio_be_by_name(const char *name, Error **errp);
AudioBackend *audio_get_default_audio_be(Error **errp);
const char *audio_be_get_id(AudioBackend *be);
+#ifdef CONFIG_GIO
+bool audio_be_set_dbus_server(AudioBackend *be,
+ GDBusObjectManagerServer *server,
+ bool p2p,
+ Error **errp);
+#endif
#define DEFINE_AUDIO_PROPERTIES(_s, _f) \
DEFINE_PROP_AUDIODEV("audiodev", _s, _f)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index c4453b3a29..d66f7aac32 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -148,7 +148,10 @@ struct audio_driver {
void *(*init) (Audiodev *, Error **);
void (*fini) (void *);
#ifdef CONFIG_GIO
- void (*set_dbus_server)(AudioBackend *s, GDBusObjectManagerServer *manager, bool p2p);
+ bool (*set_dbus_server)(AudioBackend *be,
+ GDBusObjectManagerServer *manager,
+ bool p2p,
+ Error **errp);
#endif
struct audio_pcm_ops *pcm_ops;
int max_voices_out;
diff --git a/audio/audio.c b/audio/audio.c
index 46282f86d6..ab33b7f9a7 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -2223,6 +2223,23 @@ AudioBackend *audio_be_by_name(const char *name, Error **errp)
}
}
+#ifdef CONFIG_GIO
+bool audio_be_set_dbus_server(AudioBackend *be,
+ GDBusObjectManagerServer *server,
+ bool p2p,
+ Error **errp)
+{
+ assert(be != NULL);
+
+ if (!be->drv->set_dbus_server) {
+ error_setg(errp, "Audiodev '%s' is not compatible with DBus", be->dev->id);
+ return false;
+ }
+
+ return be->drv->set_dbus_server(be, server, p2p, errp);
+}
+#endif
+
const char *audio_be_get_id(AudioBackend *be)
{
if (be) {
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index 49cef38e3e..c97c34b486 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -645,8 +645,11 @@ dbus_audio_register_in_listener(AudioBackend *s,
arg_listener, false);
}
-static void
-dbus_audio_set_server(AudioBackend *s, GDBusObjectManagerServer *server, bool p2p)
+static bool
+dbus_audio_set_server(AudioBackend *s,
+ GDBusObjectManagerServer *server,
+ bool p2p,
+ Error **errp)
{
DBusAudio *da = s->drv_opaque;
@@ -669,6 +672,8 @@ dbus_audio_set_server(AudioBackend *s, GDBusObjectManagerServer *server, bool p2
g_dbus_object_skeleton_add_interface(G_DBUS_OBJECT_SKELETON(da->audio),
G_DBUS_INTERFACE_SKELETON(da->iface));
g_dbus_object_manager_server_export(da->server, da->audio);
+
+ return true;
}
static struct audio_pcm_ops dbus_pcm_ops = {
diff --git a/ui/dbus.c b/ui/dbus.c
index 84cff47ec7..fbe108af1e 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -221,15 +221,9 @@ dbus_display_complete(UserCreatable *uc, Error **errp)
if (dd->audiodev && *dd->audiodev) {
AudioBackend *audio_be = audio_be_by_name(dd->audiodev, errp);
- if (!audio_be) {
+ if (!audio_be || !audio_be_set_dbus_server(audio_be, dd->server, dd->p2p, errp)) {
return;
}
- if (!g_str_equal(audio_be->drv->name, "dbus")) {
- error_setg(errp, "Audiodev '%s' is not compatible with DBus",
- dd->audiodev);
- return;
- }
- audio_be->drv->set_dbus_server(audio_be, dd->server, dd->p2p);
}
consoles = g_array_new(FALSE, FALSE, sizeof(guint32));
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 29/35] audio: move audio.h under include/qemu/
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (27 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 28/35] audio/dbus: use a helper function to set the backend dbus server marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-30 16:39 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 30/35] audio: remove dependency on spice header marcandre.lureau
` (6 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
---
MAINTAINERS | 1 +
audio/audio_int.h | 2 +-
hw/audio/lm4549.h | 2 +-
include/hw/audio/asc.h | 2 +-
include/hw/audio/virtio-snd.h | 2 +-
include/hw/display/xlnx_dp.h | 2 +-
include/hw/isa/vt82c686.h | 2 +-
{audio => include/qemu}/audio.h | 0
include/system/replay.h | 2 +-
ui/vnc.h | 2 +-
audio/alsaaudio.c | 2 +-
audio/audio.c | 2 +-
audio/audio_win_int.c | 2 +-
audio/dbusaudio.c | 2 +-
audio/dsoundaudio.c | 2 +-
audio/jackaudio.c | 2 +-
audio/mixeng.c | 2 +-
audio/noaudio.c | 2 +-
audio/ossaudio.c | 2 +-
audio/paaudio.c | 2 +-
audio/pwaudio.c | 2 +-
audio/sdlaudio.c | 2 +-
audio/sndioaudio.c | 2 +-
audio/spiceaudio.c | 2 +-
audio/wavaudio.c | 2 +-
hw/arm/integratorcp.c | 2 +-
hw/arm/musicpal.c | 2 +-
hw/arm/realview.c | 2 +-
hw/arm/versatilepb.c | 2 +-
hw/arm/vexpress.c | 2 +-
hw/arm/xlnx-zcu102.c | 2 +-
hw/audio/ac97.c | 2 +-
hw/audio/adlib.c | 2 +-
hw/audio/asc.c | 2 +-
hw/audio/cs4231a.c | 2 +-
hw/audio/es1370.c | 2 +-
hw/audio/gus.c | 2 +-
hw/audio/hda-codec.c | 2 +-
hw/audio/lm4549.c | 2 +-
hw/audio/marvell_88w8618.c | 2 +-
hw/audio/pcspk.c | 2 +-
hw/audio/sb16.c | 2 +-
hw/audio/wm8750.c | 2 +-
hw/core/machine.c | 2 +-
hw/core/qdev-properties-system.c | 2 +-
hw/ppc/prep.c | 2 +-
hw/usb/dev-audio.c | 2 +-
replay/replay-audio.c | 2 +-
system/runstate.c | 2 +-
system/vl.c | 2 +-
ui/dbus.c | 3 +--
audio/coreaudio.m | 2 +-
scripts/codeconverter/codeconverter/test_regexps.py | 2 +-
53 files changed, 52 insertions(+), 52 deletions(-)
rename {audio => include/qemu}/audio.h (100%)
diff --git a/MAINTAINERS b/MAINTAINERS
index f33f95ceea..a4f650a88f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2975,6 +2975,7 @@ X: audio/paaudio.c
X: audio/sdlaudio.c
X: audio/sndioaudio.c
X: audio/spiceaudio.c
+F: include/qemu/audio.h
F: qapi/audio.json
ALSA Audio backend
diff --git a/audio/audio_int.h b/audio/audio_int.h
index d66f7aac32..8d4f4ca8fc 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -29,7 +29,7 @@
#define FLOAT_MIXENG
/* #define RECIPROCAL */
#endif
-#include "audio.h"
+#include "qemu/audio.h"
#include "mixeng.h"
#ifdef CONFIG_GIO
diff --git a/hw/audio/lm4549.h b/hw/audio/lm4549.h
index 1d858e2a04..bbd73057bf 100644
--- a/hw/audio/lm4549.h
+++ b/hw/audio/lm4549.h
@@ -12,7 +12,7 @@
#ifndef HW_LM4549_H
#define HW_LM4549_H
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "exec/hwaddr.h"
typedef void (*lm4549_callback)(void *opaque);
diff --git a/include/hw/audio/asc.h b/include/hw/audio/asc.h
index a60c2f597c..bb51e9a3d1 100644
--- a/include/hw/audio/asc.h
+++ b/include/hw/audio/asc.h
@@ -14,7 +14,7 @@
#define HW_AUDIO_ASC_H
#include "hw/sysbus.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#define ASC_FREQ 22257
diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h
index 0ad80bc9be..c176066584 100644
--- a/include/hw/audio/virtio-snd.h
+++ b/include/hw/audio/virtio-snd.h
@@ -17,7 +17,7 @@
#define QEMU_VIRTIO_SOUND_H
#include "hw/virtio/virtio.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "standard-headers/linux/virtio_ids.h"
#include "standard-headers/linux/virtio_snd.h"
diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h
index 802a1427c9..af859e477d 100644
--- a/include/hw/display/xlnx_dp.h
+++ b/include/hw/display/xlnx_dp.h
@@ -33,7 +33,7 @@
#include "qemu/fifo8.h"
#include "qemu/units.h"
#include "hw/dma/xlnx_dpdma.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "qom/object.h"
#include "hw/ptimer.h"
diff --git a/include/hw/isa/vt82c686.h b/include/hw/isa/vt82c686.h
index 48c412ce81..ace9e6650e 100644
--- a/include/hw/isa/vt82c686.h
+++ b/include/hw/isa/vt82c686.h
@@ -2,7 +2,7 @@
#define HW_VT82C686_H
#include "hw/pci/pci_device.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#define TYPE_VT82C686B_ISA "vt82c686b-isa"
#define TYPE_VT82C686B_USB_UHCI "vt82c686b-usb-uhci"
diff --git a/audio/audio.h b/include/qemu/audio.h
similarity index 100%
rename from audio/audio.h
rename to include/qemu/audio.h
diff --git a/include/system/replay.h b/include/system/replay.h
index 1e63c0784c..68f91bdfbf 100644
--- a/include/system/replay.h
+++ b/include/system/replay.h
@@ -16,7 +16,7 @@
#include "qapi/qapi-types-run-state.h"
#include "qapi/qapi-types-ui.h"
#include "block/aio.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
/* replay clock kinds */
enum ReplayClockKind {
diff --git a/ui/vnc.h b/ui/vnc.h
index e2137c5ed1..4d8363ebf3 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -31,7 +31,7 @@
#include "qemu/thread.h"
#include "ui/clipboard.h"
#include "ui/console.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "qemu/bitmap.h"
#include "crypto/tlssession.h"
#include "qemu/buffer.h"
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index 797cb478e6..d1e4817081 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -26,7 +26,7 @@
#include <alsa/asoundlib.h>
#include "qemu/main-loop.h"
#include "qemu/module.h"
-#include "audio.h"
+#include "qemu/audio.h"
#include "trace.h"
#pragma GCC diagnostic ignored "-Waddress"
diff --git a/audio/audio.c b/audio/audio.c
index ab33b7f9a7..4bbe6b242f 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -23,7 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "audio.h"
+#include "qemu/audio.h"
#include "migration/vmstate.h"
#include "qemu/timer.h"
#include "qapi/error.h"
diff --git a/audio/audio_win_int.c b/audio/audio_win_int.c
index 316f118f50..44a8ff24a6 100644
--- a/audio/audio_win_int.c
+++ b/audio/audio_win_int.c
@@ -7,7 +7,7 @@
#include <mmreg.h>
#include <mmsystem.h>
-#include "audio.h"
+#include "qemu/audio.h"
#include "audio_int.h"
#include "audio_win_int.h"
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index c97c34b486..157d36428e 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -35,7 +35,7 @@
#include "ui/dbus-display1.h"
#define AUDIO_CAP "dbus"
-#include "audio.h"
+#include "qemu/audio.h"
#include "audio_int.h"
#include "trace.h"
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c
index bd00c50e80..8b773ded21 100644
--- a/audio/dsoundaudio.c
+++ b/audio/dsoundaudio.c
@@ -27,7 +27,7 @@
*/
#include "qemu/osdep.h"
-#include "audio.h"
+#include "qemu/audio.h"
#define AUDIO_CAP "dsound"
#include "audio_int.h"
diff --git a/audio/jackaudio.c b/audio/jackaudio.c
index 974a3caad3..28face9989 100644
--- a/audio/jackaudio.c
+++ b/audio/jackaudio.c
@@ -26,7 +26,7 @@
#include "qemu/module.h"
#include "qemu/atomic.h"
#include "qemu/main-loop.h"
-#include "audio.h"
+#include "qemu/audio.h"
#define AUDIO_CAP "jack"
#include "audio_int.h"
diff --git a/audio/mixeng.c b/audio/mixeng.c
index af9ec3d4d2..e63c76e021 100644
--- a/audio/mixeng.c
+++ b/audio/mixeng.c
@@ -24,7 +24,7 @@
*/
#include "qemu/osdep.h"
#include "qemu/bswap.h"
-#include "audio.h"
+#include "qemu/audio.h"
#define AUDIO_CAP "mixeng"
#include "audio_int.h"
diff --git a/audio/noaudio.c b/audio/noaudio.c
index 34ff1d2a27..b136b74e26 100644
--- a/audio/noaudio.c
+++ b/audio/noaudio.c
@@ -24,7 +24,7 @@
#include "qemu/osdep.h"
#include "qemu/module.h"
-#include "audio.h"
+#include "qemu/audio.h"
#define AUDIO_CAP "noaudio"
#include "audio_int.h"
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index 4a549b26a2..5ba91f6793 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -29,7 +29,7 @@
#include "qemu/module.h"
#include "qemu/host-utils.h"
#include "qapi/error.h"
-#include "audio.h"
+#include "qemu/audio.h"
#include "trace.h"
#define AUDIO_CAP "oss"
diff --git a/audio/paaudio.c b/audio/paaudio.c
index 93030f3fc8..8eb80ede45 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -2,7 +2,7 @@
#include "qemu/osdep.h"
#include "qemu/module.h"
-#include "audio.h"
+#include "qemu/audio.h"
#include "qapi/error.h"
#include <pulse/pulseaudio.h>
diff --git a/audio/pwaudio.c b/audio/pwaudio.c
index 8e13b58286..8f6c0900c8 100644
--- a/audio/pwaudio.c
+++ b/audio/pwaudio.c
@@ -10,7 +10,7 @@
#include "qemu/osdep.h"
#include "qemu/module.h"
-#include "audio.h"
+#include "qemu/audio.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
#include <spa/param/audio/format-utils.h>
diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c
index 641357e5ee..4ef73c8dfb 100644
--- a/audio/sdlaudio.c
+++ b/audio/sdlaudio.c
@@ -27,7 +27,7 @@
#include <SDL_thread.h>
#include "qemu/module.h"
#include "qapi/error.h"
-#include "audio.h"
+#include "qemu/audio.h"
#ifndef _WIN32
#ifdef __sun__
diff --git a/audio/sndioaudio.c b/audio/sndioaudio.c
index 8eb35e1e53..f4f53b1c6f 100644
--- a/audio/sndioaudio.c
+++ b/audio/sndioaudio.c
@@ -18,7 +18,7 @@
#include <poll.h>
#include <sndio.h>
#include "qemu/main-loop.h"
-#include "audio.h"
+#include "qemu/audio.h"
#include "trace.h"
#define AUDIO_CAP "sndio"
diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c
index 7e737bff9a..77ba89ffaa 100644
--- a/audio/spiceaudio.c
+++ b/audio/spiceaudio.c
@@ -26,7 +26,7 @@
#include "ui/qemu-spice.h"
#define AUDIO_CAP "spice"
-#include "audio.h"
+#include "qemu/audio.h"
#include "audio_int.h"
#if SPICE_INTERFACE_PLAYBACK_MAJOR > 1 || SPICE_INTERFACE_PLAYBACK_MINOR >= 3
diff --git a/audio/wavaudio.c b/audio/wavaudio.c
index a098b20cad..4d9c921305 100644
--- a/audio/wavaudio.c
+++ b/audio/wavaudio.c
@@ -24,7 +24,7 @@
#include "qemu/osdep.h"
#include "qemu/module.h"
-#include "audio.h"
+#include "qemu/audio.h"
#define AUDIO_CAP "wav"
#include "audio_int.h"
diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
index b1d8fbd470..81ed051b98 100644
--- a/hw/arm/integratorcp.c
+++ b/hw/arm/integratorcp.c
@@ -26,7 +26,7 @@
#include "hw/irq.h"
#include "hw/sd/sd.h"
#include "qom/object.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "target/arm/cpu-qom.h"
#define TYPE_INTEGRATOR_CM "integrator_core"
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
index 329b162eb2..6032301bb6 100644
--- a/hw/arm/musicpal.c
+++ b/hw/arm/musicpal.c
@@ -36,7 +36,7 @@
#include "qemu/cutils.h"
#include "qom/object.h"
#include "hw/net/mv88w8618_eth.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "qemu/error-report.h"
#include "target/arm/cpu-qom.h"
diff --git a/hw/arm/realview.c b/hw/arm/realview.c
index 5c9050490b..892bdc8db2 100644
--- a/hw/arm/realview.c
+++ b/hw/arm/realview.c
@@ -29,7 +29,7 @@
#include "hw/irq.h"
#include "hw/i2c/arm_sbcon_i2c.h"
#include "hw/sd/sd.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "target/arm/cpu-qom.h"
#define SMP_BOOT_ADDR 0xe0000000
diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
index 5cf1a70d10..cba77864e8 100644
--- a/hw/arm/versatilepb.c
+++ b/hw/arm/versatilepb.c
@@ -25,7 +25,7 @@
#include "hw/char/pl011.h"
#include "hw/sd/sd.h"
#include "qom/object.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "target/arm/cpu-qom.h"
#include "qemu/log.h"
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
index 35f8d05ea1..14d38cea8b 100644
--- a/hw/arm/vexpress.c
+++ b/hw/arm/vexpress.c
@@ -44,7 +44,7 @@
#include "hw/sd/sd.h"
#include "qobject/qlist.h"
#include "qom/object.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "target/arm/cpu-qom.h"
#define VEXPRESS_BOARD_ID 0x8e0
diff --git a/hw/arm/xlnx-zcu102.c b/hw/arm/xlnx-zcu102.c
index 14b6641a71..4ed346a88d 100644
--- a/hw/arm/xlnx-zcu102.c
+++ b/hw/arm/xlnx-zcu102.c
@@ -25,7 +25,7 @@
#include "system/device_tree.h"
#include "qom/object.h"
#include "net/can_emu.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
struct XlnxZCU102 {
MachineState parent_obj;
diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
index a91bf52b95..be7a39377f 100644
--- a/hw/audio/ac97.c
+++ b/hw/audio/ac97.c
@@ -19,7 +19,7 @@
#include "qemu/osdep.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/pci/pci_device.h"
#include "hw/qdev-properties.h"
#include "migration/vmstate.h"
diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index 4e6c80b8e0..19d3a5f128 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -26,7 +26,7 @@
#include "qapi/error.h"
#include "qemu/module.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
#include "qemu/error-report.h"
diff --git a/hw/audio/asc.c b/hw/audio/asc.c
index 5c3f6c8f86..0abb106979 100644
--- a/hw/audio/asc.c
+++ b/hw/audio/asc.c
@@ -15,7 +15,7 @@
#include "qapi/error.h"
#include "hw/sysbus.h"
#include "hw/irq.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/audio/asc.h"
#include "hw/qdev-properties.h"
#include "migration/vmstate.h"
diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c
index ec9643b817..98fdbc5b72 100644
--- a/hw/audio/cs4231a.c
+++ b/hw/audio/cs4231a.c
@@ -24,7 +24,7 @@
#include "qemu/osdep.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/irq.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index 0628f03310..9873ffadab 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -27,7 +27,7 @@
#include "qemu/osdep.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/pci/pci_device.h"
#include "migration/vmstate.h"
#include "qemu/cutils.h"
diff --git a/hw/audio/gus.c b/hw/audio/gus.c
index d253329021..68f89e994c 100644
--- a/hw/audio/gus.c
+++ b/hw/audio/gus.c
@@ -26,7 +26,7 @@
#include "qapi/error.h"
#include "qemu/module.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/irq.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c
index f7ae2aa1fd..e90c9de046 100644
--- a/hw/audio/hda-codec.c
+++ b/hw/audio/hda-codec.c
@@ -25,7 +25,7 @@
#include "qemu/host-utils.h"
#include "qemu/module.h"
#include "intel-hda-defs.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "trace.h"
#include "qom/object.h"
diff --git a/hw/audio/lm4549.c b/hw/audio/lm4549.c
index c51ec0e66f..745441bd79 100644
--- a/hw/audio/lm4549.c
+++ b/hw/audio/lm4549.c
@@ -15,7 +15,7 @@
#include "qemu/osdep.h"
#include "hw/hw.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "lm4549.h"
#include "migration/vmstate.h"
diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c
index c5c79d083a..a483f4e70d 100644
--- a/hw/audio/marvell_88w8618.c
+++ b/hw/audio/marvell_88w8618.c
@@ -16,7 +16,7 @@
#include "hw/irq.h"
#include "hw/qdev-properties.h"
#include "hw/audio/wm8750.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "qapi/error.h"
#include "qemu/module.h"
#include "qom/object.h"
diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c
index a41f5b11f0..916c56fa4c 100644
--- a/hw/audio/pcspk.c
+++ b/hw/audio/pcspk.c
@@ -25,7 +25,7 @@
#include "qemu/osdep.h"
#include "hw/isa/isa.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "qemu/module.h"
#include "qemu/timer.h"
#include "qemu/error-report.h"
diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c
index 8109d124d1..1e3c4caf5e 100644
--- a/hw/audio/sb16.c
+++ b/hw/audio/sb16.c
@@ -24,7 +24,7 @@
#include "qemu/osdep.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/irq.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c
index d399c335c3..336fb6d20b 100644
--- a/hw/audio/wm8750.c
+++ b/hw/audio/wm8750.c
@@ -12,7 +12,7 @@
#include "migration/vmstate.h"
#include "qemu/module.h"
#include "hw/audio/wm8750.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "qom/object.h"
#define IN_PORT_N 3
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 28d2833c5d..0580550e12 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -36,7 +36,7 @@
#include "hw/virtio/virtio-net.h"
#include "hw/virtio/virtio-iommu.h"
#include "hw/acpi/generic_event_device.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
GlobalProperty hw_compat_10_1[] = {
{ TYPE_ACPI_GED, "x-has-hest-addr", "false" },
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 578cbdc015..6560205f9f 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -27,7 +27,7 @@
#include "qemu/error-report.h"
#include "qdev-prop-internal.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "chardev/char-fe.h"
#include "system/block-backend.h"
#include "system/blockdev.h"
diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
index c730cb3429..d9c5d14cbd 100644
--- a/hw/ppc/prep.c
+++ b/hw/ppc/prep.c
@@ -46,7 +46,7 @@
#include "trace.h"
#include "elf.h"
#include "qemu/units.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
/* SMP is not enabled, for now */
#define MAX_CPUS 1
diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c
index c8e032ab64..8dd9d26599 100644
--- a/hw/usb/dev-audio.c
+++ b/hw/usb/dev-audio.c
@@ -35,7 +35,7 @@
#include "hw/usb.h"
#include "migration/vmstate.h"
#include "desc.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "qom/object.h"
static void usb_audio_reinit(USBDevice *dev, unsigned channels);
diff --git a/replay/replay-audio.c b/replay/replay-audio.c
index 3413801062..1b614f4137 100644
--- a/replay/replay-audio.c
+++ b/replay/replay-audio.c
@@ -13,7 +13,7 @@
#include "qemu/error-report.h"
#include "system/replay.h"
#include "replay-internal.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
void replay_audio_out(size_t *played)
{
diff --git a/system/runstate.c b/system/runstate.c
index 32467aa882..e3ec16ab74 100644
--- a/system/runstate.c
+++ b/system/runstate.c
@@ -23,7 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "block/block.h"
#include "block/export.h"
#include "chardev/char.h"
diff --git a/system/vl.c b/system/vl.c
index dc2ea4c298..29f5389151 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -87,7 +87,7 @@
#include "system/tpm.h"
#include "system/dma.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "system/cpus.h"
#include "system/cpu-timers.h"
#include "exec/icount.h"
diff --git a/ui/dbus.c b/ui/dbus.c
index fbe108af1e..d2dff33258 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -34,8 +34,7 @@
#include "ui/egl-helpers.h"
#include "ui/egl-context.h"
#endif
-#include "audio/audio.h"
-#include "audio/audio_int.h"
+#include "qemu/audio.h"
#include "qapi/error.h"
#include "trace.h"
diff --git a/audio/coreaudio.m b/audio/coreaudio.m
index cadd729d50..8b3cd6db16 100644
--- a/audio/coreaudio.m
+++ b/audio/coreaudio.m
@@ -28,7 +28,7 @@
#include "qemu/main-loop.h"
#include "qemu/module.h"
-#include "audio.h"
+#include "qemu/audio.h"
#define AUDIO_CAP "coreaudio"
#include "audio_int.h"
diff --git a/scripts/codeconverter/codeconverter/test_regexps.py b/scripts/codeconverter/codeconverter/test_regexps.py
index fe7354b473..b00e9ef15b 100644
--- a/scripts/codeconverter/codeconverter/test_regexps.py
+++ b/scripts/codeconverter/codeconverter/test_regexps.py
@@ -265,7 +265,7 @@ def test_initial_includes():
#include "qemu/osdep.h"
#include "hw/audio/model.h"
-#include "audio/audio.h"
+#include "qemu/audio.h"
#include "hw/pci/pci.h"
#include "migration/vmstate.h"
#include "qemu/module.h"
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 30/35] audio: remove dependency on spice header
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (28 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 29/35] audio: move audio.h under include/qemu/ marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:51 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 31/35] audio: cleanup, use bool for booleans marcandre.lureau
` (5 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
It is no longer required.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/audio/meson.build b/audio/meson.build
index 59f0a431d5..37789437fb 100644
--- a/audio/meson.build
+++ b/audio/meson.build
@@ -1,5 +1,5 @@
-system_ss.add([spice_headers, files('audio.c')])
system_ss.add(files(
+ 'audio.c',
'audio-hmp-cmds.c',
'mixeng.c',
'noaudio.c',
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 31/35] audio: cleanup, use bool for booleans
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (29 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 30/35] audio: remove dependency on spice header marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 32/35] audio: move capture API to own header marcandre.lureau
` (4 subsequent siblings)
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Use slightly better types for the job.
Fix some checkpatch issues.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
audio/audio_int.h | 12 ++++++------
audio/audio_template.h | 6 +++---
include/qemu/audio.h | 8 ++++----
audio/audio.c | 30 +++++++++++++++---------------
4 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index 8d4f4ca8fc..df13a466e4 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -70,9 +70,9 @@ typedef struct STSampleBuffer {
typedef struct HWVoiceOut {
AudioBackend *s;
- int enabled;
+ bool enabled;
int poll_mode;
- int pending_disable;
+ bool pending_disable;
struct audio_pcm_info info;
f_sample *clip;
@@ -91,7 +91,7 @@ typedef struct HWVoiceOut {
typedef struct HWVoiceIn {
AudioBackend *s;
- int enabled;
+ bool enabled;
int poll_mode;
struct audio_pcm_info info;
@@ -117,8 +117,8 @@ struct SWVoiceOut {
STSampleBuffer resample_buf;
void *rate;
size_t total_hw_samples_mixed;
- int active;
- int empty;
+ bool active;
+ bool empty;
HWVoiceOut *hw;
char *name;
struct mixeng_volume vol;
@@ -128,7 +128,7 @@ struct SWVoiceOut {
struct SWVoiceIn {
AudioBackend *s;
- int active;
+ bool active;
struct audio_pcm_info info;
void *rate;
size_t total_hw_samples_acquired;
diff --git a/audio/audio_template.h b/audio/audio_template.h
index d621008f38..7a8c431f2d 100644
--- a/audio/audio_template.h
+++ b/audio/audio_template.h
@@ -166,10 +166,10 @@ static int glue (audio_pcm_sw_init_, TYPE) (
audio_pcm_init_info (&sw->info, as);
sw->hw = hw;
- sw->active = 0;
+ sw->active = false;
#ifdef DAC
sw->total_hw_samples_mixed = 0;
- sw->empty = 1;
+ sw->empty = true;
#endif
if (sw->info.is_float) {
@@ -564,7 +564,7 @@ SW *glue (AUD_open_, TYPE) (
return NULL;
}
-int glue (AUD_is_active_, TYPE) (SW *sw)
+bool glue(AUD_is_active_, TYPE)(SW *sw)
{
return sw ? sw->active : 0;
}
diff --git a/include/qemu/audio.h b/include/qemu/audio.h
index 78c27462ba..a857955f51 100644
--- a/include/qemu/audio.h
+++ b/include/qemu/audio.h
@@ -98,8 +98,8 @@ SWVoiceOut *AUD_open_out (
void AUD_close_out (AudioBackend *be, SWVoiceOut *sw);
size_t AUD_write (SWVoiceOut *sw, void *pcm_buf, size_t size);
int AUD_get_buffer_size_out (SWVoiceOut *sw);
-void AUD_set_active_out (SWVoiceOut *sw, int on);
-int AUD_is_active_out (SWVoiceOut *sw);
+void AUD_set_active_out(SWVoiceOut *sw, bool on);
+bool AUD_is_active_out(SWVoiceOut *sw);
void AUD_init_time_stamp_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
uint64_t AUD_get_elapsed_usec_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
@@ -139,8 +139,8 @@ SWVoiceIn *AUD_open_in (
void AUD_close_in (AudioBackend *be, SWVoiceIn *sw);
size_t AUD_read (SWVoiceIn *sw, void *pcm_buf, size_t size);
-void AUD_set_active_in (SWVoiceIn *sw, int on);
-int AUD_is_active_in (SWVoiceIn *sw);
+void AUD_set_active_in(SWVoiceIn *sw, bool on);
+bool AUD_is_active_in(SWVoiceIn *sw);
void AUD_init_time_stamp_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
uint64_t AUD_get_elapsed_usec_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
diff --git a/audio/audio.c b/audio/audio.c
index 4bbe6b242f..748dd0da27 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -405,7 +405,7 @@ static void audio_notify_capture (CaptureVoiceOut *cap, audcnotification_e cmd)
}
}
-static void audio_capture_maybe_changed (CaptureVoiceOut *cap, int enabled)
+static void audio_capture_maybe_changed(CaptureVoiceOut *cap, bool enabled)
{
if (cap->hw.enabled != enabled) {
audcnotification_e cmd;
@@ -419,11 +419,11 @@ static void audio_recalc_and_notify_capture (CaptureVoiceOut *cap)
{
HWVoiceOut *hw = &cap->hw;
SWVoiceOut *sw;
- int enabled = 0;
+ bool enabled = false;
for (sw = hw->sw_head.lh_first; sw; sw = sw->entries.le_next) {
if (sw->active) {
- enabled = 1;
+ enabled = true;
break;
}
}
@@ -475,7 +475,7 @@ static int audio_attach_capture (HWVoiceOut *hw)
sw = &sc->sw;
sw->hw = hw_cap;
sw->info = hw->info;
- sw->empty = 1;
+ sw->empty = true;
sw->active = hw->enabled;
sw->vol = nominal_volume;
sw->rate = st_rate_start (sw->info.freq, hw_cap->info.freq);
@@ -911,7 +911,7 @@ int AUD_get_buffer_size_out(SWVoiceOut *sw)
return sw->hw->samples * sw->hw->info.bytes_per_frame;
}
-void AUD_set_active_out (SWVoiceOut *sw, int on)
+void AUD_set_active_out(SWVoiceOut *sw, bool on)
{
HWVoiceOut *hw;
@@ -928,7 +928,7 @@ void AUD_set_active_out (SWVoiceOut *sw, int on)
if (on) {
hw->pending_disable = 0;
if (!hw->enabled) {
- hw->enabled = 1;
+ hw->enabled = true;
if (s->vm_running) {
if (hw->pcm_ops->enable_out) {
hw->pcm_ops->enable_out(hw, true);
@@ -959,7 +959,7 @@ void AUD_set_active_out (SWVoiceOut *sw, int on)
}
}
-void AUD_set_active_in (SWVoiceIn *sw, int on)
+void AUD_set_active_in(SWVoiceIn *sw, bool on)
{
HWVoiceIn *hw;
@@ -974,7 +974,7 @@ void AUD_set_active_in (SWVoiceIn *sw, int on)
if (on) {
if (!hw->enabled) {
- hw->enabled = 1;
+ hw->enabled = true;
if (s->vm_running) {
if (hw->pcm_ops->enable_in) {
hw->pcm_ops->enable_in(hw, true);
@@ -993,7 +993,7 @@ void AUD_set_active_in (SWVoiceIn *sw, int on)
}
if (nb_active == 1) {
- hw->enabled = 0;
+ hw->enabled = false;
if (hw->pcm_ops->enable_in) {
hw->pcm_ops->enable_in(hw, false);
}
@@ -1152,8 +1152,8 @@ static void audio_run_out(AudioBackend *s)
sw = hw->sw_head.lh_first;
if (hw->pending_disable) {
- hw->enabled = 0;
- hw->pending_disable = 0;
+ hw->enabled = false;
+ hw->pending_disable = false;
if (hw->pcm_ops->enable_out) {
hw->pcm_ops->enable_out(hw, false);
}
@@ -1206,13 +1206,13 @@ static void audio_run_out(AudioBackend *s)
#ifdef DEBUG_OUT
dolog ("Disabling voice\n");
#endif
- hw->enabled = 0;
- hw->pending_disable = 0;
+ hw->enabled = false;
+ hw->pending_disable = false;
if (hw->pcm_ops->enable_out) {
hw->pcm_ops->enable_out(hw, false);
}
for (sc = hw->cap_head.lh_first; sc; sc = sc->entries.le_next) {
- sc->sw.active = 0;
+ sc->sw.active = false;
audio_recalc_and_notify_capture (sc->cap);
}
continue;
@@ -1257,7 +1257,7 @@ static void audio_run_out(AudioBackend *s)
sw->total_hw_samples_mixed -= played;
if (!sw->total_hw_samples_mixed) {
- sw->empty = 1;
+ sw->empty = true;
}
}
}
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 32/35] audio: move capture API to own header
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (30 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 31/35] audio: cleanup, use bool for booleans marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-30 16:40 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 33/35] audio: drop needless audio_driver "descr" field marcandre.lureau
` (3 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
For modularity/clarity reasons, move the capture API in a specific
header.
The current audio/ header license is MIT.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
MAINTAINERS | 2 +-
audio/audio_int.h | 1 +
include/qemu/audio-capture.h | 43 ++++++++++++++++++++++++++++++++++++
include/qemu/audio.h | 30 -------------------------
ui/vnc.h | 2 +-
5 files changed, 46 insertions(+), 32 deletions(-)
create mode 100644 include/qemu/audio-capture.h
diff --git a/MAINTAINERS b/MAINTAINERS
index a4f650a88f..355302cac4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2975,7 +2975,7 @@ X: audio/paaudio.c
X: audio/sdlaudio.c
X: audio/sndioaudio.c
X: audio/spiceaudio.c
-F: include/qemu/audio.h
+F: include/qemu/audio*.h
F: qapi/audio.json
ALSA Audio backend
diff --git a/audio/audio_int.h b/audio/audio_int.h
index df13a466e4..5834ebea5e 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -30,6 +30,7 @@
/* #define RECIPROCAL */
#endif
#include "qemu/audio.h"
+#include "qemu/audio-capture.h"
#include "mixeng.h"
#ifdef CONFIG_GIO
diff --git a/include/qemu/audio-capture.h b/include/qemu/audio-capture.h
new file mode 100644
index 0000000000..a07412db85
--- /dev/null
+++ b/include/qemu/audio-capture.h
@@ -0,0 +1,43 @@
+/*
+ * QEMU Audio subsystem
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef QEMU_AUDIO_CAPTURE_H
+#define QEMU_AUDIO_CAPTURE_H
+
+#include "audio.h"
+
+typedef struct CaptureVoiceOut CaptureVoiceOut;
+
+typedef enum {
+ AUD_CNOTIFY_ENABLE,
+ AUD_CNOTIFY_DISABLE
+} audcnotification_e;
+
+struct audio_capture_ops {
+ void (*notify) (void *opaque, audcnotification_e cmd);
+ void (*capture) (void *opaque, const void *buf, int size);
+ void (*destroy) (void *opaque);
+};
+
+struct capture_ops {
+ void (*info) (void *opaque);
+ void (*destroy) (void *opaque);
+};
+
+typedef struct CaptureState {
+ void *opaque;
+ struct capture_ops ops;
+ QLIST_ENTRY(CaptureState) entries;
+} CaptureState;
+
+CaptureVoiceOut *AUD_add_capture(
+ AudioBackend *be,
+ struct audsettings *as,
+ struct audio_capture_ops *ops,
+ void *opaque
+ );
+void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque);
+
+#endif /* QEMU_AUDIO_CAPTURE_H */
diff --git a/include/qemu/audio.h b/include/qemu/audio.h
index a857955f51..0ed606c9fb 100644
--- a/include/qemu/audio.h
+++ b/include/qemu/audio.h
@@ -41,30 +41,7 @@ typedef struct audsettings {
int endianness;
} audsettings;
-typedef enum {
- AUD_CNOTIFY_ENABLE,
- AUD_CNOTIFY_DISABLE
-} audcnotification_e;
-
-struct audio_capture_ops {
- void (*notify) (void *opaque, audcnotification_e cmd);
- void (*capture) (void *opaque, const void *buf, int size);
- void (*destroy) (void *opaque);
-};
-
-struct capture_ops {
- void (*info) (void *opaque);
- void (*destroy) (void *opaque);
-};
-
-typedef struct CaptureState {
- void *opaque;
- struct capture_ops ops;
- QLIST_ENTRY (CaptureState) entries;
-} CaptureState;
-
typedef struct SWVoiceOut SWVoiceOut;
-typedef struct CaptureVoiceOut CaptureVoiceOut;
typedef struct SWVoiceIn SWVoiceIn;
struct AudioBackendClass {
@@ -78,13 +55,6 @@ typedef struct QEMUAudioTimeStamp {
} QEMUAudioTimeStamp;
bool AUD_backend_check (AudioBackend **be, Error **errp);
-CaptureVoiceOut *AUD_add_capture(
- AudioBackend *s,
- struct audsettings *as,
- struct audio_capture_ops *ops,
- void *opaque
- );
-void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque);
SWVoiceOut *AUD_open_out (
AudioBackend *be,
diff --git a/ui/vnc.h b/ui/vnc.h
index 4d8363ebf3..ec8d0c91b5 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -31,7 +31,7 @@
#include "qemu/thread.h"
#include "ui/clipboard.h"
#include "ui/console.h"
-#include "qemu/audio.h"
+#include "qemu/audio-capture.h"
#include "qemu/bitmap.h"
#include "crypto/tlssession.h"
#include "qemu/buffer.h"
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 33/35] audio: drop needless audio_driver "descr" field
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (31 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 32/35] audio: move capture API to own header marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-29 13:51 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 34/35] audio: Remove pointless local variables marcandre.lureau
` (2 subsequent siblings)
35 siblings, 1 reply; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Was it ever used?
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
---
audio/audio_int.h | 1 -
audio/alsaaudio.c | 1 -
audio/dbusaudio.c | 1 -
audio/dsoundaudio.c | 1 -
audio/jackaudio.c | 1 -
audio/noaudio.c | 1 -
audio/ossaudio.c | 1 -
audio/paaudio.c | 1 -
audio/pwaudio.c | 1 -
audio/sdlaudio.c | 1 -
audio/sndioaudio.c | 1 -
audio/spiceaudio.c | 1 -
audio/wavaudio.c | 1 -
audio/coreaudio.m | 1 -
14 files changed, 14 deletions(-)
diff --git a/audio/audio_int.h b/audio/audio_int.h
index 5834ebea5e..b2b8002477 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -145,7 +145,6 @@ struct SWVoiceIn {
typedef struct audio_driver audio_driver;
struct audio_driver {
const char *name;
- const char *descr;
void *(*init) (Audiodev *, Error **);
void (*fini) (void *);
#ifdef CONFIG_GIO
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index d1e4817081..89f6dad1a9 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -956,7 +956,6 @@ static struct audio_pcm_ops alsa_pcm_ops = {
static struct audio_driver alsa_audio_driver = {
.name = "alsa",
- .descr = "ALSA http://www.alsa-project.org",
.init = alsa_audio_init,
.fini = alsa_audio_fini,
.pcm_ops = &alsa_pcm_ops,
diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
index 157d36428e..d729a810aa 100644
--- a/audio/dbusaudio.c
+++ b/audio/dbusaudio.c
@@ -695,7 +695,6 @@ static struct audio_pcm_ops dbus_pcm_ops = {
static struct audio_driver dbus_audio_driver = {
.name = "dbus",
- .descr = "Timer based audio exposed with DBus interface",
.init = dbus_audio_init,
.fini = dbus_audio_fini,
.set_dbus_server = dbus_audio_set_server,
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c
index 8b773ded21..7a03d1dad8 100644
--- a/audio/dsoundaudio.c
+++ b/audio/dsoundaudio.c
@@ -685,7 +685,6 @@ static struct audio_pcm_ops dsound_pcm_ops = {
static struct audio_driver dsound_audio_driver = {
.name = "dsound",
- .descr = "DirectSound http://wikipedia.org/wiki/DirectSound",
.init = dsound_audio_init,
.fini = dsound_audio_fini,
.pcm_ops = &dsound_pcm_ops,
diff --git a/audio/jackaudio.c b/audio/jackaudio.c
index 28face9989..7a3fcaedba 100644
--- a/audio/jackaudio.c
+++ b/audio/jackaudio.c
@@ -672,7 +672,6 @@ static struct audio_pcm_ops jack_pcm_ops = {
static struct audio_driver jack_driver = {
.name = "jack",
- .descr = "JACK Audio Connection Kit Client",
.init = qjack_init,
.fini = qjack_fini,
.pcm_ops = &jack_pcm_ops,
diff --git a/audio/noaudio.c b/audio/noaudio.c
index b136b74e26..4ed9d2156c 100644
--- a/audio/noaudio.c
+++ b/audio/noaudio.c
@@ -129,7 +129,6 @@ static struct audio_pcm_ops no_pcm_ops = {
static struct audio_driver no_audio_driver = {
.name = "none",
- .descr = "Timer based audio emulation",
.init = no_audio_init,
.fini = no_audio_fini,
.pcm_ops = &no_pcm_ops,
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index 5ba91f6793..ab8791bece 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -779,7 +779,6 @@ static struct audio_pcm_ops oss_pcm_ops = {
static struct audio_driver oss_audio_driver = {
.name = "oss",
- .descr = "OSS http://www.opensound.com",
.init = oss_audio_init,
.fini = oss_audio_fini,
.pcm_ops = &oss_pcm_ops,
diff --git a/audio/paaudio.c b/audio/paaudio.c
index 8eb80ede45..6b9b6d219a 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -922,7 +922,6 @@ static struct audio_pcm_ops qpa_pcm_ops = {
static struct audio_driver pa_audio_driver = {
.name = "pa",
- .descr = "http://www.pulseaudio.org/",
.init = qpa_audio_init,
.fini = qpa_audio_fini,
.pcm_ops = &qpa_pcm_ops,
diff --git a/audio/pwaudio.c b/audio/pwaudio.c
index 8f6c0900c8..0fd59d9fe6 100644
--- a/audio/pwaudio.c
+++ b/audio/pwaudio.c
@@ -838,7 +838,6 @@ static struct audio_pcm_ops qpw_pcm_ops = {
static struct audio_driver pw_audio_driver = {
.name = "pipewire",
- .descr = "http://www.pipewire.org/",
.init = qpw_audio_init,
.fini = qpw_audio_fini,
.pcm_ops = &qpw_pcm_ops,
diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c
index 4ef73c8dfb..a7a9652d29 100644
--- a/audio/sdlaudio.c
+++ b/audio/sdlaudio.c
@@ -490,7 +490,6 @@ static struct audio_pcm_ops sdl_pcm_ops = {
static struct audio_driver sdl_audio_driver = {
.name = "sdl",
- .descr = "SDL http://www.libsdl.org",
.init = sdl_audio_init,
.fini = sdl_audio_fini,
.pcm_ops = &sdl_pcm_ops,
diff --git a/audio/sndioaudio.c b/audio/sndioaudio.c
index f4f53b1c6f..8197b8b0b4 100644
--- a/audio/sndioaudio.c
+++ b/audio/sndioaudio.c
@@ -546,7 +546,6 @@ static struct audio_pcm_ops sndio_pcm_ops = {
static struct audio_driver sndio_audio_driver = {
.name = "sndio",
- .descr = "sndio https://sndio.org",
.init = sndio_audio_init,
.fini = sndio_audio_fini,
.pcm_ops = &sndio_pcm_ops,
diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c
index 77ba89ffaa..7db2d1f0df 100644
--- a/audio/spiceaudio.c
+++ b/audio/spiceaudio.c
@@ -316,7 +316,6 @@ static struct audio_pcm_ops audio_callbacks = {
static struct audio_driver spice_audio_driver = {
.name = "spice",
- .descr = "spice audio driver",
.init = spice_audio_init,
.fini = spice_audio_fini,
.pcm_ops = &audio_callbacks,
diff --git a/audio/wavaudio.c b/audio/wavaudio.c
index 4d9c921305..46460a5d57 100644
--- a/audio/wavaudio.c
+++ b/audio/wavaudio.c
@@ -205,7 +205,6 @@ static struct audio_pcm_ops wav_pcm_ops = {
static struct audio_driver wav_audio_driver = {
.name = "wav",
- .descr = "WAV renderer http://wikipedia.org/wiki/WAV",
.init = wav_audio_init,
.fini = wav_audio_fini,
.pcm_ops = &wav_pcm_ops,
diff --git a/audio/coreaudio.m b/audio/coreaudio.m
index 8b3cd6db16..997017a1e9 100644
--- a/audio/coreaudio.m
+++ b/audio/coreaudio.m
@@ -664,7 +664,6 @@ static void coreaudio_audio_fini (void *opaque)
static struct audio_driver coreaudio_audio_driver = {
.name = "coreaudio",
- .descr = "CoreAudio http://developer.apple.com/audio/coreaudio.html",
.init = coreaudio_audio_init,
.fini = coreaudio_audio_fini,
.pcm_ops = &coreaudio_pcm_ops,
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 34/35] audio: Remove pointless local variables
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (32 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 33/35] audio: drop needless audio_driver "descr" field marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 35/35] audio: Rename @endianness argument as @big_endian for clarity marcandre.lureau
2025-10-30 13:43 ` [PATCH v3 00/35] Audio clean-ups Marc-André Lureau
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/ossaudio.c | 12 ++----------
audio/sdlaudio.c | 12 ++----------
2 files changed, 4 insertions(+), 20 deletions(-)
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index ab8791bece..86c4805675 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -493,10 +493,8 @@ static int oss_init_out(HWVoiceOut *hw, struct audsettings *as,
{
OSSVoiceOut *oss = (OSSVoiceOut *) hw;
struct oss_params req, obt;
- int endianness;
int err;
int fd;
- AudioFormat effective_fmt;
struct audsettings obt_as;
Audiodev *dev = drv_opaque;
AudiodevOssOptions *oopts = &dev->u.oss;
@@ -511,7 +509,7 @@ static int oss_init_out(HWVoiceOut *hw, struct audsettings *as,
return -1;
}
- err = oss_to_audfmt (obt.fmt, &effective_fmt, &endianness);
+ err = oss_to_audfmt(obt.fmt, &obt_as.fmt, &obt_as.endianness);
if (err) {
oss_anal_close (&fd);
return -1;
@@ -519,8 +517,6 @@ static int oss_init_out(HWVoiceOut *hw, struct audsettings *as,
obt_as.freq = obt.freq;
obt_as.nchannels = obt.nchannels;
- obt_as.fmt = effective_fmt;
- obt_as.endianness = endianness;
audio_pcm_init_info (&hw->info, &obt_as);
oss->nfrags = obt.nfrags;
@@ -628,10 +624,8 @@ static int oss_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
{
OSSVoiceIn *oss = (OSSVoiceIn *) hw;
struct oss_params req, obt;
- int endianness;
int err;
int fd;
- AudioFormat effective_fmt;
struct audsettings obt_as;
Audiodev *dev = drv_opaque;
@@ -644,7 +638,7 @@ static int oss_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
return -1;
}
- err = oss_to_audfmt (obt.fmt, &effective_fmt, &endianness);
+ err = oss_to_audfmt(obt.fmt, &obt_as.fmt, &obt_as.endianness);
if (err) {
oss_anal_close (&fd);
return -1;
@@ -652,8 +646,6 @@ static int oss_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
obt_as.freq = obt.freq;
obt_as.nchannels = obt.nchannels;
- obt_as.fmt = effective_fmt;
- obt_as.endianness = endianness;
audio_pcm_init_info (&hw->info, &obt_as);
oss->nfrags = obt.nfrags;
diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c
index a7a9652d29..707110973a 100644
--- a/audio/sdlaudio.c
+++ b/audio/sdlaudio.c
@@ -338,9 +338,7 @@ static int sdl_init_out(HWVoiceOut *hw, struct audsettings *as,
{
SDLVoiceOut *sdl = (SDLVoiceOut *)hw;
SDL_AudioSpec req, obt;
- int endianness;
int err;
- AudioFormat effective_fmt;
Audiodev *dev = drv_opaque;
AudiodevSdlPerDirectionOptions *spdo = dev->u.sdl.out;
struct audsettings obt_as;
@@ -360,7 +358,7 @@ static int sdl_init_out(HWVoiceOut *hw, struct audsettings *as,
return -1;
}
- err = sdl_to_audfmt(obt.format, &effective_fmt, &endianness);
+ err = sdl_to_audfmt(obt.format, &obt_as.fmt, &obt_as.endianness);
if (err) {
sdl_close_out(sdl);
return -1;
@@ -368,8 +366,6 @@ static int sdl_init_out(HWVoiceOut *hw, struct audsettings *as,
obt_as.freq = obt.freq;
obt_as.nchannels = obt.channels;
- obt_as.fmt = effective_fmt;
- obt_as.endianness = endianness;
audio_pcm_init_info (&hw->info, &obt_as);
hw->samples = (spdo->has_buffer_count ? spdo->buffer_count : 4) *
@@ -398,9 +394,7 @@ static int sdl_init_in(HWVoiceIn *hw, audsettings *as, void *drv_opaque)
{
SDLVoiceIn *sdl = (SDLVoiceIn *)hw;
SDL_AudioSpec req, obt;
- int endianness;
int err;
- AudioFormat effective_fmt;
Audiodev *dev = drv_opaque;
AudiodevSdlPerDirectionOptions *spdo = dev->u.sdl.in;
struct audsettings obt_as;
@@ -420,7 +414,7 @@ static int sdl_init_in(HWVoiceIn *hw, audsettings *as, void *drv_opaque)
return -1;
}
- err = sdl_to_audfmt(obt.format, &effective_fmt, &endianness);
+ err = sdl_to_audfmt(obt.format, &obt_as.fmt, &obt_as.endianness);
if (err) {
sdl_close_in(sdl);
return -1;
@@ -428,8 +422,6 @@ static int sdl_init_in(HWVoiceIn *hw, audsettings *as, void *drv_opaque)
obt_as.freq = obt.freq;
obt_as.nchannels = obt.channels;
- obt_as.fmt = effective_fmt;
- obt_as.endianness = endianness;
audio_pcm_init_info(&hw->info, &obt_as);
hw->samples = (spdo->has_buffer_count ? spdo->buffer_count : 4) *
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v3 35/35] audio: Rename @endianness argument as @big_endian for clarity
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (33 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 34/35] audio: Remove pointless local variables marcandre.lureau
@ 2025-10-27 15:10 ` marcandre.lureau
2025-10-30 13:43 ` [PATCH v3 00/35] Audio clean-ups Marc-André Lureau
35 siblings, 0 replies; 69+ messages in thread
From: marcandre.lureau @ 2025-10-27 15:10 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Marc-André Lureau, Alex Bennée,
Jan Kiszka, Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang,
Thomas Huth, Philippe Mathieu-Daudé, Gerd Hoffmann,
Peter Maydell, Daniel P. Berrangé, Eduardo Habkost,
Manos Pitsidianakis, qemu-ppc, Jiaxun Yang, Akihiko Odaki,
Hervé Poussineau, qemu-arm, Alistair Francis, Zhao Liu,
Volker Rümelin, Christian Schoenebeck, Paolo Bonzini,
Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
From: Philippe Mathieu-Daudé <philmd@linaro.org>
@endianness is used as a boolean, rename for clarity.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
audio/alsaaudio.c | 32 ++++++--------------------------
audio/ossaudio.c | 14 +++-----------
audio/paaudio.c | 8 ++++----
audio/pwaudio.c | 12 ++++++------
4 files changed, 19 insertions(+), 47 deletions(-)
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index 89f6dad1a9..7d7da576dc 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -264,7 +264,7 @@ static int alsa_poll_in (HWVoiceIn *hw)
return alsa_poll_helper (alsa->handle, &alsa->pollhlp, POLLIN);
}
-static snd_pcm_format_t aud_to_alsafmt (AudioFormat fmt, int endianness)
+static snd_pcm_format_t aud_to_alsafmt(AudioFormat fmt, bool big_endian)
{
switch (fmt) {
case AUDIO_FORMAT_S8:
@@ -274,39 +274,19 @@ static snd_pcm_format_t aud_to_alsafmt (AudioFormat fmt, int endianness)
return SND_PCM_FORMAT_U8;
case AUDIO_FORMAT_S16:
- if (endianness) {
- return SND_PCM_FORMAT_S16_BE;
- } else {
- return SND_PCM_FORMAT_S16_LE;
- }
+ return big_endian ? SND_PCM_FORMAT_S16_BE : SND_PCM_FORMAT_S16_LE;
case AUDIO_FORMAT_U16:
- if (endianness) {
- return SND_PCM_FORMAT_U16_BE;
- } else {
- return SND_PCM_FORMAT_U16_LE;
- }
+ return big_endian ? SND_PCM_FORMAT_U16_BE : SND_PCM_FORMAT_U16_LE;
case AUDIO_FORMAT_S32:
- if (endianness) {
- return SND_PCM_FORMAT_S32_BE;
- } else {
- return SND_PCM_FORMAT_S32_LE;
- }
+ return big_endian ? SND_PCM_FORMAT_S32_BE : SND_PCM_FORMAT_S32_LE;
case AUDIO_FORMAT_U32:
- if (endianness) {
- return SND_PCM_FORMAT_U32_BE;
- } else {
- return SND_PCM_FORMAT_U32_LE;
- }
+ return big_endian ? SND_PCM_FORMAT_U32_BE : SND_PCM_FORMAT_U32_LE;
case AUDIO_FORMAT_F32:
- if (endianness) {
- return SND_PCM_FORMAT_FLOAT_BE;
- } else {
- return SND_PCM_FORMAT_FLOAT_LE;
- }
+ return big_endian ? SND_PCM_FORMAT_FLOAT_BE : SND_PCM_FORMAT_FLOAT_LE;
default:
dolog ("Internal logic error: Bad audio format %d\n", fmt);
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index 86c4805675..c6cad47a01 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -131,7 +131,7 @@ static void oss_poll_in (HWVoiceIn *hw)
qemu_set_fd_handler(oss->fd, oss_helper_poll_in, NULL, hw->s);
}
-static int aud_to_ossfmt (AudioFormat fmt, int endianness)
+static int aud_to_ossfmt(AudioFormat fmt, bool big_endian)
{
switch (fmt) {
case AUDIO_FORMAT_S8:
@@ -141,18 +141,10 @@ static int aud_to_ossfmt (AudioFormat fmt, int endianness)
return AFMT_U8;
case AUDIO_FORMAT_S16:
- if (endianness) {
- return AFMT_S16_BE;
- } else {
- return AFMT_S16_LE;
- }
+ return big_endian ? AFMT_S16_BE : AFMT_S16_LE;
case AUDIO_FORMAT_U16:
- if (endianness) {
- return AFMT_U16_BE;
- } else {
- return AFMT_U16_LE;
- }
+ return big_endian ? AFMT_U16_BE : AFMT_U16_LE;
default:
dolog ("Internal logic error: Bad audio format %d\n", fmt);
diff --git a/audio/paaudio.c b/audio/paaudio.c
index 6b9b6d219a..0c06a39719 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -316,7 +316,7 @@ unlock_and_fail:
return 0;
}
-static pa_sample_format_t audfmt_to_pa (AudioFormat afmt, int endianness)
+static pa_sample_format_t audfmt_to_pa(AudioFormat afmt, bool big_endian)
{
int format;
@@ -327,14 +327,14 @@ static pa_sample_format_t audfmt_to_pa (AudioFormat afmt, int endianness)
break;
case AUDIO_FORMAT_S16:
case AUDIO_FORMAT_U16:
- format = endianness ? PA_SAMPLE_S16BE : PA_SAMPLE_S16LE;
+ format = big_endian ? PA_SAMPLE_S16BE : PA_SAMPLE_S16LE;
break;
case AUDIO_FORMAT_S32:
case AUDIO_FORMAT_U32:
- format = endianness ? PA_SAMPLE_S32BE : PA_SAMPLE_S32LE;
+ format = big_endian ? PA_SAMPLE_S32BE : PA_SAMPLE_S32LE;
break;
case AUDIO_FORMAT_F32:
- format = endianness ? PA_SAMPLE_FLOAT32BE : PA_SAMPLE_FLOAT32LE;
+ format = big_endian ? PA_SAMPLE_FLOAT32BE : PA_SAMPLE_FLOAT32LE;
break;
default:
dolog ("Internal logic error: Bad audio format %d\n", afmt);
diff --git a/audio/pwaudio.c b/audio/pwaudio.c
index 0fd59d9fe6..30f717ccac 100644
--- a/audio/pwaudio.c
+++ b/audio/pwaudio.c
@@ -324,7 +324,7 @@ done_unlock:
}
static int
-audfmt_to_pw(AudioFormat fmt, int endianness)
+audfmt_to_pw(AudioFormat fmt, bool big_endian)
{
int format;
@@ -336,19 +336,19 @@ audfmt_to_pw(AudioFormat fmt, int endianness)
format = SPA_AUDIO_FORMAT_U8;
break;
case AUDIO_FORMAT_S16:
- format = endianness ? SPA_AUDIO_FORMAT_S16_BE : SPA_AUDIO_FORMAT_S16_LE;
+ format = big_endian ? SPA_AUDIO_FORMAT_S16_BE : SPA_AUDIO_FORMAT_S16_LE;
break;
case AUDIO_FORMAT_U16:
- format = endianness ? SPA_AUDIO_FORMAT_U16_BE : SPA_AUDIO_FORMAT_U16_LE;
+ format = big_endian ? SPA_AUDIO_FORMAT_U16_BE : SPA_AUDIO_FORMAT_U16_LE;
break;
case AUDIO_FORMAT_S32:
- format = endianness ? SPA_AUDIO_FORMAT_S32_BE : SPA_AUDIO_FORMAT_S32_LE;
+ format = big_endian ? SPA_AUDIO_FORMAT_S32_BE : SPA_AUDIO_FORMAT_S32_LE;
break;
case AUDIO_FORMAT_U32:
- format = endianness ? SPA_AUDIO_FORMAT_U32_BE : SPA_AUDIO_FORMAT_U32_LE;
+ format = big_endian ? SPA_AUDIO_FORMAT_U32_BE : SPA_AUDIO_FORMAT_U32_LE;
break;
case AUDIO_FORMAT_F32:
- format = endianness ? SPA_AUDIO_FORMAT_F32_BE : SPA_AUDIO_FORMAT_F32_LE;
+ format = big_endian ? SPA_AUDIO_FORMAT_F32_BE : SPA_AUDIO_FORMAT_F32_LE;
break;
default:
dolog("Internal logic error: Bad audio format %d\n", fmt);
--
2.51.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v3 09/35] audio: start making AudioState a QOM Object
2025-10-27 15:10 ` [PATCH v3 09/35] audio: start making AudioState a QOM Object marcandre.lureau
@ 2025-10-27 16:26 ` BALATON Zoltan
2025-10-28 12:34 ` Marc-André Lureau
0 siblings, 1 reply; 69+ messages in thread
From: BALATON Zoltan @ 2025-10-27 16:26 UTC (permalink / raw)
To: Marc-André Lureau
Cc: qemu-devel, Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Philippe Mathieu-Daudé, Gerd Hoffmann, Peter Maydell,
Daniel P. Berrangé, Eduardo Habkost, Manos Pitsidianakis,
qemu-ppc, Jiaxun Yang, Akihiko Odaki, Hervé Poussineau,
qemu-arm, Alistair Francis, Zhao Liu, Volker Rümelin,
Christian Schoenebeck, Paolo Bonzini, Edgar E. Iglesias,
Laurent Vivier
[-- Attachment #1: Type: text/plain, Size: 1706 bytes --]
On Mon, 27 Oct 2025, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> QOM brings some conveniences for introspection, type checking, reference
> counting, interfaces etc. This is only the first step to introduce QOM
> in audio/ (I have more in the pipeline)
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> audio/audio.h | 7 +++++++
> audio/audio_int.h | 2 ++
> audio/audio.c | 43 ++++++++++++++++++++++++++++++++-----------
> 3 files changed, 41 insertions(+), 11 deletions(-)
>
> diff --git a/audio/audio.h b/audio/audio.h
> index eb5b5d662d..e41c5bc55a 100644
> --- a/audio/audio.h
> +++ b/audio/audio.h
> @@ -80,6 +80,10 @@ typedef struct SWVoiceOut SWVoiceOut;
> typedef struct CaptureVoiceOut CaptureVoiceOut;
> typedef struct SWVoiceIn SWVoiceIn;
>
> +struct AudioStateClass {
> + ObjectClass parent_class;
> +};
> +
> typedef struct AudioState AudioState;
> typedef struct QEMUSoundCard {
> char *name;
> @@ -182,4 +186,7 @@ const char *audio_get_id(QEMUSoundCard *card);
> #define DEFINE_AUDIO_PROPERTIES(_s, _f) \
> DEFINE_PROP_AUDIODEV("audiodev", _s, _f)
>
> +#define TYPE_AUDIO_STATE "audio-state"
> +OBJECT_DECLARE_TYPE(AudioState, AudioStateClass, AUDIO_STATE)
> +
> #endif /* QEMU_AUDIO_H */
> diff --git a/audio/audio_int.h b/audio/audio_int.h
> index f78ca05f92..b2b4d2d10e 100644
> --- a/audio/audio_int.h
> +++ b/audio/audio_int.h
> @@ -217,6 +217,8 @@ struct SWVoiceCap {
> };
>
> typedef struct AudioState {
> + Object parent;
Coding style says parent_obj, not sure other names are acceptable.
Regards,
BALATON Zoltan
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 09/35] audio: start making AudioState a QOM Object
2025-10-27 16:26 ` BALATON Zoltan
@ 2025-10-28 12:34 ` Marc-André Lureau
2025-10-29 13:38 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 69+ messages in thread
From: Marc-André Lureau @ 2025-10-28 12:34 UTC (permalink / raw)
To: Alex Bennée
Cc: qemu-devel, Alexandre Ratchov, Jan Kiszka, Michael S. Tsirkin,
BALATON Zoltan, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Philippe Mathieu-Daudé, Gerd Hoffmann, Peter Maydell,
Daniel P. Berrangé, Eduardo Habkost, Manos Pitsidianakis,
qemu-ppc, Jiaxun Yang, Akihiko Odaki, Hervé Poussineau,
qemu-arm, Alistair Francis, Zhao Liu, Volker Rümelin,
Christian Schoenebeck, Paolo Bonzini, Edgar E. Iglesias,
Laurent Vivier
Hi
On Mon, Oct 27, 2025 at 8:29 PM BALATON Zoltan <balaton@eik.bme.hu> wrote:
>
> On Mon, 27 Oct 2025, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > QOM brings some conveniences for introspection, type checking, reference
> > counting, interfaces etc. This is only the first step to introduce QOM
> > in audio/ (I have more in the pipeline)
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> > ---
> > audio/audio.h | 7 +++++++
> > audio/audio_int.h | 2 ++
> > audio/audio.c | 43 ++++++++++++++++++++++++++++++++-----------
> > 3 files changed, 41 insertions(+), 11 deletions(-)
> >
> > diff --git a/audio/audio.h b/audio/audio.h
> > index eb5b5d662d..e41c5bc55a 100644
> > --- a/audio/audio.h
> > +++ b/audio/audio.h
> > @@ -80,6 +80,10 @@ typedef struct SWVoiceOut SWVoiceOut;
> > typedef struct CaptureVoiceOut CaptureVoiceOut;
> > typedef struct SWVoiceIn SWVoiceIn;
> >
> > +struct AudioStateClass {
> > + ObjectClass parent_class;
> > +};
> > +
> > typedef struct AudioState AudioState;
> > typedef struct QEMUSoundCard {
> > char *name;
> > @@ -182,4 +186,7 @@ const char *audio_get_id(QEMUSoundCard *card);
> > #define DEFINE_AUDIO_PROPERTIES(_s, _f) \
> > DEFINE_PROP_AUDIODEV("audiodev", _s, _f)
> >
> > +#define TYPE_AUDIO_STATE "audio-state"
> > +OBJECT_DECLARE_TYPE(AudioState, AudioStateClass, AUDIO_STATE)
> > +
> > #endif /* QEMU_AUDIO_H */
> > diff --git a/audio/audio_int.h b/audio/audio_int.h
> > index f78ca05f92..b2b4d2d10e 100644
> > --- a/audio/audio_int.h
> > +++ b/audio/audio_int.h
> > @@ -217,6 +217,8 @@ struct SWVoiceCap {
> > };
> >
> > typedef struct AudioState {
> > + Object parent;
>
> Coding style says parent_obj, not sure other names are acceptable.
>
Alex, since you wrote that section in docs/devel/style.rst, should we
enforce that naming?
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 09/35] audio: start making AudioState a QOM Object
2025-10-28 12:34 ` Marc-André Lureau
@ 2025-10-29 13:38 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:38 UTC (permalink / raw)
To: Marc-André Lureau, Alex Bennée
Cc: qemu-devel, Alexandre Ratchov, Jan Kiszka, Michael S. Tsirkin,
BALATON Zoltan, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, Laurent Vivier
On 28/10/25 13:34, Marc-André Lureau wrote:
> Hi
>
> On Mon, Oct 27, 2025 at 8:29 PM BALATON Zoltan <balaton@eik.bme.hu> wrote:
>>
>> On Mon, 27 Oct 2025, marcandre.lureau@redhat.com wrote:
>>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>>
>>> QOM brings some conveniences for introspection, type checking, reference
>>> counting, interfaces etc. This is only the first step to introduce QOM
>>> in audio/ (I have more in the pipeline)
>>>
>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> ---
>>> audio/audio.h | 7 +++++++
>>> audio/audio_int.h | 2 ++
>>> audio/audio.c | 43 ++++++++++++++++++++++++++++++++-----------
>>> 3 files changed, 41 insertions(+), 11 deletions(-)
>>> diff --git a/audio/audio_int.h b/audio/audio_int.h
>>> index f78ca05f92..b2b4d2d10e 100644
>>> --- a/audio/audio_int.h
>>> +++ b/audio/audio_int.h
>>> @@ -217,6 +217,8 @@ struct SWVoiceCap {
>>> };
>>>
>>> typedef struct AudioState {
>>> + Object parent;
>>
>> Coding style says parent_obj, not sure other names are acceptable.
>>
>
>
> Alex, since you wrote that section in docs/devel/style.rst, should we
> enforce that naming?
Yes please!
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 17/35] audio: drop needless error message
2025-10-27 15:10 ` [PATCH v3 17/35] audio: drop needless error message marcandre.lureau
@ 2025-10-29 13:40 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:40 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> The only reason it would fail to add the handler is if it's calling a
> stub. But this cannot happen as audio is only supported with system qemu.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 13/35] audio/dsound: simplify init()
2025-10-27 15:10 ` [PATCH v3 13/35] audio/dsound: simplify init() marcandre.lureau
@ 2025-10-29 13:42 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:42 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Use dsound_audio_fini() on error & fail if the capture failed to
> initialize too.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/dsoundaudio.c | 29 +++++++++++------------------
> 1 file changed, 11 insertions(+), 18 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 14/35] audio/dsound: report init error via **errp
2025-10-27 15:10 ` [PATCH v3 14/35] audio/dsound: report init error via **errp marcandre.lureau
@ 2025-10-29 13:43 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:43 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Whenever NULL is returned, errp should be set.
>
> Inline SetCooperativeLevel call to simplify code.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/dsoundaudio.c | 182 +++++++++++++++++++-------------------------
> 1 file changed, 79 insertions(+), 103 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 16/35] audio: move period tick initialization
2025-10-27 15:10 ` [PATCH v3 16/35] audio: move period tick initialization marcandre.lureau
@ 2025-10-29 13:44 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:44 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Part of QOM-ification.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 18/35] audio: keep vmstate handle with AudioState
2025-10-27 15:10 ` [PATCH v3 18/35] audio: keep vmstate handle with AudioState marcandre.lureau
@ 2025-10-29 13:46 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:46 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> QOM-ification continues.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio_int.h | 1 +
> audio/audio.c | 12 ++++++++----
> 2 files changed, 9 insertions(+), 4 deletions(-)
> diff --git a/audio/audio.c b/audio/audio.c
> index 155809dee7..4c3c3fd52f 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -1622,6 +1622,9 @@ static void audio_state_init(Object *obj)
> QLIST_INIT(&s->hw_head_in);
> QLIST_INIT(&s->cap_head);
> s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
> +
> + s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
> + assert(s->vmse != NULL);
> }
>
> static void audio_state_finalize(Object *obj)
> @@ -1671,6 +1674,11 @@ static void audio_state_finalize(Object *obj)
> timer_free(s->ts);
> s->ts = NULL;
> }
> +
> + if (s->vmse) {
Already asserted as non-NULL?
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> + qemu_del_vm_change_state_handler(s->vmse);
> + s->vmse = NULL;
> + }
> }
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 19/35] audio: register and unregister vmstate with AudioState
2025-10-27 15:10 ` [PATCH v3 19/35] audio: register and unregister vmstate " marcandre.lureau
@ 2025-10-29 13:48 ` Philippe Mathieu-Daudé
2025-10-29 19:00 ` Marc-André Lureau
0 siblings, 1 reply; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:48 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Proper lifecycle management with QOM state.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/audio/audio.c b/audio/audio.c
> index 4c3c3fd52f..853930bb48 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -1614,6 +1614,8 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
> audio_reset_timer (s);
> }
>
> +static const VMStateDescription vmstate_audio;
> +
> static void audio_state_init(Object *obj)
> {
> AudioState *s = AUDIO_STATE(obj);
> @@ -1625,6 +1627,8 @@ static void audio_state_init(Object *obj)
>
> s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
> assert(s->vmse != NULL);
> +
> + vmstate_register_any(NULL, &vmstate_audio, s);
Please avoid legacy APIs:
/**
* vmstate_register_any() - legacy function to register state
* serialisation description and let the function choose the id
*
* New code shouldn't be using this function as QOM-ified devices have
* dc->vmsd to store the serialisation description.
*
* Returns: 0 on success, -1 on failure
*/
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 20/35] audio: initialize card_head during object init
2025-10-27 15:10 ` [PATCH v3 20/35] audio: initialize card_head during object init marcandre.lureau
@ 2025-10-29 13:48 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:48 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 21/35] audio: remove some needless headers
2025-10-27 15:10 ` [PATCH v3 21/35] audio: remove some needless headers marcandre.lureau
@ 2025-10-29 13:48 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:48 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.h | 1 -
> audio/audio.c | 3 ---
> audio/dbusaudio.c | 2 --
> audio/dsoundaudio.c | 1 -
> audio/mixeng.c | 4 +++-
> audio/noaudio.c | 2 --
> audio/wavaudio.c | 3 ---
> audio/wavcapture.c | 1 -
> 8 files changed, 3 insertions(+), 14 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 26/35] audio: rename AudioState -> AudioBackend
2025-10-27 15:10 ` [PATCH v3 26/35] audio: rename AudioState -> AudioBackend marcandre.lureau
@ 2025-10-29 13:49 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:49 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Naming is hard. But in general in QEMU, a host "backend" is the term
> used to fullfill the request made by the device or frontend.
>
> AudioBackend will become an abstract base class in a follow-up series.
>
> Currently the frontend is QEMUSoundCard, we are going to drop that next.
>
> Note that "audiodev" is the corresponding QAPI type name (or configuration).
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.h | 16 +++---
> audio/audio_int.h | 20 +++----
> audio/audio_template.h | 20 +++----
> ui/vnc.h | 2 +-
> audio/alsaaudio.c | 2 +-
> audio/audio-hmp-cmds.c | 2 +-
> audio/audio.c | 90 ++++++++++++++++----------------
> audio/dbusaudio.c | 8 +--
> audio/ossaudio.c | 4 +-
> audio/wavcapture.c | 2 +-
> hw/audio/pcspk.c | 2 +-
> hw/core/machine.c | 2 +-
> hw/core/qdev-properties-system.c | 6 +--
> ui/dbus.c | 8 +--
> ui/vnc.c | 10 ++--
> 15 files changed, 97 insertions(+), 97 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 30/35] audio: remove dependency on spice header
2025-10-27 15:10 ` [PATCH v3 30/35] audio: remove dependency on spice header marcandre.lureau
@ 2025-10-29 13:51 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:51 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> It is no longer required.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/meson.build | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 33/35] audio: drop needless audio_driver "descr" field
2025-10-27 15:10 ` [PATCH v3 33/35] audio: drop needless audio_driver "descr" field marcandre.lureau
@ 2025-10-29 13:51 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:51 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Was it ever used?
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
> ---
> audio/audio_int.h | 1 -
> audio/alsaaudio.c | 1 -
> audio/dbusaudio.c | 1 -
> audio/dsoundaudio.c | 1 -
> audio/jackaudio.c | 1 -
> audio/noaudio.c | 1 -
> audio/ossaudio.c | 1 -
> audio/paaudio.c | 1 -
> audio/pwaudio.c | 1 -
> audio/sdlaudio.c | 1 -
> audio/sndioaudio.c | 1 -
> audio/spiceaudio.c | 1 -
> audio/wavaudio.c | 1 -
> audio/coreaudio.m | 1 -
> 14 files changed, 14 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 01/35] qdev: add qdev_find_default_bus()
2025-10-27 15:10 ` [PATCH v3 01/35] qdev: add qdev_find_default_bus() marcandre.lureau
@ 2025-10-29 13:58 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 13:58 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> This helper is used next by -audio code.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> include/monitor/qdev.h | 3 +++
> system/qdev-monitor.c | 25 +++++++++++++++++++++----
> 2 files changed, 24 insertions(+), 4 deletions(-)
> DeviceState *qdev_device_add_from_qdict(const QDict *opts,
> bool from_json, Error **errp)
> {
> @@ -657,10 +676,8 @@ DeviceState *qdev_device_add_from_qdict(const QDict *opts,
> return NULL;
> }
> } else if (dc->bus_type != NULL) {
> - bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type);
I don't understand why we use sysbus here, but this is pre-existing, so:
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> - if (!bus || qbus_is_full(bus)) {
> - error_setg(errp, "No '%s' bus found for device '%s'",
> - dc->bus_type, driver);
> + bus = qdev_find_default_bus(dc, errp);
> + if (!bus) {
> return NULL;
> }
> }
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 02/35] hw/audio: look up the default bus from the device class
2025-10-27 15:10 ` [PATCH v3 02/35] hw/audio: look up the default bus from the device class marcandre.lureau
@ 2025-10-29 14:01 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 14:01 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Generalize and simplify the device model creation.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/audio/soundhw.c | 20 ++++----------------
> 1 file changed, 4 insertions(+), 16 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 19/35] audio: register and unregister vmstate with AudioState
2025-10-29 13:48 ` Philippe Mathieu-Daudé
@ 2025-10-29 19:00 ` Marc-André Lureau
2025-10-29 21:42 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 69+ messages in thread
From: Marc-André Lureau @ 2025-10-29 19:00 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
Hi
On Wed, Oct 29, 2025 at 5:51 PM Philippe Mathieu-Daudé
<philmd@linaro.org> wrote:
>
> On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > Proper lifecycle management with QOM state.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > audio/audio.c | 7 ++++++-
> > 1 file changed, 6 insertions(+), 1 deletion(-)
> >
> > diff --git a/audio/audio.c b/audio/audio.c
> > index 4c3c3fd52f..853930bb48 100644
> > --- a/audio/audio.c
> > +++ b/audio/audio.c
> > @@ -1614,6 +1614,8 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
> > audio_reset_timer (s);
> > }
> >
> > +static const VMStateDescription vmstate_audio;
> > +
> > static void audio_state_init(Object *obj)
> > {
> > AudioState *s = AUDIO_STATE(obj);
> > @@ -1625,6 +1627,8 @@ static void audio_state_init(Object *obj)
> >
> > s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
> > assert(s->vmse != NULL);
> > +
> > + vmstate_register_any(NULL, &vmstate_audio, s);
>
> Please avoid legacy APIs:
>
> /**
> * vmstate_register_any() - legacy function to register state
> * serialisation description and let the function choose the id
> *
> * New code shouldn't be using this function as QOM-ified devices have
> * dc->vmsd to store the serialisation description.
> *
> * Returns: 0 on success, -1 on failure
> */
>
qdev/Device have vmsd, but not plain Object (or legacy code without object).
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 19/35] audio: register and unregister vmstate with AudioState
2025-10-29 19:00 ` Marc-André Lureau
@ 2025-10-29 21:42 ` Philippe Mathieu-Daudé
2025-10-30 16:30 ` Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:42 UTC (permalink / raw)
To: Marc-André Lureau, Peter Xu, Fabiano Rosas
Cc: qemu-devel, Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 29/10/25 20:00, Marc-André Lureau wrote:
> Hi
>
> On Wed, Oct 29, 2025 at 5:51 PM Philippe Mathieu-Daudé
> <philmd@linaro.org> wrote:
>>
>> On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
>>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>>
>>> Proper lifecycle management with QOM state.
>>>
>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>> ---
>>> audio/audio.c | 7 ++++++-
>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/audio/audio.c b/audio/audio.c
>>> index 4c3c3fd52f..853930bb48 100644
>>> --- a/audio/audio.c
>>> +++ b/audio/audio.c
>>> @@ -1614,6 +1614,8 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
>>> audio_reset_timer (s);
>>> }
>>>
>>> +static const VMStateDescription vmstate_audio;
>>> +
>>> static void audio_state_init(Object *obj)
>>> {
>>> AudioState *s = AUDIO_STATE(obj);
>>> @@ -1625,6 +1627,8 @@ static void audio_state_init(Object *obj)
>>>
>>> s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
>>> assert(s->vmse != NULL);
>>> +
>>> + vmstate_register_any(NULL, &vmstate_audio, s);
>>
>> Please avoid legacy APIs:
>>
>> /**
>> * vmstate_register_any() - legacy function to register state
>> * serialisation description and let the function choose the id
>> *
>> * New code shouldn't be using this function as QOM-ified devices have
>> * dc->vmsd to store the serialisation description.
>> *
>> * Returns: 0 on success, -1 on failure
>> */
>>
>
> qdev/Device have vmsd, but not plain Object (or legacy code without object).
Hmm right. Cc'ing Peter & Fabiano.
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 05/35] hw/audio/virtio-snd-pci: remove custom model callback
2025-10-27 15:10 ` [PATCH v3 05/35] hw/audio/virtio-snd-pci: remove custom model callback marcandre.lureau
@ 2025-10-29 21:44 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:44 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> virtio-snd can rely on the default code to instantiate the device and
> set the audiodev.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/audio/virtio-snd-pci.c | 16 +---------------
> 1 file changed, 1 insertion(+), 15 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 06/35] hw/audio: simplify 'hda' audio init code
2025-10-27 15:10 ` [PATCH v3 06/35] hw/audio: simplify 'hda' audio init code marcandre.lureau
@ 2025-10-29 21:46 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:46 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> For consistency, use only qdev_device_add() to instantiate the devices.
> We can't rely on automatic bus lookup for the "hda-duplex" device though
> as it may end up on a different "intel-hda" bus...
>
> This allows to make init() callback bus-agnostic next.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/audio/intel-hda.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
Nice!
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 07/35] hw/audio: generalize audio_model.init()
2025-10-27 15:10 ` [PATCH v3 07/35] hw/audio: generalize audio_model.init() marcandre.lureau
@ 2025-10-29 21:47 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:47 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> It is no longer PCI bus only.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> include/hw/audio/model.h | 2 +-
> hw/audio/intel-hda.c | 4 +---
> hw/audio/model.c | 12 ++++--------
> 3 files changed, 6 insertions(+), 12 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 11/35] audio: use /audiodevs QOM container
2025-10-27 15:10 ` [PATCH v3 11/35] audio: use /audiodevs QOM container marcandre.lureau
@ 2025-10-29 21:47 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:47 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> audio_cleanup() is already called at exit (similar to chardev)
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio_int.h | 2 --
> audio/audio.c | 38 +++++++++++++-------------------------
> 2 files changed, 13 insertions(+), 27 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 15/35] audio: simplify audio_driver_init()
2025-10-27 15:10 ` [PATCH v3 15/35] audio: simplify audio_driver_init() marcandre.lureau
@ 2025-10-29 21:50 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:50 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Catch and return from error early to avoid indentations and ease the
> flow & return a bool for success value. All driver init() calls have
> been checked to set errp on error.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.c | 48 ++++++++++++++++++++----------------------------
> 1 file changed, 20 insertions(+), 28 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 24/35] audio/replay: fix type punning
2025-10-27 15:10 ` [PATCH v3 24/35] audio/replay: fix type punning marcandre.lureau
@ 2025-10-29 21:51 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:51 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.h | 6 ++++--
> audio/mixeng.h | 1 -
> include/system/replay.h | 3 ++-
> audio/mixeng.c | 6 ++----
> replay/replay-audio.c | 2 +-
> replay/stubs-system.c | 2 +-
> 6 files changed, 10 insertions(+), 10 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 23/35] audio: introduce AUD_set_volume_{in,out}_lr()
2025-10-27 15:10 ` [PATCH v3 23/35] audio: introduce AUD_set_volume_{in,out}_lr() marcandre.lureau
@ 2025-10-29 21:53 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-29 21:53 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> There are 2 sets of functions since the introduction of multi-channel
> Volume structure: AUD_set_volume_{in,out} and audio_set_volume_{in,out}.
>
> Use the AUD_ prefix for consistency with other audio.c functions. Rename
> the stereo function with "_lr" suffix.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.h | 21 ++++++++++++++++-----
> audio/audio.c | 16 ++--------------
> hw/audio/ac97.c | 4 ++--
> hw/audio/asc.c | 2 +-
> hw/audio/hda-codec.c | 4 ++--
> hw/audio/lm4549.c | 2 +-
> hw/audio/via-ac97.c | 2 +-
> hw/audio/virtio-snd.c | 4 ++--
> hw/audio/wm8750.c | 12 ++++++------
> hw/display/xlnx_dp.c | 2 +-
> hw/usb/dev-audio.c | 4 ++--
> 11 files changed, 36 insertions(+), 37 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 00/35] Audio clean-ups
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
` (34 preceding siblings ...)
2025-10-27 15:10 ` [PATCH v3 35/35] audio: Rename @endianness argument as @big_endian for clarity marcandre.lureau
@ 2025-10-30 13:43 ` Marc-André Lureau
35 siblings, 0 replies; 69+ messages in thread
From: Marc-André Lureau @ 2025-10-30 13:43 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Philippe Mathieu-Daudé, Gerd Hoffmann, Peter Maydell,
Daniel P. Berrangé, Eduardo Habkost, Manos Pitsidianakis,
qemu-ppc, Jiaxun Yang, Akihiko Odaki, Hervé Poussineau,
qemu-arm, Alistair Francis, Zhao Liu, Volker Rümelin,
Christian Schoenebeck, Paolo Bonzini, Edgar E. Iglesias,
BALATON Zoltan, Laurent Vivier
Hi
On Mon, Oct 27, 2025 at 7:13 PM <marcandre.lureau@redhat.com> wrote:
>
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Hi,
>
> This is part of continuous and overdue clean up / modernization effort for the
> audio subsystem. (there is more in the pipe)
>
> v3:
> - rebased and dropped applied patches
> - fix some checkpatch formatting errors
> - tweak commit message
> - added r-b tags
>
> v2:
> - renamed AudioBE AudioBackend
> - "qdev: add qdev_find_default_bus()" report different error for full bus
> - added "remove QEMUSoundCard" & drop AudioFE renaming patch
> - added "docs: Update mentions of removed '-soundhw' command line option" patch from philmd
> - added r-b tags
>
> thanks
>
> Marc-André Lureau (33):
> qdev: add qdev_find_default_bus()
> hw/audio: look up the default bus from the device class
> audio: rename audio_define->audio_add_audiodev()
> hw/audio: use better naming for -audio model handling code
> hw/audio/virtio-snd-pci: remove custom model callback
> hw/audio: simplify 'hda' audio init code
> hw/audio: generalize audio_model.init()
> hw/audio: drop audio_model.isa
> audio: start making AudioState a QOM Object
> audio: register backends in /audiodevs container
> audio: use /audiodevs QOM container
> audio/paaudio: remove needless return value
> audio/dsound: simplify init()
> audio/dsound: report init error via **errp
> audio: simplify audio_driver_init()
> audio: move period tick initialization
> audio: drop needless error message
> audio: keep vmstate handle with AudioState
> audio: register and unregister vmstate with AudioState
> audio: initialize card_head during object init
> audio: remove some needless headers
> audio: remove AUDIO_HOST_ENDIANNESS
> audio: introduce AUD_set_volume_{in,out}_lr()
> audio/replay: fix type punning
> audio: move internal APIs to audio_int.h
> audio: rename AudioState -> AudioBackend
> audio: remove QEMUSoundCard
> audio/dbus: use a helper function to set the backend dbus server
> audio: move audio.h under include/qemu/
> audio: remove dependency on spice header
> audio: cleanup, use bool for booleans
> audio: move capture API to own header
> audio: drop needless audio_driver "descr" field
>
> Philippe Mathieu-Daudé (2):
> audio: Remove pointless local variables
> audio: Rename @endianness argument as @big_endian for clarity
Only 3/4 patches are missing reviews:
audio: register and unregister vmstate with AudioState
audio: remove QEMUSoundCard
audio/dbus: use a helper function to set the backend dbus server
audio: move capture API to own header
thanks for the help!
>
> MAINTAINERS | 1 +
> audio/audio_int.h | 67 ++--
> audio/audio_template.h | 44 ++-
> audio/mixeng.h | 1 -
> hw/audio/lm4549.h | 4 +-
> include/hw/audio/asc.h | 4 +-
> include/hw/audio/model.h | 14 +
> include/hw/audio/soundhw.h | 13 -
> include/hw/audio/virtio-snd.h | 4 +-
> include/hw/display/xlnx_dp.h | 4 +-
> include/hw/isa/vt82c686.h | 4 +-
> include/hw/qdev-properties-system.h | 2 +-
> include/monitor/qdev.h | 3 +
> include/qemu/audio-capture.h | 43 +++
> {audio => include/qemu}/audio.h | 137 +++-----
> include/system/replay.h | 3 +-
> ui/vnc.h | 4 +-
> audio/alsaaudio.c | 37 +--
> audio/audio-hmp-cmds.c | 4 +-
> audio/audio.c | 313 +++++++++---------
> audio/audio_win_int.c | 2 +-
> audio/dbusaudio.c | 20 +-
> audio/dsoundaudio.c | 213 +++++-------
> audio/jackaudio.c | 3 +-
> audio/mixeng.c | 12 +-
> audio/noaudio.c | 5 +-
> audio/ossaudio.c | 33 +-
> audio/paaudio.c | 24 +-
> audio/pwaudio.c | 15 +-
> audio/sdlaudio.c | 15 +-
> audio/sndioaudio.c | 3 +-
> audio/spiceaudio.c | 7 +-
> audio/wavaudio.c | 6 +-
> audio/wavcapture.c | 5 +-
> hw/arm/integratorcp.c | 2 +-
> hw/arm/musicpal.c | 2 +-
> hw/arm/realview.c | 2 +-
> hw/arm/versatilepb.c | 2 +-
> hw/arm/vexpress.c | 2 +-
> hw/arm/xlnx-zcu102.c | 2 +-
> hw/audio/ac97.c | 36 +-
> hw/audio/adlib.c | 17 +-
> hw/audio/asc.c | 15 +-
> hw/audio/cs4231a.c | 16 +-
> hw/audio/es1370.c | 30 +-
> hw/audio/gus.c | 17 +-
> hw/audio/hda-codec.c | 21 +-
> hw/audio/intel-hda.c | 22 +-
> hw/audio/lm4549.c | 12 +-
> hw/audio/marvell_88w8618.c | 2 +-
> hw/audio/{soundhw.c => model.c} | 86 ++---
> hw/audio/pcspk.c | 13 +-
> hw/audio/pl041.c | 2 +-
> hw/audio/sb16.c | 23 +-
> hw/audio/via-ac97.c | 11 +-
> hw/audio/virtio-snd-pci.c | 18 +-
> hw/audio/virtio-snd.c | 17 +-
> hw/audio/wm8750.c | 37 +--
> hw/core/machine.c | 4 +-
> hw/core/qdev-properties-system.c | 17 +-
> hw/display/xlnx_dp.c | 8 +-
> hw/ppc/prep.c | 2 +-
> hw/usb/dev-audio.c | 17 +-
> qom/object.c | 1 +
> replay/replay-audio.c | 4 +-
> replay/stubs-system.c | 2 +-
> system/qdev-monitor.c | 25 +-
> system/runstate.c | 2 +-
> system/vl.c | 14 +-
> ui/dbus.c | 13 +-
> ui/vnc.c | 10 +-
> audio/coreaudio.m | 3 +-
> audio/meson.build | 2 +-
> hw/audio/meson.build | 2 +-
> .../codeconverter/test_regexps.py | 4 +-
> 75 files changed, 758 insertions(+), 848 deletions(-)
> create mode 100644 include/hw/audio/model.h
> delete mode 100644 include/hw/audio/soundhw.h
> create mode 100644 include/qemu/audio-capture.h
> rename {audio => include/qemu}/audio.h (50%)
> rename hw/audio/{soundhw.c => model.c} (54%)
>
> --
> 2.51.0
>
>
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 19/35] audio: register and unregister vmstate with AudioState
2025-10-29 21:42 ` Philippe Mathieu-Daudé
@ 2025-10-30 16:30 ` Philippe Mathieu-Daudé
2025-10-30 16:31 ` Philippe Mathieu-Daudé
2025-10-30 16:37 ` Peter Xu
2 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-30 16:30 UTC (permalink / raw)
To: Marc-André Lureau, Peter Xu, Fabiano Rosas
Cc: qemu-devel, Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 29/10/25 22:42, Philippe Mathieu-Daudé wrote:
> On 29/10/25 20:00, Marc-André Lureau wrote:
>> Hi
>>
>> On Wed, Oct 29, 2025 at 5:51 PM Philippe Mathieu-Daudé
>> <philmd@linaro.org> wrote:
>>>
>>> On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
>>>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>>>
>>>> Proper lifecycle management with QOM state.
>>>>
>>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>>> ---
>>>> audio/audio.c | 7 ++++++-
>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/audio/audio.c b/audio/audio.c
>>>> index 4c3c3fd52f..853930bb48 100644
>>>> --- a/audio/audio.c
>>>> +++ b/audio/audio.c
>>>> @@ -1614,6 +1614,8 @@ static void audio_vm_change_state_handler
>>>> (void *opaque, bool running,
>>>> audio_reset_timer (s);
>>>> }
>>>>
>>>> +static const VMStateDescription vmstate_audio;
>>>> +
>>>> static void audio_state_init(Object *obj)
>>>> {
>>>> AudioState *s = AUDIO_STATE(obj);
>>>> @@ -1625,6 +1627,8 @@ static void audio_state_init(Object *obj)
>>>>
>>>> s->vmse =
>>>> qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
>>>> assert(s->vmse != NULL);
>>>> +
>>>> + vmstate_register_any(NULL, &vmstate_audio, s);
>>>
>>> Please avoid legacy APIs:
>>>
>>> /**
>>> * vmstate_register_any() - legacy function to register state
>>> * serialisation description and let the function choose the id
>>> *
>>> * New code shouldn't be using this function as QOM-ified devices have
>>> * dc->vmsd to store the serialisation description.
>>> *
>>> * Returns: 0 on success, -1 on failure
>>> */
>>>
>>
>> qdev/Device have vmsd, but not plain Object (or legacy code without
>> object).
>
> Hmm right. Cc'ing Peter & Fabiano.
Not blocking, so:
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 19/35] audio: register and unregister vmstate with AudioState
2025-10-29 21:42 ` Philippe Mathieu-Daudé
2025-10-30 16:30 ` Philippe Mathieu-Daudé
@ 2025-10-30 16:31 ` Philippe Mathieu-Daudé
2025-10-30 16:37 ` Peter Xu
2 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-30 16:31 UTC (permalink / raw)
To: Marc-André Lureau, Peter Xu, Fabiano Rosas
Cc: qemu-devel, Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 29/10/25 22:42, Philippe Mathieu-Daudé wrote:
> On 29/10/25 20:00, Marc-André Lureau wrote:
>> Hi
>>
>> On Wed, Oct 29, 2025 at 5:51 PM Philippe Mathieu-Daudé
>> <philmd@linaro.org> wrote:
>>>
>>> On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
>>>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>>>
>>>> Proper lifecycle management with QOM state.
>>>>
>>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>>> ---
>>>> audio/audio.c | 7 ++++++-
>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/audio/audio.c b/audio/audio.c
>>>> index 4c3c3fd52f..853930bb48 100644
>>>> --- a/audio/audio.c
>>>> +++ b/audio/audio.c
>>>> @@ -1614,6 +1614,8 @@ static void audio_vm_change_state_handler
>>>> (void *opaque, bool running,
>>>> audio_reset_timer (s);
>>>> }
>>>>
>>>> +static const VMStateDescription vmstate_audio;
>>>> +
>>>> static void audio_state_init(Object *obj)
>>>> {
>>>> AudioState *s = AUDIO_STATE(obj);
>>>> @@ -1625,6 +1627,8 @@ static void audio_state_init(Object *obj)
>>>>
>>>> s->vmse =
>>>> qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
>>>> assert(s->vmse != NULL);
>>>> +
>>>> + vmstate_register_any(NULL, &vmstate_audio, s);
>>>
>>> Please avoid legacy APIs:
>>>
>>> /**
>>> * vmstate_register_any() - legacy function to register state
>>> * serialisation description and let the function choose the id
>>> *
>>> * New code shouldn't be using this function as QOM-ified devices have
>>> * dc->vmsd to store the serialisation description.
>>> *
>>> * Returns: 0 on success, -1 on failure
>>> */
>>>
>>
>> qdev/Device have vmsd, but not plain Object (or legacy code without
>> object).
>
> Hmm right. Cc'ing Peter & Fabiano.
Not blocking, so:
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
But please consider an alternative. We really ought to remove this
legacy API.
Thanks,
Phil.
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 19/35] audio: register and unregister vmstate with AudioState
2025-10-29 21:42 ` Philippe Mathieu-Daudé
2025-10-30 16:30 ` Philippe Mathieu-Daudé
2025-10-30 16:31 ` Philippe Mathieu-Daudé
@ 2025-10-30 16:37 ` Peter Xu
2 siblings, 0 replies; 69+ messages in thread
From: Peter Xu @ 2025-10-30 16:37 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Marc-André Lureau, Fabiano Rosas, qemu-devel,
Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier,
Dr. David Alan Gilbert
On Wed, Oct 29, 2025 at 10:42:00PM +0100, Philippe Mathieu-Daudé wrote:
> On 29/10/25 20:00, Marc-André Lureau wrote:
> > Hi
> >
> > On Wed, Oct 29, 2025 at 5:51 PM Philippe Mathieu-Daudé
> > <philmd@linaro.org> wrote:
> > >
> > > On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> > > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > >
> > > > Proper lifecycle management with QOM state.
> > > >
> > > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > > ---
> > > > audio/audio.c | 7 ++++++-
> > > > 1 file changed, 6 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/audio/audio.c b/audio/audio.c
> > > > index 4c3c3fd52f..853930bb48 100644
> > > > --- a/audio/audio.c
> > > > +++ b/audio/audio.c
> > > > @@ -1614,6 +1614,8 @@ static void audio_vm_change_state_handler (void *opaque, bool running,
> > > > audio_reset_timer (s);
> > > > }
> > > >
> > > > +static const VMStateDescription vmstate_audio;
> > > > +
> > > > static void audio_state_init(Object *obj)
> > > > {
> > > > AudioState *s = AUDIO_STATE(obj);
> > > > @@ -1625,6 +1627,8 @@ static void audio_state_init(Object *obj)
> > > >
> > > > s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s);
> > > > assert(s->vmse != NULL);
> > > > +
> > > > + vmstate_register_any(NULL, &vmstate_audio, s);
> > >
> > > Please avoid legacy APIs:
> > >
> > > /**
> > > * vmstate_register_any() - legacy function to register state
> > > * serialisation description and let the function choose the id
> > > *
> > > * New code shouldn't be using this function as QOM-ified devices have
> > > * dc->vmsd to store the serialisation description.
> > > *
> > > * Returns: 0 on success, -1 on failure
> > > */
> > >
> >
> > qdev/Device have vmsd, but not plain Object (or legacy code without object).
>
> Hmm right. Cc'ing Peter & Fabiano.
Thanks, yeah this looks fine when it was already there.
When looking at it, what's interesting is vmstate_audio is actually empty..
Explanation in da77adbaf61, since 2021. Maybe we could drop it completely
at some point as I know we start to deprecate machines over 6(?) years.
But I don't know when is proper.
We also hit similar issue with TAP device where there was a demand to add
compat properties to TAP however it was not a qdev, hence it cannot use
compat properties mechanism.. I wonder if these devices will be (at some
point) be converted to be type device.
--
Peter Xu
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 28/35] audio/dbus: use a helper function to set the backend dbus server
2025-10-27 15:10 ` [PATCH v3 28/35] audio/dbus: use a helper function to set the backend dbus server marcandre.lureau
@ 2025-10-30 16:38 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-30 16:38 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.h | 9 +++++++++
> audio/audio_int.h | 5 ++++-
> audio/audio.c | 17 +++++++++++++++++
> audio/dbusaudio.c | 9 +++++++--
> ui/dbus.c | 8 +-------
> 5 files changed, 38 insertions(+), 10 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 29/35] audio: move audio.h under include/qemu/
2025-10-27 15:10 ` [PATCH v3 29/35] audio: move audio.h under include/qemu/ marcandre.lureau
@ 2025-10-30 16:39 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-30 16:39 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
> ---
> MAINTAINERS | 1 +
> audio/audio_int.h | 2 +-
> hw/audio/lm4549.h | 2 +-
> include/hw/audio/asc.h | 2 +-
> include/hw/audio/virtio-snd.h | 2 +-
> include/hw/display/xlnx_dp.h | 2 +-
> include/hw/isa/vt82c686.h | 2 +-
> {audio => include/qemu}/audio.h | 0
> include/system/replay.h | 2 +-
> ui/vnc.h | 2 +-
> audio/alsaaudio.c | 2 +-
> audio/audio.c | 2 +-
> audio/audio_win_int.c | 2 +-
> audio/dbusaudio.c | 2 +-
> audio/dsoundaudio.c | 2 +-
> audio/jackaudio.c | 2 +-
> audio/mixeng.c | 2 +-
> audio/noaudio.c | 2 +-
> audio/ossaudio.c | 2 +-
> audio/paaudio.c | 2 +-
> audio/pwaudio.c | 2 +-
> audio/sdlaudio.c | 2 +-
> audio/sndioaudio.c | 2 +-
> audio/spiceaudio.c | 2 +-
> audio/wavaudio.c | 2 +-
> hw/arm/integratorcp.c | 2 +-
> hw/arm/musicpal.c | 2 +-
> hw/arm/realview.c | 2 +-
> hw/arm/versatilepb.c | 2 +-
> hw/arm/vexpress.c | 2 +-
> hw/arm/xlnx-zcu102.c | 2 +-
> hw/audio/ac97.c | 2 +-
> hw/audio/adlib.c | 2 +-
> hw/audio/asc.c | 2 +-
> hw/audio/cs4231a.c | 2 +-
> hw/audio/es1370.c | 2 +-
> hw/audio/gus.c | 2 +-
> hw/audio/hda-codec.c | 2 +-
> hw/audio/lm4549.c | 2 +-
> hw/audio/marvell_88w8618.c | 2 +-
> hw/audio/pcspk.c | 2 +-
> hw/audio/sb16.c | 2 +-
> hw/audio/wm8750.c | 2 +-
> hw/core/machine.c | 2 +-
> hw/core/qdev-properties-system.c | 2 +-
> hw/ppc/prep.c | 2 +-
> hw/usb/dev-audio.c | 2 +-
> replay/replay-audio.c | 2 +-
> system/runstate.c | 2 +-
> system/vl.c | 2 +-
Alternatively "system/audio.h". Regardless,
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ui/dbus.c | 3 +--
> audio/coreaudio.m | 2 +-
> scripts/codeconverter/codeconverter/test_regexps.py | 2 +-
> 53 files changed, 52 insertions(+), 52 deletions(-)
> rename {audio => include/qemu}/audio.h (100%)
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 32/35] audio: move capture API to own header
2025-10-27 15:10 ` [PATCH v3 32/35] audio: move capture API to own header marcandre.lureau
@ 2025-10-30 16:40 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-30 16:40 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> For modularity/clarity reasons, move the capture API in a specific
> header.
>
> The current audio/ header license is MIT.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> MAINTAINERS | 2 +-
> audio/audio_int.h | 1 +
> include/qemu/audio-capture.h | 43 ++++++++++++++++++++++++++++++++++++
> include/qemu/audio.h | 30 -------------------------
> ui/vnc.h | 2 +-
> 5 files changed, 46 insertions(+), 32 deletions(-)
> create mode 100644 include/qemu/audio-capture.h
Good idea.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v3 27/35] audio: remove QEMUSoundCard
2025-10-27 15:10 ` [PATCH v3 27/35] audio: remove QEMUSoundCard marcandre.lureau
@ 2025-10-30 16:43 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 69+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-30 16:43 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Alexandre Ratchov, Alex Bennée, Jan Kiszka,
Michael S. Tsirkin, Marcel Apfelbaum, Yanan Wang, Thomas Huth,
Gerd Hoffmann, Peter Maydell, Daniel P. Berrangé,
Eduardo Habkost, Manos Pitsidianakis, qemu-ppc, Jiaxun Yang,
Akihiko Odaki, Hervé Poussineau, qemu-arm, Alistair Francis,
Zhao Liu, Volker Rümelin, Christian Schoenebeck,
Paolo Bonzini, Edgar E. Iglesias, BALATON Zoltan, Laurent Vivier
On 27/10/25 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> There is no clear need for this extra intermediary structure between
> the audio backend and its user.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> audio/audio.h | 18 ++++++------------
> audio/audio_int.h | 3 ---
> audio/audio_template.h | 22 ++++++++++------------
> hw/audio/lm4549.h | 2 +-
> include/hw/audio/asc.h | 2 +-
> include/hw/audio/virtio-snd.h | 2 +-
> include/hw/display/xlnx_dp.h | 2 +-
> include/hw/isa/vt82c686.h | 2 +-
> include/hw/qdev-properties-system.h | 2 +-
> audio/audio.c | 29 ++++++++++-------------------
> hw/audio/ac97.c | 25 ++++++++++++-------------
> hw/audio/adlib.c | 9 ++++-----
> hw/audio/asc.c | 9 +++------
> hw/audio/cs4231a.c | 8 ++++----
> hw/audio/es1370.c | 23 +++++++++++------------
> hw/audio/gus.c | 9 ++++-----
> hw/audio/hda-codec.c | 15 +++++++--------
> hw/audio/lm4549.c | 8 ++++----
> hw/audio/pcspk.c | 9 +++++----
> hw/audio/pl041.c | 2 +-
> hw/audio/sb16.c | 16 ++++++++--------
> hw/audio/via-ac97.c | 9 ++++-----
> hw/audio/virtio-snd.c | 13 ++++++-------
> hw/audio/wm8750.c | 23 +++++++++++------------
> hw/core/qdev-properties-system.c | 11 +++++------
> hw/display/xlnx_dp.c | 6 +++---
> hw/usb/dev-audio.c | 11 +++++------
> 27 files changed, 129 insertions(+), 161 deletions(-)
>
> diff --git a/audio/audio.h b/audio/audio.h
> index 1d56f111ea..fdbc33ae0c 100644
> --- a/audio/audio.h
> +++ b/audio/audio.h
> @@ -69,18 +69,12 @@ struct AudioBackendClass {
> };
>
> typedef struct AudioBackend AudioBackend;
> -typedef struct QEMUSoundCard {
> - char *name;
> - AudioBackend *be;
> - QLIST_ENTRY (QEMUSoundCard) entries;
> -} QEMUSoundCard;
>
> typedef struct QEMUAudioTimeStamp {
> uint64_t old_ts;
> } QEMUAudioTimeStamp;
>
> -bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp);
> -void AUD_remove_card (QEMUSoundCard *card);
> +bool AUD_backend_check (AudioBackend **be, Error **errp);
> CaptureVoiceOut *AUD_add_capture(
> AudioBackend *s,
> struct audsettings *as,
> @@ -90,7 +84,7 @@ CaptureVoiceOut *AUD_add_capture(
> void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque);
>
> SWVoiceOut *AUD_open_out (
> - QEMUSoundCard *card,
> + AudioBackend *be,
> SWVoiceOut *sw,
> const char *name,
> void *callback_opaque,
> @@ -98,7 +92,7 @@ SWVoiceOut *AUD_open_out (
> struct audsettings *settings
> );
>
> -void AUD_close_out (QEMUSoundCard *card, SWVoiceOut *sw);
> +void AUD_close_out (AudioBackend *be, SWVoiceOut *sw);
> size_t AUD_write (SWVoiceOut *sw, void *pcm_buf, size_t size);
> int AUD_get_buffer_size_out (SWVoiceOut *sw);
> void AUD_set_active_out (SWVoiceOut *sw, int on);
> @@ -132,7 +126,7 @@ AUD_set_volume_in_lr(SWVoiceIn *sw, bool mut, uint8_t lvol, uint8_t rvol) {
> }
>
> SWVoiceIn *AUD_open_in (
> - QEMUSoundCard *card,
> + AudioBackend *be,
> SWVoiceIn *sw,
> const char *name,
> void *callback_opaque,
> @@ -140,7 +134,7 @@ SWVoiceIn *AUD_open_in (
> struct audsettings *settings
> );
>
> -void AUD_close_in (QEMUSoundCard *card, SWVoiceIn *sw);
> +void AUD_close_in (AudioBackend *be, SWVoiceIn *sw);
I know this is painful, but please fix ./checkpatch.pl errors before
posting your pull request.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
end of thread, other threads:[~2025-10-30 16:44 UTC | newest]
Thread overview: 69+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-27 15:10 [PATCH v3 00/35] Audio clean-ups marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 01/35] qdev: add qdev_find_default_bus() marcandre.lureau
2025-10-29 13:58 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 02/35] hw/audio: look up the default bus from the device class marcandre.lureau
2025-10-29 14:01 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 03/35] audio: rename audio_define->audio_add_audiodev() marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 04/35] hw/audio: use better naming for -audio model handling code marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 05/35] hw/audio/virtio-snd-pci: remove custom model callback marcandre.lureau
2025-10-29 21:44 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 06/35] hw/audio: simplify 'hda' audio init code marcandre.lureau
2025-10-29 21:46 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 07/35] hw/audio: generalize audio_model.init() marcandre.lureau
2025-10-29 21:47 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 08/35] hw/audio: drop audio_model.isa marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 09/35] audio: start making AudioState a QOM Object marcandre.lureau
2025-10-27 16:26 ` BALATON Zoltan
2025-10-28 12:34 ` Marc-André Lureau
2025-10-29 13:38 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 10/35] audio: register backends in /audiodevs container marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 11/35] audio: use /audiodevs QOM container marcandre.lureau
2025-10-29 21:47 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 12/35] audio/paaudio: remove needless return value marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 13/35] audio/dsound: simplify init() marcandre.lureau
2025-10-29 13:42 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 14/35] audio/dsound: report init error via **errp marcandre.lureau
2025-10-29 13:43 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 15/35] audio: simplify audio_driver_init() marcandre.lureau
2025-10-29 21:50 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 16/35] audio: move period tick initialization marcandre.lureau
2025-10-29 13:44 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 17/35] audio: drop needless error message marcandre.lureau
2025-10-29 13:40 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 18/35] audio: keep vmstate handle with AudioState marcandre.lureau
2025-10-29 13:46 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 19/35] audio: register and unregister vmstate " marcandre.lureau
2025-10-29 13:48 ` Philippe Mathieu-Daudé
2025-10-29 19:00 ` Marc-André Lureau
2025-10-29 21:42 ` Philippe Mathieu-Daudé
2025-10-30 16:30 ` Philippe Mathieu-Daudé
2025-10-30 16:31 ` Philippe Mathieu-Daudé
2025-10-30 16:37 ` Peter Xu
2025-10-27 15:10 ` [PATCH v3 20/35] audio: initialize card_head during object init marcandre.lureau
2025-10-29 13:48 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 21/35] audio: remove some needless headers marcandre.lureau
2025-10-29 13:48 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 22/35] audio: remove AUDIO_HOST_ENDIANNESS marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 23/35] audio: introduce AUD_set_volume_{in,out}_lr() marcandre.lureau
2025-10-29 21:53 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 24/35] audio/replay: fix type punning marcandre.lureau
2025-10-29 21:51 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 25/35] audio: move internal APIs to audio_int.h marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 26/35] audio: rename AudioState -> AudioBackend marcandre.lureau
2025-10-29 13:49 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 27/35] audio: remove QEMUSoundCard marcandre.lureau
2025-10-30 16:43 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 28/35] audio/dbus: use a helper function to set the backend dbus server marcandre.lureau
2025-10-30 16:38 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 29/35] audio: move audio.h under include/qemu/ marcandre.lureau
2025-10-30 16:39 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 30/35] audio: remove dependency on spice header marcandre.lureau
2025-10-29 13:51 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 31/35] audio: cleanup, use bool for booleans marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 32/35] audio: move capture API to own header marcandre.lureau
2025-10-30 16:40 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 33/35] audio: drop needless audio_driver "descr" field marcandre.lureau
2025-10-29 13:51 ` Philippe Mathieu-Daudé
2025-10-27 15:10 ` [PATCH v3 34/35] audio: Remove pointless local variables marcandre.lureau
2025-10-27 15:10 ` [PATCH v3 35/35] audio: Rename @endianness argument as @big_endian for clarity marcandre.lureau
2025-10-30 13:43 ` [PATCH v3 00/35] Audio clean-ups Marc-André Lureau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).