qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 1/6] pa: allow processing buffer pieces


From: Gerd Hoffmann
Subject: [Qemu-devel] [PATCH 1/6] pa: allow processing buffer pieces
Date: Wed, 27 Oct 2010 18:04:30 +0200

Remove some state update dependencies between the pulseaudio worker
threads and main thread.  The worker threads can process the buffer
piecewise now.

Signed-off-by: Gerd Hoffmann <address@hidden>
---
 audio/paaudio.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/audio/paaudio.c b/audio/paaudio.c
index ff71dac..f768ca9 100644
--- a/audio/paaudio.c
+++ b/audio/paaudio.c
@@ -83,7 +83,7 @@ static void *qpa_thread_out (void *arg)
         }
 
         decr = to_mix = pa->live;
-        rpos = hw->rpos;
+        rpos = pa->rpos;
 
         if (audio_pt_unlock (&pa->pt, AUDIO_FUNC)) {
             return NULL;
@@ -110,8 +110,8 @@ static void *qpa_thread_out (void *arg)
             return NULL;
         }
 
-        pa->live = 0;
         pa->rpos = rpos;
+        pa->live -= decr;
         pa->decr += decr;
     }
 
@@ -178,7 +178,7 @@ static void *qpa_thread_in (void *arg)
         }
 
         incr = to_grab = pa->dead;
-        wpos = hw->wpos;
+        wpos = pa->wpos;
 
         if (audio_pt_unlock (&pa->pt, AUDIO_FUNC)) {
             return NULL;
@@ -323,6 +323,7 @@ static int qpa_init_out (HWVoiceOut *hw, struct audsettings 
*as)
     audio_pcm_init_info (&hw->info, &obt_as);
     hw->samples = conf.samples;
     pa->pcm_buf = audio_calloc (AUDIO_FUNC, hw->samples, 1 << hw->info.shift);
+    pa->rpos = hw->rpos;
     if (!pa->pcm_buf) {
         dolog ("Could not allocate buffer (%d bytes)\n",
                hw->samples << hw->info.shift);
@@ -377,6 +378,7 @@ static int qpa_init_in (HWVoiceIn *hw, struct audsettings 
*as)
     audio_pcm_init_info (&hw->info, &obt_as);
     hw->samples = conf.samples;
     pa->pcm_buf = audio_calloc (AUDIO_FUNC, hw->samples, 1 << hw->info.shift);
+    pa->wpos = hw->wpos;
     if (!pa->pcm_buf) {
         dolog ("Could not allocate buffer (%d bytes)\n",
                hw->samples << hw->info.shift);
-- 
1.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]