Lines Matching +full:convert +full:- +full:channels
2 * SPDX-License-Identifier: BSD-2-Clause
70 int channels; member
84 * Error state is indicated by value=-1 in which case application exits with
90 if (value == -1) in check_error()
108 * Split input buffer into channels. Input buffer is in interleaved format
109 * which means if we have 2 channels (L and R), this is what the buffer of 8
110 * samples would contain: L,R,L,R,L,R,L,R. The result are two channels
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()
126 * Convert channels into interleaved format and place it in output
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()
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()
179 * Set number of channels. If number of channels is chosen to the value 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()
220 * If desired frag is smaller than minimum, based on number of channels 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()
258 .channels = -1, in main()
260 .frag = -1, in main()
263 .buffer_info.fragments = -1, in main()
276 sample_t *channels = malloc(bytes); in main() local
292 oss_split(&config, (sample_t *)ibuf, channels); in main()
294 oss_merge(&config, channels, (sample_t *)obuf); in main()
304 free(channels); in main()