Re: snd-bebob - Edirol FA66

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Oops. I described based on renewal engine for which I'm working...

On Nov 8 2017 08:03, Takashi Sakamoto wrote:
(CCed to alsa-devel)

On Nov 8 2017 05:50, Pawel wrote:
 > In start thanks for your great work.
 > I have such card:
 >
 >   1 [FA66           ]: BeBoB - EDIROL FA-66
>                        EDIROL EDIROL FA-66 (id:2, rev:1), GUID 0040ab0000c38ae5 at fw1.0, S400
 >
 >
 > .. which ffado drivers , I can start jack with low parameters like;
 > jackd -P82 -p128 -t5000 -u -dfirewire -dhw:FA66 -r96000 -p128 -n2
 >
> .. but with alsa I need to use period value 3 and buffer size between 512 and 2048.
 > There are probably some hardcoded values in alsa driver.

Edirol FA-66 uses DM1000 ASIC as communication engine. This ASIC is produced by BridgeCo. in its BeBoB solution. In this solution, IEC 61883-1/6 packet streaming is used to transfer audio/music data between units on IEEE 1394 bus and host driver.

All of current implementation of drivers in ALSA firewire stack including BeBoB driver relies on ALSA packet streaming engine for IEC 61883-1/6. This engine runs with hardware interrupts from 1394OHCI host controllers. Interval of the interrupt is currently configured to every 16 interrupts. This mostly equals to 2 msec in actual time frame.

In a view from ALSA PCM application, the 2 msec is corresponding to a period of PCM buffer. Thus, users can configure size of period over 2 msec in any PCM substream. Actual value of the size of period is decided depending on used sampling frequency.

The above section is not for current implementation in upstream. The hardware interrupt surely occurs per 2 msec (precisely including some jitters), while the minimum size of period for PCM substream is actually constrained to 5 msec, due to difference of unit of data transmission between IEC 61883-1/6 and ALSA PCM interface.

The interval of interrupt is 2 msec, while unit of data transmission for PCM frames doesn't exectly equal to 2 msec. For safe data handling, the engine uses the same size of period as near 5 msec so that the interrupt necessarily occurs between two elapses. For this mechanism, my report helps your understanding[1] (be aware that it includes some obsoleted contents).

Furthermore, any interrupt-oriented driver requires 2 or more periods in PCM buffer. Therefore, users can configure size of buffer over multiples of 2 msec according to configured number of periods.

That's current design of ALSA IEC 61883-1/6 engine and it's restriction.
[1] https://github.com/takaswie/alsa-firewire-report


Regards

Takashi Sakamoto
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel




[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux