pulsesink: Allow writes in bigger chunks
There's no use in splitting the incoming data down to the segsize limit - by writing as much as possible in one chunk, we increase performance and avoid PulseAudio unnecessary rewinds. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
This commit is contained in:
parent
e032d26674
commit
e70020b456
@ -1430,9 +1430,7 @@ gst_pulseringbuffer_commit (GstRingBuffer * buf, guint64 * sample,
|
|||||||
|
|
||||||
towrite = out_samples * bps;
|
towrite = out_samples * bps;
|
||||||
|
|
||||||
/* Only ever write segsize bytes at once. This will
|
/* Wait for at least segsize bytes to become available */
|
||||||
* also limit the PA shm buffer to segsize
|
|
||||||
*/
|
|
||||||
if (towrite > buf->spec.segsize)
|
if (towrite > buf->spec.segsize)
|
||||||
towrite = buf->spec.segsize;
|
towrite = buf->spec.segsize;
|
||||||
|
|
||||||
@ -1481,7 +1479,7 @@ gst_pulseringbuffer_commit (GstRingBuffer * buf, guint64 * sample,
|
|||||||
goto uncork_failed;
|
goto uncork_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we can't write a single byte, wait a bit */
|
/* we can't write segsize bytes, wait a bit */
|
||||||
GST_LOG_OBJECT (psink, "waiting for free space");
|
GST_LOG_OBJECT (psink, "waiting for free space");
|
||||||
pa_threaded_mainloop_wait (mainloop);
|
pa_threaded_mainloop_wait (mainloop);
|
||||||
|
|
||||||
@ -1489,14 +1487,10 @@ gst_pulseringbuffer_commit (GstRingBuffer * buf, guint64 * sample,
|
|||||||
goto was_paused;
|
goto was_paused;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make sure we only buffer up latency-time samples */
|
/* Recalculate what we can write in the next chunk */
|
||||||
if (pbuf->m_writable > buf->spec.segsize) {
|
towrite = out_samples * bps;
|
||||||
/* limit buffering to latency-time value */
|
if (pbuf->m_writable > towrite)
|
||||||
pbuf->m_writable = buf->spec.segsize;
|
pbuf->m_writable = towrite;
|
||||||
|
|
||||||
GST_LOG_OBJECT (psink, "Limiting buffering to %" G_GSIZE_FORMAT,
|
|
||||||
pbuf->m_writable);
|
|
||||||
}
|
|
||||||
|
|
||||||
GST_LOG_OBJECT (psink, "requesting %" G_GSIZE_FORMAT " bytes of "
|
GST_LOG_OBJECT (psink, "requesting %" G_GSIZE_FORMAT " bytes of "
|
||||||
"shared memory", pbuf->m_writable);
|
"shared memory", pbuf->m_writable);
|
||||||
@ -1510,14 +1504,9 @@ gst_pulseringbuffer_commit (GstRingBuffer * buf, guint64 * sample,
|
|||||||
GST_LOG_OBJECT (psink, "got %" G_GSIZE_FORMAT " bytes of shared memory",
|
GST_LOG_OBJECT (psink, "got %" G_GSIZE_FORMAT " bytes of shared memory",
|
||||||
pbuf->m_writable);
|
pbuf->m_writable);
|
||||||
|
|
||||||
/* Just to make sure that we didn't get more than requested */
|
|
||||||
if (pbuf->m_writable > buf->spec.segsize) {
|
|
||||||
/* limit buffering to latency-time value */
|
|
||||||
pbuf->m_writable = buf->spec.segsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pbuf->m_writable < towrite)
|
if (towrite > pbuf->m_writable)
|
||||||
towrite = pbuf->m_writable;
|
towrite = pbuf->m_writable;
|
||||||
avail = towrite / bps;
|
avail = towrite / bps;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user