qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [RFC 00/24] audio: add GStreamer backend
@ 2025-12-01 11:22 marcandre.lureau
  2025-12-01 11:22 ` [RFC 01/24] rust: patch thiserror to work with meson marcandre.lureau
                   ` (24 more replies)
  0 siblings, 25 replies; 51+ messages in thread
From: marcandre.lureau @ 2025-12-01 11:22 UTC (permalink / raw)
  To: qemu-devel
  Cc: Gerd Hoffmann, Thomas Huth, Akihiko Odaki, Alexandre Ratchov,
	dirty.ice.hu, Christian Schoenebeck, Philippe Mathieu-Daudé,
	Volker Rümelin, Marc-André Lureau

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



^ permalink raw reply	[flat|nested] 51+ messages in thread

end of thread, other threads:[~2025-12-11  5:23 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-01 11:22 [RFC 00/24] audio: add GStreamer backend marcandre.lureau
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

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