In case that the pulse daemon runs the source device at a relatively low fixed
fragment size compared to the requested latency-time, configure the ring buffer
segsize to the largest integer multiple of the fragment size that is still
smaller than or equal to the requested latency-time.
Fixes bug #597463.
GST_INFO_OBJECT (pulsesrc, "fragsize: %d (wanted %d)",
actual->fragsize, wanted.fragsize);
- /* adjust latency again */
- spec->segsize = actual->fragsize;
+ if (actual->fragsize >= wanted.fragsize) {
+ spec->segsize = actual->fragsize;
+ } else {
+ spec->segsize = actual->fragsize * (wanted.fragsize / actual->fragsize);
+ }
spec->segtotal = actual->maxlength / spec->segsize;
pa_threaded_mainloop_unlock (pulsesrc->mainloop);