Lines Matching +full:- +full:- +full:config
2 * SPDX-License-Identifier: BSD-2-Clause
41 struct config { struct
63 * example, a 24-bit sample will be represented with 3 bytes. If you're porting
64 * an audio application from Linux, you should be aware that 24-bit samples on
67 * number_of_fragments - 1 late. That's called jitter tolerance.
84 oss_init(struct config *config) in oss_init() argument
89 if ((config->fd = open(config->device, config->mode)) < 0) in oss_init()
90 err(1, "Error opening the device %s", config->device); in oss_init()
93 if (ioctl(config->fd, SNDCTL_ENGINEINFO, &config->audio_info) < 0) in oss_init()
97 if (ioctl(config->fd, SNDCTL_DSP_GETCAPS, &config->audio_info.caps) < 0) in oss_init()
101 if (!(config->audio_info.caps & PCM_CAP_TRIGGER)) in oss_init()
105 if (config->mmap) { in oss_init()
106 if (!(config->audio_info.caps & PCM_CAP_MMAP)) in oss_init()
109 if (ioctl(config->fd, SNDCTL_DSP_COOKEDMODE, &tmp) < 0) in oss_init()
114 if (ioctl(config->fd, SNDCTL_DSP_SETFMT, &config->format) < 0) in oss_init()
118 if (ioctl(config->fd, SNDCTL_DSP_CHANNELS, &config->audio_info.max_channels) < 0) in oss_init()
122 if (ioctl(config->fd, SNDCTL_DSP_SPEED, &config->sample_rate) < 0) in oss_init()
126 switch (config->format) { in oss_init()
129 config->sample_size = 1; in oss_init()
135 config->sample_size = 2; in oss_init()
141 config->sample_size = 3; in oss_init()
149 config->sample_size = 4; in oss_init()
152 errx(1, "Invalid audio format %d", config->format); in oss_init()
161 * - For each sound(4)-created channel, there is a software-facing in oss_init()
162 * buffer, and a hardware-facing one. in oss_init()
163 * - The sizes of the buffers can be listed in the console with "sndctl in oss_init()
165 * - OSS ioctls only concern software-facing buffer fragments, not in oss_init()
173 * It is bound to do so at a fixed time frame, to avoid under- and in oss_init()
176 config->buffer_info.fragments = 2; in oss_init()
177 tmp = size2exp(config->sample_size * config->audio_info.max_channels); in oss_init()
178 tmp = ((config->buffer_info.fragments) << 16) | tmp; in oss_init()
179 if (ioctl(config->fd, SNDCTL_DSP_SETFRAGMENT, &tmp) < 0) in oss_init()
183 if ((config->mode & O_ACCMODE) == O_RDONLY) in oss_init()
185 if (ioctl(config->fd, request, &config->buffer_info) < 0) in oss_init()
187 if (config->buffer_info.fragments < 1) in oss_init()
188 config->buffer_info.fragments = config->buffer_info.fragstotal; in oss_init()
189 if (config->buffer_info.bytes < 1) in oss_init()
190 config->buffer_info.bytes = config->buffer_info.fragstotal * config->buffer_info.fragsize; in oss_init()
191 if (config->buffer_info.bytes < 1) { in oss_init()
193 config->buffer_info.bytes); in oss_init()
195 config->sample_count = config->buffer_info.bytes / config->sample_size; in oss_init()
196 config->chsamples = config->sample_count / config->audio_info.max_channels; in oss_init()
197 config->buf = malloc(config->buffer_info.bytes); in oss_init()
201 config->buffer_info.bytes, config->buffer_info.fragments, in oss_init()
202 config->buffer_info.fragsize, config->buffer_info.fragstotal, in oss_init()
203 config->sample_count); in oss_init()
206 switch (config->mode & O_ACCMODE) { in oss_init()
217 errx(1, "Invalid mode %d", config->mode); in oss_init()
220 if (ioctl(config->fd, SNDCTL_DSP_SETTRIGGER, &tmp) < 0) in oss_init()