summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-11-09 23:20:02 +0100
committerwm4 <wm4@nowhere>2013-11-09 23:32:52 +0100
commit5735b684de95ae59401a022bd27f1a7f36d03ab3 (patch)
treef68647e85a3b499d14b53151bb4167f381c9ec62 /audio
parent31f409a3c510c7fc289ad2b75091c6b77dd2b235 (diff)
downloadmpv-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')
-rw-r--r--audio/filter/af_convert24.c13
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)