summaryrefslogtreecommitdiffstats
path: root/audio/format.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/format.c')
-rw-r--r--audio/format.c53
1 files changed, 20 insertions, 33 deletions
diff --git a/audio/format.c b/audio/format.c
index b10e574a9e..60a86ea5ae 100644
--- a/audio/format.c
+++ b/audio/format.c
@@ -109,35 +109,27 @@ bool af_fmt_is_planar(int format)
return !!(format & AF_FORMAT_PLANAR);
}
-#define FMT(string, id) \
- {string, id},
-
-#define FMT_ENDIAN(string, id) \
- {string, id}, \
- {string "le", MP_CONCAT(id, _LE)}, \
- {string "be", MP_CONCAT(id, _BE)}, \
-
const struct af_fmt_entry af_fmtstr_table[] = {
- FMT("mpeg2", AF_FORMAT_MPEG2)
- FMT("ac3", AF_FORMAT_AC3)
- FMT("iec61937", AF_FORMAT_IEC61937)
-
- 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)
-
- FMT("u8p", AF_FORMAT_U8P)
- FMT("s16p", AF_FORMAT_S16P)
- FMT("s32p", AF_FORMAT_S32P)
- FMT("floatp", AF_FORMAT_FLOATP)
- FMT("doublep", AF_FORMAT_DOUBLEP)
+ {"mpeg2", AF_FORMAT_MPEG2},
+ {"ac3", AF_FORMAT_AC3},
+ {"iec61937", AF_FORMAT_IEC61937},
+
+ {"u8", AF_FORMAT_U8},
+ {"s8", AF_FORMAT_S8},
+ {"u16", AF_FORMAT_U16},
+ {"s16", AF_FORMAT_S16},
+ {"u24", AF_FORMAT_U24},
+ {"s24", AF_FORMAT_S24},
+ {"u32", AF_FORMAT_U32},
+ {"s32", AF_FORMAT_S32},
+ {"float", AF_FORMAT_FLOAT},
+ {"double", AF_FORMAT_DOUBLE},
+
+ {"u8p", AF_FORMAT_U8P},
+ {"s16p", AF_FORMAT_S16P},
+ {"s32p", AF_FORMAT_S32P},
+ {"floatp", AF_FORMAT_FLOATP},
+ {"doublep", AF_FORMAT_DOUBLEP},
{0}
};
@@ -199,17 +191,12 @@ int af_format_conversion_score(int dst_format, int src_format)
return INT_MIN;
if (dst_format == src_format)
return 1024;
- // Just endian swapping (separate because it works for special formats)
- if ((dst_format & ~AF_FORMAT_END_MASK) == (src_format & ~AF_FORMAT_END_MASK))
- return 1024 - 2;
// Can't be normally converted
if (AF_FORMAT_IS_SPECIAL(dst_format) || AF_FORMAT_IS_SPECIAL(src_format))
return INT_MIN;
int score = 1024;
if (FMT_DIFF(AF_FORMAT_INTERLEAVING_MASK, dst_format, src_format))
score -= 1; // has to (de-)planarize
- if (FMT_DIFF(AF_FORMAT_END_MASK, dst_format, src_format))
- score -= 2; // has to swap endian
if (FMT_DIFF(AF_FORMAT_SIGN_MASK, dst_format, src_format))
score -= 4; // has to swap sign
if (FMT_DIFF(AF_FORMAT_POINT_MASK, dst_format, src_format)) {