1 /**
2  * \file include/pcm_plugin.h
3  * \brief Common PCM plugin code
4  * \author Abramo Bagnara <abramo@alsa-project.org>
5  * \author Jaroslav Kysela <perex@perex.cz>
6  * \date 2000-2001
7  *
8  * Application interface library for the ALSA driver.
9  * See the \ref pcm_plugins page for more details.
10  *
11  * \warning Using of contents of this header file might be dangerous
12  *	    in the sense of compatibility reasons. The contents might be
13  *	    freely changed in future.
14  */
15 /*
16  *   This library is free software; you can redistribute it and/or modify
17  *   it under the terms of the GNU Lesser General Public License as
18  *   published by the Free Software Foundation; either version 2.1 of
19  *   the License, or (at your option) any later version.
20  *
21  *   This program is distributed in the hope that it will be useful,
22  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
23  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24  *   GNU Lesser General Public License for more details.
25  *
26  *   You should have received a copy of the GNU Lesser General Public
27  *   License along with this library; if not, write to the Free Software
28  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
29  *
30  */
31 
32 #ifndef __ALSA_PCM_PLUGIN_H
33 #define __ALSA_PCM_PLUGIN_H
34 
35 /**
36  * \defgroup PCM_Plugins PCM Plugins
37  * \ingroup PCM
38  * See the \ref pcm_plugins page for more details.
39  * \{
40  */
41 
42 #define SND_PCM_PLUGIN_RATE_MIN 4000	/**< minimal rate for the rate plugin */
43 #define SND_PCM_PLUGIN_RATE_MAX 768000	/**< maximal rate for the rate plugin */
44 
45 /* ROUTE_FLOAT should be set to 0 for machines without FP unit - like iPAQ */
46 #ifdef HAVE_SOFT_FLOAT
47 #define SND_PCM_PLUGIN_ROUTE_FLOAT 0	   /**< use integers for route plugin */
48 #else
49 #define SND_PCM_PLUGIN_ROUTE_FLOAT 1	   /**< use floats for route plugin */
50 #endif
51 
52 #define SND_PCM_PLUGIN_ROUTE_RESOLUTION 16 /**< integer resolution for route plugin */
53 
54 #if SND_PCM_PLUGIN_ROUTE_FLOAT
55 /** route ttable entry type */
56 typedef float snd_pcm_route_ttable_entry_t;
57 #define SND_PCM_PLUGIN_ROUTE_HALF 0.5	/**< half value */
58 #define SND_PCM_PLUGIN_ROUTE_FULL 1.0	/**< full value */
59 #else
60 /** route ttable entry type */
61 typedef int snd_pcm_route_ttable_entry_t;
62 #define SND_PCM_PLUGIN_ROUTE_HALF (SND_PCM_PLUGIN_ROUTE_RESOLUTION / 2)	/**< half value */
63 #define SND_PCM_PLUGIN_ROUTE_FULL SND_PCM_PLUGIN_ROUTE_RESOLUTION	/**< full value */
64 #endif
65 
66 /*
67  *  Hardware plugin
68  */
69 int snd_pcm_hw_open(snd_pcm_t **pcmp, const char *name,
70 		    int card, int device, int subdevice,
71 		    snd_pcm_stream_t stream, int mode,
72 		    int mmap_emulation, int sync_ptr_ioctl);
73 int _snd_pcm_hw_open(snd_pcm_t **pcmp, const char *name,
74 		     snd_config_t *root ATTRIBUTE_UNUSED, snd_config_t *conf,
75 		     snd_pcm_stream_t stream, int mode);
76 
77 /*
78  *  Copy plugin
79  */
80 int snd_pcm_copy_open(snd_pcm_t **pcmp, const char *name,
81 		      snd_pcm_t *slave, int close_slave);
82 int _snd_pcm_copy_open(snd_pcm_t **pcmp, const char *name,
83 		       snd_config_t *root, snd_config_t *conf,
84                        snd_pcm_stream_t stream, int mode);
85 
86 /*
87  *  Linear conversion plugin
88  */
89 int snd_pcm_linear_open(snd_pcm_t **pcmp, const char *name,
90 			snd_pcm_format_t sformat, snd_pcm_t *slave,
91 			int close_slave);
92 int _snd_pcm_linear_open(snd_pcm_t **pcmp, const char *name,
93 			 snd_config_t *root, snd_config_t *conf,
94 			 snd_pcm_stream_t stream, int mode);
95 
96 /*
97  *  Linear<->Float conversion plugin
98  */
99 int snd_pcm_lfloat_open(snd_pcm_t **pcmp, const char *name,
100 			snd_pcm_format_t sformat, snd_pcm_t *slave,
101 			int close_slave);
102 int _snd_pcm_lfloat_open(snd_pcm_t **pcmp, const char *name,
103 			 snd_config_t *root, snd_config_t *conf,
104 			 snd_pcm_stream_t stream, int mode);
105 
106 /*
107  *  Linear<->mu-Law conversion plugin
108  */
109 int snd_pcm_mulaw_open(snd_pcm_t **pcmp, const char *name,
110 		       snd_pcm_format_t sformat, snd_pcm_t *slave,
111 		       int close_slave);
112 int _snd_pcm_mulaw_open(snd_pcm_t **pcmp, const char *name,
113 			snd_config_t *root, snd_config_t *conf,
114                         snd_pcm_stream_t stream, int mode);
115 
116 /*
117  *  Linear<->a-Law conversion plugin
118  */
119 int snd_pcm_alaw_open(snd_pcm_t **pcmp, const char *name,
120 		      snd_pcm_format_t sformat, snd_pcm_t *slave,
121 		      int close_slave);
122 int _snd_pcm_alaw_open(snd_pcm_t **pcmp, const char *name,
123 		       snd_config_t *root, snd_config_t *conf,
124 		       snd_pcm_stream_t stream, int mode);
125 
126 /*
127  *  Linear<->Ima-ADPCM conversion plugin
128  */
129 int snd_pcm_adpcm_open(snd_pcm_t **pcmp, const char *name,
130 		       snd_pcm_format_t sformat, snd_pcm_t *slave,
131 		       int close_slave);
132 int _snd_pcm_adpcm_open(snd_pcm_t **pcmp, const char *name,
133 			snd_config_t *root, snd_config_t *conf,
134 			snd_pcm_stream_t stream, int mode);
135 
136 /*
137  *  Route plugin for linear formats
138  */
139 int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *ttable,
140 			      unsigned int tt_csize, unsigned int tt_ssize,
141 			      unsigned int *tt_cused, unsigned int *tt_sused,
142 			      int schannels);
143 int snd_pcm_route_determine_ttable(snd_config_t *tt,
144 				   unsigned int *tt_csize,
145 				   unsigned int *tt_ssize);
146 int snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
147 		       snd_pcm_format_t sformat, int schannels,
148 		       snd_pcm_route_ttable_entry_t *ttable,
149 		       unsigned int tt_ssize,
150 		       unsigned int tt_cused, unsigned int tt_sused,
151 		       snd_pcm_t *slave, int close_slave);
152 int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
153 			snd_config_t *root, snd_config_t *conf,
154 			snd_pcm_stream_t stream, int mode);
155 
156 /*
157  *  Rate plugin for linear formats
158  */
159 int snd_pcm_rate_open(snd_pcm_t **pcmp, const char *name,
160 		      snd_pcm_format_t sformat, unsigned int srate,
161 		      const snd_config_t *converter,
162 		      snd_pcm_t *slave, int close_slave);
163 int _snd_pcm_rate_open(snd_pcm_t **pcmp, const char *name,
164 		       snd_config_t *root, snd_config_t *conf,
165 		       snd_pcm_stream_t stream, int mode);
166 
167 /*
168  *  Hooks plugin
169  */
170 int snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name,
171 		       snd_pcm_t *slave, int close_slave);
172 int _snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name,
173 			snd_config_t *root, snd_config_t *conf,
174 			snd_pcm_stream_t stream, int mode);
175 
176 /*
177  *  LADSPA plugin
178  */
179 int snd_pcm_ladspa_open(snd_pcm_t **pcmp, const char *name,
180 			const char *ladspa_path,
181 			unsigned int channels,
182 			snd_config_t *ladspa_pplugins,
183 			snd_config_t *ladspa_cplugins,
184 			snd_pcm_t *slave, int close_slave);
185 int _snd_pcm_ladspa_open(snd_pcm_t **pcmp, const char *name,
186 			 snd_config_t *root, snd_config_t *conf,
187 			 snd_pcm_stream_t stream, int mode);
188 
189 /*
190  *  Jack plugin
191  */
192 int snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name,
193 					snd_config_t *playback_conf,
194 					snd_config_t *capture_conf,
195 		      snd_pcm_stream_t stream, int mode);
196 int _snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name,
197                        snd_config_t *root, snd_config_t *conf,
198                        snd_pcm_stream_t stream, int mode);
199 
200 
201 /** \} */
202 
203 #endif /* __ALSA_PCM_PLUGIN_H */
204