Update of /cvsroot/alsa/alsa-lib/src/pcm
In directory sc8-pr-cvs1:/tmp/cvs-serv5317

Modified Files:
        pcm_dmix.c pcm_dshare.c pcm_dsnoop.c pcm_hooks.c pcm_multi.c 
        pcm_share.c 
Log Message:
added more documents and examples about plugins.


Index: pcm_dmix.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dmix.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- pcm_dmix.c  17 Sep 2003 17:09:45 -0000      1.43
+++ pcm_dmix.c  23 Oct 2003 14:42:47 -0000      1.44
@@ -958,6 +958,74 @@
 }
 \endcode
 
+<code>ipc_key</code> specfies the unique IPC key in integer.
+This number must be unique for each different dmix definition,
+since the shared memory is created with this key number.
+When <code>ipc_key_add_uid</code> is set true, the uid value is
+added to the value set in <code>ipc_key</code>.  This will
+avoid the confliction of the same IPC key with different users
+concurrently.
+
+Note that the dmix plugin itself supports only a single configuration.
+That is, it supports only the fixed rate (default 48000), format
+(\c S16), channels (2), and period_time (125000).
+For using other configuration, you have to set the value explicitly
+in the slave PCM definition.  The rate, format and channels can be
+covered by an additional \ref pcm_plugins_dmix "plug plugin",
+but there is only one base configuration, anyway.
+
+An example configuration for setting 44100 Hz, \c S32_LE format
+as the slave PCM of "hw:0" is like below:
+\code
+pcm.dmix_44 {
+       type dmix
+       ipc_key 321456  # any unique value
+       ipc_key_add_uid true
+       slave {
+               pcm "hw:0"
+               format S32_LE
+               rate 44100
+       }
+}
+\endcode
+You can hear 48000 Hz samples still using this dmix pcm via plug plugin
+like:
+\code
+% aplay -Dplug:dmix_44 foo_48k.wav
+\endcode
+
+For using the dmix plugin for OSS emulation device, you have to set
+the period and the buffer sizes in power of two.  For example,
+\code
+pcm.dmixoss {
+       type dmix
+       ipc_key 321456  # any unique value
+       ipc_key_add_uid true
+       slave {
+               pcm "hw:0"
+               period_time 0
+               period_size 1024  # must be power of 2
+               buffer_size 8192  # ditto
+       }
+}
+\endcode
+<code>period_time 0</code> must be set, too, for resetting the
+default value.  In the case of soundcards with multi-channel IO,
+adding the bindings would help
+\code
+pcm.dmixoss {
+       ...
+       bindings {
+               0 0   # map from 0 to 0
+               1 1   # map from 1 to 1
+       }
+}
+\endcode
+so that only the first two channels are used by dmix.
+Also, note that ICE1712 have the limited buffer size, 5513 frames
+(corresponding to 640 kB).  In this case, reduce the buffer_size
+to 4096.
+
 \subsection pcm_plugins_dmix_funcref Function reference
 
 <UL>

Index: pcm_dshare.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dshare.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- pcm_dshare.c        2 Sep 2003 10:32:33 -0000       1.9
+++ pcm_dshare.c        23 Oct 2003 14:42:47 -0000      1.10
@@ -681,6 +681,11 @@
 \section pcm_plugins_dshare Plugin: dshare
 
 This plugin provides sharing channels.
