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