[alsa-devel] [PATCH 00/20] ALSA: firewire-lib: use packet descriptor to represent sequence of packet

Takashi Iwai tiwai at suse.de
Mon Jul 22 16:12:34 CEST 2019


On Mon, 22 Jul 2019 05:36:50 +0200,
Takashi Sakamoto wrote:
> 
> Hi,
> 
> This patchset is for Linux kernel v5.4.
> 
> In current implementation of ALSA IEC 61883-1/6 packet streaming
> engine, one callback of isochronous context consists three steps
> to process an isochronous packet:
> 
> Callback of isochronous context
>  - For each of packets
>   1.parse context header and decide the amount of PCM frames
>   2.process data blocks (in each unit driver)
>   3.queue packet
> 
> The result of step 1 affects the rest, thus the above steps can be
> changed for below process:
> 
> Callback of isochronous context
>  1.parse context header and decide the amount of PCM frames
>   - For each of packets
>  2.process data blocks (in each unit driver)
>   - For each of packets
>  3.queue packet
>   - For each of packets
> 
> Especially it's convenient to decide the amount of PCM frames
> multiplexed into each packet as batch calculation before processing
> payloads of these packets.  Additionally it allows each unit driver
> to process data blocks for these packet by one call.
> 
> This patchset uses list of 'struct pkt_desc' as an intermediate
> representation of packet parameters between these three steps.
> 
> 
> Here, I note my future plan for ALSA firewire stack for your motivation
> to review this patchset:
> 
>  * v5.4
>   * Handle several IT/IR context in one callback of IT context. This
>     idea will introduce AMDTP domain structure with relationship of IRQ
>     master/slave between the IT/IR contexts.
>   * As a result, both of playback/capture PCM substreams run on the
>     same hardware interrupt. Thus the drivers just support batch PCM
>     operation and irq-based programming model[1].
>  * v5.5
>   * Some (p.s. not all) supported devices don't follow packet sequences
>     transferred by the drivers. They require clock recovery in driver
>     side to reduce playback noise.  Enhance the AMDTP domain structure
>     to have clock recovery target and fill list of 'struct pkt_desc'
>     according to the result of clock recovery.
> 
> My work for libhinoko[2] allows me to sniff actual packet transmission
> between devices and drivers in Windows/Mac OS for long period (e.g. 1
> hour). Then I can classify some cases and some devices for the
> requirement of clock recovery.
> 
> (I note that no specification describes this mechanism as long as I know.
> In the specification, clock recovery is one-way from transmitter to
> receivers, thus recovered clock is not necessarily used for transmission
> from the receiver to the transmitter.)
> 
> [1] https://git.alsa-project.org/?p=alsa-utils.git;a=blob;f=axfer/axfer-transfer.1;hb=HEAD#l675
> [2] https://github.com/takaswie/libhinoko
> 
> Takashi Sakamoto (20):
>   ALSA: firewire-lib: obsolete ctx_data.tx.first_dbc with
>     CIP_UNALIGHED_DBC flag
>   ALSA: firewire-lib: pass data block count as an argument to
>     tracepoints event
>   ALSA: firewire-lib: pass data block counter to data block processing
>     layer
>   ALSA: firewire-lib: operate data block counter in top level of
>     processing for IT context
>   ALSA: firewire-lib: operate data block counter in top level of
>     processing for IR context
>   ALSA: firewire-lib: add syt_override member for some protocols
>   ALSA: firewire-lib: pass no syt information to data block processing
>     layer
>   ALSA: firewire-lib: add list of packet descriptor
>   ALSA: firewire-lib: use packet descriptor for IT context
>   ALSA: firewire-lib: use packet descriptor for IR context
>   ALSA: firewire-lib: code refactoring to process PCM substream
>   ALSA: firewire-lib: code refactoring to process context payloads
>   ALSA: firewire-lib: pass packet descriptor to data block processing
>     layer
>   ALSA: firewire-lib: code refactoring for AM824 data block processing
>     layer
>   ALSA: firewire-digi00x: code refactoring for DOT data block processing
>     layer
>   ALSA: firewire-tascam: code refactoring for TASCAM data block
>     processing layer
>   ALSA: firewire-motu: code refactoring for MOTU data block processing
>     layer
>   ALSA: fireface: code refactoring for FF data block processing layer
>   ALSA: firewire-lib: process payload of isoc context according to
>     packet descriptors
>   ALSA: firewire-motu: more code refactoring for MOTU data block
>     processing layer

Applied all 20 patches now.  Thanks.


Takashi


More information about the Alsa-devel mailing list