+Unlike \ref pcm_plugins_share "share plugin", this plugin doesn't need
+the explicit server program but accesses the shared buffer concurrently
+from each client as well as \ref pcm_plugins_dmix "dmix" and
+\ref pcm_plugins_dsnoop "dsnoop" plugins do.
+The parameters below are almost identical with these plugins.
 
 \code
 pcm.name {

Index: pcm_dsnoop.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dsnoop.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- pcm_dsnoop.c        2 Sep 2003 10:32:33 -0000       1.9
+++ pcm_dsnoop.c        23 Oct 2003 14:42:47 -0000      1.10
@@ -632,6 +632,10 @@
 \section pcm_plugins_snoop Plugin: dsnoop
 
 This plugin splits one capture stream to more.
+It works the reverse way of \ref pcm_plugins_dmix "dmix plugin",
+reading the shared capture buffer from many clients concurrently.
+The meaning of parameters below are almost identical with
+dmix plugin.
 
 \code
 pcm.name {

Index: pcm_hooks.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_hooks.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- pcm_hooks.c 25 Jul 2003 17:02:03 -0000      1.30
+++ pcm_hooks.c 23 Oct 2003 14:42:47 -0000      1.31
@@ -370,6 +370,11 @@
 
 \section pcm_plugins_hooks Plugin: hooks
 
+This plugin is used to call some 'hook' function when this plugin is opened,
+modified or closed.
+Typically, it is used to change control values for a certain state
+specially for the PCM (see the example below).
+
 \code
 # Hook arguments definition
 hook_args.NAME {
@@ -418,6 +423,7 @@
                                name "Wave Surround Playback Volume"
                                preserve true
                                lock true
+                               optional true
                                value [ 0 0 ]
                        }
                        {
@@ -429,6 +435,15 @@
                ]
        }
 \endcode
+Here, the controls "Wave Surround Playback Volume" and "EMU10K1 PCM Send Volume"
+are set to the given values when this pcm is accessed.  Since these controls
+take multi-dimensional values, the <code>value</code> field is written as
+an array.
+When <code>preserve</code> is true, the old values are saved and restored
+when the pcm is closed.  The <code>lock</code> means that the control is
+locked during this pcm is opened, and cannot be changed by others.
+When <code>optional</code> is set, no error is returned but ignored
+even if the specified control doesn't exist.
 
 \subsection pcm_plugins_hooks_funcref Function reference
 

Index: pcm_multi.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_multi.c,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -r1.84 -r1.85
--- pcm_multi.c 25 Jul 2003 17:02:03 -0000      1.84
+++ pcm_multi.c 23 Oct 2003 14:42:47 -0000      1.85
@@ -765,6 +765,43 @@
 }
 \endcode
 
+For example, to bind two PCM streams with two-channel stereo (hw:0,0 and
+hw:0,1) as one 4-channel stereo PCM stream, define like this:
+\code
+pcm.quad {
+       type multi
+
+       slaves.a.pcm "hw:0,0"
+       slaves.a.channels 2
+       slaves.b.pcm "hw:0,1"
+       slaves.b.channels 2
+
+       bindings.0.slave a
+       bindings.0.channel 0
+       bindings.1.slave a
+       bindings.1.channel 1
+       bindings.2.slave b
+       bindings.2.channel 0
+       bindings.3.slave b
+       bindings.3.channel 1
+}
+\endcode
+Note that the resultant pcm "quad" is not in the interleaved format
+but in the "complex" format.  Hence, it's not accessible by applications
+which can handle only the interleaved (or the non-interleaved) format.
+In such a case, wrap this PCM with \ref pcm_plugins_route "route" or
+\ref pcm_plugins_plug "plug" plugin.
+\code
+pcm.quad2 {
+       type route
+       slave.pcm "quad"
+       ttable.0.0 1
+       ttable.1.1 1
+       ttable.2.2 1
+       ttable.3.3 1
+}
+\endcode
+
 \subsection pcm_plugins_multi_funcref Function reference
 
 <UL>

Index: pcm_share.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_share.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -r1.76 -r1.77
--- pcm_share.c 25 Jul 2003 17:02:04 -0000      1.76
+++ pcm_share.c 23 Oct 2003 14:42:47 -0000      1.77
@@ -1503,6 +1503,10 @@
 second one. If you are looking for a mixing plugin, use the
 \ref pcm_plugins_dmix "dmix plugin".
 
+The difference from \ref pcm_plugins_dshare "dshare plugin" is that
+share plugin requires the server program "aserver", while dshare plugin
+doesn't need the explicit server but access to the shared buffer.
+
 \code
 pcm.name {
         type share              # Share PCM



-------------------------------------------------------
This SF.net email is sponsored by: The SF.net Donation Program.
Do you like what SourceForge.net is doing for the Open
Source Community?  Make a contribution, and help us add new
features and functionality. Click here: http://sourceforge.net/donate/
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to