From: Daniel Mack <zonque@gmail.com>
To: Clemens Ladisch <clemens@ladisch.de>
Cc: tiwai@suse.de, alsa-devel@alsa-project.org,
Felix Homann <linuxaudio@showlabor.de>
Subject: Re: Need expert's advice - Fast Track Ultra (8R) dropping samples
Date: Fri, 15 Oct 2010 10:59:40 +0200 [thread overview]
Message-ID: <20101015085939.GA25380@wok> (raw)
In-Reply-To: <4CB80163.5060107@ladisch.de>
On Fri, Oct 15, 2010 at 09:23:15AM +0200, Clemens Ladisch wrote:
> Daniel Mack wrote:
> > > > I have an untested patch ready which should add support for implicit
> > > > feedback, but I'm uncertain about the condition when to activate this
> > > > mode.
>
> For UAC2 devices, when the descriptors say so.
> For UAC1 devices, never (because UAC1 does not have this mode).
Yes, but UAC1 also doesn't support other things like high speed
transfers in the specs, still the Linux driver supports it, right?
I think we can interpret the ISO endpoint usage bits for this, and if a
UAC1 device sets them, it should be ok for the Linux driver. Or is there
any other detail in the spec we could use for judging?
> > static int snd_usb_audio_next_packet_size(struct snd_usb_substream *subs)
> > {
> > + frames = min(capture->frame_count, subs->maxframesize);
> > + capture->frame_count -= frames;
>
> This assumes that both streams are running continuously, and you have to
> make sure to start them at the same time to prevent the frame_count from
> overflowing or underflowing.
The caputure stream must be running continuously, yes. Otherwise, the
driver can't know how many data it should send. But the counter can't
actually underflow; if there is no more data to be sent, the counter
will drop to zero, which makes the output stream send zero-length
packets.
> In my UA-101 driver, I ensure that the
> buffer fill level is the same for both streams by submitting each
> playback packet with the same frame count as the corresponding capture
> packet; but I'm not sure which algorithm is more robust in practice.
Yes, I do exactly the same in my proprietary driver for the Native
Instruments devices, but it seems harder to implement in the generic
driver. The problem I see with my current approach is that the jitter is
higher - we now always send the maximum frame size or zero length.
> > + /* if this stream is in implicit feedback mode, start the
> > + * capture stream now as the playback stream relies on the
> > + * amount of data we see on the capture IN endpoint.
> > + */
> > + if (subs->stream->implicit_feedback && !capture->running) {
> > + int ret;
> > + capture->ops.retire = retire_paused_capture_urb;
>
> set_interface?
You mean usb_set_interface()? Why should that be neccessary?
> > + ret = start_urbs(capture, runtime);
> > + if (ret)
> > + return ret;
> > + }
> > +
> > return start_urbs(subs, runtime);
>
> I think you have to wait for the first capture packet to be received
> before you can start submitting playback URBs.
Hmm, Felix - can you try this? I thought as long as the capture stream
doesn't see any data, it just sends out zero-length packets, which
should be ok. Or do I miss anything?
Thanks,
Daniel
next prev parent reply other threads:[~2010-10-15 8:59 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-25 9:57 Need expert's advice - Fast Track Ultra (8R) dropping samples Felix Homann
2010-10-01 11:00 ` Felix Homann
2010-10-01 16:29 ` Clemens Ladisch
2010-10-03 11:50 ` Felix Homann
2010-10-03 12:00 ` Daniel Mack
2010-10-05 7:21 ` Clemens Ladisch
2010-10-06 13:57 ` Felix Homann
2010-10-06 14:38 ` Clemens Ladisch
2010-10-06 16:31 ` Felix Homann
2010-10-07 6:37 ` Clemens Ladisch
2010-10-07 8:10 ` Daniel Mack
2010-10-07 8:50 ` Felix Homann
2010-10-07 11:35 ` Felix Homann
2010-10-08 6:26 ` Clemens Ladisch
2010-10-12 7:18 ` Daniel Mack
2010-10-12 8:18 ` Felix Homann
2010-10-12 10:26 ` Daniel Mack
2010-10-13 7:47 ` Felix Homann
2010-10-13 12:48 ` Daniel Mack
2010-10-15 7:23 ` Clemens Ladisch
2010-10-15 8:59 ` Daniel Mack [this message]
2010-10-15 11:08 ` Felix Homann
2010-10-15 14:21 ` Clemens Ladisch
2010-10-03 10:02 ` Daniel Mack
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101015085939.GA25380@wok \
--to=zonque@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=clemens@ladisch.de \
--cc=linuxaudio@showlabor.de \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).