summary refs log tree commit diff
path: root/pkgs/applications/virtualization/qemu
diff options
context:
space:
mode:
authorTim Jäger <jger.tm@gmail.com>2017-08-06 20:19:32 -0700
committerFranz Pletz <fpletz@fnordicwalking.de>2017-08-16 09:48:49 +0200
commit0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13 (patch)
tree165a0e4b5f96188f4d7a9635049f94d52fe2f1af /pkgs/applications/virtualization/qemu
parent378c6d70634bdfd6319278a9ed10a84d8fe72bac (diff)
downloadnixlib-0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13.tar
nixlib-0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13.tar.gz
nixlib-0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13.tar.bz2
nixlib-0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13.tar.lz
nixlib-0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13.tar.xz
nixlib-0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13.tar.zst
nixlib-0c1c3d2b996cff8b96b3f9b53e7780c88e1b4d13.zip
qemu: fix HDA recording latency
Very long latency occurs for audio inputs when simulating an Intel HDA device.

Patch courtesy of Volker Rümeling.
https://lists.gnu.org/archive/html/qemu-devel/2015-09/msg03336.html
Diffstat (limited to 'pkgs/applications/virtualization/qemu')
-rw-r--r--pkgs/applications/virtualization/qemu/default.nix3
-rw-r--r--pkgs/applications/virtualization/qemu/fix-hda-recording.patch34
2 files changed, 36 insertions, 1 deletions
diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix
index 8277261a1500..5da9db918557 100644
--- a/pkgs/applications/virtualization/qemu/default.nix
+++ b/pkgs/applications/virtualization/qemu/default.nix
@@ -55,7 +55,8 @@ stdenv.mkDerivation rec {
   enableParallelBuilding = true;
 
   patches = [ ./no-etc-install.patch ]
-    ++ optional nixosTestRunner ./force-uid0-on-9p.patch;
+    ++ optional nixosTestRunner ./force-uid0-on-9p.patch
+    ++ optional pulseSupport ./fix-hda-recording.patch;
 
   hardeningDisable = [ "stackprotector" ];
 
diff --git a/pkgs/applications/virtualization/qemu/fix-hda-recording.patch b/pkgs/applications/virtualization/qemu/fix-hda-recording.patch
new file mode 100644
index 000000000000..b4e21f4f3477
--- /dev/null
+++ b/pkgs/applications/virtualization/qemu/fix-hda-recording.patch
@@ -0,0 +1,34 @@
+diff --git a/audio/paaudio.c b/audio/paaudio.c
+index fea6071..c1169d4 100644
+--- a/audio/paaudio.c
++++ b/audio/paaudio.c
+@@ -608,6 +608,7 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
+ {
+     int error;
+     pa_sample_spec ss;
++    pa_buffer_attr ba;
+     struct audsettings obt_as = *as;
+     PAVoiceIn *pa = (PAVoiceIn *) hw;
+     paaudio *g = pa->g = drv_opaque;
+@@ -616,6 +617,12 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
+     ss.channels = as->nchannels;
+     ss.rate = as->freq;
+
++    ba.fragsize = pa_frame_size (&ss) * g->conf.samples;
++    ba.maxlength = 5 * ba.fragsize;
++    ba.tlength = -1;
++    ba.prebuf = -1;
++    ba.minreq = -1;
++
+     obt_as.fmt = pa_to_audfmt (ss.format, &obt_as.endianness);
+
+     pa->stream = qpa_simple_new (
+@@ -625,7 +632,7 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
+         g->conf.source,
+         &ss,
+         NULL,                   /* channel map */
+-        NULL,                   /* buffering attributes */
++        &ba,                    /* buffering attributes */
+         &error
+         );
+     if (!pa->stream) {