Hi On Mon, Dec 1, 2025 at 5:03 PM BALATON Zoltan <[email protected]> wrote:
> On Mon, 1 Dec 2025, [email protected] wrote: > > From: Marc-André Lureau <[email protected]> > > > > Hi, > > > > The following patch series provides a GStreamer-based audio backend, > which could > > ultimately allow QEMU to leverage the framework to support the various > audio > > subsystems and simplify the audio handling logic (timing, resampling, > mixing > > etc), as well as allow greater pipeline flexibility and customization. > > While it's good to have a GStreamer backend to integrate well into systems > already using that, this should not replace existing audio backends in > QEMU. The reason is that GStreamer has extensive dependencies that I would > GStreamer itself is not so big and doesn't have that many dependencies that qemu doesn't already have. > like to avoid and still be able to use QEMU with just an ALSA or SDL audio > backend that are much leaner and provide the needed functionality for most > SDL audio is itself a wrapper for various audio backends, much like GStreamer in the end, but with arguably less flexibility. > cases. Also when using jack you'd want to have a QEMU backend for it not > going through multiple layers. So adding a GStreamer backend has its use > I wonder what are the advantages of using JACK compared to ALSA, or pulse/pipewire, tbh. > as another audio backend but not as a replacement for QEMU's audio > handling logic and backends. > It would be great if people with very specific or constrained requirements on qemu audio could check if the GStreamer backend fits their need. > > Regards, > BALATON Zoltan > > > The preliminary patches consist of additional cleanups started in QEMU > 10.2, in > > order to make the code more modular and use QOM. > > > > Finally, the last patch introduces the "audio" rust crate that > implements the > > GStreamer backend. See the TODO list in the commit message for the > remaining or > > related work items. > > > > Please review and test! > > > > Based-on: https://gitlab.com/bonzini/qemu.git rust-cargo > > Requires meson from https://github.com/bonzini/meson.git > cargo-object-full > > > > Marc-André Lureau (24): > > rust: patch thiserror to work with meson > > audio: remove obsolete/obscure functions > > audio/dbus: make "dbus" the default backend when using -display dbus > > qemu-options.hx: clarify default audio backend selection > > audio: introduce AudioDriver > > audio: simplify audio_init() > > audio: move object creation to audio_driver_init() > > audio: add QOM module-objects for each backend > > audio: remove set_dbus_server from audio_driver > > audio: lookup "audio-" object types, and realize them > > audio: switch to module-object, drop audio driver registration > > module: remove audio module support > > audio: keep a strong reference on the backend > > audio: make list type declaration private > > audio: make create_pdos() private > > replay: remove dependency on audio/ > > audio: make all the backend-specific APIs take the be > > audio: make AudioBackend truely abstract > > audio: split AudioBackend > > audio: AUD_ -> audio_be_ > > audio-be: add common pre-conditions > > audio-be: add some state trace > > audio: split AudioDriver code in audio-driver.c > > WIP: rust/audio: add GStreamer backend > > > > qapi/audio.json | 29 + > > ...dio_template.h => audio-driver_template.h} | 76 +- > > audio/audio_int.h | 50 +- > > include/qemu/audio-capture.h | 24 +- > > include/qemu/audio.h | 129 +- > > include/qemu/module.h | 3 +- > > include/system/replay.h | 8 +- > > replay/replay-internal.h | 2 + > > rust/audio/wrapper.h | 27 + > > audio/alsaaudio.c | 42 +- > > audio/audio-be.c | 276 ++ > > audio/audio-driver.c | 1988 +++++++++++++++ > > audio/audio.c | 2248 ++--------------- > > audio/dbusaudio.c | 57 +- > > audio/dsoundaudio.c | 37 +- > > audio/jackaudio.c | 37 +- > > audio/noaudio.c | 37 +- > > audio/ossaudio.c | 41 +- > > audio/paaudio.c | 37 +- > > audio/pwaudio.c | 37 +- > > audio/sdlaudio.c | 37 +- > > audio/sndioaudio.c | 37 +- > > audio/spiceaudio.c | 37 +- > > audio/wavaudio.c | 37 +- > > audio/wavcapture.c | 7 +- > > hw/audio/ac97.c | 42 +- > > hw/audio/adlib.c | 29 +- > > hw/audio/asc.c | 20 +- > > hw/audio/cs4231a.c | 18 +- > > hw/audio/es1370.c | 26 +- > > hw/audio/gus.c | 11 +- > > hw/audio/hda-codec.c | 26 +- > > hw/audio/lm4549.c | 20 +- > > hw/audio/pcspk.c | 8 +- > > hw/audio/sb16.c | 22 +- > > hw/audio/via-ac97.c | 20 +- > > hw/audio/virtio-snd.c | 36 +- > > hw/audio/wm8750.c | 42 +- > > hw/display/xlnx_dp.c | 14 +- > > hw/usb/dev-audio.c | 18 +- > > replay/replay-audio.c | 51 +- > > replay/replay.c | 2 +- > > replay/stubs-system.c | 8 +- > > ui/dbus.c | 16 +- > > ui/vnc.c | 4 +- > > Cargo.lock | 572 ++++- > > Cargo.toml | 6 + > > audio/coreaudio.m | 37 +- > > audio/meson.build | 2 + > > audio/trace-events | 9 + > > qemu-options.hx | 20 +- > > rust/audio/Cargo.toml | 29 + > > rust/audio/build.rs | 49 + > > rust/audio/meson.build | 75 + > > rust/audio/src/audio.rs | 516 ++++ > > rust/audio/src/bindings.rs | 32 + > > rust/audio/src/gstreamer.rs | 1070 ++++++++ > > rust/audio/src/lib.rs | 99 + > > rust/meson.build | 6 + > > .../packagefiles/syn-2-rs/meson/meson.build | 3 + > > .../thiserror-2.0.17-include.patch | 14 + > > .../thiserror-impl-2.0.17-include.patch | 13 + > > subprojects/syn-2-rs.wrap | 11 +- > > subprojects/thiserror-2-rs.wrap | 10 + > > subprojects/thiserror-impl-2-rs.wrap | 10 + > > 65 files changed, 5862 insertions(+), 2494 deletions(-) > > rename audio/{audio_template.h => audio-driver_template.h} (90%) > > create mode 100644 rust/audio/wrapper.h > > create mode 100644 audio/audio-be.c > > create mode 100644 audio/audio-driver.c > > create mode 100644 rust/audio/Cargo.toml > > create mode 100644 rust/audio/build.rs > > create mode 100644 rust/audio/meson.build > > create mode 100644 rust/audio/src/audio.rs > > create mode 100644 rust/audio/src/bindings.rs > > create mode 100644 rust/audio/src/gstreamer.rs > > create mode 100644 rust/audio/src/lib.rs > > create mode 100644 subprojects/packagefiles/syn-2-rs/meson/meson.build > > create mode 100644 > subprojects/packagefiles/thiserror-2.0.17-include.patch > > create mode 100644 > subprojects/packagefiles/thiserror-impl-2.0.17-include.patch > > create mode 100644 subprojects/thiserror-2-rs.wrap > > create mode 100644 subprojects/thiserror-impl-2-rs.wrap > > > >
