aboutsummaryrefslogtreecommitdiff
path: root/qapi
diff options
context:
space:
mode:
authorDorinda Bassey <dbassey@redhat.com>2023-04-17 12:56:54 +0200
committerMarc-André Lureau <marcandre.lureau@redhat.com>2023-05-05 13:23:08 +0400
commitc2d3d1c294151cea0e62d3ecca09837fc23ba4b3 (patch)
tree538c28ab3111b08a7f0d0f510574685c2d20f566 /qapi
parentf6b761bdbd8ba63cee7428d52fb6b46e4224ddab (diff)
downloadqemu-c2d3d1c294151cea0e62d3ecca09837fc23ba4b3.zip
qemu-c2d3d1c294151cea0e62d3ecca09837fc23ba4b3.tar.gz
qemu-c2d3d1c294151cea0e62d3ecca09837fc23ba4b3.tar.bz2
audio/pwaudio.c: Add Pipewire audio backend for QEMU
This commit adds a new audiodev backend to allow QEMU to use Pipewire as both an audio sink and source. This backend is available on most systems Add Pipewire entry points for QEMU Pipewire audio backend Add wrappers for QEMU Pipewire audio backend in qpw_pcm_ops() qpw_write function returns the current state of the stream to pwaudio and Writes some data to the server for playback streams using pipewire spa_ringbuffer implementation. qpw_read function returns the current state of the stream to pwaudio and reads some data from the server for capture streams using pipewire spa_ringbuffer implementation. These functions qpw_write and qpw_read are called during playback and capture. Added some functions that convert pw audio formats to QEMU audio format and vice versa which would be needed in the pipewire audio sink and source functions qpw_init_in() & qpw_init_out(). These methods that implement playback and recording will create streams for playback and capture that will start processing and will result in the on_process callbacks to be called. Built a connection to the Pipewire sound system server in the qpw_audio_init() method. Signed-off-by: Dorinda Bassey <dbassey@redhat.com> Reviewed-by: Volker Rümelin <vr_qemu@t-online.de> Message-Id: <20230417105654.32328-1-dbassey@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Diffstat (limited to 'qapi')
-rw-r--r--qapi/audio.json44
1 files changed, 44 insertions, 0 deletions
diff --git a/qapi/audio.json b/qapi/audio.json
index 4e54c00..e03396a 100644
--- a/qapi/audio.json
+++ b/qapi/audio.json
@@ -325,6 +325,47 @@
'*server': 'str' } }
##
+# @AudiodevPipewirePerDirectionOptions:
+#
+# Options of the Pipewire backend that are used for both playback and
+# recording.
+#
+# @name: name of the sink/source to use
+#
+# @stream-name: name of the Pipewire stream created by qemu. Can be
+# used to identify the stream in Pipewire when you
+# create multiple Pipewire devices or run multiple qemu
+# instances (default: audiodev's id)
+#
+# @latency: latency you want Pipewire to achieve in microseconds
+# (default 46000)
+#
+# Since: 8.1
+##
+{ 'struct': 'AudiodevPipewirePerDirectionOptions',
+ 'base': 'AudiodevPerDirectionOptions',
+ 'data': {
+ '*name': 'str',
+ '*stream-name': 'str',
+ '*latency': 'uint32' } }
+
+##
+# @AudiodevPipewireOptions:
+#
+# Options of the Pipewire audio backend.
+#
+# @in: options of the capture stream
+#
+# @out: options of the playback stream
+#
+# Since: 8.1
+##
+{ 'struct': 'AudiodevPipewireOptions',
+ 'data': {
+ '*in': 'AudiodevPipewirePerDirectionOptions',
+ '*out': 'AudiodevPipewirePerDirectionOptions' } }
+
+##
# @AudiodevSdlPerDirectionOptions:
#
# Options of the SDL audio backend that are used for both playback and
@@ -416,6 +457,7 @@
{ 'name': 'jack', 'if': 'CONFIG_AUDIO_JACK' },
{ 'name': 'oss', 'if': 'CONFIG_AUDIO_OSS' },
{ 'name': 'pa', 'if': 'CONFIG_AUDIO_PA' },
+ { 'name': 'pipewire', 'if': 'CONFIG_AUDIO_PIPEWIRE' },
{ 'name': 'sdl', 'if': 'CONFIG_AUDIO_SDL' },
{ 'name': 'sndio', 'if': 'CONFIG_AUDIO_SNDIO' },
{ 'name': 'spice', 'if': 'CONFIG_SPICE' },
@@ -456,6 +498,8 @@
'if': 'CONFIG_AUDIO_OSS' },
'pa': { 'type': 'AudiodevPaOptions',
'if': 'CONFIG_AUDIO_PA' },
+ 'pipewire': { 'type': 'AudiodevPipewireOptions',
+ 'if': 'CONFIG_AUDIO_PIPEWIRE' },
'sdl': { 'type': 'AudiodevSdlOptions',
'if': 'CONFIG_AUDIO_SDL' },
'sndio': { 'type': 'AudiodevSndioOptions',