[pulseaudio-discuss] [PATCH] stream: Support extended API with PULSE_LATENCY_MSEC if possible

David Henningsson david.henningsson at canonical.com
Wed Jun 10 22:53:20 PDT 2015



On 2015-06-11 07:42, arun at accosted.net wrote:
> From: Arun Raghavan <git at arunraghavan.net>
>
> This only works in the single-format case (i.e. we know the format
> up-front and we're not negotiating).
> ---
>   src/pulse/stream.c | 10 +++++++++-
>   1 file changed, 9 insertions(+), 1 deletion(-)
>
> Adequately compile-tested and run this time. :/
>
> diff --git a/src/pulse/stream.c b/src/pulse/stream.c
> index af2a9b3..9ec23eb 100644
> --- a/src/pulse/stream.c
> +++ b/src/pulse/stream.c
> @@ -987,12 +987,20 @@ static void patch_buffer_attr(pa_stream *s, pa_buffer_attr *attr, pa_stream_flag
>
>       if ((e = getenv("PULSE_LATENCY_MSEC"))) {
>           uint32_t ms;
> +        pa_sample_spec ss;
> +
> +        pa_sample_spec_init(&ss);
> +
> +        if (pa_sample_spec_valid(&s->sample_spec))
> +            ss = s->sample_spec;
> +        else if (s->n_formats == 1)
> +            pa_format_info_to_sample_spec(s->req_formats[0], &ss, NULL);

Looks like we'll still have a bug in case s->n_formats != 1, so we'll 
still need my workaround, right?

>
>           if (pa_atou(e, &ms) < 0 || ms <= 0)
>               pa_log_debug("Failed to parse $PULSE_LATENCY_MSEC: %s", e);
>           else {
>               attr->maxlength = (uint32_t) -1;
> -            attr->tlength = pa_usec_to_bytes(ms * PA_USEC_PER_MSEC, &s->sample_spec);
> +            attr->tlength = pa_usec_to_bytes(ms * PA_USEC_PER_MSEC, &ss);
>               attr->minreq = (uint32_t) -1;
>               attr->prebuf = (uint32_t) -1;
>               attr->fragsize = attr->tlength;
>

-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic


More information about the pulseaudio-discuss mailing list