On 03/26/2012 11:12 PM, Maarten Lankhorst wrote: > 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. Looks good. I did a quick test with a jack sink and nothing seemed to have broken, so I've pushed your patch now. Thanks! > > Signed-off-by: Maarten Lankhorst<m.b.lankhorst at gmail.com> > > --- > > diff --git a/src/modules/jack/module-jack-sink.c b/src/modules/jack/module-jack-sink.c > index ba4ea95..017fbf6 100644 > --- a/src/modules/jack/module-jack-sink.c > +++ b/src/modules/jack/module-jack-sink.c > @@ -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) > diff --git a/src/modules/jack/module-jack-source.c b/src/modules/jack/module-jack-source.c > index 13109f3..cf62882 100644 > --- a/src/modules/jack/module-jack-source.c > +++ b/src/modules/jack/module-jack-source.c > @@ -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) > > -- David Henningsson, Canonical Ltd. http://launchpad.net/~diwic