]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: wire up support for backend specific audio settings
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 2 Mar 2021 17:44:04 +0000 (17:44 +0000)
committerDaniel P. Berrangé <berrange@redhat.com>
Tue, 9 Mar 2021 22:58:53 +0000 (22:58 +0000)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
35 files changed:
src/qemu/qemu_command.c
src/qemu/qemu_validate.c
tests/qemuxml2argvdata/audio-alsa-best.args
tests/qemuxml2argvdata/audio-alsa-best.x86_64-latest.args
tests/qemuxml2argvdata/audio-alsa-best.xml
tests/qemuxml2argvdata/audio-alsa-full.x86_64-latest.args
tests/qemuxml2argvdata/audio-alsa-full.xml
tests/qemuxml2argvdata/audio-coreaudio-best.args
tests/qemuxml2argvdata/audio-coreaudio-best.x86_64-latest.args
tests/qemuxml2argvdata/audio-coreaudio-best.xml
tests/qemuxml2argvdata/audio-coreaudio-full.x86_64-latest.args
tests/qemuxml2argvdata/audio-coreaudio-full.xml
tests/qemuxml2argvdata/audio-file-best.args
tests/qemuxml2argvdata/audio-file-best.x86_64-latest.args
tests/qemuxml2argvdata/audio-file-best.xml
tests/qemuxml2argvdata/audio-file-full.x86_64-latest.args
tests/qemuxml2argvdata/audio-file-full.xml
tests/qemuxml2argvdata/audio-jack-full.x86_64-latest.args
tests/qemuxml2argvdata/audio-jack-full.xml
tests/qemuxml2argvdata/audio-oss-best.args
tests/qemuxml2argvdata/audio-oss-best.x86_64-latest.args
tests/qemuxml2argvdata/audio-oss-best.xml
tests/qemuxml2argvdata/audio-oss-full.x86_64-latest.args
tests/qemuxml2argvdata/audio-oss-full.xml
tests/qemuxml2argvdata/audio-pulseaudio-best.args
tests/qemuxml2argvdata/audio-pulseaudio-best.x86_64-latest.args
tests/qemuxml2argvdata/audio-pulseaudio-best.xml
tests/qemuxml2argvdata/audio-pulseaudio-full.err
tests/qemuxml2argvdata/audio-pulseaudio-full.x86_64-latest.args
tests/qemuxml2argvdata/audio-pulseaudio-full.xml
tests/qemuxml2argvdata/audio-sdl-best.args
tests/qemuxml2argvdata/audio-sdl-best.x86_64-latest.args
tests/qemuxml2argvdata/audio-sdl-best.xml
tests/qemuxml2argvdata/audio-sdl-full.x86_64-latest.args
tests/qemuxml2argvdata/audio-sdl-full.xml

index bca1888dff0cec397fcc29ce84250c877617259a..a28672e027441d08f7573648c218a69d2ed81c80 100644 (file)
@@ -7615,6 +7615,40 @@ qemuBuildAudioCommonArg(virBufferPtr buf,
     }
 }
 
