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. 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 -- 2.51.1
