summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac38
-rw-r--r--m4/ioctl_request.m452
-rw-r--r--src/audio_out/audio_oss_out.c39
3 files changed, 85 insertions, 44 deletions
diff --git a/configure.ac b/configure.ac
index b0bb4c3f1..f2ca16e17 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1457,27 +1457,25 @@ dnl ---------------------------------------------
dnl OSS style audio interface
dnl ---------------------------------------------
AC_ARG_ENABLE([oss],
- AC_HELP_STRING([--disable-oss], [do not build OSS support]),
- [with_oss=$enableval], [with_oss=yes])
-
-if test "x$with_oss" = "xyes"; then
- AC_MSG_CHECKING(for OSS audio support)
- have_ossaudio=no
- AC_TRY_COMPILE([
- #ifdef __NetBSD__
- #include <soundcard.h>
- #else
- #include <sys/soundcard.h>
- #endif
- ],[
- int arg = SNDCTL_DSP_SETFRAGMENT;
- ],[
- have_ossaudio=yes
- ])
- AC_MSG_RESULT($have_ossaudio)
-else
- have_ossaudio=no
+ AS_HELP_STRING([--disable-oss], [Do not build OSS audio output support]))
+
+if test "x$enable_oss" != "xno"; then
+ AC_CHECK_HEADERS([sys/soundcard.h machine/soundcard.h soundcard.h], [break])
+ AC_CHECK_DECL([SNDCTL_DSP_SETFRAGMENT], [have_ossaudio=yes], [], [
+ #ifdef HAVE_SYS_SOUNDCARD_H
+ # include <sys/soundcard.h>
+ #endif
+ #ifdef HAVE_MACHINE_SOUNDCARD_H
+ # include <sys/soundcard.h>
+ #endif
+ #ifdef HAVE_SOUNDCARD_H
+ # include <soundcard.h>
+ #endif
+ ])
+
+ AC_IOCTL_REQUEST
fi
+
AM_CONDITIONAL(HAVE_OSS, test "x$have_ossaudio" = "xyes")
diff --git a/m4/ioctl_request.m4 b/m4/ioctl_request.m4
new file mode 100644
index 000000000..e5ea6d346
--- /dev/null
+++ b/m4/ioctl_request.m4
@@ -0,0 +1,52 @@
+dnl Simple macro to find the type of the ioctl request parameter
+dnl Copyright (c) 2007 xine project
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the xine project, as copyright owner of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by the xine project. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend
+dnl this special exception to the GPL to apply to your modified version as
+dnl well.
+
+
+dnl Usage AC_IOCTL_REQUEST
+AC_DEFUN([AC_IOCTL_REQUEST], [
+ AC_CACHE_CHECK([type of request parameter for ioctl()],
+ ac_cv_ioctl_request,
+ [for ac_ioctl_request_type in "unsigned long" "int"
+ do
+ AC_TRY_LINK([
+ #include <sys/ioctl.h>
+ int ioctl(int fd, $ac_ioctl_request_type request, ...);
+ ], [], [ac_cv_ioctl_request=$ac_ioctl_request_type])
+ done])
+
+ if test "x$ac_cv_ioctl_request" = "x"; then
+ AC_MSG_ERROR([Unable to determine the type for ioctl() request parameter])
+ fi
+
+ AC_DEFINE_UNQUOTED([IOCTL_REQUEST_TYPE], $ac_cv_ioctl_request, [Type of the request parameter for ioctl()])
+])
diff --git a/src/audio_out/audio_oss_out.c b/src/audio_out/audio_oss_out.c
index 12a52b997..793b47650 100644
--- a/src/audio_out/audio_oss_out.c
+++ b/src/audio_out/audio_oss_out.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: audio_oss_out.c,v 1.119 2007/03/16 17:13:57 dgp85 Exp $
+ * $Id: audio_oss_out.c,v 1.120 2007/03/17 06:59:31 dgp85 Exp $
*
* 20-8-2001 First implementation of Audio sync and Audio driver separation.
* Copyright (C) 2001 James Courtier-Dutton James@superbug.demon.co.uk
@@ -48,20 +48,19 @@
#include <fcntl.h>
#include <math.h>
#include <unistd.h>
-#if defined(__OpenBSD__)
-# include <soundcard.h>
-#elif defined (__FreeBSD__)
-# if __FreeBSD__ < 4
-# include <machine/soundcard.h>
-# else
-# include <sys/soundcard.h>
-# endif
-#else
-# include <sys/soundcard.h>
-#endif
#include <sys/ioctl.h>
#include <inttypes.h>
+#ifdef HAVE_SYS_SOUNDCARD_H
+# include <sys/soundcard.h>
+#endif
+#ifdef HAVE_MACHINE_SOUNDCARD_H
+# include <sys/soundcard.h>
+#endif
+#ifdef HAVE_SOUNDCARD_H
+# include <soundcard.h>
+#endif
+
#define LOG_MODULE "audio_oss_out"
#define LOG_VERBOSE
/*
@@ -86,8 +85,7 @@
#endif
#ifndef AFMT_S16_NE
-# if defined(sparc) || defined(__sparc__) || defined(PPC)
-/* Big endian machines */
+# ifdef WORDS_BIGENDIAN
# define AFMT_S16_NE AFMT_S16_BE
# else
# define AFMT_S16_NE AFMT_S16_LE
@@ -115,13 +113,6 @@
#define OSS_SYNC_SOFTSYNC 3
#define OSS_SYNC_PROBEBUFFER 4
-/* On FreeBSD the request type is unsigned long rather than int */
-#ifdef __FreeBSD__
-typedef unsigned long ioctl_request_t;
-#else
-typedef int ioctl_request_t;
-#endif
-
typedef struct oss_driver_s {
ao_driver_t ao_driver;
@@ -532,7 +523,7 @@ static int ao_oss_get_property (ao_driver_t *this_gen, int property) {
if(!this->mixer.mute) {
if(this->mixer.fd != -1) {
- ioctl_request_t cmd = 0;
+ IOCTL_REQUEST_TYPE cmd = 0;
int v;
ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs);
@@ -571,7 +562,7 @@ static int ao_oss_set_property (ao_driver_t *this_gen, int property, int value)
if(!this->mixer.mute) {
if(this->mixer.fd != -1) {
- ioctl_request_t cmd = 0;
+ IOCTL_REQUEST_TYPE cmd = 0;
int v;
ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs);
@@ -600,7 +591,7 @@ static int ao_oss_set_property (ao_driver_t *this_gen, int property, int value)
if(this->mixer.mute) {
if(this->mixer.fd != -1) {
- ioctl_request_t cmd = 0;
+ IOCTL_REQUEST_TYPE cmd = 0;
int v = 0;
ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs);