output/alsa: use IsCleared() instead of IsDrained() in DrainInternal()
Really drain all data from the period_buffer in any case.
This commit is contained in:
parent
d66f5a8590
commit
a92aa0bedc
@ -77,14 +77,6 @@ public:
|
||||
return tail >= capacity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Has some data already been consumed at the buffer's head in
|
||||
* this period?
|
||||
*/
|
||||
bool WasConsumed() const noexcept {
|
||||
return head > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Has all data for the current period been drained? If not,
|
||||
* then there is pending data. This ignores the partial frame
|
||||
|
@ -747,7 +747,9 @@ AlsaOutput::DrainInternal()
|
||||
/* drain ring_buffer */
|
||||
CopyRingToPeriodBuffer();
|
||||
|
||||
if (period_buffer.WasConsumed() && !period_buffer.IsFull())
|
||||
/* drain period_buffer */
|
||||
if (!period_buffer.IsCleared()) {
|
||||
if (!period_buffer.IsFull())
|
||||
/* generate some silence to finish the partial
|
||||
period */
|
||||
period_buffer.FillWithSilence(silence, out_frame_size);
|
||||
@ -765,9 +767,11 @@ AlsaOutput::DrainInternal()
|
||||
|
||||
/* need to call CopyRingToPeriodBuffer() and
|
||||
WriteFromPeriodBuffer() again in the next
|
||||
iteration, so don't finish the drain just yet */
|
||||
iteration, so don't finish the drain just
|
||||
yet */
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!written)
|
||||
/* if nothing has ever been written to the PCM, we
|
||||
|
Loading…
Reference in New Issue
Block a user