summaryrefslogtreecommitdiffstats
path: root/audio/format.h
diff options
context:
space:
mode:
Diffstat (limited to 'audio/format.h')
-rw-r--r--audio/format.h69
1 files changed, 33 insertions, 36 deletions
diff --git a/audio/format.h b/audio/format.h
index 3662d817f1..06c5d566e5 100644
--- a/audio/format.h
+++ b/audio/format.h
@@ -28,39 +28,38 @@
#include "misc/bstr.h"
// Signed/unsigned
-#define AF_FORMAT_SI (0<<1) // Signed
-#define AF_FORMAT_US (1<<1) // Unsigned
-#define AF_FORMAT_SIGN_MASK (1<<1)
+#define AF_FORMAT_SI (0<<0) // Signed
+#define AF_FORMAT_US (1<<0) // Unsigned
+#define AF_FORMAT_SIGN_MASK (1<<0)
// Bits used
// Some code assumes they're sorted by size.
-#define AF_FORMAT_8BIT (0<<3)
-#define AF_FORMAT_16BIT (1<<3)
-#define AF_FORMAT_24BIT (2<<3)
-#define AF_FORMAT_32BIT (3<<3)
-#define AF_FORMAT_64BIT (4<<3)
-#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_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
-#define AF_FORMAT_I (1<<9) // Int
-#define AF_FORMAT_F (2<<9) // Foating point
-#define AF_FORMAT_POINT_MASK (3<<9)
+#define AF_FORMAT_8BIT (0<<1)
+#define AF_FORMAT_16BIT (1<<1)
+#define AF_FORMAT_24BIT (2<<1)
+#define AF_FORMAT_32BIT (3<<1)
+#define AF_FORMAT_64BIT (4<<1)
+#define AF_FORMAT_BITS_MASK (7<<1)
+
+// Fixed/floating point/special
+#define AF_FORMAT_I (1<<4) // Int
+#define AF_FORMAT_F (2<<4) // Foating point
+#define AF_FORMAT_S (4<<4) // special (IEC61937)
+#define AF_FORMAT_TYPE_MASK (7<<4)
// Interleaving (planar formats have data for each channel in separate planes)
-#define AF_FORMAT_INTERLEAVED (0<<11) // must be 0
-#define AF_FORMAT_PLANAR (1<<11)
-#define AF_FORMAT_INTERLEAVING_MASK (1<<11)
+#define AF_FORMAT_INTERLEAVED (0<<7) // must be 0
+#define AF_FORMAT_PLANAR (1<<7)
+#define AF_FORMAT_INTERLEAVING_MASK (1<<7)
+
+#define AF_FORMAT_S_CODEC(n) ((n)<<8)
+#define AF_FORMAT_S_CODEC_MASK (15 <<8) // 16 codecs max.
#define AF_FORMAT_MASK ((1<<12)-1)
#define AF_INTP (AF_FORMAT_I|AF_FORMAT_PLANAR)
#define AF_FLTP (AF_FORMAT_F|AF_FORMAT_PLANAR)
+#define AF_FORMAT_S_(n) (AF_FORMAT_S_CODEC(n)|AF_FORMAT_S|AF_FORMAT_16BIT)
// actual sample formats
enum af_format {
@@ -78,27 +77,25 @@ enum af_format {
AF_FORMAT_FLOAT = (AF_FORMAT_F|AF_FORMAT_32BIT),
AF_FORMAT_DOUBLE = (AF_FORMAT_F|AF_FORMAT_64BIT),
- AF_FORMAT_AC3 = (AF_FORMAT_S_AC3|AF_FORMAT_16BIT),
- AF_FORMAT_IEC61937 = (AF_FORMAT_S_IEC61937|AF_FORMAT_16BIT),
- AF_FORMAT_MPEG2 = (AF_FORMAT_S_MPEG2),
-
// Planar variants
AF_FORMAT_U8P = (AF_INTP|AF_FORMAT_US|AF_FORMAT_8BIT),
AF_FORMAT_S16P = (AF_INTP|AF_FORMAT_SI|AF_FORMAT_16BIT),
AF_FORMAT_S32P = (AF_INTP|AF_FORMAT_SI|AF_FORMAT_32BIT),
AF_FORMAT_FLOATP = (AF_FLTP|AF_FORMAT_32BIT),
AF_FORMAT_DOUBLEP = (AF_FLTP|AF_FORMAT_64BIT),
-};
-#define AF_FORMAT_IS_AC3(fmt) \
- ((fmt) == AF_FORMAT_AC3)
-
-#define AF_FORMAT_IS_IEC61937(fmt) \
- (AF_FORMAT_IS_AC3(fmt) || \
- ((fmt) & AF_FORMAT_SPECIAL_MASK) == AF_FORMAT_S_IEC61937)
+ // All of these use IEC61937 framing, and otherwise pretend to be like PCM.
+ AF_FORMAT_S_AAC = AF_FORMAT_S_(0),
+ AF_FORMAT_S_AC3 = AF_FORMAT_S_(1),
+ AF_FORMAT_S_DTS = AF_FORMAT_S_(2),
+ AF_FORMAT_S_DTSHD = AF_FORMAT_S_(3),
+ AF_FORMAT_S_EAC3 = AF_FORMAT_S_(4),
+ AF_FORMAT_S_MP3 = AF_FORMAT_S_(5),
+ AF_FORMAT_S_TRUEHD = AF_FORMAT_S_(6),
+};
-#define AF_FORMAT_IS_SPECIAL(fmt) \
- ((fmt & AF_FORMAT_SPECIAL_MASK) != 0)
+#define AF_FORMAT_IS_IEC61937(f) (((f) & AF_FORMAT_TYPE_MASK) == AF_FORMAT_S)
+#define AF_FORMAT_IS_SPECIAL(f) AF_FORMAT_IS_IEC61937(f)
struct af_fmt_entry {
const char *name;