* [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation
@ 2020-06-29 2:59 Alexander Tsoy
2020-06-29 2:59 ` [PATCH 2/2] ALSA: usb-audio: Replace s/frame/packet/ where appropriate Alexander Tsoy
2020-06-30 17:47 ` [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation Takashi Iwai
0 siblings, 2 replies; 4+ messages in thread
From: Alexander Tsoy @ 2020-06-29 2:59 UTC (permalink / raw)
To: alsa-devel; +Cc: Takashi Iwai, Peter Bui
Commit f0bd62b64016 ("ALSA: usb-audio: Improve frames size computation")
introduced a regression for devices which have playback endpoints with
bInterval > 1. Fix this by taking ep->datainterval into account.
Note that frame and fps are actually mean packet and packets per second
in the code introduces by the mentioned commit. This will be fixed in a
follow-up patch.
Fixes: f0bd62b64016 ("ALSA: usb-audio: Improve frames size computation")
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=208353
Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
---
sound/usb/endpoint.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
index 9bea7d3f99f8..11f23778f0a5 100644
--- a/sound/usb/endpoint.c
+++ b/sound/usb/endpoint.c
@@ -1093,6 +1093,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
ep->freqn = get_usb_high_speed_rate(rate);
ep->fps = 8000;
}
+ ep->fps >>= ep->datainterval;
ep->sample_rem = rate % ep->fps;
ep->framesize[0] = rate / ep->fps;
--
2.26.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] ALSA: usb-audio: Replace s/frame/packet/ where appropriate
2020-06-29 2:59 [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation Alexander Tsoy
@ 2020-06-29 2:59 ` Alexander Tsoy
2020-06-30 17:48 ` Takashi Iwai
2020-06-30 17:47 ` [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation Takashi Iwai
1 sibling, 1 reply; 4+ messages in thread
From: Alexander Tsoy @ 2020-06-29 2:59 UTC (permalink / raw)
To: alsa-devel; +Cc: Takashi Iwai, Peter Bui
Replace several occurences of "frame" with a "packet" where appropriate.
Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
---
sound/usb/card.h | 6 +++---
sound/usb/endpoint.c | 19 +++++++++----------
2 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/sound/usb/card.h b/sound/usb/card.h
index d6219fba9699..de43267b9c8a 100644
--- a/sound/usb/card.h
+++ b/sound/usb/card.h
@@ -84,10 +84,10 @@ struct snd_usb_endpoint {
dma_addr_t sync_dma; /* DMA address of syncbuf */
unsigned int pipe; /* the data i/o pipe */
- unsigned int framesize[2]; /* small/large frame sizes in samples */
- unsigned int sample_rem; /* remainder from division fs/fps */
+ unsigned int packsize[2]; /* small/large packet sizes in samples */
+ unsigned int sample_rem; /* remainder from division fs/pps */
unsigned int sample_accum; /* sample accumulator */
- unsigned int fps; /* frames per second */
+ unsigned int pps; /* packets per second */
unsigned int freqn; /* nominal sampling rate in fs/fps in Q16.16 format */
unsigned int freqm; /* momentary sampling rate in fs/fps in Q16.16 format */
int freqshift; /* how much to shift the feedback value to get Q16.16 */
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
index 11f23778f0a5..88760268fb55 100644
--- a/sound/usb/endpoint.c
+++ b/sound/usb/endpoint.c
@@ -159,11 +159,11 @@ int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
return ep->maxframesize;
ep->sample_accum += ep->sample_rem;
- if (ep->sample_accum >= ep->fps) {
- ep->sample_accum -= ep->fps;
- ret = ep->framesize[1];
+ if (ep->sample_accum >= ep->pps) {
+ ep->sample_accum -= ep->pps;
+ ret = ep->packsize[1];
} else {
- ret = ep->framesize[0];
+ ret = ep->packsize[0];
}
return ret;
@@ -1088,16 +1088,15 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) {
ep->freqn = get_usb_full_speed_rate(rate);
- ep->fps = 1000;
+ ep->pps = 1000 >> ep->datainterval;
} else {
ep->freqn = get_usb_high_speed_rate(rate);
- ep->fps = 8000;
+ ep->pps = 8000 >> ep->datainterval;
}
- ep->fps >>= ep->datainterval;
- ep->sample_rem = rate % ep->fps;
- ep->framesize[0] = rate / ep->fps;
- ep->framesize[1] = (rate + (ep->fps - 1)) / ep->fps;
+ ep->sample_rem = rate % ep->pps;
+ ep->packsize[0] = rate / ep->pps;
+ ep->packsize[1] = (rate + (ep->pps - 1)) / ep->pps;
/* calculate the frequency in 16.16 format */
ep->freqm = ep->freqn;
--
2.26.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation
2020-06-29 2:59 [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation Alexander Tsoy
2020-06-29 2:59 ` [PATCH 2/2] ALSA: usb-audio: Replace s/frame/packet/ where appropriate Alexander Tsoy
@ 2020-06-30 17:47 ` Takashi Iwai
1 sibling, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2020-06-30 17:47 UTC (permalink / raw)
To: Alexander Tsoy; +Cc: alsa-devel, Peter Bui
On Mon, 29 Jun 2020 04:59:33 +0200,
Alexander Tsoy wrote:
>
> Commit f0bd62b64016 ("ALSA: usb-audio: Improve frames size computation")
> introduced a regression for devices which have playback endpoints with
> bInterval > 1. Fix this by taking ep->datainterval into account.
>
> Note that frame and fps are actually mean packet and packets per second
> in the code introduces by the mentioned commit. This will be fixed in a
> follow-up patch.
>
> Fixes: f0bd62b64016 ("ALSA: usb-audio: Improve frames size computation")
> BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=208353
> Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
Applied now. Thanks.
Takashi
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-06-30 17:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-29 2:59 [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation Alexander Tsoy
2020-06-29 2:59 ` [PATCH 2/2] ALSA: usb-audio: Replace s/frame/packet/ where appropriate Alexander Tsoy
2020-06-30 17:48 ` Takashi Iwai
2020-06-30 17:47 ` [PATCH 1/2] ALSA: usb-audio: Fix packet size calculation Takashi Iwai
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.