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 * IEC958 subframe conversion plugin 138 */ 139 int 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); 145 int _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 */ 152 int 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); 156 int snd_pcm_route_determine_ttable(snd_config_t *tt, 157 unsigned int *tt_csize, 158 unsigned int *tt_ssize); 159 int 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); 165 int _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 */ 172 int 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); 176 int _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 */ 183 int snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name, 184 snd_pcm_t *slave, int close_slave); 185 int _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 */ 192 int 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); 198 int _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 */ 205 int 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); 209 int _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