- int stereo = (config->sample_format.channels == 2), format, rate;
- if(ioctl(ossfd, SNDCTL_DSP_STEREO, &stereo) < 0) {
- error(errno, "error calling ioctl SNDCTL_DSP_STEREO %d", stereo);
- goto failed;
- }
- /* TODO we need to think about where we decide this */
- if(config->sample_format.bits == 8)
- format = AFMT_U8;
- else if(config->sample_format.bits == 16)
- format = (config->sample_format.endian == ENDIAN_LITTLE
- ? AFMT_S16_LE : AFMT_S16_BE);
- else
- fatal(0, "unsupported sample_format for oss backend");
- if(ioctl(oss_fd, SNDCTL_DSP_SETFMT, &format) < 0)
- fatal(errno, "error calling ioctl SNDCTL_DSP_SETFMT %#x", format);
- rate = config->sample_format.rate;
- if(ioctl(oss_fd, SNDCTL_DSP_SPEED, &rate) < 0)
- fatal(errno, "error calling ioctl SNDCTL_DSP_SPEED %d", rate);
- if((unsigned)rate != config->sample_format.rate)
- error(0, "asked for %luHz, got %dHz",
- (unsigned long)config->sample_format.rate, rate);
- if(ioctl(oss_fd, SNDCTL_DSP_GETBLKSIZE, &oss_bufsize) < 0) {
- error(errno, "ioctl SNDCTL_DSP_GETBLKSIZE");
- oss_bufsize = 2048; /* guess */
- }
+ /* We could SNDCTL_DSP_GETBLKSIZE but only when the device is already open,
+ * which is kind of inconvenient. We go with 1-4Kbyte for now. */
+ uaudio_thread_start(callback, userdata, oss_play,
+ 32 / uaudio_sample_size,
+ 4096 / uaudio_sample_size);