]> git.ipfire.org Git - thirdparty/shairport-sync.git/commitdiff
try a solution for flush(). Compiled but not tested.
authorJörn Nettingsmeier <nettings@luchtbeweging.nl>
Thu, 14 Feb 2019 20:27:49 +0000 (20:27 +0000)
committerJörn Nettingsmeier <nettings@luchtbeweging.nl>
Thu, 14 Feb 2019 20:27:49 +0000 (20:27 +0000)
audio_jack.c

index 1dc471ac3b8a4562604c946636be5b51fb9f47a0..7e95045751d05f1e278397db66b9f4f732f46fb8 100644 (file)
@@ -177,20 +177,23 @@ int jack_stream_write_cb(jack_nframes_t nframes, __attribute__((unused)) void *a
   int frames_written = 0;
   int frames_required = 0;
 
-  jack_ringbuffer_get_read_vector(jackbuf, v); // an array of two elements because of possible ringbuffer wrap-around
-  for (i=0; i<2; i++) {
-    thisbuf = v[i].len / bytes_per_frame;
-    if (thisbuf > nframes) {
-      frames_required = nframes;
-    } else {
-      frames_required = thisbuf;
+  if (flush_please) {
+    jack_ringbuffer_read_advance(jackbuf, jack_ringbuffer_read_space(jackbuf));
+  } else {
+    jack_ringbuffer_get_read_vector(jackbuf, v); // an array of two elements because of possible ringbuffer wrap-around
+    for (i=0; i<2; i++) {
+      thisbuf = v[i].len / bytes_per_frame;
+      if (thisbuf > nframes) {
+        frames_required = nframes;
+           } else {
+        frames_required = thisbuf;
+      }
+      deinterleave_and_convert(v[i].buf, &left_buffer[frames_written], &right_buffer[frames_written], frames_required);
+      frames_written = frames_required;
+      nframes -= frames_written;
     }
-    deinterleave_and_convert(v[i].buf, &left_buffer[frames_written], &right_buffer[frames_written], frames_required);
-    frames_written = frames_required;
-    nframes -= frames_written;
+    jack_ringbuffer_read_advance(jackbuf, frames_written * bytes_per_frame);
   }
-  jack_ringbuffer_read_advance(jackbuf, frames_written * bytes_per_frame);
-
   // debug(1,"transferring %u frames",written);
   // Why are we doing this? The port latency should never change unless the JACK graph is reordered. Should happen on a graph reorder callback only.
   // jack_port_get_latency_range(left_port, JackPlaybackLatency, &latest_left_latency_range);