]> code.delx.au - pulseaudio/commitdiff
always forward rewind requests to the sink, and don't abort on nbytes=0
authorLennart Poettering <lennart@poettering.net>
Thu, 26 Jun 2008 17:43:45 +0000 (19:43 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 26 Jun 2008 17:43:45 +0000 (19:43 +0200)
src/modules/module-ladspa-sink.c
src/modules/module-remap-sink.c

index 3e0babfab894f9b4defde6d503d1932a25bbd8f4..eae80086c45974bbaabf213c0dd706da9ab37985 100644 (file)
@@ -217,16 +217,16 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
 /* Called from I/O thread context */
 static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
     struct userdata *u;
+    size_t amount = 0;
 
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
-    pa_assert(nbytes > 0);
 
     if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
         return;
 
     if (u->sink->thread_info.rewind_nbytes > 0) {
-        size_t max_rewrite, amount;
+        size_t max_rewrite;
 
         max_rewrite = nbytes + pa_memblockq_get_length(u->memblockq);
         amount = PA_MIN(u->sink->thread_info.rewind_nbytes, max_rewrite);
@@ -236,7 +236,6 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
             unsigned c;
 
             pa_memblockq_seek(u->memblockq, - (int64_t) amount, PA_SEEK_RELATIVE);
-            pa_sink_process_rewind(u->sink, amount);
 
             pa_log_debug("Resetting plugin");
 
@@ -250,6 +249,7 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
         }
     }
 
+    pa_sink_process_rewind(u->sink, amount);
     pa_memblockq_rewind(u->memblockq, nbytes);
 }
 
index c87b1eceb5a893f851a3397320028dfdbab31d1a..bd86f4d677253f7ea1d412452994313a2e0299d1 100644 (file)
@@ -152,24 +152,21 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
 
 /* Called from I/O thread context */
 static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
+    size_t amount = 0;
     struct userdata *u;
 
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
-    pa_assert(nbytes > 0);
 
     if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
         return;
 
     if (u->sink->thread_info.rewind_nbytes > 0) {
-        size_t amount;
-
         amount = PA_MIN(u->sink->thread_info.rewind_nbytes, nbytes);
         u->sink->thread_info.rewind_nbytes = 0;
-
-        if (amount > 0)
-            pa_sink_process_rewind(u->sink, amount);
     }
+
+    pa_sink_process_rewind(u->sink, amount);
 }
 
 /* Called from I/O thread context */