I got buffer underruns when moving sinks for a "live" stream. Flag
"adjust_latency" will decrease the latency each time when I move the sink and
can cause buffer underrun.
http://lists.freedesktop.org/archives/pulseaudio-discuss/2011-June/010146.html
Is it OK to set a minimum total latency (300ms) for a "live" (phone) playback
stream, considering that a BT headset sink has a fixed latency of 128ms?
Thanks
Amanda
diff --git a/pulseaudio-0.9.22/src/pulsecore/protocol-native.c
b/pulseaudio-0.9.22/src/pulsecore/protocol-native.c
index 4952ee4..570a0c7 100755
--- a/pulseaudio-0.9.22/src/pulsecore/protocol-native.c
+++ b/pulseaudio-0.9.22/src/pulsecore/protocol-native.c
@@ -856,6 +856,8 @@ static int playback_stream_process_msg(pa_msgobject *o, int
code, void*userdata,
}
/* Called from main context */
+#define MIN_PHONE_TOTAL_LATENCY_USEC 300000
+
static void fix_playback_buffer_attr(playback_stream *s) {
size_t frame_size, max_prebuf;
pa_usec_t orig_tlength_usec, tlength_usec, orig_minreq_usec, minreq_usec,
sink_usec;
@@ -933,6 +935,13 @@ static void fix_playback_buffer_attr(playback_stream *s) {
* able to fulfill it and give the application also minreq
* time to fill it up again for the next request Makes 2 times
* minreq in plus.. */
+ const char *role;
+
+ role = pa_proplist_gets(s->sink_input->proplist, PA_PROP_MEDIA_ROLE);
+ if(role && pa_streq("phone", role)) {
+ if(tlength_usec < MIN_PHONE_TOTAL_LATENCY_USEC)
+ tlength_usec = MIN_PHONE_TOTAL_LATENCY_USEC;
+ }
if (tlength_usec > minreq_usec*2)
sink_usec = (tlength_usec - minreq_usec*2)/2;
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss