xref: /third_party/alsa-lib/include/pcm_plugin.h (revision d5ac70f0)
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 */
56typedef 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 */
61typedef 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 */
69int 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);
73int _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 */
80int snd_pcm_copy_open(snd_pcm_t **pcmp, const char *name,
81		      snd_pcm_t *slave, int close_slave);
82int _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 */
89int 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);
92int _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 */
99int 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);
102int _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 */
109int 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);
112int _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 */
119int 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);
122int _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 */
129int 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);
132int _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 *  IEC958 subframe conversion plugin
138 */
139int snd_pcm_iec958_open(snd_pcm_t **pcmp, const char *name,
140			snd_pcm_format_t sformat, snd_pcm_t *slave,
141			int close_slave,
142			const unsigned char *status_bits,
143			const unsigned char *preamble_vals,
144			int hdmi_mode);
145int _snd_pcm_iec958_open(snd_pcm_t **pcmp, const char *name,
146			 snd_config_t *root, snd_config_t *conf,
147			 snd_pcm_stream_t stream, int mode);
148
149/*
150 *  Route plugin for linear formats
151 */
152int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *ttable,
153			      unsigned int tt_csize, unsigned int tt_ssize,
154			      unsigned int *tt_cused, unsigned int *tt_sused,
155			      int schannels);
156int snd_pcm_route_determine_ttable(snd_config_t *tt,
157				   unsigned int *tt_csize,
158				   unsigned int *tt_ssize);
159int snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
160		       snd_pcm_format_t sformat, int schannels,
161		       snd_pcm_route_ttable_entry_t *ttable,
162		       unsigned int tt_ssize,
163		       unsigned int tt_cused, unsigned int tt_sused,
164		       snd_pcm_t *slave, int close_slave);
165int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
166			snd_config_t *root, snd_config_t *conf,
167			snd_pcm_stream_t stream, int mode);
168
169/*
170 *  Rate plugin for linear formats
171 */
172int snd_pcm_rate_open(snd_pcm_t **pcmp, const char *name,
173		      snd_pcm_format_t sformat, unsigned int srate,
174		      const snd_config_t *converter,
175		      snd_pcm_t *slave, int close_slave);
176int _snd_pcm_rate_open(snd_pcm_t **pcmp, const char *name,
177		       snd_config_t *root, snd_config_t *conf,
178		       snd_pcm_stream_t stream, int mode);
179
180/*
181 *  Hooks plugin
182 */
183int snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name,
184		       snd_pcm_t *slave, int close_slave);
185int _snd_pcm_hooks_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 *  LADSPA plugin
191 */
192int snd_pcm_ladspa_open(snd_pcm_t **pcmp, const char *name,
193			const char *ladspa_path,
194			unsigned int channels,
195			snd_config_t *ladspa_pplugins,
196			snd_config_t *ladspa_cplugins,
197			snd_pcm_t *slave, int close_slave);
198int _snd_pcm_ladspa_open(snd_pcm_t **pcmp, const char *name,
199			 snd_config_t *root, snd_config_t *conf,
200			 snd_pcm_stream_t stream, int mode);
201
202/*
203 *  Jack plugin
204 */
205int snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name,
206					snd_config_t *playback_conf,
207					snd_config_t *capture_conf,
208		      snd_pcm_stream_t stream, int mode);
209int _snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name,
210                       snd_config_t *root, snd_config_t *conf,
211                       snd_pcm_stream_t stream, int mode);
212
213
214/** \} */
215
216#endif /* __ALSA_PCM_PLUGIN_H */
217