#include "libavutil/attributes.h"
#include "libavutil/cpu.h"
+#include "libavutil/x86/cpu.h"
#include "libavcodec/avcodec.h"
+#include "libavcodec/dsputil.h"
#include "libavcodec/vp3dsp.h"
#include "config.h"
-void ff_vp3_idct_put_mmx(uint8_t *dest, int line_size, DCTELEM *block);
-void ff_vp3_idct_add_mmx(uint8_t *dest, int line_size, DCTELEM *block);
+void ff_vp3_idct_put_mmx(uint8_t *dest, int line_size, int16_t *block);
+void ff_vp3_idct_add_mmx(uint8_t *dest, int line_size, int16_t *block);
-void ff_vp3_idct_put_sse2(uint8_t *dest, int line_size, DCTELEM *block);
-void ff_vp3_idct_add_sse2(uint8_t *dest, int line_size, DCTELEM *block);
+void ff_vp3_idct_put_sse2(uint8_t *dest, int line_size, int16_t *block);
+void ff_vp3_idct_add_sse2(uint8_t *dest, int line_size, int16_t *block);
-void ff_vp3_idct_dc_add_mmx2(uint8_t *dest, int line_size,
- const DCTELEM *block);
+void ff_vp3_idct_dc_add_mmxext(uint8_t *dest, int line_size,
+ int16_t *block);
-void ff_vp3_v_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
-void ff_vp3_h_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
+void ff_vp3_v_loop_filter_mmxext(uint8_t *src, int stride,
+ int *bounding_values);
+void ff_vp3_h_loop_filter_mmxext(uint8_t *src, int stride,
+ int *bounding_values);
av_cold void ff_vp3dsp_init_x86(VP3DSPContext *c, int flags)
{
-#if HAVE_YASM
int cpuflags = av_get_cpu_flags();
- if (HAVE_MMX && cpuflags & AV_CPU_FLAG_MMX) {
+#if ARCH_X86_32
+ if (EXTERNAL_MMX(cpuflags)) {
c->idct_put = ff_vp3_idct_put_mmx;
c->idct_add = ff_vp3_idct_add_mmx;
- c->idct_perm = FF_PARTTRANS_IDCT_PERM;
}
+#endif
- if (HAVE_MMX2 && cpuflags & AV_CPU_FLAG_MMX2) {
- c->idct_dc_add = ff_vp3_idct_dc_add_mmx2;
+ if (EXTERNAL_MMXEXT(cpuflags)) {
+ c->idct_dc_add = ff_vp3_idct_dc_add_mmxext;
if (!(flags & CODEC_FLAG_BITEXACT)) {
- c->v_loop_filter = ff_vp3_v_loop_filter_mmx2;
- c->h_loop_filter = ff_vp3_h_loop_filter_mmx2;
+ c->v_loop_filter = ff_vp3_v_loop_filter_mmxext;
+ c->h_loop_filter = ff_vp3_h_loop_filter_mmxext;
}
}
- if (cpuflags & AV_CPU_FLAG_SSE2) {
+ if (EXTERNAL_SSE2(cpuflags)) {
c->idct_put = ff_vp3_idct_put_sse2;
c->idct_add = ff_vp3_idct_add_sse2;
- c->idct_perm = FF_TRANSPOSE_IDCT_PERM;
}
-#endif
}