]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ALSA: doc: ReSTize Channel-Mapping-API document
authorTakashi Iwai <tiwai@suse.de>
Wed, 9 Nov 2016 15:05:18 +0000 (16:05 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 10 Nov 2016 17:09:25 +0000 (18:09 +0100)
A simple conversion from a text file.
Put to designs subdirectory.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Documentation/sound/designs/channel-mapping-api.rst [moved from Documentation/sound/alsa/Channel-Mapping-API.txt with 75% similarity]
Documentation/sound/designs/index.rst

similarity index 75%
rename from Documentation/sound/alsa/Channel-Mapping-API.txt
rename to Documentation/sound/designs/channel-mapping-api.rst
index 3c43d1a4ca0ea88e91ac62b86d942fadf69888a6..58e6312a43c004d92a9192a1bcacebe1654632c7 100644 (file)
@@ -1,9 +1,11 @@
+============================
 ALSA PCM channel-mapping API
 ============================
-                                       Takashi Iwai <tiwai@suse.de>
 
-GENERAL
--------
+Takashi Iwai <tiwai@suse.de>
+
+General
+=======
 
 The channel mapping API allows user to query the possible channel maps
 and the current channel map, also optionally to modify the channel map
@@ -11,9 +13,9 @@ of the current stream.
 
 A channel map is an array of position for each PCM channel.
 Typically, a stereo PCM stream has a channel map of
-  { front_left, front_right }
+``{ front_left, front_right }``
 while a 4.0 surround PCM stream has a channel map of
-  { front left, front right, rear left, rear right }.
+``{ front left, front right, rear left, rear right }.``
 
 The problem, so far, was that we had no standard channel map
 explicitly, and applications had no way to know which channel
@@ -29,8 +31,8 @@ specification.  These are the main motivations for the new channel
 mapping API.
 
 
-DESIGN
-------
+Design
+======
 
 Actually, "the channel mapping API" doesn't introduce anything new in
 the kernel/user-space ABI perspective.  It uses only the existing
@@ -39,10 +41,11 @@ control element features.
 As a ground design, each PCM substream may contain a control element
 providing the channel mapping information and configuration.  This
 element is specified by:
-       iface = SNDRV_CTL_ELEM_IFACE_PCM
-       name = "Playback Channel Map" or "Capture Channel Map"
-       device = the same device number for the assigned PCM substream
-       index = the same index number for the assigned PCM substream
+
+* iface = SNDRV_CTL_ELEM_IFACE_PCM
+* name = "Playback Channel Map" or "Capture Channel Map"
+* device = the same device number for the assigned PCM substream
+* index = the same index number for the assigned PCM substream
 
 Note the name is different depending on the PCM substream direction.
 
@@ -50,32 +53,35 @@ Each control element provides at least the TLV read operation and the
 read operation.  Optionally, the write operation can be provided to
 allow user to change the channel map dynamically.
 
-* TLV
+TLV
+---
 
 The TLV operation gives the list of available channel
 maps.  A list item of a channel map is usually a TLV of
-       type data-bytes ch0 ch1 ch2...
+``type data-bytes ch0 ch1 ch2...``
 where type is the TLV type value, the second argument is the total
 bytes (not the numbers) of channel values, and the rest are the
 position value for each channel.
 
-As a TLV type, either SNDRV_CTL_TLVT_CHMAP_FIXED,
-SNDRV_CTL_TLV_CHMAP_VAR or SNDRV_CTL_TLVT_CHMAP_PAIRED can be used.
-The _FIXED type is for a channel map with the fixed channel position
-while the latter two are for flexible channel positions.  _VAR type is
-for a channel map where all channels are freely swappable and _PAIRED
+As a TLV type, either ``SNDRV_CTL_TLVT_CHMAP_FIXED``,
+``SNDRV_CTL_TLV_CHMAP_VAR`` or ``SNDRV_CTL_TLVT_CHMAP_PAIRED`` can be used.
+The ``_FIXED`` type is for a channel map with the fixed channel position
+while the latter two are for flexible channel positions. ``_VAR`` type is
+for a channel map where all channels are freely swappable and ``_PAIRED``
 type is where pair-wise channels are swappable.  For example, when you
-have {FL/FR/RL/RR} channel map, _PAIRED type would allow you to swap
-only {RL/RR/FL/FR} while _VAR type would allow even swapping FL and
+have {FL/FR/RL/RR} channel map, ``_PAIRED`` type would allow you to swap
+only {RL/RR/FL/FR} while ``_VAR`` type would allow even swapping FL and
 RR.
 
-These new TLV types are defined in sound/tlv.h.
+These new TLV types are defined in ``sound/tlv.h``.
 
-The available channel position values are defined in sound/asound.h,
+The available channel position values are defined in ``sound/asound.h``,
 here is a cut:
 
-/* channel positions */
-enum {
+::
+
+  /* channel positions */
+  enum {
        SNDRV_CHMAP_UNKNOWN = 0,
        SNDRV_CHMAP_NA,         /* N/A, silent */
        SNDRV_CHMAP_MONO,       /* mono stream */
@@ -107,11 +113,13 @@ enum {
        SNDRV_CHMAP_TRR,        /* top rear right */
        SNDRV_CHMAP_TRC,        /* top rear center */
        SNDRV_CHMAP_LAST = SNDRV_CHMAP_TRC,
-};
+  };
 
 When a PCM stream can provide more than one channel map, you can
 provide multiple channel maps in a TLV container type.  The TLV data
 to be returned will contain such as:
+::
+
        SNDRV_CTL_TLVT_CONTAINER 96
            SNDRV_CTL_TLVT_CHMAP_FIXED 4 SNDRV_CHMAP_FC
            SNDRV_CTL_TLVT_CHMAP_FIXED 8 SNDRV_CHMAP_FL SNDRV_CHMAP_FR
@@ -120,19 +128,21 @@ to be returned will contain such as:
 
 The channel position is provided in LSB 16bits.  The upper bits are
 used for bit flags.
+::
 
-#define SNDRV_CHMAP_POSITION_MASK      0xffff
-#define SNDRV_CHMAP_PHASE_INVERSE      (0x01 << 16)
-#define SNDRV_CHMAP_DRIVER_SPEC                (0x02 << 16)
+       #define SNDRV_CHMAP_POSITION_MASK       0xffff
+       #define SNDRV_CHMAP_PHASE_INVERSE       (0x01 << 16)
+       #define SNDRV_CHMAP_DRIVER_SPEC         (0x02 << 16)
 
-SNDRV_CHMAP_PHASE_INVERSE indicates the channel is phase inverted,
+``SNDRV_CHMAP_PHASE_INVERSE`` indicates the channel is phase inverted,
 (thus summing left and right channels would result in almost silence).
 Some digital mic devices have this.
 
-When SNDRV_CHMAP_DRIVER_SPEC is set, all the channel position values
+When ``SNDRV_CHMAP_DRIVER_SPEC`` is set, all the channel position values
 don't follow the standard definition above but driver-specific.
 
-* READ OPERATION
+Read Operation
+--------------
 
 The control read operation is for providing the current channel map of
 the given stream.  The control element returns an integer array
@@ -140,9 +150,10 @@ containing the position of each channel.
 
 When this is performed before the number of the channel is specified
 (i.e. hw_params is set), it should return all channels set to
-UNKNOWN.
+``UNKNOWN``.
 
-* WRITE OPERATION
+Write Operation
+---------------
 
 The control write operation is optional, and only for devices that can
 change the channel configuration on the fly, such as HDMI.  User needs
index 362e1c23d51f91f782af2405d077dfad662eb013..dd4fcbcb2b923d534a90d9d84712ec13f26a7091 100644 (file)
@@ -4,5 +4,6 @@ Designs and Implementations
 .. toctree::
    :maxdepth: 2
 
+   channel-mapping-api
    procfile
    powersave