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