]> code.delx.au - pulseaudio/commitdiff
fold the seperate variable pa_sink_input::playing into pa_sink_input::state as state...
authorLennart Poettering <lennart@poettering.net>
Fri, 28 Jul 2006 23:27:16 +0000 (23:27 +0000)
committerLennart Poettering <lennart@poettering.net>
Fri, 28 Jul 2006 23:27:16 +0000 (23:27 +0000)
old PA_SINK_RUNNING + playing set = new PA_SINK_RUNNING
old PA_SINK_RUNNING + playing not set = new PA_SINK_DRAINED

git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1162 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/pulsecore/sink-input.c
src/pulsecore/sink-input.h

index 8590a0b1dcb0a9c8833e4b641cb9ba9243a52def..5613b15e16554c45595ab755e7a41b343d88e7c7 100644 (file)
@@ -94,7 +94,7 @@ pa_sink_input* pa_sink_input_new(
     
     i = pa_xnew(pa_sink_input, 1);
     i->ref = 1;
-    i->state = PA_SINK_INPUT_RUNNING;
+    i->state = PA_SINK_INPUT_DRAINED;
     i->name = pa_xstrdup(name);
     i->driver = pa_xstrdup(driver);
     i->owner = NULL;
@@ -112,8 +112,6 @@ pa_sink_input* pa_sink_input_new(
     i->underrun = NULL;
     i->userdata = NULL;
 
-    i->playing = 0;
-
     pa_memchunk_reset(&i->resampled_chunk);
     i->resampler = resampler;
     
@@ -149,7 +147,6 @@ void pa_sink_input_disconnect(pa_sink_input *i) {
     i->get_latency = NULL;
     i->underrun = NULL;
 
-    i->playing = 0;
     i->state = PA_SINK_INPUT_DISCONNECTED;
 }
 
@@ -225,6 +222,8 @@ int pa_sink_input_peek(pa_sink_input *i, pa_memchunk *chunk, pa_cvolume *volume)
     if (!i->peek || !i->drop || i->state == PA_SINK_INPUT_CORKED)
         goto finish;
 
+    assert(i->state == PA_SINK_INPUT_RUNNING || i->state == PA_SINK_INPUT_DRAINED);
+    
     if (!i->resampler) {
         do_volume_adj_here = 0;
         ret = i->peek(i, chunk);
@@ -270,10 +269,13 @@ int pa_sink_input_peek(pa_sink_input *i, pa_memchunk *chunk, pa_cvolume *volume)
 
 finish:
 
-    if (ret < 0 && i->playing && i->underrun)
+    if (ret < 0 && i->state == PA_SINK_INPUT_RUNNING && i->underrun)
         i->underrun(i);
 
-    i->playing = ret >= 0;
+    if (ret >= 0)
+        i->state = PA_SINK_INPUT_RUNNING;
+    else if (ret < 0 && i->state == PA_SINK_INPUT_RUNNING)
+        i->state = PA_SINK_INPUT_DRAINED;
 
     if (ret >= 0) {
         /* Let's see if we had to apply the volume adjustment
@@ -342,12 +344,14 @@ void pa_sink_input_cork(pa_sink_input *i, int b) {
     assert(i);
     assert(i->ref >= 1);
 
-    if (i->state == PA_SINK_INPUT_DISCONNECTED)
-        return;
+    assert(i->state != PA_SINK_INPUT_DISCONNECTED);
 
     n = i->state == PA_SINK_INPUT_CORKED && !b;
-    
-    i->state = b ? PA_SINK_INPUT_CORKED : PA_SINK_INPUT_RUNNING;
+
+    if (b)
+        i->state = PA_SINK_INPUT_CORKED;
+    else if (i->state == PA_SINK_INPUT_CORKED)
+        i->state = PA_SINK_INPUT_DRAINED;
 
     if (n)
         pa_sink_notify(i->sink);
index 69a7e50a1d614f9f181e7068ed063c1c8122f759..60105d31a2fcecfc72d3e7a8243284aede30cf29 100644 (file)
@@ -34,9 +34,10 @@ typedef struct pa_sink_input pa_sink_input;
 #include <pulsecore/client.h>
 
 typedef enum pa_sink_input_state {
-    PA_SINK_INPUT_RUNNING,
-    PA_SINK_INPUT_CORKED,
-    PA_SINK_INPUT_DISCONNECTED
+    PA_SINK_INPUT_RUNNING,      /*< The stream is alive and kicking */
+    PA_SINK_INPUT_DRAINED,      /*< The stream stopped playing because there was no data to play */
+    PA_SINK_INPUT_CORKED,       /*< The stream was corked on user request */
+    PA_SINK_INPUT_DISCONNECTED  /*< The stream is dead */
 } pa_sink_input_state_t;
 
 struct pa_sink_input {
@@ -63,8 +64,6 @@ struct pa_sink_input {
 
     void *userdata;
 
-    int playing;
-
     pa_memchunk resampled_chunk;
     pa_resampler *resampler;
 };