00001
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __ALSA_PCM_EXTPLUG_H
00032 #define __ALSA_PCM_EXTPLUG_H
00033
00042 enum {
00043 SND_PCM_EXTPLUG_HW_FORMAT,
00044 SND_PCM_EXTPLUG_HW_CHANNELS,
00045 SND_PCM_EXTPLUG_HW_PARAMS
00046 };
00047
00049 typedef struct snd_pcm_extplug snd_pcm_extplug_t;
00051 typedef struct snd_pcm_extplug_callback snd_pcm_extplug_callback_t;
00052 #ifdef DOC_HIDDEN
00053
00054 typedef snd_pcm_extplug snd_pcm_extplug_t;
00055 typedef snd_pcm_extplug_callback snd_pcm_extplug_callback_t;
00056 #endif
00057
00058
00059
00060
00061 #define SND_PCM_EXTPLUG_VERSION_MAJOR 1
00062 #define SND_PCM_EXTPLUG_VERSION_MINOR 0
00063 #define SND_PCM_EXTPLUG_VERSION_TINY 2
00067 #define SND_PCM_EXTPLUG_VERSION ((SND_PCM_EXTPLUG_VERSION_MAJOR<<16) |\
00068 (SND_PCM_EXTPLUG_VERSION_MINOR<<8) |\
00069 (SND_PCM_EXTPLUG_VERSION_TINY))
00070
00072 struct snd_pcm_extplug {
00077 unsigned int version;
00081 const char *name;
00085 const snd_pcm_extplug_callback_t *callback;
00089 void *private_data;
00093 snd_pcm_t *pcm;
00097 snd_pcm_stream_t stream;
00101 snd_pcm_format_t format;
00105 snd_pcm_subformat_t subformat;
00109 unsigned int channels;
00113 unsigned int rate;
00117 snd_pcm_format_t slave_format;
00121 snd_pcm_subformat_t slave_subformat;
00125 unsigned int slave_channels;
00126 };
00127
00129 struct snd_pcm_extplug_callback {
00133 snd_pcm_sframes_t (*transfer)(snd_pcm_extplug_t *ext,
00134 const snd_pcm_channel_area_t *dst_areas,
00135 snd_pcm_uframes_t dst_offset,
00136 const snd_pcm_channel_area_t *src_areas,
00137 snd_pcm_uframes_t src_offset,
00138 snd_pcm_uframes_t size);
00142 int (*close)(snd_pcm_extplug_t *ext);
00146 int (*hw_params)(snd_pcm_extplug_t *ext, snd_pcm_hw_params_t *params);
00150 int (*hw_free)(snd_pcm_extplug_t *ext);
00154 void (*dump)(snd_pcm_extplug_t *ext, snd_output_t *out);
00158 int (*init)(snd_pcm_extplug_t *ext);
00162 snd_pcm_chmap_query_t **(*query_chmaps)(snd_pcm_extplug_t *ext);
00166 snd_pcm_chmap_t *(*get_chmap)(snd_pcm_extplug_t *ext);
00170 int (*set_chmap)(snd_pcm_extplug_t *ext, const snd_pcm_chmap_t *map);
00171 };
00172
00173
00174 int snd_pcm_extplug_create(snd_pcm_extplug_t *ext, const char *name,
00175 snd_config_t *root, snd_config_t *slave_conf,
00176 snd_pcm_stream_t stream, int mode);
00177 int snd_pcm_extplug_delete(snd_pcm_extplug_t *ext);
00178
00179
00180 void snd_pcm_extplug_params_reset(snd_pcm_extplug_t *ext);
00181
00182
00183 int snd_pcm_extplug_set_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list);
00184 int snd_pcm_extplug_set_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max);
00185 int snd_pcm_extplug_set_slave_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list);
00186 int snd_pcm_extplug_set_slave_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max);
00187
00191 static __inline__ int snd_pcm_extplug_set_param(snd_pcm_extplug_t *extplug, int type, unsigned int val)
00192 {
00193 return snd_pcm_extplug_set_param_list(extplug, type, 1, &val);
00194 }
00195
00199 static __inline__ int snd_pcm_extplug_set_slave_param(snd_pcm_extplug_t *extplug, int type, unsigned int val)
00200 {
00201 return snd_pcm_extplug_set_slave_param_list(extplug, type, 1, &val);
00202 }
00203
00206 #endif