Lines Matching refs:config
68 typedef struct config { struct
114 oss_split(config_t *config, sample_t *input, sample_t *output) in oss_split() argument
118 for (i = 0; i < config->sample_count; ++i) { in oss_split()
119 channel = i % config->channels; in oss_split()
120 index = i / config->channels; in oss_split()
130 oss_merge(config_t *config, sample_t *input, sample_t *output) in oss_merge() argument
134 for (channel = 0; channel < config->channels; ++channel) { in oss_merge()
135 for (index = 0; index < config->chsamples; ++index) { in oss_merge()
136 output[index * config->channels + channel] = in oss_merge()
143 oss_init(config_t *config) in oss_init() argument
148 config->fd = open(config->device, O_RDWR); in oss_init()
149 check_error(config->fd, "open"); in oss_init()
152 config->audio_info.dev = -1; in oss_init()
153 error = ioctl(config->fd, SNDCTL_ENGINEINFO, &(config->audio_info)); in oss_init()
155 printf("min_channels: %d\n", config->audio_info.min_channels); in oss_init()
156 printf("max_channels: %d\n", config->audio_info.max_channels); in oss_init()
157 printf("latency: %d\n", config->audio_info.latency); in oss_init()
158 printf("handle: %s\n", config->audio_info.handle); in oss_init()
159 if (config->audio_info.min_rate > config->sample_rate || in oss_init()
160 config->sample_rate > config->audio_info.max_rate) { in oss_init()
162 config->device, config->sample_rate); in oss_init()
164 if (config->channels < 1) in oss_init()
165 config->channels = config->audio_info.max_channels; in oss_init()
173 if (config->mmap) { in oss_init()
175 ioctl(config->fd, SNDCTL_DSP_COOKEDMODE, &tmp); in oss_init()
182 tmp = config->channels; in oss_init()
183 error = ioctl(config->fd, SNDCTL_DSP_CHANNELS, &tmp); in oss_init()
186 if (tmp != config->channels) { in oss_init()
188 "to %d!\n", config->device, config->channels, tmp); in oss_init()
190 config->channels = tmp; in oss_init()
193 tmp = config->format; in oss_init()
194 error = ioctl(config->fd, SNDCTL_DSP_SETFMT, &tmp); in oss_init()
196 if (tmp != config->format) { in oss_init()
198 config->device); in oss_init()
202 tmp = config->sample_rate; in oss_init()
203 error = ioctl(config->fd, SNDCTL_DSP_SPEED, &tmp); in oss_init()
207 error = ioctl(config->fd, SNDCTL_DSP_GETCAPS, &(config->audio_info.caps)); in oss_init()
209 if (!(config->audio_info.caps & PCM_CAP_DUPLEX)) in oss_init()
212 if (config->mmap) { in oss_init()
213 if (!(config->audio_info.caps & PCM_CAP_TRIGGER)) in oss_init()
215 if (!(config->audio_info.caps & PCM_CAP_MMAP)) in oss_init()
225 min_frag = size2frag(config->sample_size * config->channels); in oss_init()
227 if (config->frag < min_frag) in oss_init()
228 config->frag = min_frag; in oss_init()
234 if (config->buffer_info.fragments < 0) in oss_init()
235 config->buffer_info.fragments = 2; in oss_init()
236 tmp = ((config->buffer_info.fragments) << 16) | config->frag; in oss_init()
237 error = ioctl(config->fd, SNDCTL_DSP_SETFRAGMENT, &tmp); in oss_init()
241 error = ioctl(config->fd, SNDCTL_DSP_GETOSPACE, &(config->buffer_info)); in oss_init()
243 if (config->buffer_info.bytes < 1) { in oss_init()
245 config->buffer_info.bytes); in oss_init()
247 config->sample_count = config->buffer_info.bytes / config->sample_size; in oss_init()
248 config->chsamples = config->sample_count / config->channels; in oss_init()
256 config_t config = { in main() local
268 oss_init(&config); in main()
273 bytes = config.buffer_info.bytes; in main()
280 bytes, config.buffer_info.fragments, in main()
281 config.buffer_info.fragsize, config.buffer_info.fragstotal, in main()
282 config.sample_count); in main()
286 ret = read(config.fd, ibuf, bytes); in main()
292 oss_split(&config, (sample_t *)ibuf, channels); in main()
294 oss_merge(&config, channels, (sample_t *)obuf); in main()
295 ret = write(config.fd, obuf, bytes); in main()
307 close(config.fd); in main()