summaryrefslogtreecommitdiffstats
path: root/audio/format.h
diff options
context:
space:
mode:
Diffstat (limited to 'audio/format.h')
-rw-r--r--audio/format.h136
1 files changed, 74 insertions, 62 deletions
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;