[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/15] audio: add audiodev property to vnc and wav_ca
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 03/15] audio: add audiodev property to vnc and wav_capture |
Date: |
Tue, 13 Aug 2019 13:17:57 +0200 |
From: Kővágó, Zoltán <address@hidden>
Signed-off-by: Kővágó, Zoltán <address@hidden>
Acked-by: Dr. David Alan Gilbert <address@hidden>
Message-id: address@hidden
Signed-off-by: Gerd Hoffmann <address@hidden>
---
ui/vnc.h | 2 ++
monitor/misc.c | 22 +++++++++++-----------
ui/vnc.c | 15 ++++++++++++++-
hmp-commands.hx | 11 ++++++-----
qemu-options.hx | 6 ++++++
5 files changed, 39 insertions(+), 17 deletions(-)
diff --git a/ui/vnc.h b/ui/vnc.h
index 2f84db314216..6f54653455b4 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -183,6 +183,8 @@ struct VncDisplay
#ifdef CONFIG_VNC_SASL
VncDisplaySASL sasl;
#endif
+
+ AudioState *audio_state;
};
typedef struct VncTight {
diff --git a/monitor/misc.c b/monitor/misc.c
index e393333a0e13..bdf857555fe9 100644
--- a/monitor/misc.c
+++ b/monitor/misc.c
@@ -1142,21 +1142,21 @@ static void hmp_stopcapture(Monitor *mon, const QDict
*qdict)
static void hmp_wavcapture(Monitor *mon, const QDict *qdict)
{
const char *path = qdict_get_str(qdict, "path");
- int has_freq = qdict_haskey(qdict, "freq");
- int freq = qdict_get_try_int(qdict, "freq", -1);
- int has_bits = qdict_haskey(qdict, "bits");
- int bits = qdict_get_try_int(qdict, "bits", -1);
- int has_channels = qdict_haskey(qdict, "nchannels");
- int nchannels = qdict_get_try_int(qdict, "nchannels", -1);
+ int freq = qdict_get_try_int(qdict, "freq", 44100);
+ int bits = qdict_get_try_int(qdict, "bits", 16);
+ int nchannels = qdict_get_try_int(qdict, "nchannels", 2);
+ const char *audiodev = qdict_get_str(qdict, "audiodev");
CaptureState *s;
+ AudioState *as = audio_state_by_name(audiodev);
+
+ if (!as) {
+ monitor_printf(mon, "Audiodev '%s' not found\n", audiodev);
+ return;
+ }
s = g_malloc0 (sizeof (*s));
- freq = has_freq ? freq : 44100;
- bits = has_bits ? bits : 16;
- nchannels = has_channels ? nchannels : 2;
-
- if (wav_start_capture(NULL, s, path, freq, bits, nchannels)) {
+ if (wav_start_capture(as, s, path, freq, bits, nchannels)) {
monitor_printf(mon, "Failed to add wave capture\n");
g_free (s);
return;
diff --git a/ui/vnc.c b/ui/vnc.c
index 140f364ddacf..24f9be5b5d7e 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1222,7 +1222,7 @@ static void audio_add(VncState *vs)
ops.destroy = audio_capture_destroy;
ops.capture = audio_capture;
- vs->audio_cap = AUD_add_capture(NULL, &vs->as, &ops, vs);
+ vs->audio_cap = AUD_add_capture(vs->vd->audio_state, &vs->as, &ops, vs);
if (!vs->audio_cap) {
error_report("Failed to add audio capture");
}
@@ -3369,6 +3369,9 @@ static QemuOptsList qemu_vnc_opts = {
},{
.name = "non-adaptive",
.type = QEMU_OPT_BOOL,
+ },{
+ .name = "audiodev",
+ .type = QEMU_OPT_STRING,
},
{ /* end of list */ }
},
@@ -3806,6 +3809,7 @@ void vnc_display_open(const char *id, Error **errp)
const char *saslauthz;
int lock_key_sync = 1;
int key_delay_ms;
+ const char *audiodev;
if (!vd) {
error_setg(errp, "VNC display not active");
@@ -3991,6 +3995,15 @@ void vnc_display_open(const char *id, Error **errp)
}
vd->ledstate = 0;
+ audiodev = qemu_opt_get(opts, "audiodev");
+ if (audiodev) {
+ vd->audio_state = audio_state_by_name(audiodev);
+ if (!vd->audio_state) {
+ error_setg(errp, "Audiodev '%s' not found", audiodev);
+ goto fail;
+ }
+ }
+
device_id = qemu_opt_get(opts, "display");
if (device_id) {
int head = qemu_opt_get_number(opts, "head", 0);
diff --git a/hmp-commands.hx b/hmp-commands.hx
index bfa5681dd257..cfcc044ce4bf 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -819,16 +819,17 @@ ETEXI
{
.name = "wavcapture",
- .args_type = "path:F,freq:i?,bits:i?,nchannels:i?",
- .params = "path [frequency [bits [channels]]]",
+ .args_type = "path:F,audiodev:s,freq:i?,bits:i?,nchannels:i?",
+ .params = "path audiodev [frequency [bits [channels]]]",
.help = "capture audio to a wave file (default frequency=44100
bits=16 channels=2)",
.cmd = hmp_wavcapture,
},
STEXI
-@item wavcapture @var{filename} [@var{frequency} [@var{bits} [@var{channels}]]]
+@item wavcapture @var{filename} @var{audiodev} [@var{frequency} [@var{bits}
[@var{channels}]]]
@findex wavcapture
-Capture audio into @var{filename}. Using sample rate @var{frequency}
-bits per sample @var{bits} and number of channels @var{channels}.
+Capture audio into @var{filename} from @var{audiodev}, using sample rate
+@var{frequency} bits per sample @var{bits} and number of channels
+@var{channels}.
Defaults:
@itemize @minus
diff --git a/qemu-options.hx b/qemu-options.hx
index 9621e934c0bf..a308e5f5aa5c 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1978,6 +1978,12 @@ can help the device and guest to keep up and not lose
events in case
events are arriving in bulk. Possible causes for the latter are flaky
network connections, or scripts for automated testing.
+@item audiodev=@var{audiodev}
+
+Use the specified @var{audiodev} when the VNC client requests audio
+transmission. When not using an -audiodev argument, this option must
+be omitted, otherwise is must be present and specify a valid audiodev.
+
@end table
ETEXI
--
2.18.1
- [Qemu-devel] [PULL 00/15] Audio 20190813 patches, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 03/15] audio: add audiodev property to vnc and wav_capture,
Gerd Hoffmann <=
- [Qemu-devel] [PULL 04/15] audio: add audiodev properties to frontends, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 07/15] paaudio: do not move stream when sink/source name is specified, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 09/15] audio: remove audio_MIN, audio_MAX, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 14/15] audio: fix memory leak reported by ASAN, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 05/15] paaudio: prepare for multiple audiodev, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 11/15] paaudio: fix playback glitches, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 02/15] audio: basic support for multi backend audio, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 08/15] paaudio: properly disconnect streams in fini_*, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 13/15] audio: use size_t where makes sense, Gerd Hoffmann, 2019/08/13
- [Qemu-devel] [PULL 06/15] audio: audiodev= parameters no longer optional when -audiodev present, Gerd Hoffmann, 2019/08/13