pulseaudio 0.9.15 for F10?
Roberto Ragusa
mail at robertoragusa.it
Sat Aug 8 17:32:11 UTC 2009
Roberto Ragusa wrote:
> After applying this patch, mplayer does not get stuck, it is just the usual
> latency/skips/underruns...
Wrongly pasted the patch. Corrected one follows:
diff -urN pulseaudio-0.9.14/src/pulsecore/memblockq.c pulseaudio-0.9.14-fix440/src/pulsecore/memblockq.c
--- pulseaudio-0.9.14/src/pulsecore/memblockq.c 2009-01-13 00:10:34.000000000 +0100
+++ pulseaudio-0.9.14-fix440/src/pulsecore/memblockq.c 2009-08-08 18:42:28.000000000 +0200
@@ -90,8 +90,8 @@
pa_memblockq_set_maxlength(bq, maxlength);
pa_memblockq_set_tlength(bq, tlength);
- pa_memblockq_set_prebuf(bq, prebuf);
pa_memblockq_set_minreq(bq, minreq);
+ pa_memblockq_set_prebuf(bq, prebuf);
pa_memblockq_set_maxrewind(bq, maxrewind);
pa_log_debug("memblockq sanitized: maxlength=%lu, tlength=%lu, base=%lu, prebuf=%lu, minreq=%lu maxrewind=%lu",
@@ -782,16 +782,13 @@
if (bq->tlength > bq->maxlength)
pa_memblockq_set_tlength(bq, bq->maxlength);
-
- if (bq->prebuf > bq->maxlength)
- pa_memblockq_set_prebuf(bq, bq->maxlength);
}
void pa_memblockq_set_tlength(pa_memblockq *bq, size_t tlength) {
size_t old_tlength;
pa_assert(bq);
- if (tlength <= 0)
+ if (tlength <= 0 || tlength == (size_t) -1)
tlength = bq->maxlength;
old_tlength = bq->tlength;
@@ -800,49 +797,46 @@
if (bq->tlength > bq->maxlength)
bq->tlength = bq->maxlength;
- if (bq->prebuf > bq->tlength)
- pa_memblockq_set_prebuf(bq, bq->tlength);
-
if (bq->minreq > bq->tlength)
pa_memblockq_set_minreq(bq, bq->tlength);
+ if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
+ pa_memblockq_set_prebuf(bq, bq->tlength+bq->base-bq->minreq);
+
bq->missing += (int64_t) bq->tlength - (int64_t) old_tlength;
}
+void pa_memblockq_set_minreq(pa_memblockq *bq, size_t minreq) {
+ pa_assert(bq);
+
+ bq->minreq = (minreq/bq->base)*bq->base;
+
+ if (bq->minreq > bq->tlength)
+ bq->minreq = bq->tlength;
+
+ if (bq->minreq < bq->base)
+ bq->minreq = bq->base;
+
+ if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
+ pa_memblockq_set_prebuf(bq, bq->tlength+bq->base-bq->minreq);
+}
+
void pa_memblockq_set_prebuf(pa_memblockq *bq, size_t prebuf) {
pa_assert(bq);
if (prebuf == (size_t) -1)
- prebuf = bq->tlength;
+ prebuf = bq->tlength+bq->base-bq->minreq;
bq->prebuf = ((prebuf+bq->base-1)/bq->base)*bq->base;
if (prebuf > 0 && bq->prebuf < bq->base)
bq->prebuf = bq->base;
- if (bq->prebuf > bq->tlength)
- bq->prebuf = bq->tlength;
+ if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
+ bq->prebuf = bq->tlength+bq->base-bq->minreq;
if (bq->prebuf <= 0 || pa_memblockq_get_length(bq) >= bq->prebuf)
bq->in_prebuf = FALSE;
-
- if (bq->minreq > bq->prebuf)
- pa_memblockq_set_minreq(bq, bq->prebuf);
-}
-
-void pa_memblockq_set_minreq(pa_memblockq *bq, size_t minreq) {
- pa_assert(bq);
-
- bq->minreq = (minreq/bq->base)*bq->base;
-
- if (bq->minreq > bq->tlength)
- bq->minreq = bq->tlength;
-
- if (bq->minreq > bq->prebuf)
- bq->minreq = bq->prebuf;
-
- if (bq->minreq < bq->base)
- bq->minreq = bq->base;
}
void pa_memblockq_set_maxrewind(pa_memblockq *bq, size_t maxrewind) {
diff -urN pulseaudio-0.9.14/src/pulsecore/protocol-native.c pulseaudio-0.9.14-fix440/src/pulsecore/protocol-native.c
--- pulseaudio-0.9.14/src/pulsecore/protocol-native.c 2009-01-13 00:11:38.000000000 +0100
+++ pulseaudio-0.9.14-fix440/src/pulsecore/protocol-native.c 2009-08-08 18:46:34.000000000 +0200
@@ -797,7 +797,7 @@
uint32_t* prebuf,
uint32_t* minreq) {
- size_t frame_size;
+ size_t frame_size, max_prebuf;
pa_usec_t orig_tlength_usec, tlength_usec, orig_minreq_usec, minreq_usec, sink_usec;
pa_assert(s);
@@ -923,8 +923,10 @@
if (*tlength <= *minreq)
*tlength = *minreq*2 + (uint32_t) frame_size;
- if (*prebuf == (uint32_t) -1 || *prebuf > *tlength)
- *prebuf = *tlength;
+ max_prebuf = *tlength + (uint32_t) frame_size - *minreq;
+ if (*prebuf == (uint32_t) -1 ||
+ *prebuf > max_prebuf)
+ *prebuf = max_prebuf;
}
static void fix_playback_buffer_attr_post(
--
Roberto Ragusa mail at robertoragusa.it
More information about the fedora-devel-list
mailing list