diff options
| author | Tim Redfern <tim@eclectronics.org> | 2013-12-29 12:19:38 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2013-12-29 12:19:38 +0000 |
| commit | f7813a5324be39d13ab536c245d15dfc602a7849 (patch) | |
| tree | fad99148b88823d34a5df2f0a25881a002eb291b /ffmpeg/libavcodec/x86/rv40dsp_init.c | |
| parent | b7a5a477b8ff4d4e3028b9dfb9a9df0a41463f92 (diff) | |
basic type mechanism working
Diffstat (limited to 'ffmpeg/libavcodec/x86/rv40dsp_init.c')
| -rw-r--r-- | ffmpeg/libavcodec/x86/rv40dsp_init.c | 65 |
1 files changed, 46 insertions, 19 deletions
diff --git a/ffmpeg/libavcodec/x86/rv40dsp_init.c b/ffmpeg/libavcodec/x86/rv40dsp_init.c index 2f97518..75ba8ba 100644 --- a/ffmpeg/libavcodec/x86/rv40dsp_init.c +++ b/ffmpeg/libavcodec/x86/rv40dsp_init.c @@ -30,7 +30,7 @@ #include "libavutil/attributes.h" #include "libavutil/mem.h" #include "libavutil/x86/cpu.h" -#include "dsputil_mmx.h" +#include "dsputil_x86.h" #if HAVE_YASM void ff_put_rv40_chroma_mc8_mmx (uint8_t *dst, uint8_t *src, @@ -188,25 +188,58 @@ QPEL_FUNCS_SET (OP, 3, 2, OPT) #endif /* HAVE_YASM */ +#if HAVE_MMX_INLINE +static void put_rv40_qpel8_mc33_mmx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride) +{ + ff_put_pixels8_xy2_mmx(dst, src, stride, 8); +} +static void put_rv40_qpel16_mc33_mmx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride) +{ + ff_put_pixels16_xy2_mmx(dst, src, stride, 16); +} +static void avg_rv40_qpel8_mc33_mmx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride) +{ + ff_avg_pixels8_xy2_mmx(dst, src, stride, 8); +} +static void avg_rv40_qpel16_mc33_mmx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride) +{ + ff_avg_pixels16_xy2_mmx(dst, src, stride, 16); +} +#endif /* HAVE_MMX_INLINE */ + av_cold void ff_rv40dsp_init_x86(RV34DSPContext *c) { -#if HAVE_YASM - int mm_flags = av_get_cpu_flags(); + int cpu_flags = av_get_cpu_flags(); - if (EXTERNAL_MMX(mm_flags)) { - c->put_chroma_pixels_tab[0] = ff_put_rv40_chroma_mc8_mmx; - c->put_chroma_pixels_tab[1] = ff_put_rv40_chroma_mc4_mmx; #if HAVE_MMX_INLINE - c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_mmx; - c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_mmx; - c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_mmx; - c->avg_pixels_tab[1][15] = ff_avg_rv40_qpel8_mc33_mmx; + if (INLINE_MMX(cpu_flags)) { + c->put_pixels_tab[0][15] = put_rv40_qpel16_mc33_mmx; + c->put_pixels_tab[1][15] = put_rv40_qpel8_mc33_mmx; + c->avg_pixels_tab[0][15] = avg_rv40_qpel16_mc33_mmx; + c->avg_pixels_tab[1][15] = avg_rv40_qpel8_mc33_mmx; + } #endif /* HAVE_MMX_INLINE */ + +#if HAVE_YASM + if (EXTERNAL_MMX(cpu_flags)) { + c->put_chroma_pixels_tab[0] = ff_put_rv40_chroma_mc8_mmx; + c->put_chroma_pixels_tab[1] = ff_put_rv40_chroma_mc4_mmx; #if ARCH_X86_32 QPEL_MC_SET(put_, _mmx) #endif } - if (EXTERNAL_MMXEXT(mm_flags)) { + if (EXTERNAL_AMD3DNOW(cpu_flags)) { + c->avg_chroma_pixels_tab[0] = ff_avg_rv40_chroma_mc8_3dnow; + c->avg_chroma_pixels_tab[1] = ff_avg_rv40_chroma_mc4_3dnow; +#if ARCH_X86_32 + QPEL_MC_SET(avg_, _3dnow) +#endif + } + if (EXTERNAL_MMXEXT(cpu_flags)) { c->avg_chroma_pixels_tab[0] = ff_avg_rv40_chroma_mc8_mmxext; c->avg_chroma_pixels_tab[1] = ff_avg_rv40_chroma_mc4_mmxext; c->rv40_weight_pixels_tab[0][0] = ff_rv40_weight_func_rnd_16_mmxext; @@ -216,14 +249,8 @@ av_cold void ff_rv40dsp_init_x86(RV34DSPContext *c) #if ARCH_X86_32 QPEL_MC_SET(avg_, _mmxext) #endif - } else if (EXTERNAL_AMD3DNOW(mm_flags)) { - c->avg_chroma_pixels_tab[0] = ff_avg_rv40_chroma_mc8_3dnow; - c->avg_chroma_pixels_tab[1] = ff_avg_rv40_chroma_mc4_3dnow; -#if ARCH_X86_32 - QPEL_MC_SET(avg_, _3dnow) -#endif } - if (EXTERNAL_SSE2(mm_flags)) { + if (EXTERNAL_SSE2(cpu_flags)) { c->rv40_weight_pixels_tab[0][0] = ff_rv40_weight_func_rnd_16_sse2; c->rv40_weight_pixels_tab[0][1] = ff_rv40_weight_func_rnd_8_sse2; c->rv40_weight_pixels_tab[1][0] = ff_rv40_weight_func_nornd_16_sse2; @@ -231,7 +258,7 @@ av_cold void ff_rv40dsp_init_x86(RV34DSPContext *c) QPEL_MC_SET(put_, _sse2) QPEL_MC_SET(avg_, _sse2) } - if (EXTERNAL_SSSE3(mm_flags)) { + if (EXTERNAL_SSSE3(cpu_flags)) { c->rv40_weight_pixels_tab[0][0] = ff_rv40_weight_func_rnd_16_ssse3; c->rv40_weight_pixels_tab[0][1] = ff_rv40_weight_func_rnd_8_ssse3; c->rv40_weight_pixels_tab[1][0] = ff_rv40_weight_func_nornd_16_ssse3; |
