From 17d1e3cfca365bd0ef9774a768fcd673602181b3 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Fri, 12 Aug 2005 08:28:27 +0200 Subject: [PATCH] --- yaml --- r: 6521 b: refs/heads/master c: d6db392e9235c48bb945624798e9beede7b85b12 h: refs/heads/master i: 6519: 0e9518384f40f274e48a4a9f29811d2861add698 v: v3 --- [refs] | 2 +- trunk/sound/usb/usbaudio.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index b99ee6cd70f0..af48fc46af2d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 15a24c0778e9bdd48d8e1cf60a263837b5c30ed5 +refs/heads/master: d6db392e9235c48bb945624798e9beede7b85b12 diff --git a/trunk/sound/usb/usbaudio.c b/trunk/sound/usb/usbaudio.c index 9e38d3d1322a..d28106e390c4 100644 --- a/trunk/sound/usb/usbaudio.c +++ b/trunk/sound/usb/usbaudio.c @@ -938,7 +938,15 @@ static int init_substream_urbs(snd_usb_substream_t *subs, unsigned int period_by /* decide how many packets to be used */ if (is_playback) { - total_packs = (period_bytes + maxsize - 1) / maxsize; + unsigned int minsize; + /* determine how small a packet can be */ + minsize = (subs->freqn >> (16 - subs->datainterval)) + * (frame_bits >> 3); + /* with sync from device, assume it can be 25% lower */ + if (subs->syncpipe) + minsize -= minsize >> 2; + minsize = max(minsize, 1u); + total_packs = (period_bytes + minsize - 1) / minsize; if (total_packs < 2 * MIN_PACKS_URB) total_packs = 2 * MIN_PACKS_URB; } else {