00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "libavutil/x86/cpu.h"
00024 #include "libavcodec/proresdsp.h"
00025
00026 void ff_prores_idct_put_10_sse2(uint16_t *dst, int linesize,
00027 DCTELEM *block, const int16_t *qmat);
00028 void ff_prores_idct_put_10_sse4(uint16_t *dst, int linesize,
00029 DCTELEM *block, const int16_t *qmat);
00030 void ff_prores_idct_put_10_avx (uint16_t *dst, int linesize,
00031 DCTELEM *block, const int16_t *qmat);
00032
00033 void ff_proresdsp_x86_init(ProresDSPContext *dsp, AVCodecContext *avctx)
00034 {
00035 #if ARCH_X86_64
00036 int flags = av_get_cpu_flags();
00037
00038 if(avctx->flags & CODEC_FLAG_BITEXACT)
00039 return;
00040
00041 if (EXTERNAL_SSE2(flags)) {
00042 dsp->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM;
00043 dsp->idct_put = ff_prores_idct_put_10_sse2;
00044 }
00045
00046 if (EXTERNAL_SSE4(flags)) {
00047 dsp->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM;
00048 dsp->idct_put = ff_prores_idct_put_10_sse4;
00049 }
00050
00051 if (EXTERNAL_AVX(flags)) {
00052 dsp->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM;
00053 dsp->idct_put = ff_prores_idct_put_10_avx;
00054 }
00055 #endif
00056 }