[ALSA] usb-audio - avoid unnecessary double buffering
USB generic driver When a USB packet boundary falls exactly on a buffer boundary, hwptr remains at the end of the buffer which causes an overflow in the next iteration and triggers double buffering although the next packet would actually be contiguous. This patch ensures that hwptr is always smaller than buffer_size. Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
This commit is contained in:
parent
50cdbf1519
commit
29b16931f9
1 changed files with 2 additions and 0 deletions
|
@ -565,6 +565,8 @@ static int prepare_playback_urb(snd_usb_substream_t *subs,
|
|||
/* set the buffer pointer */
|
||||
urb->transfer_buffer = runtime->dma_area + subs->hwptr * stride;
|
||||
subs->hwptr += offs;
|
||||
if (subs->hwptr == runtime->buffer_size)
|
||||
subs->hwptr = 0;
|
||||
}
|
||||
spin_unlock_irqrestore(&subs->lock, flags);
|
||||
urb->transfer_buffer_length = offs * stride;
|
||||
|
|
Loading…
Reference in a new issue