diff options
Diffstat (limited to 'audio/filter')
-rw-r--r-- | audio/filter/af_bs2b.c | 69 | ||||
-rw-r--r-- | audio/filter/af_convert24.c | 1 | ||||
-rw-r--r-- | audio/filter/af_convertsignendian.c | 50 |
3 files changed, 30 insertions, 90 deletions
diff --git a/audio/filter/af_bs2b.c b/audio/filter/af_bs2b.c index 0a2bd8e552..29d646a9a9 100644 --- a/audio/filter/af_bs2b.c +++ b/audio/filter/af_bs2b.c @@ -48,20 +48,12 @@ static int filter_##name(struct af_instance *af, struct mp_audio *data, int f) \ } FILTER(f, float) -FILTER(fbe, float) -FILTER(fle, float) -FILTER(s32be, int32_t) -FILTER(u32be, uint32_t) -FILTER(s32le, int32_t) -FILTER(u32le, uint32_t) -FILTER(s24be, bs2b_int24_t) -FILTER(u24be, bs2b_uint24_t) -FILTER(s24le, bs2b_int24_t) -FILTER(u24le, bs2b_uint24_t) -FILTER(s16be, int16_t) -FILTER(u16be, uint16_t) -FILTER(s16le, int16_t) -FILTER(u16le, uint16_t) +FILTER(s32, int32_t) +FILTER(u32, uint32_t) +FILTER(s24, bs2b_int24_t) +FILTER(u24, bs2b_uint24_t) +FILTER(s16, int16_t) +FILTER(u16, uint16_t) FILTER(s8, int8_t) FILTER(u8, uint8_t) @@ -85,47 +77,26 @@ static int control(struct af_instance *af, int cmd, void *arg) /* check for formats supported by libbs2b and assign corresponding handlers */ switch (format) { - case AF_FORMAT_FLOAT_BE: - af->filter = filter_fbe; - break; - case AF_FORMAT_FLOAT_LE: - af->filter = filter_fle; - break; - case AF_FORMAT_S32_BE: - af->filter = filter_s32be; - break; - case AF_FORMAT_U32_BE: - af->filter = filter_u32be; - break; - case AF_FORMAT_S32_LE: - af->filter = filter_s32le; - break; - case AF_FORMAT_U32_LE: - af->filter = filter_u32le; - break; - case AF_FORMAT_S24_BE: - af->filter = filter_s24be; - break; - case AF_FORMAT_U24_BE: - af->filter = filter_u24be; + case AF_FORMAT_FLOAT: + af->filter = filter_f; break; - case AF_FORMAT_S24_LE: - af->filter = filter_s24le; + case AF_FORMAT_S32: + af->filter = filter_s32; break; - case AF_FORMAT_U24_LE: - af->filter = filter_u24le; + case AF_FORMAT_U32: + af->filter = filter_u32; break; - case AF_FORMAT_S16_BE: - af->filter = filter_s16be; + case AF_FORMAT_S24: + af->filter = filter_s24; break; - case AF_FORMAT_U16_BE: - af->filter = filter_u16be; + case AF_FORMAT_U24: + af->filter = filter_u24; break; - case AF_FORMAT_S16_LE: - af->filter = filter_s16le; + case AF_FORMAT_S16: + af->filter = filter_s16; break; - case AF_FORMAT_U16_LE: - af->filter = filter_u16le; + case AF_FORMAT_U16: + af->filter = filter_u16; break; case AF_FORMAT_S8: af->filter = filter_s8; diff --git a/audio/filter/af_convert24.c b/audio/filter/af_convert24.c index 38799bd8fc..e59317fe1b 100644 --- a/audio/filter/af_convert24.c +++ b/audio/filter/af_convert24.c @@ -20,6 +20,7 @@ #include "audio/format.h" #include "af.h" +#include "osdep/endian.h" static bool test_conversion(int src_format, int dst_format) { diff --git a/audio/filter/af_convertsignendian.c b/audio/filter/af_convertsignendian.c index a0b47b38a3..7e7e436352 100644 --- a/audio/filter/af_convertsignendian.c +++ b/audio/filter/af_convertsignendian.c @@ -20,21 +20,16 @@ #include "af.h" #include "audio/format.h" -#include "osdep/mpbswap.h" +#include "osdep/endian.h" static bool test_conversion(int src_format, int dst_format) { if ((src_format & AF_FORMAT_PLANAR) || (dst_format & AF_FORMAT_PLANAR)) return false; - int src_noend = src_format & ~AF_FORMAT_END_MASK; - int dst_noend = dst_format & ~AF_FORMAT_END_MASK; - // We can swap endian for all formats, but sign only for integer formats. - if (src_noend == dst_noend) - return true; - if (((src_noend & ~AF_FORMAT_SIGN_MASK) == - (dst_noend & ~AF_FORMAT_SIGN_MASK)) && - ((src_noend & AF_FORMAT_POINT_MASK) == AF_FORMAT_I)) + if (((src_format & ~AF_FORMAT_SIGN_MASK) == + (dst_format & ~AF_FORMAT_SIGN_MASK)) && + ((src_format & AF_FORMAT_POINT_MASK) == AF_FORMAT_I)) return true; return false; } @@ -63,34 +58,11 @@ static int control(struct af_instance *af, int cmd, void *arg) return AF_UNKNOWN; } -static void endian(void *data, int len, int bps) -{ - switch (bps) { - case 2: - for (int i = 0; i < len; i++) { - ((uint16_t*)data)[i] = bswap_16(((uint16_t *)data)[i]); - } - break; - case 3: - for(int i = 0; i < len; i++) { - uint8_t s = ((uint8_t *)data)[3 * i]; - ((uint8_t *)data)[3 * i] = ((uint8_t *)data)[3 * i + 2]; - ((uint8_t *)data)[3 * i + 2] = s; - } - break; - case 4: - for(int i = 0; i < len; i++) { - ((uint32_t*)data)[i] = bswap_32(((uint32_t *)data)[i]); - } - break; - } -} - -static void si2us(void *data, int len, int bps, bool le) +static void si2us(void *data, int len, int bps) { ptrdiff_t i = -(len * bps); uint8_t *p = &((uint8_t *)data)[len * bps]; - if (le && bps > 1) + if (BYTE_ORDER == LITTLE_ENDIAN && bps > 1) p += bps - 1; if (len <= 0) return; @@ -105,12 +77,8 @@ static int filter(struct af_instance *af, struct mp_audio *data, int flags) int outfmt = af->data->format; size_t len = data->samples * data->nch; - if ((infmt & AF_FORMAT_END_MASK) != (outfmt & AF_FORMAT_END_MASK)) - endian(data->planes[0], len, data->bps); - if ((infmt & AF_FORMAT_SIGN_MASK) != (outfmt & AF_FORMAT_SIGN_MASK)) - si2us(data->planes[0], len, data->bps, - (outfmt & AF_FORMAT_END_MASK) == AF_FORMAT_LE); + si2us(data->planes[0], len, data->bps); mp_audio_set_format(data, outfmt); return 0; @@ -124,8 +92,8 @@ static int af_open(struct af_instance *af) } const struct af_info af_info_convertsignendian = { - .info = "Convert between sample format sign/endian", - .name = "convertsignendian", + .info = "Convert between sample format sign", + .name = "convertsign", .open = af_open, .test_conversion = test_conversion, }; |