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