]> code.delx.au - pulseaudio/commitdiff
module-jack-sink/source: Set fixed latency correctly on creation
authorMaarten Lankhorst <m.b.lankhorst@gmail.com>
Mon, 26 Mar 2012 21:12:24 +0000 (23:12 +0200)
committerDavid Henningsson <david.henningsson@canonical.com>
Wed, 28 Mar 2012 11:19:47 +0000 (13:19 +0200)
Changes since v1:
Use max value of jack_port_get_latency_range to calculate the latency
and squash compiler warnings cased by using jack_port_get_total_latency

Modifying latency only works inside a callback, and for hardware the
latency is generally fixed on jack, so just take the max value.

Signed-off-by: Maarten Lankhorst <m.b.lankhorst@gmail.com>
src/modules/jack/module-jack-sink.c
src/modules/jack/module-jack-source.c

index ba4ea95c0e6bf7e959afa29dbe5623a241e1ca83..017fbf63810ede4ecdfd952285eb4b072bcef27e 100644 (file)
@@ -168,10 +168,12 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
 
         case PA_SINK_MESSAGE_GET_LATENCY: {
             jack_nframes_t l, ft, d;
+            jack_latency_range_t r;
             size_t n;
 
             /* This is the "worst-case" latency */
-            l = jack_port_get_total_latency(u->client, u->port[0]) + u->frames_in_buffer;
+            jack_port_get_latency_range(u->port[0], JackPlaybackLatency, &r);
+            l = r.max + u->frames_in_buffer;
 
             if (u->saved_frame_time_valid) {
                 /* Adjust the worst case latency by the time that
@@ -296,6 +298,8 @@ int pa__init(pa_module*m) {
     unsigned i;
     const char **ports = NULL, **p;
     pa_sink_new_data data;
+    jack_latency_range_t r;
+    size_t n;
 
     pa_assert(m);
 
@@ -443,6 +447,9 @@ int pa__init(pa_module*m) {
         }
     }
 
+    jack_port_get_latency_range(u->port[0], JackPlaybackLatency, &r);
+    n = r.max * pa_frame_size(&u->sink->sample_spec);
+    pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(n, &u->sink->sample_spec));
     pa_sink_put(u->sink);
 
     if (ports)
index 13109f3e00a1f9a01c84485345f054d4bb613e5a..cf62882e57cb0d6b1b171ed7ad55e28bb0ce23d3 100644 (file)
@@ -124,11 +124,13 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
             return 0;
 
         case PA_SOURCE_MESSAGE_GET_LATENCY: {
+            jack_latency_range_t r;
             jack_nframes_t l, ft, d;
             size_t n;
 
             /* This is the "worst-case" latency */
-            l = jack_port_get_total_latency(u->client, u->port[0]);
+            jack_port_get_latency_range(u->port[0], JackCaptureLatency, &r);
+            l = r.max;
 
             if (u->saved_frame_time_valid) {
                 /* Adjust the worst case latency by the time that
@@ -249,6 +251,8 @@ int pa__init(pa_module*m) {
     unsigned i;
     const char **ports = NULL, **p;
     pa_source_new_data data;
+    jack_latency_range_t r;
+    size_t n;
 
     pa_assert(m);
 
@@ -388,6 +392,9 @@ int pa__init(pa_module*m) {
 
     }
 
+    jack_port_get_latency_range(u->port[0], JackCaptureLatency, &r);
+    n = r.max * pa_frame_size(&u->source->sample_spec);
+    pa_source_set_fixed_latency(u->source, pa_bytes_to_usec(n, &u->source->sample_spec));
     pa_source_put(u->source);
 
     if (ports)