+static void
+qemuBuildAudioALSAArg(virBufferPtr buf,
+                      const char *prefix,
+                      virDomainAudioIOALSAPtr def)
+{
+    if (def->dev)
+        virBufferAsprintf(buf, ",%s.dev=%s", prefix, def->dev);
+}
+
+static void
+qemuBuildAudioCoreAudioArg(virBufferPtr buf,
+                           const char *prefix,
+                           virDomainAudioIOCoreAudioPtr def)
+{
+    if (def->bufferCount)
+        virBufferAsprintf(buf, ",%s.buffer-count=%u", prefix, def->bufferCount);
+}
+
+static void
+qemuBuildAudioJackArg(virBufferPtr buf,
+                      const char *prefix,
+                      virDomainAudioIOJackPtr def)
+{
+    if (def->serverName)
+        virBufferAsprintf(buf, ",%s.server-name=%s", prefix, def->serverName);
+    if (def->clientName)
+        virBufferAsprintf(buf, ",%s.client-name=%s", prefix, def->clientName);
+    if (def->connectPorts)
+        virBufferAsprintf(buf, ",%s.connect-ports=%s", prefix, def->connectPorts);
+    if (def->exactName)
+        virBufferAsprintf(buf, ",%s.exact-name=%s", prefix,
+                          virTristateSwitchTypeToString(def->exactName));
+}
+
 static void
 qemuBuildAudioOSSArg(virBufferPtr buf,
                      const char *prefix,
@@ -7622,6 +7656,33 @@ qemuBuildAudioOSSArg(virBufferPtr buf,
 {
     if (def->dev)
         virBufferAsprintf(buf, ",%s.dev=%s", prefix, def->dev);
+    if (def->bufferCount)
+        virBufferAsprintf(buf, ",%s.buffer-count=%u", prefix, def->bufferCount);
+    if (def->tryPoll)
+        virBufferAsprintf(buf, ",%s.try-poll=%s", prefix,
+                          virTristateSwitchTypeToString(def->tryPoll));
+}
+
+static void
+qemuBuildAudioPulseAudioArg(virBufferPtr buf,
+                            const char *prefix,
+                            virDomainAudioIOPulseAudioPtr def)
+{
+    if (def->name)
+        virBufferAsprintf(buf, ",%s.name=%s", prefix, def->name);
+    if (def->streamName)
+        virBufferAsprintf(buf, ",%s.stream-name=%s", prefix, def->streamName);
+    if (def->latency)
+        virBufferAsprintf(buf, ",%s.latency=%u", prefix, def->latency);
+}
+
+static void
+qemuBuildAudioSDLArg(virBufferPtr buf,
+                     const char *prefix,
+                     virDomainAudioIOSDLPtr def)
+{
+    if (def->bufferCount)
+        virBufferAsprintf(buf, ",%s.buffer-count=%u", prefix, def->bufferCount);
 }
 
 static int
@@ -7644,23 +7705,46 @@ qemuBuildAudioCommandLineArg(virCommandPtr cmd,
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_ALSA:
+        qemuBuildAudioALSAArg(&buf, "in", &def->backend.alsa.input);
+        qemuBuildAudioALSAArg(&buf, "out", &def->backend.alsa.output);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_COREAUDIO:
+        qemuBuildAudioCoreAudioArg(&buf, "in", &def->backend.coreaudio.input);
+        qemuBuildAudioCoreAudioArg(&buf, "out", &def->backend.coreaudio.output);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_JACK:
+        qemuBuildAudioJackArg(&buf, "in", &def->backend.jack.input);
+        qemuBuildAudioJackArg(&buf, "out", &def->backend.jack.output);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_OSS:
         qemuBuildAudioOSSArg(&buf, "in", &def->backend.oss.input);
         qemuBuildAudioOSSArg(&buf, "out", &def->backend.oss.output);
+
+        if (def->backend.oss.tryMMap)
+            virBufferAsprintf(&buf, ",try-mmap=%s",
+                              virTristateSwitchTypeToString(def->backend.oss.tryMMap));
+        if (def->backend.oss.exclusive)
+            virBufferAsprintf(&buf, ",exclusive=%s",
+                              virTristateSwitchTypeToString(def->backend.oss.exclusive));
+        if (def->backend.oss.dspPolicySet)
+            virBufferAsprintf(&buf, ",dsp-policy=%d", def->backend.oss.dspPolicy);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_PULSEAUDIO:
+        qemuBuildAudioPulseAudioArg(&buf, "in", &def->backend.pulseaudio.input);
+        qemuBuildAudioPulseAudioArg(&buf, "out", &def->backend.pulseaudio.output);
+
+        if (def->backend.pulseaudio.serverName)
+            virBufferAsprintf(&buf, ",server=%s", def->backend.pulseaudio.serverName);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_SDL:
+        qemuBuildAudioSDLArg(&buf, "in", &def->backend.sdl.input);
+        qemuBuildAudioSDLArg(&buf, "out", &def->backend.sdl.output);
+
         if (def->backend.sdl.driver) {
             /*
              * Some SDL audio driver names are different on SDL 1.2
@@ -7679,6 +7763,8 @@ qemuBuildAudioCommandLineArg(virCommandPtr cmd,
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_FILE:
+        if (def->backend.file.path)
+            virBufferEscapeString(&buf, ",path=%s", def->backend.file.path);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_LAST:
@@ -7731,16 +7817,63 @@ qemuBuildAudioCommonEnv(virCommandPtr cmd,
     }
 }
 
+static void
+qemuBuildAudioALSAEnv(virCommandPtr cmd,
+                      const char *prefix,
+                      virDomainAudioIOALSAPtr def)
+{
+    if (def->dev)
+        virCommandAddEnvFormat(cmd, "%sDEV=%s",
+                               prefix, def->dev);
+}
+
+static void
+qemuBuildAudioCoreAudioEnv(virCommandPtr cmd,
+                           virDomainAudioDefPtr def)
+{
+    if (def->backend.coreaudio.output.bufferCount)
+        virCommandAddEnvFormat(cmd, "QEMU_COREAUDIO_BUFFER_COUNT=%u",
+                               def->backend.coreaudio.output.bufferCount);
+    if (def->output.bufferLength)
+        virCommandAddEnvFormat(cmd, "QEMU_COREAUDIO_BUFFER_SIZE=%u",
+                               def->output.bufferLength);
+}
+
 static void
 qemuBuildAudioOSSEnv(virCommandPtr cmd,
                      const char *prefix,
+                     const char *prefix2,
                      virDomainAudioIOOSSPtr def)
 {
     if (def->dev)
         virCommandAddEnvFormat(cmd, "%sDEV=%s",
                                prefix, def->dev);
+    if (def->tryPoll)
+        virCommandAddEnvFormat(cmd, "%sTRY_POLL=%s", prefix2,
+                               virTristateSwitchTypeToString(def->tryPoll));
 }
 
+static void
+qemuBuildAudioPulseAudioEnv(virCommandPtr cmd,
+                            virDomainAudioDefPtr def)
+{
+    if (def->backend.pulseaudio.input.name)
+        virCommandAddEnvPair(cmd, "QEMU_PA_SOURCE",
+                             def->backend.pulseaudio.input.name);
+    if (def->backend.pulseaudio.output.name)
+        virCommandAddEnvPair(cmd, "QEMU_PA_SINK",
+                             def->backend.pulseaudio.output.name);
+
+    if (def->input.bufferLength)
+        virCommandAddEnvFormat(cmd, "QEMU_PA_SAMPLES=%u",
+                               def->input.bufferLength);
+
+    if (def->backend.pulseaudio.serverName)
+        virCommandAddEnvPair(cmd, "QEMU_PA_SERVER=%s",
+                             def->backend.pulseaudio.serverName);
+}
+
+
 static int
 qemuBuildAudioCommandLineEnv(virCommandPtr cmd,
                              virDomainDefPtr def)
@@ -7761,23 +7894,47 @@ qemuBuildAudioCommandLineEnv(virCommandPtr cmd,
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_ALSA:
+        qemuBuildAudioALSAEnv(cmd, "QEMU_AUDIO_ADC_", &audio->backend.alsa.input);
+        qemuBuildAudioALSAEnv(cmd, "QEMU_AUDIO_DAC_", &audio->backend.alsa.output);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_COREAUDIO:
+        qemuBuildAudioCoreAudioEnv(cmd, audio);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_JACK:
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_OSS:
-        qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_ADC_", &audio->backend.oss.input);
-        qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_DAC_", &audio->backend.oss.output);
+        qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_ADC_", "QEMU_AUDIO_ADC_",
+                             &audio->backend.oss.input);
+        qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_DAC_", "QEMU_AUDIO_DAC_",
+                             &audio->backend.oss.output);
+
+        if (audio->backend.oss.input.bufferCount)
+            virCommandAddEnvFormat(cmd, "QEMU_OSS_NFRAGS=%u",
+                                   audio->backend.oss.input.bufferCount);
+
+        if (audio->backend.oss.tryMMap)
+            virCommandAddEnvFormat(cmd, "QEMU_OSS_MMAP=%s",
+                                   virTristateSwitchTypeToString(audio->backend.oss.tryMMap));
+        if (audio->backend.oss.exclusive)
+            virCommandAddEnvFormat(cmd, "QEMU_OSS_EXCLUSIVE=%s",
+                                   virTristateSwitchTypeToString(audio->backend.oss.exclusive));
+        if (audio->backend.oss.dspPolicySet)
+            virCommandAddEnvFormat(cmd, "QEMU_OSS_POLICY=%d",
+                                   audio->backend.oss.dspPolicy);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_PULSEAUDIO:
+        qemuBuildAudioPulseAudioEnv(cmd, audio);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_SDL:
+        if (audio->output.bufferLength)
+            virCommandAddEnvFormat(cmd, "QEMU_SDL_SAMPLES=%u",
+                                   audio->output.bufferLength);
+
         if (audio->backend.sdl.driver) {
             /*
              * Some SDL audio driver names are different on SDL 1.2
@@ -7796,6 +7953,9 @@ qemuBuildAudioCommandLineEnv(virCommandPtr cmd,
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_FILE:
+        if (audio->backend.file.path)
+            virCommandAddEnvFormat(cmd, "QEMU_WAV_PATH=%s",
+                                   audio->backend.file.path);
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_LAST:
index ee9592aa34110b6835e72ac5e66e03bbfd5b7469..6043f974ce7a88cedc221cc336bd7d9fd38a3025 100644 (file)
@@ -4209,6 +4209,11 @@ qemuValidateDomainDeviceDefAudio(virDomainAudioDefPtr audio,
                                _("setting audio buffer length is not supported with this QEMU"));
                 return -1;
             }
+            if (audio->backend.coreaudio.input.bufferCount) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("setting audio buffer count is not supported with this QEMU"));
+                return -1;
+            }
         }
         break;
 
@@ -4221,10 +4226,32 @@ qemuValidateDomainDeviceDefAudio(virDomainAudioDefPtr audio,
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_OSS:
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_AUDIODEV)) {
+            if (audio->backend.oss.input.bufferCount !=
+                audio->backend.oss.output.bufferCount) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("setting audio buffer count is not supported with this QEMU"));
+                return -1;
+            }
+        }
         break;
 
     case VIR_DOMAIN_AUDIO_TYPE_PULSEAUDIO:
         if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_AUDIODEV)) {
+            if (audio->backend.pulseaudio.input.streamName ||
+                audio->backend.pulseaudio.output.streamName) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("setting audio stream name is not supported with this QEMU"));
+                return -1;
+            }
+
+            if (audio->backend.pulseaudio.input.latency ||
+                audio->backend.pulseaudio.output.latency) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("setting audio latency is not supported with this QEMU"));
+                return -1;
+            }
+
             if (audio->input.bufferLength != audio->output.bufferLength) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                                _("setting audio buffer length is not supported with this QEMU"));
@@ -4240,6 +4267,13 @@ qemuValidateDomainDeviceDefAudio(virDomainAudioDefPtr audio,
                                _("setting audio buffer length is not supported with this QEMU"));
                 return -1;
             }
+
+            if (audio->backend.sdl.input.bufferCount ||
+                audio->backend.sdl.output.bufferCount) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("setting audio buffer count is not supported with this QEMU"));
+                return -1;
+            }
         }
         break;
 
index 4461fc670c9ef30e409e8526876c79c57879e839..d6c73dfc8b06dea582b67fc50d685ca7f3c9e33e 100644 (file)
@@ -17,6 +17,8 @@ QEMU_AUDIO_DAC_VOICES=2 \
 QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
 QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
 QEMU_AUDIO_DAC_FIXED_FMT=f32 \
+QEMU_AUDIO_ADC_DEV=/dev/dsp0 \
+QEMU_AUDIO_DAC_DEV=/dev/dsp1 \
 /usr/bin/qemu-system-i386 \
 -name QEMUGuest1 \
 -S \
index 5f84dcca72be3106e93390dd389530e975147776..e9898c29de583d14bfd48d773bdb6831db15d317 100644 (file)
@@ -36,7 +36,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=alsa,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
 out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
-out.channels=4,out.format=f32 \
+out.channels=4,out.format=f32,in.dev=/dev/dsp0,out.dev=/dev/dsp1 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index cefcc47027a6bfe46bf2e5e6054c4fb688b6fca0..1a6d5f4d9fb0733900478916d0b61eda8dc8b873 100644 (file)
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <audio id='1' type='alsa'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' dev='/dev/dsp0'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' dev='/dev/dsp1'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index 6ade7ef0698c73d6319156682483111a5513c4bc..3c1b5ba6a53ece6bfee66c91ec30187d78989f15 100644 (file)
@@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=alsa,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
 in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
-out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+in.dev=/dev/dsp0,out.dev=/dev/dsp1 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 2cd488a3a5205faa653dd25b9861377f22b345a1..634b41a0f062f11ae7bafe7dc31fda341e49f7b9 100644 (file)
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <audio id='1' type='alsa'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' dev='/dev/dsp0'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' dev='/dev/dsp1'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index f8250df5cb8f05dc29dfed8319e4bd6faa2fc5e7..cc8be459f6dba8f6b2e0e613553e2c4b6b8b7aa0 100644 (file)
@@ -17,6 +17,8 @@ QEMU_AUDIO_DAC_VOICES=2 \
 QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
 QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
 QEMU_AUDIO_DAC_FIXED_FMT=f32 \
+QEMU_COREAUDIO_BUFFER_COUNT=42 \
+QEMU_COREAUDIO_BUFFER_SIZE=200 \
 /usr/bin/qemu-system-i386 \
 -name QEMUGuest1 \
 -S \
index 93166f27de7b0f5ea4efd5388befa855fed6b8f2..273655840af996e60df998144f462dffcd1b59f7 100644 (file)
@@ -35,8 +35,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -device ide-cd,bus=ide.1,unit=0,drive=libvirt-1-format,id=ide0-1-0,bootindex=1 \
 -audiodev id=audio1,driver=coreaudio,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
-out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
-out.channels=4,out.format=f32 \
+out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.buffer-length=200,\
+out.frequency=22050,out.channels=4,out.format=f32,out.buffer-count=42 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 8a79404fde1e57eb4aa4f22f5f2134aebc1681fa..66c52bb24c702c8e8d82783306260529d58675cc 100644 (file)
@@ -34,7 +34,7 @@
       <input mixingEngine='yes' fixedSettings='yes' voices='1'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' bufferCount='42'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index bc6c9e924173bff4d9e3e55b851b39179a4924a2..2e8f7b6231d87b5af6efe4fec027efa464466d03 100644 (file)
@@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=coreaudio,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
 in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
-out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+in.buffer-count=50,out.buffer-count=42 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 671497986e27fe0957466f020efcf9766f3b76b2..a46db6936b16501c1d6d05c560d0c9f30de59ac5 100644 (file)
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <audio id='1' type='coreaudio'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' bufferCount='50'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' bufferCount='42'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index bd73a5b26ffc16cd8e95f01ac0fad36372c01f50..22f5730c80a5f413ffe3a65844ee67f3cf414cb9 100644 (file)
@@ -17,6 +17,7 @@ QEMU_AUDIO_DAC_VOICES=2 \
 QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
 QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
 QEMU_AUDIO_DAC_FIXED_FMT=f32 \
+QEMU_WAV_PATH=audio.wav \
 /usr/bin/qemu-system-i386 \
 -name QEMUGuest1 \
 -S \
index 546e4debe86d3495543c4b849255fdaee9069be1..ff9248f002d79043c6498b5f8042476bbff41f2b 100644 (file)
@@ -36,7 +36,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=wav,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
 out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
-out.channels=4,out.format=f32 \
+out.channels=4,out.format=f32,path=audio.wav \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 0617dbbc0b83218c8857490a6136871a2e739e77..3bd02c3f3707bc4af84a6ed73d86010fb6ed3fc4 100644 (file)
@@ -30,7 +30,7 @@
     <controller type='pci' index='0' model='pci-root'/>
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
-    <audio id='1' type='file'>
+    <audio id='1' type='file' path='audio.wav'>
       <input mixingEngine='yes' fixedSettings='yes' voices='1'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
index 1f1f05b39c8452e75e87547767f93bc3929b5b3f..e24d072298c1c5905fbaaf3381e7204cf7a0658c 100644 (file)
@@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=wav,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
 in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
-out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+path=audio.wav \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index c695a1715e458d2f0c770d58c39274fba8dd5350..f88fe42b114d8c9e06f060d4e87ee36d64c8f8ce 100644 (file)
@@ -30,7 +30,7 @@
     <controller type='pci' index='0' model='pci-root'/>
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
-    <audio id='1' type='file'>
+    <audio id='1' type='file' path='audio.wav'>
       <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
index 96856cd3d5112929c3e2485b76b5561441429f89..cb17a25c7e24a1cb03a19b09a624bb04ac886f24 100644 (file)
@@ -36,7 +36,9 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=jack,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
 in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
-out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+in.server-name=fish,in.client-name=food,in.connect-ports=yum,\
+out.server-name=fish,out.client-name=food,out.connect-ports=yum \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 129bf509a0002c1792cb77ef51feeeb93c99f32d..92351078a749ba4b49e59515b3213130b6f1fb95 100644 (file)
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <audio id='1' type='jack'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' serverName='fish' clientName='food' connectPorts='yum'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' serverName='fish' clientName='food' connectPorts='yum'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index 054222992fd340a39c367dc8ad2ea16993e496ea..32a9c6f6545ff3cc01754ca914bd61e69872fc44 100644 (file)
@@ -17,6 +17,11 @@ QEMU_AUDIO_DAC_VOICES=2 \
 QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
 QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
 QEMU_AUDIO_DAC_FIXED_FMT=f32 \
+QEMU_OSS_ADC_DEV=/dev/dsp0 \
+QEMU_AUDIO_ADC_TRY_POLL=on \
+QEMU_OSS_DAC_DEV=/dev/dsp1 \
+QEMU_AUDIO_DAC_TRY_POLL=off \
+QEMU_OSS_NFRAGS=30 \
 /usr/bin/qemu-system-i386 \
 -name QEMUGuest1 \
 -S \
index 3cff02e1ba08957ca6cd026914c912ff62e41087..41fda4fb73a4512c8cb292df8e71469c0cd79653 100644 (file)
@@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=oss,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
 out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
-out.channels=4,out.format=f32 \
+out.channels=4,out.format=f32,in.dev=/dev/dsp0,in.buffer-count=30,\
+in.try-poll=on,out.dev=/dev/dsp1,out.buffer-count=30,out.try-poll=off \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 6904bcc93b08559369db6ea9aaf5464da1905fac..0561724dbee82d5999928cb15410ee8197938c18 100644 (file)
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <audio id='1' type='oss'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' dev='/dev/dsp0' bufferCount='30' tryPoll='yes'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' dev='/dev/dsp1' bufferCount='30' tryPoll='no'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index cf9f5077d178aa0c5c4854e8968850e6564b3c44..fd899cad3e38db993d11067e7274d5a3e1b93444 100644 (file)
@@ -36,7 +36,9 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=oss,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
 in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
-out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+in.dev=/dev/dsp0,in.buffer-count=50,in.try-poll=on,out.dev=/dev/dsp1,\
+out.buffer-count=30,out.try-poll=off,try-mmap=on,exclusive=on,dsp-policy=3 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 52d8810650467f8149b7d406086b35ffea6a1fe7..aa31eb9babb667c9168b8bb51dd3375f3849c321 100644 (file)
     <controller type='pci' index='0' model='pci-root'/>
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
-    <audio id='1' type='oss'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
+    <audio id='1' type='oss' tryMMap='yes' exclusive='yes' dspPolicy='3'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' dev='/dev/dsp0' bufferCount='50' tryPoll='yes'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' dev='/dev/dsp1' bufferCount='30' tryPoll='no'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index ad5718b242ea7995d2ceee01d2384b1d03a3aa7b..7877fb58db7c3495964f6f0f108a560c9de865d2 100644 (file)
@@ -17,6 +17,10 @@ QEMU_AUDIO_DAC_VOICES=2 \
 QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
 QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
 QEMU_AUDIO_DAC_FIXED_FMT=f32 \
+QEMU_PA_SOURCE=fish \
+QEMU_PA_SINK=fish \
+QEMU_PA_SAMPLES=200 \
+QEMU_PA_SERVER=%s=acme.example.org \
 /usr/bin/qemu-system-i386 \
 -name QEMUGuest1 \
 -S \
index f6ccde6d59df093e15b3e2f79a879d5940989bd1..fb58ed3e14e0a84dd80d905d64d2b4da3a7ef93f 100644 (file)
@@ -34,9 +34,10 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 "file":"libvirt-1-storage"}' \
 -device ide-cd,bus=ide.1,unit=0,drive=libvirt-1-format,id=ide0-1-0,bootindex=1 \
 -audiodev id=audio1,driver=pa,in.mixing-engine=on,in.fixed-settings=on,\
-in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
-out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
-out.channels=4,out.format=f32 \
+in.voices=1,in.buffer-length=200,in.frequency=44100,in.channels=2,\
+in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+in.name=fish,out.name=fish,server=acme.example.org \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index b75e336db3468e755e2cd679aa59de13bf016ae1..bfc4b92e9b8706dc17b52a0d3508b4f5df5b5793 100644 (file)
     <controller type='pci' index='0' model='pci-root'/>
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
-    <audio id='1' type='pulseaudio'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1'>
+    <audio id='1' type='pulseaudio' serverName='acme.example.org'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='200' name='fish'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' name='fish'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index d9ceac722626ceb36d81cc3bc9db0cad622b0a66..27eaa448e9df370d8bbce7d5c5af8cf3e6fad3ad 100644 (file)
@@ -1 +1 @@
-unsupported configuration: setting audio buffer length is not supported with this QEMU
+unsupported configuration: setting audio stream name is not supported with this QEMU
index 493945e608bbc3e9a8226b66af751e2b63cf0081..02d0a3a9c899d9a544747773f0a0568dcc5a94b9 100644 (file)
@@ -36,7 +36,9 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=pa,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
 in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
-out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+in.name=fish,in.stream-name=food,in.latency=100,out.name=fish,\
+out.stream-name=food,out.latency=200,server=acme.example.org \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 87ceefbab0b85805b3726fb7819a09297d1c3134..a6746539826c60e1fe378fa8c552a77b354bd6bb 100644 (file)
     <controller type='pci' index='0' model='pci-root'/>
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
-    <audio id='1' type='pulseaudio'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
+    <audio id='1' type='pulseaudio' serverName='acme.example.org'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' name='fish' streamName='food' latency='100'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' name='fish' streamName='food' latency='200'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index abdf655fe13baf8a29d0e66f7dfb183d2e04d632..80b7f74829878b5969b4954683940b33d77fbae5 100644 (file)
@@ -17,6 +17,7 @@ QEMU_AUDIO_DAC_VOICES=2 \
 QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
 QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
 QEMU_AUDIO_DAC_FIXED_FMT=f32 \
+QEMU_SDL_SAMPLES=200 \
 SDL_AUDIODRIVER=pulseaudio \
 /usr/bin/qemu-system-i386 \
 -name QEMUGuest1 \
index d8893a7a4bc2c410b6f6848ab2bcc215d52f681e..770426419ab1b60b0c279c5450e6eb40a94f9eeb 100644 (file)
@@ -36,8 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -device ide-cd,bus=ide.1,unit=0,drive=libvirt-1-format,id=ide0-1-0,bootindex=1 \
 -audiodev id=audio1,driver=sdl,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
-out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
-out.channels=4,out.format=f32 \
+out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.buffer-length=200,\
+out.frequency=22050,out.channels=4,out.format=f32 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 4e3f8a5c6190c3e47d877e2541882586444ae3e9..29523590af709e67c5709ffcac30e3aebed3f729 100644 (file)
@@ -34,7 +34,7 @@
       <input mixingEngine='yes' fixedSettings='yes' voices='1'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>
index 722aa33fa47397060232e5db1ef5afd30847df74..a642926a225908d4fe70606a2cc1d60427ddb683 100644 (file)
@@ -37,7 +37,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
 -audiodev id=audio1,driver=sdl,in.mixing-engine=on,in.fixed-settings=on,\
 in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
 in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
-out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
+out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
+in.buffer-count=40,out.buffer-count=50 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 519cda12e35066e17fe5f139c3fdbda02f2f6cb7..9925d048ec59b7c453a9f23dc53e9e8e861a7a46 100644 (file)
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <audio id='1' type='sdl' driver='pulseaudio'>
-      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
+      <input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' bufferCount='40'>
         <settings frequency='44100' channels='2' format='s16'/>
       </input>
-      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
+      <output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' bufferCount='50'>
         <settings frequency='22050' channels='4' format='f32'/>
       </output>
     </audio>