From: marcandre.lureau@redhat.com
To: qemu-devel@nongnu.org
Cc: "Gerd Hoffmann" <kraxel@redhat.com>,
"Thomas Huth" <huth@tuxfamily.org>,
"Akihiko Odaki" <odaki@rsg.ci.i.u-tokyo.ac.jp>,
"Alexandre Ratchov" <alex@caoua.org>,
dirty.ice.hu@gmail.com,
"Christian Schoenebeck" <qemu_oss@crudebyte.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Volker Rümelin" <vr_qemu@t-online.de>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: [RFC 00/24] audio: add GStreamer backend
Date: Mon, 1 Dec 2025 15:22:41 +0400 [thread overview]
Message-ID: <20251201112309.4163921-1-marcandre.lureau@redhat.com> (raw)
From: Marc-André Lureau <marcandre.lureau@redhat.com>
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
next reply other threads:[~2025-12-01 11:23 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-01 11:22 marcandre.lureau [this message]
2025-12-01 11:22 ` [RFC 01/24] rust: patch thiserror to work with meson marcandre.lureau
2025-12-01 11:22 ` [RFC 02/24] audio: remove obsolete/obscure functions marcandre.lureau
2025-12-10 14:02 ` Akihiko Odaki
2025-12-01 11:22 ` [RFC 03/24] audio/dbus: make "dbus" the default backend when using -display dbus marcandre.lureau
2025-12-10 14:03 ` Akihiko Odaki
2025-12-01 11:22 ` [RFC 04/24] qemu-options.hx: clarify default audio backend selection marcandre.lureau
2025-12-01 11:22 ` [RFC 05/24] audio: introduce AudioDriver marcandre.lureau
2025-12-11 5:22 ` Akihiko Odaki
2025-12-01 11:22 ` [RFC 06/24] audio: simplify audio_init() marcandre.lureau
2025-12-01 11:22 ` [RFC 07/24] audio: move object creation to audio_driver_init() marcandre.lureau
2025-12-01 11:22 ` [RFC 08/24] audio: add QOM module-objects for each backend marcandre.lureau
2025-12-01 13:20 ` BALATON Zoltan
2025-12-01 18:43 ` Marc-André Lureau
2025-12-01 11:22 ` [RFC 09/24] audio: remove set_dbus_server from audio_driver marcandre.lureau
2025-12-01 11:22 ` [RFC 10/24] audio: lookup "audio-" object types, and realize them marcandre.lureau
2025-12-01 11:22 ` [RFC 11/24] audio: switch to module-object, drop audio driver registration marcandre.lureau
2025-12-01 11:22 ` [RFC 12/24] module: remove audio module support marcandre.lureau
2025-12-01 11:22 ` [RFC 13/24] audio: keep a strong reference on the backend marcandre.lureau
2025-12-01 11:22 ` [RFC 14/24] audio: make list type declaration private marcandre.lureau
2025-12-01 11:22 ` [RFC 15/24] audio: make create_pdos() private marcandre.lureau
2025-12-01 11:22 ` [RFC 16/24] replay: remove dependency on audio/ marcandre.lureau
2025-12-01 11:22 ` [RFC 17/24] audio: make all the backend-specific APIs take the be marcandre.lureau
2025-12-01 11:22 ` [RFC 18/24] audio: make AudioBackend truely abstract marcandre.lureau
2025-12-01 11:23 ` [RFC 19/24] audio: split AudioBackend marcandre.lureau
2025-12-01 11:23 ` [RFC 20/24] audio: AUD_ -> audio_be_ marcandre.lureau
2025-12-01 11:23 ` [RFC 21/24] audio-be: add common pre-conditions marcandre.lureau
2025-12-01 11:23 ` [RFC 22/24] audio-be: add some state trace marcandre.lureau
2025-12-01 11:23 ` [RFC 23/24] audio: split AudioDriver code in audio-driver.c marcandre.lureau
2025-12-01 11:23 ` [RFC 24/24] WIP: rust/audio: add GStreamer backend marcandre.lureau
2025-12-01 13:12 ` Markus Armbruster
2025-12-01 18:26 ` Marc-André Lureau
2025-12-01 13:02 ` [RFC 00/24] audio: " BALATON Zoltan
2025-12-01 13:41 ` Christian Schoenebeck
2025-12-01 18:20 ` Marc-André Lureau
2025-12-01 19:30 ` BALATON Zoltan
2025-12-01 19:44 ` Daniel P. Berrangé
2025-12-02 12:01 ` BALATON Zoltan
2025-12-01 20:58 ` Alexandre Ratchov
2025-12-02 7:55 ` Paolo Bonzini
2025-12-02 12:03 ` BALATON Zoltan
2025-12-02 12:25 ` Geoffrey McRae
2025-12-02 12:44 ` Marc-André Lureau
2025-12-02 13:25 ` Geoffrey McRae
2025-12-02 14:14 ` Marc-André Lureau
2025-12-02 14:33 ` Neal Gompa
2025-12-02 14:43 ` Geoffrey McRae
2025-12-02 14:52 ` Markus Armbruster
2025-12-03 9:19 ` Akihiko Odaki
2025-12-02 15:39 ` Christian Schoenebeck
2025-12-03 8:06 ` Alexandre Ratchov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251201112309.4163921-1-marcandre.lureau@redhat.com \
--to=marcandre.lureau@redhat.com \
--cc=alex@caoua.org \
--cc=dirty.ice.hu@gmail.com \
--cc=huth@tuxfamily.org \
--cc=kraxel@redhat.com \
--cc=odaki@rsg.ci.i.u-tokyo.ac.jp \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu_oss@crudebyte.com \
--cc=vr_qemu@t-online.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).