$OpenBSD: patch-tools_celtdec_c,v 1.1.1.1 2010/12/02 22:16:02 dcoppa Exp $ Use sndio for audio --- tools/celtdec.c.orig Thu Dec 2 08:16:46 2010 +++ tools/celtdec.c Thu Dec 2 08:17:40 2010 @@ -70,6 +70,9 @@ #include #include +#elif defined USE_SNDIO +#include + #elif defined HAVE_SYS_AUDIOIO_H #include #include @@ -92,6 +95,10 @@ ((buf[base+1]<<8)&0xff00)| \ (buf[base]&0xff)) +#ifdef USE_SNDIO +struct sio_hdl *hdl; +#endif + static void print_comments(char *comments, int length) { char *c=comments; @@ -187,6 +194,32 @@ FILE *out_file_open(char *outFile, int rate, int *chan exit(1); } fout = fdopen(audio_fd, "w"); +#elif defined USE_SNDIO + struct sio_par par; + + hdl = sio_open(NULL, SIO_PLAY, 0); + if (!hdl) + { + fprintf(stderr, "Cannot open sndio device\n"); + exit(1); + } + + sio_initpar(&par); + par.sig = 1; + par.bits = 16; + par.rate = rate; + par.pchan = *channels; + + if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par) || + par.sig != 1 || par.bits != 16 || par.rate != rate) { + fprintf(stderr, "could not set sndio parameters\n"); + exit(1); + } + *channels = par.pchan; + if (!sio_start(hdl)) { + fprintf(stderr, "could not start sndio\n"); + exit(1); + } #elif defined HAVE_SYS_AUDIOIO_H audio_info_t info; int audio_fd; @@ -615,6 +648,10 @@ int main(int argc, char **argv) #if defined WIN32 || defined _WIN32 if (strlen(outFile)==0) WIN_Play_Samples (out+frame_offset*channels, sizeof(short) * new_frame_size*channels); + else +#elif defined USE_SNDIO + if (strlen(outFile)==0) + sio_write (hdl, out+frame_offset*channels, sizeof(short) * new_frame_size*channels); else #endif fwrite(out+frame_offset*channels, sizeof(short), new_frame_size*channels, fout);