summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-11-07 22:12:44 +0100
committerwm4 <wm4@nowhere>2013-11-07 22:13:20 +0100
commitd74bac22b94196b99dd9c3b8df63af4fd2755b7d (patch)
tree2a538a28ed66ecd1fa6e06771b8d641e83fdd39b /audio
parent91626b1c0606afb9bb582070e8a444a3ba8395ab (diff)
downloadmpv-d74bac22b94196b99dd9c3b8df63af4fd2755b7d.tar.bz2
mpv-d74bac22b94196b99dd9c3b8df63af4fd2755b7d.tar.xz
audio/format: convert format macros to enum, drop NE suffix
Turn the sample format definitions into an enum. (The format bits are still macros.) The native endian versions of the new definitions don't have a NE suffix anymore, although there are still compatibility defines since too much code uses the NE variants. Rename the format bits for special formats to help to distinguish them from the actual definitions, e.g. AF_FORMAT_AC3 to AF_FORMAT_S_AC3.
Diffstat (limited to 'audio')
-rw-r--r--audio/format.c55
-rw-r--r--audio/format.h136
2 files changed, 96 insertions, 95 deletions
diff --git a/audio/format.c b/audio/format.c
index 01c9a431a1..b933d07e16 100644
--- a/audio/format.c
+++ b/audio/format.c
@@ -62,41 +62,30 @@ int af_fmt_change_bits(int format, int bits)
return af_fmt_is_valid(format) ? format : 0;
}
+#define FMT(string, id) \
+ {string, id},
+
+#define FMT_ENDIAN(string, id) \
+ {string, id}, \
+ {string "ne", id}, \
+ {string "le", MP_CONCAT(id, _LE)}, \
+ {string "be", MP_CONCAT(id, _BE)}, \
+
const struct af_fmt_entry af_fmtstr_table[] = {
- { "mpeg2", AF_FORMAT_MPEG2 },
- { "ac3le", AF_FORMAT_AC3_LE },
- { "ac3be", AF_FORMAT_AC3_BE },
- { "ac3ne", AF_FORMAT_AC3_NE },
- { "iec61937le", AF_FORMAT_IEC61937_LE },
- { "iec61937be", AF_FORMAT_IEC61937_BE },
- { "iec61937ne", AF_FORMAT_IEC61937_NE },
+ FMT("mpeg2", AF_FORMAT_MPEG2)
+ FMT_ENDIAN("ac3", AF_FORMAT_AC3)
+ FMT_ENDIAN("iec61937", AF_FORMAT_IEC61937)
- { "u8", AF_FORMAT_U8 },
- { "s8", AF_FORMAT_S8 },
- { "u16le", AF_FORMAT_U16_LE },
- { "u16be", AF_FORMAT_U16_BE },
- { "u16ne", AF_FORMAT_U16_NE },
- { "s16le", AF_FORMAT_S16_LE },
- { "s16be", AF_FORMAT_S16_BE },
- { "s16ne", AF_FORMAT_S16_NE },
- { "u24le", AF_FORMAT_U24_LE },
- { "u24be", AF_FORMAT_U24_BE },
- { "u24ne", AF_FORMAT_U24_NE },
- { "s24le", AF_FORMAT_S24_LE },
- { "s24be", AF_FORMAT_S24_BE },
- { "s24ne", AF_FORMAT_S24_NE },
- { "u32le", AF_FORMAT_U32_LE },
- { "u32be", AF_FORMAT_U32_BE },
- { "u32ne", AF_FORMAT_U32_NE },
- { "s32le", AF_FORMAT_S32_LE },
- { "s32be", AF_FORMAT_S32_BE },
- { "s32ne", AF_FORMAT_S32_NE },
- { "floatle", AF_FORMAT_FLOAT_LE },
- { "floatbe", AF_FORMAT_FLOAT_BE },
- { "floatne", AF_FORMAT_FLOAT_NE },
- { "doublele", AF_FORMAT_DOUBLE_LE },
- { "doublebe", AF_FORMAT_DOUBLE_BE },
- { "doublene", AF_FORMAT_DOUBLE_NE },
+ FMT("u8", AF_FORMAT_U8)
+ FMT("s8", AF_FORMAT_S8)
+ FMT_ENDIAN("u16", AF_FORMAT_U16)
+ FMT_ENDIAN("s16", AF_FORMAT_S16)
+ FMT_ENDIAN("u24", AF_FORMAT_U24)
+ FMT_ENDIAN("s24", AF_FORMAT_S24)
+ FMT_ENDIAN("u32", AF_FORMAT_U32)
+ FMT_ENDIAN("s32", AF_FORMAT_S32)
+ FMT_ENDIAN("float", AF_FORMAT_FLOAT)
+ FMT_ENDIAN("double", AF_FORMAT_DOUBLE)
{0}
};
diff --git a/audio/format.h b/audio/format.h
index 6ec435b6b7..3a80a601c5 100644
--- a/audio/format.h
+++ b/audio/format.h
@@ -27,16 +27,18 @@
#include "config.h"
#include "mpvcore/bstr.h"
+#if BYTE_ORDER == BIG_ENDIAN
+#define AF_SELECT_LE_BE(LE, BE) BE
+#else
+#define AF_SELECT_LE_BE(LE, BE) LE
+#endif
+
// Endianness
#define AF_FORMAT_BE (0<<0) // Big Endian
#define AF_FORMAT_LE (1<<0) // Little Endian
#define AF_FORMAT_END_MASK (1<<0)
-#if BYTE_ORDER == BIG_ENDIAN
-#define AF_FORMAT_NE AF_FORMAT_BE
-#else
-#define AF_FORMAT_NE AF_FORMAT_LE
-#endif
+#define AF_FORMAT_NE AF_SELECT_LE_BE(AF_FORMAT_LE, AF_FORMAT_BE)
// Signed/unsigned
#define AF_FORMAT_SI (0<<1) // Signed
@@ -52,9 +54,9 @@
#define AF_FORMAT_BITS_MASK (7<<3)
// Special flags refering to non pcm data (note: 1<<6, 2<<6, 5<<6 unused)
-#define AF_FORMAT_MPEG2 (3<<6) // MPEG(2) audio
-#define AF_FORMAT_AC3 (4<<6) // Dolby Digital AC3
-#define AF_FORMAT_IEC61937 (6<<6)
+#define AF_FORMAT_S_MPEG2 (3<<6) // MPEG(2) audio
+#define AF_FORMAT_S_AC3 (4<<6) // Dolby Digital AC3
+#define AF_FORMAT_S_IEC61937 (6<<6)
#define AF_FORMAT_SPECIAL_MASK (7<<6)
// Fixed or floating point
@@ -66,61 +68,71 @@
// PREDEFINED formats
-#define AF_FORMAT_U8 (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_8BIT|AF_FORMAT_NE)
-#define AF_FORMAT_S8 (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_8BIT|AF_FORMAT_NE)
-#define AF_FORMAT_U16_LE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_16BIT|AF_FORMAT_LE)
-#define AF_FORMAT_U16_BE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_16BIT|AF_FORMAT_BE)
-#define AF_FORMAT_S16_LE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_16BIT|AF_FORMAT_LE)
-#define AF_FORMAT_S16_BE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_16BIT|AF_FORMAT_BE)
-#define AF_FORMAT_U24_LE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_24BIT|AF_FORMAT_LE)
-#define AF_FORMAT_U24_BE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_24BIT|AF_FORMAT_BE)
-#define AF_FORMAT_S24_LE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_24BIT|AF_FORMAT_LE)
-#define AF_FORMAT_S24_BE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_24BIT|AF_FORMAT_BE)
-#define AF_FORMAT_U32_LE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_32BIT|AF_FORMAT_LE)
-#define AF_FORMAT_U32_BE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_32BIT|AF_FORMAT_BE)
-#define AF_FORMAT_S32_LE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_32BIT|AF_FORMAT_LE)
-#define AF_FORMAT_S32_BE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_32BIT|AF_FORMAT_BE)
-
-#define AF_FORMAT_FLOAT_LE (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_LE)
-#define AF_FORMAT_FLOAT_BE (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_BE)
-
-#define AF_FORMAT_DOUBLE_LE (AF_FORMAT_F|AF_FORMAT_64BIT|AF_FORMAT_LE)
-#define AF_FORMAT_DOUBLE_BE (AF_FORMAT_F|AF_FORMAT_64BIT|AF_FORMAT_BE)
-
-#define AF_FORMAT_AC3_LE (AF_FORMAT_AC3|AF_FORMAT_16BIT|AF_FORMAT_LE)
-#define AF_FORMAT_AC3_BE (AF_FORMAT_AC3|AF_FORMAT_16BIT|AF_FORMAT_BE)
-
-#define AF_FORMAT_IEC61937_LE (AF_FORMAT_IEC61937|AF_FORMAT_16BIT|AF_FORMAT_LE)
-#define AF_FORMAT_IEC61937_BE (AF_FORMAT_IEC61937|AF_FORMAT_16BIT|AF_FORMAT_BE)
-
-#if BYTE_ORDER == BIG_ENDIAN
-#define AF_FORMAT_U16_NE AF_FORMAT_U16_BE
-#define AF_FORMAT_S16_NE AF_FORMAT_S16_BE
-#define AF_FORMAT_U24_NE AF_FORMAT_U24_BE
-#define AF_FORMAT_S24_NE AF_FORMAT_S24_BE
-#define AF_FORMAT_U32_NE AF_FORMAT_U32_BE
-#define AF_FORMAT_S32_NE AF_FORMAT_S32_BE
-#define AF_FORMAT_FLOAT_NE AF_FORMAT_FLOAT_BE
-#define AF_FORMAT_DOUBLE_NE AF_FORMAT_DOUBLE_BE
-#define AF_FORMAT_AC3_NE AF_FORMAT_AC3_BE
-#define AF_FORMAT_IEC61937_NE AF_FORMAT_IEC61937_BE
-#else
-#define AF_FORMAT_U16_NE AF_FORMAT_U16_LE
-#define AF_FORMAT_S16_NE AF_FORMAT_S16_LE
-#define AF_FORMAT_U24_NE AF_FORMAT_U24_LE
-#define AF_FORMAT_S24_NE AF_FORMAT_S24_LE
-#define AF_FORMAT_U32_NE AF_FORMAT_U32_LE
-#define AF_FORMAT_S32_NE AF_FORMAT_S32_LE
-#define AF_FORMAT_FLOAT_NE AF_FORMAT_FLOAT_LE
-#define AF_FORMAT_DOUBLE_NE AF_FORMAT_DOUBLE_LE
-#define AF_FORMAT_AC3_NE AF_FORMAT_AC3_LE
-#define AF_FORMAT_IEC61937_NE AF_FORMAT_IEC61937_LE
-#endif
-
-#define AF_FORMAT_UNKNOWN 0
+// actual sample formats
+enum af_format {
+ AF_FORMAT_UNKNOWN = 0,
+
+ AF_FORMAT_U8 = (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_8BIT|AF_FORMAT_NE),
+ AF_FORMAT_S8 = (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_8BIT|AF_FORMAT_NE),
+ AF_FORMAT_U16_LE = (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_16BIT|AF_FORMAT_LE),
+ AF_FORMAT_U16_BE = (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_16BIT|AF_FORMAT_BE),
+ AF_FORMAT_S16_LE = (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_16BIT|AF_FORMAT_LE),
+ AF_FORMAT_S16_BE = (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_16BIT|AF_FORMAT_BE),
+ AF_FORMAT_U24_LE = (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_24BIT|AF_FORMAT_LE),
+ AF_FORMAT_U24_BE = (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_24BIT|AF_FORMAT_BE),
+ AF_FORMAT_S24_LE = (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_24BIT|AF_FORMAT_LE),
+ AF_FORMAT_S24_BE = (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_24BIT|AF_FORMAT_BE),
+ AF_FORMAT_U32_LE = (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_32BIT|AF_FORMAT_LE),
+ AF_FORMAT_U32_BE = (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_32BIT|AF_FORMAT_BE),
+ AF_FORMAT_S32_LE = (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_32BIT|AF_FORMAT_LE),
+ AF_FORMAT_S32_BE = (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_32BIT|AF_FORMAT_BE),
+
+ AF_FORMAT_FLOAT_LE = (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_LE),
+ AF_FORMAT_FLOAT_BE = (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_BE),
+
+ AF_FORMAT_DOUBLE_LE = (AF_FORMAT_F|AF_FORMAT_64BIT|AF_FORMAT_LE),
+ AF_FORMAT_DOUBLE_BE = (AF_FORMAT_F|AF_FORMAT_64BIT|AF_FORMAT_BE),
+
+ AF_FORMAT_AC3_LE = (AF_FORMAT_S_AC3|AF_FORMAT_16BIT|AF_FORMAT_LE),
+ AF_FORMAT_AC3_BE = (AF_FORMAT_S_AC3|AF_FORMAT_16BIT|AF_FORMAT_BE),
+
+ AF_FORMAT_IEC61937_LE = (AF_FORMAT_S_IEC61937|AF_FORMAT_16BIT|AF_FORMAT_LE),
+ AF_FORMAT_IEC61937_BE = (AF_FORMAT_S_IEC61937|AF_FORMAT_16BIT|AF_FORMAT_BE),
+
+ AF_FORMAT_MPEG2 = (AF_FORMAT_S_MPEG2),
+
+ // Native endian variants
+ AF_FORMAT_U16 = AF_SELECT_LE_BE(AF_FORMAT_U16_LE, AF_FORMAT_U16_BE),
+ AF_FORMAT_S16 = AF_SELECT_LE_BE(AF_FORMAT_S16_LE, AF_FORMAT_S16_BE),
+ AF_FORMAT_U24 = AF_SELECT_LE_BE(AF_FORMAT_U24_LE, AF_FORMAT_U24_BE),
+ AF_FORMAT_S24 = AF_SELECT_LE_BE(AF_FORMAT_S24_LE, AF_FORMAT_S24_BE),
+ AF_FORMAT_U32 = AF_SELECT_LE_BE(AF_FORMAT_U32_LE, AF_FORMAT_U32_BE),
+ AF_FORMAT_S32 = AF_SELECT_LE_BE(AF_FORMAT_S32_LE, AF_FORMAT_S32_BE),
+
+ AF_FORMAT_FLOAT = AF_SELECT_LE_BE(AF_FORMAT_FLOAT_LE, AF_FORMAT_FLOAT_BE),
+ AF_FORMAT_DOUBLE = AF_SELECT_LE_BE(AF_FORMAT_DOUBLE_LE, AF_FORMAT_DOUBLE_BE),
+
+ AF_FORMAT_AC3 = AF_SELECT_LE_BE(AF_FORMAT_AC3_LE, AF_FORMAT_AC3_BE),
+ AF_FORMAT_IEC61937 = AF_SELECT_LE_BE(AF_FORMAT_IEC61937_LE, AF_FORMAT_IEC61937_BE),
+};
-#define AF_FORMAT_IS_AC3(fmt) (((fmt) & AF_FORMAT_SPECIAL_MASK) == AF_FORMAT_AC3)
-#define AF_FORMAT_IS_IEC61937(fmt) (AF_FORMAT_IS_AC3(fmt) || ((fmt) & AF_FORMAT_SPECIAL_MASK) == AF_FORMAT_IEC61937)
+#define AF_FORMAT_U16_NE AF_FORMAT_U16
+#define AF_FORMAT_S16_NE AF_FORMAT_S16
+#define AF_FORMAT_U24_NE AF_FORMAT_U24
+#define AF_FORMAT_S24_NE AF_FORMAT_S24
+#define AF_FORMAT_U32_NE AF_FORMAT_U32
+#define AF_FORMAT_S32_NE AF_FORMAT_S32
+#define AF_FORMAT_FLOAT_NE AF_FORMAT_FLOAT
+#define AF_FORMAT_DOUBLE_NE AF_FORMAT_DOUBLE
+#define AF_FORMAT_AC3_NE AF_FORMAT_AC3
+#define AF_FORMAT_IEC61937_NE AF_FORMAT_IEC61937
+
+#define AF_FORMAT_IS_AC3(fmt) \
+ (((fmt) & AF_FORMAT_SPECIAL_MASK) == AF_FORMAT_S_AC3)
+
+#define AF_FORMAT_IS_IEC61937(fmt) \
+ (AF_FORMAT_IS_AC3(fmt) || \
+ ((fmt) & AF_FORMAT_SPECIAL_MASK) == AF_FORMAT_S_IEC61937)
struct af_fmt_entry {
const char *name;