
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@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 ? Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|