Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/alsa/pcm_extplug.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /** | |
2 * \file include/pcm_extplug.h | |
3 * \brief External Filter-Plugin SDK | |
4 * \author Takashi Iwai <tiwai@suse.de> | |
5 * \date 2005 | |
6 * | |
7 * External Filter-Plugin SDK | |
8 */ | |
9 | |
10 /* | |
11 * ALSA external PCM plugin SDK (draft version) | |
12 * | |
13 * Copyright (c) 2005 Takashi Iwai <tiwai@suse.de> | |
14 * | |
15 * This library is free software; you can redistribute it and/or modify | |
16 * it under the terms of the GNU Lesser General Public License as | |
17 * published by the Free Software Foundation; either version 2.1 of | |
18 * the License, or (at your option) any later version. | |
19 * | |
20 * This program is distributed in the hope that it will be useful, | |
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
23 * GNU Lesser General Public License for more details. | |
24 * | |
25 * You should have received a copy of the GNU Lesser General Public | |
26 * License along with this library; if not, write to the Free Software | |
27 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
28 * | |
29 */ | |
30 | |
31 #ifndef __ALSA_PCM_EXTPLUG_H | |
32 #define __ALSA_PCM_EXTPLUG_H | |
33 | |
34 /** | |
35 * \defgroup PCM_ExtPlug External Filter plugin SDK | |
36 * \ingroup Plugin_SDK | |
37 * See the \ref pcm page for more details. | |
38 * \{ | |
39 */ | |
40 | |
41 /** hw constraints for extplug */ | |
42 enum { | |
43 SND_PCM_EXTPLUG_HW_FORMAT, /**< format */ | |
44 SND_PCM_EXTPLUG_HW_CHANNELS, /**< channels */ | |
45 SND_PCM_EXTPLUG_HW_PARAMS /**< max number of hw constraints */ | |
46 }; | |
47 | |
48 /** Handle of external filter plugin */ | |
49 typedef struct snd_pcm_extplug snd_pcm_extplug_t; | |
50 /** Callback table of extplug */ | |
51 typedef struct snd_pcm_extplug_callback snd_pcm_extplug_callback_t; | |
52 #ifdef DOC_HIDDEN | |
53 /* redefine typedefs for stupid doxygen */ | |
54 typedef snd_pcm_extplug snd_pcm_extplug_t; | |
55 typedef snd_pcm_extplug_callback snd_pcm_extplug_callback_t; | |
56 #endif | |
57 | |
58 /* | |
59 * Protocol version | |
60 */ | |
61 #define SND_PCM_EXTPLUG_VERSION_MAJOR 1 /**< Protocol major version */ | |
62 #define SND_PCM_EXTPLUG_VERSION_MINOR 0 /**< Protocol minor version */ | |
63 #define SND_PCM_EXTPLUG_VERSION_TINY 2 /**< Protocol tiny version */ | |
64 /** | |
65 * Filter-plugin protocol version | |
66 */ | |
67 #define SND_PCM_EXTPLUG_VERSION ((SND_PCM_EXTPLUG_VERSION_MAJOR<<16) |\ | |
68 (SND_PCM_EXTPLUG_VERSION_MINOR<<8) |\ | |
69 (SND_PCM_EXTPLUG_VERSION_TINY)) | |
70 | |
71 /** Handle of extplug */ | |
72 struct snd_pcm_extplug { | |
73 /** | |
74 * protocol version; #SND_PCM_EXTPLUG_VERSION must be filled here | |
75 * before calling #snd_pcm_extplug_create() | |
76 */ | |
77 unsigned int version; | |
78 /** | |
79 * name of this plugin; must be filled before calling #snd_pcm_extplug_create() | |
80 */ | |
81 const char *name; | |
82 /** | |
83 * callbacks of this plugin; must be filled before calling #snd_pcm_extplug_create() | |
84 */ | |
85 const snd_pcm_extplug_callback_t *callback; | |
86 /** | |
87 * private data, which can be used freely in the driver callbacks | |
88 */ | |
89 void *private_data; | |
90 /** | |
91 * PCM handle filled by #snd_pcm_extplug_create() | |
92 */ | |
93 snd_pcm_t *pcm; | |
94 /** | |
95 * stream direction; read-only status | |
96 */ | |
97 snd_pcm_stream_t stream; | |
98 /** | |
99 * format hw parameter; filled after hw_params is caled | |
100 */ | |
101 snd_pcm_format_t format; | |
102 /** | |
103 * subformat hw parameter; filled after hw_params is caled | |
104 */ | |
105 snd_pcm_subformat_t subformat; | |
106 /** | |
107 * channels hw parameter; filled after hw_params is caled | |
108 */ | |
109 unsigned int channels; | |
110 /** | |
111 * rate hw parameter; filled after hw_params is caled | |
112 */ | |
113 unsigned int rate; | |
114 /** | |
115 * slave_format hw parameter; filled after hw_params is caled | |
116 */ | |
117 snd_pcm_format_t slave_format; | |
118 /** | |
119 * slave_subformat hw parameter; filled after hw_params is caled | |
120 */ | |
121 snd_pcm_subformat_t slave_subformat; | |
122 /** | |
123 * slave_channels hw parameter; filled after hw_params is caled | |
124 */ | |
125 unsigned int slave_channels; | |
126 }; | |
127 | |
128 /** Callback table of extplug */ | |
129 struct snd_pcm_extplug_callback { | |
130 /** | |
131 * transfer between source and destination; this is a required callback | |
132 */ | |
133 snd_pcm_sframes_t (*transfer)(snd_pcm_extplug_t *ext, | |
134 const snd_pcm_channel_area_t *dst_areas, | |
135 snd_pcm_uframes_t dst_offset, | |
136 const snd_pcm_channel_area_t *src_areas, | |
137 snd_pcm_uframes_t src_offset, | |
138 snd_pcm_uframes_t size); | |
139 /** | |
140 * close the PCM; optional | |
141 */ | |
142 int (*close)(snd_pcm_extplug_t *ext); | |
143 /** | |
144 * hw_params; optional | |
145 */ | |
146 int (*hw_params)(snd_pcm_extplug_t *ext, snd_pcm_hw_params_t *params); | |
147 /** | |
148 * hw_free; optional | |
149 */ | |
150 int (*hw_free)(snd_pcm_extplug_t *ext); | |
151 /** | |
152 * dump; optional | |
153 */ | |
154 void (*dump)(snd_pcm_extplug_t *ext, snd_output_t *out); | |
155 /** | |
156 * init; optional initialization called at prepare or reset | |
157 */ | |
158 int (*init)(snd_pcm_extplug_t *ext); | |
159 /** | |
160 * query the channel maps; optional; since v1.0.2 | |
161 */ | |
162 snd_pcm_chmap_query_t **(*query_chmaps)(snd_pcm_extplug_t *ext); | |
163 /** | |
164 * get the channel map; optional; since v1.0.2 | |
165 */ | |
166 snd_pcm_chmap_t *(*get_chmap)(snd_pcm_extplug_t *ext); | |
167 /** | |
168 * set the channel map; optional; since v1.0.2 | |
169 */ | |
170 int (*set_chmap)(snd_pcm_extplug_t *ext, const snd_pcm_chmap_t *map); | |
171 }; | |
172 | |
173 | |
174 int snd_pcm_extplug_create(snd_pcm_extplug_t *ext, const char *name, | |
175 snd_config_t *root, snd_config_t *slave_conf, | |
176 snd_pcm_stream_t stream, int mode); | |
177 int snd_pcm_extplug_delete(snd_pcm_extplug_t *ext); | |
178 | |
179 /* clear hw_parameter setting */ | |
180 void snd_pcm_extplug_params_reset(snd_pcm_extplug_t *ext); | |
181 | |
182 /* hw_parameter setting */ | |
183 int snd_pcm_extplug_set_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list); | |
184 int snd_pcm_extplug_set_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max); | |
185 int snd_pcm_extplug_set_slave_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list); | |
186 int snd_pcm_extplug_set_slave_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max); | |
187 int snd_pcm_extplug_set_param_link(snd_pcm_extplug_t *extplug, int type, | |
188 int keep_link); | |
189 | |
190 /** | |
191 * set the parameter constraint with a single value | |
192 */ | |
193 static __inline__ int snd_pcm_extplug_set_param(snd_pcm_extplug_t *extplug, int type, unsigned int val) | |
194 { | |
195 return snd_pcm_extplug_set_param_list(extplug, type, 1, &val); | |
196 } | |
197 | |
198 /** | |
199 * set the parameter constraint for slave PCM with a single value | |
200 */ | |
201 static __inline__ int snd_pcm_extplug_set_slave_param(snd_pcm_extplug_t *extplug, int type, unsigned int val) | |
202 { | |
203 return snd_pcm_extplug_set_slave_param_list(extplug, type, 1, &val); | |
204 } | |
205 | |
206 /** \} */ | |
207 | |
208 #endif /* __ALSA_PCM_EXTPLUG_H */ |