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

arun at accosted.net arun at accosted.net
Wed Jun 10 22:42:22 PDT 2015


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);
 
         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;
-- 
2.4.2



More information about the pulseaudio-discuss mailing list