From 4af95e6d1963e319ed6bb1681a332ad654bdd1ef Mon Sep 17 00:00:00 2001 From: Guenter Geiger Date: Sun, 22 Feb 2004 16:00:02 +0000 Subject: merged in version 0.37-1test6 svn path=/trunk/; revision=1329 --- pd/src/s_audio_oss.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) (limited to 'pd/src/s_audio_oss.c') diff --git a/pd/src/s_audio_oss.c b/pd/src/s_audio_oss.c index 63fe0ed1..f0a86a45 100644 --- a/pd/src/s_audio_oss.c +++ b/pd/src/s_audio_oss.c @@ -5,18 +5,7 @@ /* this file inputs and outputs audio using the OSS API available on linux. */ -#ifdef __linux__ #include -#endif - -#ifdef __FreeBSD__ -#include -#include -#endif - - - - #include "m_pd.h" #include "s_stuff.h" @@ -276,7 +265,7 @@ static int oss_setchannels(int fd, int wantchannels, char *devname) return (0); } -#define O_AUDIOFLAG 0 /* O_NDELAY */ +#define O_AUDIOFLAG O_NDELAY int oss_open_audio(int nindev, int *indev, int nchin, int *chin, int noutdev, int *outdev, int nchout, int *chout, int rate) @@ -284,7 +273,7 @@ int oss_open_audio(int nindev, int *indev, int nchin, int *chin, int capabilities = 0; int inchannels = 0, outchannels = 0; char devname[20]; - int n, i, fd; + int n, i, fd, flags; char buf[OSS_MAXSAMPLEWIDTH * DEFDACBLKSIZE * OSS_MAXCHPERDEV]; int num_devs = 0; int wantmore=0; @@ -331,6 +320,12 @@ int oss_open_audio(int nindev, int *indev, int nchin, int *chin, } else { + if (fcntl(fd, F_SETFD, 1) < 0) + post("couldn't set close-on-exec flag on audio"); + if ((flags = fcntl(fd, F_GETFL)) < 0) + post("couldn't get audio device flags"); + else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0) + post("couldn't set audio device flags"); if (sys_verbose) post("opened %s for reading and writing\n", devname); linux_adcs[inindex].d_fd = fd; @@ -346,6 +341,12 @@ int oss_open_audio(int nindev, int *indev, int nchin, int *chin, devname, strerror(errno)); break; } + if (fcntl(fd, F_SETFD, 1) < 0) + post("couldn't set close-on-exec flag on audio"); + if ((flags = fcntl(fd, F_GETFL)) < 0) + post("couldn't get audio device flags"); + else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0) + post("couldn't set audio device flags"); if (sys_verbose) post("opened %s for writing only\n", devname); } @@ -405,7 +406,7 @@ int oss_open_audio(int nindev, int *indev, int nchin, int *chin, /* perhaps it's already open from the above? */ if (linux_dacs[n].d_fd >= 0) { - fd = linux_dacs[n].d_fd; + fd = linux_adcs[n].d_fd; alreadyopened = 1; } else @@ -416,6 +417,12 @@ int oss_open_audio(int nindev, int *indev, int nchin, int *chin, post("%s (readonly): %s", devname, strerror(errno)); goto end_in_loop; } + if (fcntl(fd, F_SETFD, 1) < 0) + post("couldn't set close-on-exec flag on audio"); + if ((flags = fcntl(fd, F_GETFL)) < 0) + post("couldn't get audio device flags"); + else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0) + post("couldn't set audio device flags"); if (sys_verbose) post("opened %s for reading only\n", devname); } @@ -789,14 +796,12 @@ int oss_send_dacs(void) for (i = DEFDACBLKSIZE,fp1 = sys_soundin + thischan*DEFDACBLKSIZE, sp = (t_oss_int16 *)buf; i--; fp1++, sp += nchannels) { - for (j=0;j