[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/15] audio: add audiodev property to vnc and wav_ca
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 04/15] audio: add audiodev property to vnc and wav_capture |
Date: |
Wed, 21 Aug 2019 10:41:02 +0200 |
From: Kővágó, Zoltán <address@hidden>
Signed-off-by: Kővágó, Zoltán <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 18f1b1d6d04c..86438609673a 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -182,6 +182,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 6b710597394d..aef16f6cfb4f 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 ed5e8aa5f824..649ce93cd24c 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1224,7 +1224,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");
}
@@ -3371,6 +3371,9 @@ static QemuOptsList qemu_vnc_opts = {
},{
.name = "non-adaptive",
.type = QEMU_OPT_BOOL,
+ },{
+ .name = "audiodev",
+ .type = QEMU_OPT_STRING,
},
{ /* end of list */ }
},
@@ -3808,6 +3811,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");
@@ -3993,6 +3997,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 20190821 patches, Gerd Hoffmann, 2019/08/21
- [Qemu-devel] [PULL 01/15] audio: Add missing fall through comments, Gerd Hoffmann, 2019/08/21
- [Qemu-devel] [PULL 08/15] paaudio: do not move stream when sink/source name is specified, Gerd Hoffmann, 2019/08/21
- [Qemu-devel] [PULL 09/15] paaudio: properly disconnect streams in fini_*, Gerd Hoffmann, 2019/08/21
- [Qemu-devel] [PULL 05/15] audio: add audiodev properties to frontends, Gerd Hoffmann, 2019/08/21
- [Qemu-devel] [PULL 07/15] audio: audiodev= parameters no longer optional when -audiodev present, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 04/15] audio: add audiodev property to vnc and wav_capture,
Gerd Hoffmann <=
[Qemu-devel] [PULL 15/15] audio: fix memory leak reported by ASAN, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 02/15] audio: reduce glob_audio_state usage, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 03/15] audio: basic support for multi backend audio, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 12/15] paaudio: fix playback glitches, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 13/15] audio: remove read and write pcm_ops, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 11/15] audio: do not run each backend in audio_run, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 06/15] paaudio: prepare for multiple audiodev, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 10/15] audio: remove audio_MIN, audio_MAX, Gerd Hoffmann, 2019/08/21
[Qemu-devel] [PULL 14/15] audio: use size_t where makes sense, Gerd Hoffmann, 2019/08/21
Re: [Qemu-devel] [PULL 00/15] Audio 20190821 patches, Peter Maydell, 2019/08/21