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