[pulseaudio-discuss] [PATCH v2] module-jack-sink/source: Set fixed latency correctly on creation
David Henningsson
david.henningsson at canonical.com
Wed Mar 28 04:32:53 PDT 2012
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
More information about the pulseaudio-discuss
mailing list