42ded441c6
celt 0.11.x is broken in a subtle way.
72 lines
2.1 KiB
Plaintext
72 lines
2.1 KiB
Plaintext
$OpenBSD: patch-tools_celtdec_c,v 1.3 2011/04/05 14:17:55 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 <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
|
|
+#elif defined USE_SNDIO
|
|
+#include <sndio.h>
|
|
+
|
|
#elif defined HAVE_SYS_AUDIOIO_H
|
|
#include <sys/types.h>
|
|
#include <fcntl.h>
|
|
@@ -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);
|