diff options
Diffstat (limited to 'audio/format.c')
-rw-r--r-- | audio/format.c | 53 |
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)) { |