diff options
Diffstat (limited to 'audio/format.h')
-rw-r--r-- | audio/format.h | 136 |
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; |