summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_oss.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-09-23 21:04:37 +0200
committerwm4 <wm4@nowhere>2014-09-23 23:09:25 +0200
commitb745c2d0050468580aec0a4e12aec854fefd1796 (patch)
tree0df9a9f56b339cabc68376840b4d283b848acdf8 /audio/out/ao_oss.c
parent5b5a3d0c469fa5e282b60eb9ac2b7e4414640d80 (diff)
downloadmpv-b745c2d0050468580aec0a4e12aec854fefd1796.tar.bz2
mpv-b745c2d0050468580aec0a4e12aec854fefd1796.tar.xz
audio: drop swapped-endian audio formats
Until now, the audio chain could handle both little endian and big endian formats. This actually doesn't make much sense, since the audio API and the HW will most likely prefer native formats. Or at the very least, it should be trivial for audio drivers to do the byte swapping themselves. From now on, the audio chain contains native-endian formats only. All AOs and some filters are adjusted. af_convertsignendian.c is now wrongly named, but the filter name is adjusted. In some cases, the audio infrastructure was reused on the demuxer side, but that is relatively easy to rectify. This is a quite intrusive and radical change. It's possible that it will break some things (especially if they're obscure or not Linux), so watch out for regressions. It's probably still better to do it the bulldozer way, since slow transition and researching foreign platforms would take a lot of time and effort.
Diffstat (limited to 'audio/out/ao_oss.c')
-rw-r--r--audio/out/ao_oss.c58
1 files changed, 33 insertions, 25 deletions
diff --git a/audio/out/ao_oss.c b/audio/out/ao_oss.c
index b78f244a7b..de71017432 100644
--- a/audio/out/ao_oss.c
+++ b/audio/out/ao_oss.c
@@ -40,6 +40,7 @@
#include "options/options.h"
#include "common/msg.h"
#include "osdep/timer.h"
+#include "osdep/endian.h"
#if HAVE_SYS_SOUNDCARD_H
#include <sys/soundcard.h>
@@ -89,39 +90,46 @@ static const struct mp_chmap oss_layouts[MP_NUM_CHANNELS + 1] = {
MP_CHMAP8(FL, FR, BL, BR, FC, LFE, SL, SR), // 7.1
};
-static const int format_table[][2] = {
- {AFMT_U8, AF_FORMAT_U8},
- {AFMT_S8, AF_FORMAT_S8},
- {AFMT_U16_LE, AF_FORMAT_U16_LE},
- {AFMT_U16_BE, AF_FORMAT_U16_BE},
- {AFMT_S16_LE, AF_FORMAT_S16_LE},
- {AFMT_S16_BE, AF_FORMAT_S16_BE},
-#ifdef AFMT_S24_PACKED
- {AFMT_S24_PACKED, AF_FORMAT_S24_LE},
+#if !defined(AFMT_S16_NE) && defined(AFMT_S16_LE) && defined(AFMT_S16_BE)
+#define AFMT_S16_NE MP_SELECT_LE_BE(AFMT_S16_LE, AFMT_S16_BE)
#endif
-#ifdef AFMT_U24_LE
- {AFMT_U24_LE, AF_FORMAT_U24_LE},
+
+#if !defined(AFMT_U16_NE) && defined(AFMT_U16_LE) && defined(AFMT_U16_BE)
+#define AFMT_U16_NE MP_SELECT_LE_BE(AFMT_U16_LE, AFMT_U16_BE)
#endif
-#ifdef AFMT_U24_BE
- {AFMT_U24_BE, AF_FORMAT_U24_BE},
+
+#if !defined(AFMT_U24_NE) && defined(AFMT_U24_LE) && defined(AFMT_U24_BE)
+#define AFMT_U24_NE MP_SELECT_LE_BE(AFMT_U24_LE, AFMT_U24_BE)
#endif
-#ifdef AFMT_S24_LE
- {AFMT_S24_LE, AF_FORMAT_S24_LE},
+
+#if !defined(AFMT_S24_NE) && defined(AFMT_S24_LE) && defined(AFMT_S24_BE)
+#define AFMT_S24_NE MP_SELECT_LE_BE(AFMT_S24_LE, AFMT_S24_BE)
#endif
-#ifdef AFMT_S24_BE
- {AFMT_S24_BE, AF_FORMAT_S24_BE},
+
+#if !defined(AFMT_U32_NE) && defined(AFMT_U32_LE) && defined(AFMT_U32_BE)
+#define AFMT_U32MP_SELECT_LE_BE(AFMT_U32_LE, AFMT_U32_BE)
#endif
-#ifdef AFMT_U32_LE
- {AFMT_U32_LE, AF_FORMAT_U32_LE},
+
+#if !defined(AFMT_S32_NE) && defined(AFMT_S32_LE) && defined(AFMT_S32_BE)
+#define AFMT_S32MP_SELECT_LE_BE(AFMT_S32_LE, AFMT_S32_BE)
+#endif
+
+static const int format_table[][2] = {
+ {AFMT_U8, AF_FORMAT_U8},
+ {AFMT_S8, AF_FORMAT_S8},
+ {AFMT_U16_NE, AF_FORMAT_U16},
+ {AFMT_S16_NE, AF_FORMAT_S16},
+#ifdef AFMT_U24_NE
+ {AFMT_U24_NE, AF_FORMAT_U24},
#endif
-#ifdef AFMT_U32_BE
- {AFMT_U32_BE, AF_FORMAT_U32_BE},
+#ifdef AFMT_S24_NE
+ {AFMT_S24_NE, AF_FORMAT_S24},
#endif
-#ifdef AFMT_S32_LE
- {AFMT_S32_LE, AF_FORMAT_S32_LE},
+#ifdef AFMT_U32_NE
+ {AFMT_U32_NE, AF_FORMAT_U32},
#endif
-#ifdef AFMT_S32_BE
- {AFMT_S32_BE, AF_FORMAT_S32_BE},
+#ifdef AFMT_S32_NE
+ {AFMT_S32_NE, AF_FORMAT_S32},
#endif
#ifdef AFMT_FLOAT
{AFMT_FLOAT, AF_FORMAT_FLOAT},