Daniel P. Berrangé wrote:
On Fri, Aug 07, 2020 at 07:09:33PM +0400, Roman Bogorodskiy wrote:
> Allow to map sound playback and recording devices to host devices
> using "<audio type='oss'/>" OSS audio backend.
>
> Signed-off-by: Roman Bogorodskiy <bogorodskiy(a)gmail.com>
> ---
> src/bhyve/bhyve_command.c | 26 ++++++++++++++++---
> src/conf/domain_conf.c | 13 ++++++++++
> src/conf/domain_conf.h | 4 +++
> src/libvirt_private.syms | 1 +
> .../bhyvexml2argv-sound.args | 2 +-
> .../bhyvexml2argvdata/bhyvexml2argv-sound.xml | 8 +++++-
> .../bhyvexml2xmlout-sound.xml | 5 ++++
> 7 files changed, 54 insertions(+), 5 deletions(-)
>
> diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
> index 1f42f71347..8e7907b882 100644
> --- a/src/bhyve/bhyve_command.c
> +++ b/src/bhyve/bhyve_command.c
> @@ -478,9 +478,12 @@ bhyveBuildGraphicsArgStr(const virDomainDef *def,
> static int
> bhyveBuildSoundArgStr(const virDomainDef *def G_GNUC_UNUSED,
> virDomainSoundDefPtr sound,
> + virDomainAudioDefPtr audio,
> bhyveConnPtr driver,
> virCommandPtr cmd)
> {
> + g_auto(virBuffer) params = VIR_BUFFER_INITIALIZER;
> +
> if (!(bhyveDriverGetBhyveCaps(driver) & BHYVE_CAP_SOUND_HDA)) {
> /* Currently, bhyve only supports "hda" sound devices, so
> if it's not supported, sound devices are not supported at all */
> @@ -497,9 +500,24 @@ bhyveBuildSoundArgStr(const virDomainDef *def G_GNUC_UNUSED,
> }
>
> virCommandAddArg(cmd, "-s");
> - virCommandAddArgFormat(cmd, "%d:%d,hda,play=/dev/dsp0",
> +
> + if (audio) {
> + if (audio->type == VIR_DOMAIN_AUDIO_TYPE_OSS) {
Should use a switch() here and report enum range errors in the
LAST/default case.
This will force us to fix bhyve when we add more audio types
later to do proper error reporting.
> + if (audio->backend.oss.inputDev)
> + virBufferAsprintf(¶ms, ",play=%s",
> + audio->backend.oss.inputDev);
> +
> + if (audio->backend.oss.outputDev)
> + virBufferAsprintf(¶ms, ",rec=%s",
> + audio->backend.oss.outputDev);
> + }
> + }
> +
> + virCommandAddArgFormat(cmd, "%d:%d,hda%s",
> sound->info.addr.pci.slot,
> - sound->info.addr.pci.function);
> + sound->info.addr.pci.function,
> + virBufferCurrentContent(¶ms));
> +
What happens if you dont give an any play arg - does it just assume
the default /dev/dsp0 ?
It doesn't assume these defaults. When started this way, guest will have
a sound device, but playback (and likely recording) will not work
because the sound device will fail to open.
I'm not sure what's the purpose of things configured this way.
Roman Bogorodskiy