summaryrefslogtreecommitdiff
path: root/src/pulse
diff options
context:
space:
mode:
authorArun Raghavan <git@arunraghavan.net>2015-06-11 11:01:30 +0530
committerArun Raghavan <git@arunraghavan.net>2015-06-12 12:43:18 +0530
commit5adb126259958ab106584034f6a3c94a8ec4af60 (patch)
tree72008604cfd11d022033947257ea71549e0ffb44 /src/pulse
parenta1c4a6916f74306fb1ddc9c1d5a77a57e4e30a6f (diff)
stream: Support extended API with PULSE_LATENCY_MSEC if possible
This only works in the single-format case (i.e. we know the format up-front and we're not negotiating).
Diffstat (limited to 'src/pulse')
-rw-r--r--src/pulse/stream.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index c301b8ee..6fea9963 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -987,6 +987,14 @@ 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);
@@ -994,7 +1002,7 @@ static void patch_buffer_attr(pa_stream *s, pa_buffer_attr *attr, pa_stream_flag
pa_log_debug("Ignoring $PULSE_LATENCY_MSEC: %s (invalid sample spec)", 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;