diff options
author | wm4 <wm4@nowhere> | 2013-11-09 23:20:02 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-11-09 23:32:52 +0100 |
commit | 5735b684de95ae59401a022bd27f1a7f36d03ab3 (patch) | |
tree | f68647e85a3b499d14b53151bb4167f381c9ec62 /audio/filter | |
parent | 31f409a3c510c7fc289ad2b75091c6b77dd2b235 (diff) | |
download | mpv-5735b684de95ae59401a022bd27f1a7f36d03ab3.tar.bz2 mpv-5735b684de95ae59401a022bd27f1a7f36d03ab3.tar.xz |
af_convert24: fix complicated and incorrect format negotiation
The conversion works for native endian only. The correct check lists
supported format combination explicitly, but is also much simpler.
Diffstat (limited to 'audio/filter')
-rw-r--r-- | audio/filter/af_convert24.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/audio/filter/af_convert24.c b/audio/filter/af_convert24.c index 56b405a7e9..18ce156467 100644 --- a/audio/filter/af_convert24.c +++ b/audio/filter/af_convert24.c @@ -23,15 +23,10 @@ static bool test_conversion(int src_format, int dst_format) { - if (!(src_format & AF_FORMAT_POINT_MASK) == AF_FORMAT_I) - return false; - if ((src_format & ~AF_FORMAT_BITS_MASK) != - (dst_format & ~AF_FORMAT_BITS_MASK)) - return false; - int srcbits = src_format & AF_FORMAT_BITS_MASK; - int dstbits = dst_format & AF_FORMAT_BITS_MASK; - return (srcbits == AF_FORMAT_24BIT && dstbits == AF_FORMAT_32BIT) || - (srcbits == AF_FORMAT_32BIT && dstbits == AF_FORMAT_24BIT); + return (src_format == AF_FORMAT_U24_NE && dst_format == AF_FORMAT_U32_NE) || + (src_format == AF_FORMAT_S24_NE && dst_format == AF_FORMAT_S32_NE) || + (src_format == AF_FORMAT_U32_NE && dst_format == AF_FORMAT_U24_NE) || + (src_format == AF_FORMAT_S32_NE && dst_format == AF_FORMAT_S24_NE); } static int control(struct af_instance *af, int cmd, void *arg) |