Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Giuliano Pochini <pochini@shiny.it>
To: Matthias Nyffenegger <matthias.nyffenegger@bluewin.ch>
Cc: alsa-devel@lists.sourceforge.net
Subject: Re: DMA, substream, frame, channel - how is this all related
Date: Sat, 3 Mar 2007 15:25:00 +0100	[thread overview]
Message-ID: <20070303152500.15233bd2.pochini@shiny.it> (raw)
In-Reply-To: <45E89DD3.2080405@bluewin.ch>

On Fri, 02 Mar 2007 22:57:39 +0100
Matthias Nyffenegger <matthias.nyffenegger@bluewin.ch> wrote:

> Hi,
> 
> I am trying to write an alsa driver for my audiowerk8 soundcard.
> The aw8 uses a Philips saa7146 chipset. There are 2 capture and
> 8 playback channels mapped on the saa7146's DMA as follows:
> 
> DMA1: 2xcapture
> DMA2: 4xplayback
> DMA3: 4xplayback
> 
> Sample format is 16bit.
> 
> Frame format is as follows:
> (A number corresponds to a channel, a stereo channel-pair is embraced
> by [] and 1 digit corresponds to one sample byte)
> 
> capture channels [0,1] on DMA1:        00--11--
> playback channels [2,3],[4,5] on DMA2: 22443355
> playback channels [6,7],[8,9] on DMA3: 66887799
> 
> I guess this is interleaved format.

Not exactly. The interleaved format used by ALSA and most hardware is that
the data of each audio frame is written requentially [0,1,2,3,...]. In you
case the data is interleaved, but the channel order is different [0,2,1,3].
It means that if you try to play a stereo sound through DMA2 the sound is
sent to the left channels of the two stereo pairs. You can solve this
problem later.


> Since I don't really understand the relation between DMA, substreams,
> frames and channels I wonder how a alsa substreams map best to this
> configuration:

DMA channels depend on the hardware. A substream is a logical thing. You
have to decide their relation.


> 1) 1 substream per DMA

The simplest way. The downside is that who opens the device monopolyzes all
4 channels regardless how may it really uses.


>    -> can alsa handle frames with more than 2 channels, and if yes, how?

You have to set it, just like any other parameter, constraint, capability:

substream->runtime->hw.channels_max = n;


> 2) 1 substream per stereo channel-pair

It's possible only if a DMA channel can handle two independent substreams.
For example, can only one of the spereo pair play something (while the other
is stopped/paused) ?  Other hw limitations may apply (eg. the sample rate
and the playback volume may be the same for all 4 channels).


> 3) 1 substream per channel

Same as above.


--
Giuliano.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

      reply	other threads:[~2007-03-03 14:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-02 21:57 DMA, substream, frame, channel - how is this all related Matthias Nyffenegger
2007-03-03 14:25 ` Giuliano Pochini [this message]

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=20070303152500.15233bd2.pochini@shiny.it \
    --to=pochini@shiny.it \
    --cc=alsa-devel@lists.sourceforge.net \
    --cc=matthias.nyffenegger@bluewin.ch \
    /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