diff options
Diffstat (limited to 'src/audioOutput_oss.c')
-rw-r--r-- | src/audioOutput_oss.c | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/src/audioOutput_oss.c b/src/audioOutput_oss.c deleted file mode 100644 index c677c90d2..000000000 --- a/src/audioOutput_oss.c +++ /dev/null @@ -1,200 +0,0 @@ -/* the Music Player Daemon (MPD) - * (c)2003-2004 by Warren Dukes (shank@mercury.chem.pitt.edu) - * This project's homepage is: http://www.musicpd.org - * - * OSS audio output (c) 2004 by Eric Wong <eric@petta-tech.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "../config.h" -#include "audioOutput.h" - -#include <stdlib.h> - -#ifdef HAVE_OSS - -#include "conf.h" -#include "log.h" -#include "sig_handlers.h" - -#include <string.h> -#include <assert.h> -#include <signal.h> - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <fcntl.h> -#include <unistd.h> -#include <errno.h> - -#if defined(__OpenBSD__) || defined(__NetBSD__) -# include <soundcard.h> -#else /* !(defined(__OpenBSD__) || defined(__NetBSD__) */ -# include <sys/soundcard.h> -#endif /* !(defined(__OpenBSD__) || defined(__NetBSD__) */ - -typedef struct _OssData { - int fd; - char * device; -} OssData; - -static OssData * newOssData() { - OssData * ret = malloc(sizeof(OssData)); - - ret->device = NULL; - ret->fd = -1; - - return ret; -} - -static void freeOssData(OssData * od) { - if(od->device) free(od->device); - - free(od); -} - -static int oss_initDriver(AudioOutput * audioOutput, ConfigParam * param) { - BlockParam * bp = getBlockParam(param, "device"); - OssData * od = newOssData(); - - audioOutput->data = od; - - if(!bp) { - int fd; - - if(0 <= (fd = open("/dev/sound/dsp", O_WRONLY))) { - od->device = strdup("/dev/sound/dsp"); - close(fd); - } - else if(0 <= (fd = open("/dev/dsp", O_WRONLY))) { - od->device = strdup("/dev/dsp"); - close(fd); - } - else { - ERROR("Error trying to open default OSS device " - "specified at line %i\n", param->line); - ERROR("Specify a OSS device and/or check your " - "permissions\n"); - exit(EXIT_FAILURE); - } - - od->fd = -1; - - return 0; - } - - od->device = strdup(bp->value); - - return 0; -} - -static void oss_finishDriver(AudioOutput * audioOutput) { - OssData * od = audioOutput->data; - - freeOssData(od); -} - -static int oss_openDevice(AudioOutput * audioOutput, AudioFormat * audioFormat) -{ - OssData * od = audioOutput->data; -#ifdef WORDS_BIGENDIAN - int i = AFMT_S16_BE; -#else - int i = AFMT_S16_LE; -#endif - - if((od->fd = open(od->device, O_WRONLY)) < 0) - goto fail; - if(ioctl(od->fd, SNDCTL_DSP_SETFMT, &i)) - goto fail; - if(ioctl(od->fd, SNDCTL_DSP_CHANNELS, &audioFormat->channels)) - goto fail; - if(ioctl(od->fd, SNDCTL_DSP_SPEED, &audioFormat->sampleRate)) - goto fail; - if(ioctl(od->fd, SNDCTL_DSP_SAMPLESIZE, &audioFormat->bits)) - goto fail; - /*i = 1; if (ioctl(od->fd,SNDCTL_DSP_STEREO,&i)) err != 32; */ - - audioOutput->open = 1; - - return 0; - -fail: - if(od->fd >= 0) close(od->fd); - audioOutput->open = 0; - ERROR("Error opening OSS device \"%s\": %s\n", od->device, - strerror(errno)); - return -1; -} - -static void oss_closeDevice(AudioOutput * audioOutput) { - OssData * od = audioOutput->data; - - if(od->fd >= 0) { - close(od->fd); - od->fd = -1; - } - - audioOutput->open = 0; -} - -static int oss_playAudio(AudioOutput * audioOutput, char * playChunk, - int size) -{ - OssData * od = audioOutput->data; - int ret; - - while (size > 0) { - ret = write(od->fd, playChunk, size); - if(ret<0) { - ERROR("closing audio device due to write error\n"); - oss_closeDevice(audioOutput); - return -1; - } - playChunk += ret; - size -= ret; - } - - return 0; -} - -AudioOutputPlugin ossPlugin = -{ - "oss", - oss_initDriver, - oss_finishDriver, - oss_openDevice, - oss_playAudio, - oss_closeDevice, - NULL /* sendMetadataFunc */ -}; - -#else /* HAVE OSS */ - -AudioOutputPlugin ossPlugin = -{ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL /* sendMetadataFunc */ -}; - -#endif /* HAVE_OSS */ - - |