diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2017-06-23 11:01:38 -0400 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2017-06-24 07:53:15 -0400 |
commit | 97f7f831691f2a2bddbd258bcbe332516d64a91b (patch) | |
tree | 71c4c89911fab9c1bfb96e622a2829ed75e8c8da /libavfilter/x86 | |
parent | 565dc0e283a8480327313ffa5c1dc1931c08c456 (diff) | |
download | ffmpeg-97f7f831691f2a2bddbd258bcbe332516d64a91b.tar.gz |
vf_spp: only assign function pointers if permutation matches expectations.
Diffstat (limited to 'libavfilter/x86')
-rw-r--r-- | libavfilter/x86/vf_spp.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libavfilter/x86/vf_spp.c b/libavfilter/x86/vf_spp.c index 45a9eb068c..7d5da610da 100644 --- a/libavfilter/x86/vf_spp.c +++ b/libavfilter/x86/vf_spp.c @@ -21,6 +21,7 @@ #include "libavutil/attributes.h" #include "libavutil/cpu.h" +#include "libavutil/crc.h" #include "libavutil/mem.h" #include "libavutil/x86/asm.h" #include "libavfilter/vf_spp.h" @@ -223,10 +224,15 @@ av_cold void ff_spp_init_x86(SPPContext *s) int cpu_flags = av_get_cpu_flags(); if (cpu_flags & AV_CPU_FLAG_MMX) { + static const uint32_t mmx_idct_perm_crc = 0xe5e8adc4; + uint32_t idct_perm_crc = + av_crc(av_crc_get_table(AV_CRC_32_IEEE), 0, + s->dct->idct_permutation, + sizeof(s->dct->idct_permutation)); int64_t bps; s->store_slice = store_slice_mmx; av_opt_get_int(s->dct, "bits_per_sample", 0, &bps); - if (bps <= 8) { + if (bps <= 8 && idct_perm_crc == mmx_idct_perm_crc) { switch (s->mode) { case 0: s->requantize = hardthresh_mmx; break; case 1: s->requantize = softthresh_mmx; break; |