struct algo {
const char *name;
void (*func)(DCTELEM *block);
- void (*ref) (DCTELEM *block);
enum formattag { NO_PERM, MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM,
SSE2_PERM, PARTTRANS_PERM } format;
int mm_support;
static int cpu_flags;
static const struct algo fdct_tab[] = {
- {"REF-DBL", ff_ref_fdct, ff_ref_fdct, NO_PERM},
- {"FAAN", ff_faandct, ff_ref_fdct, FAAN_SCALE},
- {"IJG-AAN-INT", fdct_ifast, ff_ref_fdct, SCALE_PERM},
- {"IJG-LLM-INT", ff_jpeg_fdct_islow, ff_ref_fdct, NO_PERM},
+ { "REF-DBL", ff_ref_fdct, NO_PERM },
+ { "FAAN", ff_faandct, FAAN_SCALE },
+ { "IJG-AAN-INT", fdct_ifast, SCALE_PERM },
+ { "IJG-LLM-INT", ff_jpeg_fdct_islow, NO_PERM },
#if HAVE_MMX
- {"MMX", ff_fdct_mmx, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_MMX},
- {"MMX2", ff_fdct_mmx2, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_MMX2},
- {"SSE2", ff_fdct_sse2, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_SSE2},
+ { "MMX", ff_fdct_mmx, NO_PERM, AV_CPU_FLAG_MMX },
+ { "MMX2", ff_fdct_mmx2, NO_PERM, AV_CPU_FLAG_MMX2 },
+ { "SSE2", ff_fdct_sse2, NO_PERM, AV_CPU_FLAG_SSE2 },
#endif
#if HAVE_ALTIVEC
- {"altivecfdct", fdct_altivec, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_ALTIVEC},
+ { "altivecfdct", fdct_altivec, NO_PERM, AV_CPU_FLAG_ALTIVEC },
#endif
#if ARCH_BFIN
- {"BFINfdct", ff_bfin_fdct, ff_ref_fdct, NO_PERM},
+ { "BFINfdct", ff_bfin_fdct, NO_PERM },
#endif
{ 0 }
};
static const struct algo idct_tab[] = {
- {"FAANI", ff_faanidct, ff_ref_idct, NO_PERM},
- {"REF-DBL", ff_ref_idct, ff_ref_idct, NO_PERM},
- {"INT", j_rev_dct, ff_ref_idct, MMX_PERM},
- {"SIMPLE-C", ff_simple_idct, ff_ref_idct, NO_PERM},
+ { "FAANI", ff_faanidct, NO_PERM },
+ { "REF-DBL", ff_ref_idct, NO_PERM },
+ { "INT", j_rev_dct, MMX_PERM },
+ { "SIMPLE-C", ff_simple_idct, NO_PERM },
#if HAVE_MMX
#if CONFIG_GPL
- {"LIBMPEG2-MMX", ff_mmx_idct, ff_ref_idct, MMX_PERM, AV_CPU_FLAG_MMX, 1},
- {"LIBMPEG2-MMX2", ff_mmxext_idct, ff_ref_idct, MMX_PERM, AV_CPU_FLAG_MMX2, 1},
+ { "LIBMPEG2-MMX", ff_mmx_idct, MMX_PERM, AV_CPU_FLAG_MMX, 1 },
+ { "LIBMPEG2-MMX2", ff_mmxext_idct, MMX_PERM, AV_CPU_FLAG_MMX2, 1 },
#endif
- {"SIMPLE-MMX", ff_simple_idct_mmx, ff_ref_idct, MMX_SIMPLE_PERM, AV_CPU_FLAG_MMX},
- {"XVID-MMX", ff_idct_xvid_mmx, ff_ref_idct, NO_PERM, AV_CPU_FLAG_MMX, 1},
- {"XVID-MMX2", ff_idct_xvid_mmx2, ff_ref_idct, NO_PERM, AV_CPU_FLAG_MMX2, 1},
- {"XVID-SSE2", ff_idct_xvid_sse2, ff_ref_idct, SSE2_PERM, AV_CPU_FLAG_SSE2, 1},
+ { "SIMPLE-MMX", ff_simple_idct_mmx, MMX_SIMPLE_PERM, AV_CPU_FLAG_MMX },
+ { "XVID-MMX", ff_idct_xvid_mmx, NO_PERM, AV_CPU_FLAG_MMX, 1 },
+ { "XVID-MMX2", ff_idct_xvid_mmx2, NO_PERM, AV_CPU_FLAG_MMX2, 1 },
+ { "XVID-SSE2", ff_idct_xvid_sse2, SSE2_PERM, AV_CPU_FLAG_SSE2, 1 },
#endif
#if ARCH_BFIN
- {"BFINidct", ff_bfin_idct, ff_ref_idct, NO_PERM},
+ { "BFINidct", ff_bfin_idct, NO_PERM },
#endif
#if ARCH_ARM
- {"SIMPLE-ARM", ff_simple_idct_arm, ff_ref_idct, NO_PERM },
- {"INT-ARM", ff_j_rev_dct_arm, ff_ref_idct, MMX_PERM },
+ { "SIMPLE-ARM", ff_simple_idct_arm, NO_PERM },
+ { "INT-ARM", ff_j_rev_dct_arm, MMX_PERM },
#endif
#if HAVE_ARMV5TE
- {"SIMPLE-ARMV5TE", ff_simple_idct_armv5te, ff_ref_idct, NO_PERM },
+ { "SIMPLE-ARMV5TE", ff_simple_idct_armv5te,NO_PERM },
#endif
#if HAVE_ARMV6
- {"SIMPLE-ARMV6", ff_simple_idct_armv6, ff_ref_idct, MMX_PERM },
+ { "SIMPLE-ARMV6", ff_simple_idct_armv6, MMX_PERM },
#endif
#if HAVE_NEON
- {"SIMPLE-NEON", ff_simple_idct_neon, ff_ref_idct, PARTTRANS_PERM },
+ { "SIMPLE-NEON", ff_simple_idct_neon, PARTTRANS_PERM },
#endif
#if ARCH_ALPHA
- {"SIMPLE-ALPHA", ff_simple_idct_axp, ff_ref_idct, NO_PERM },
+ { "SIMPLE-ALPHA", ff_simple_idct_axp, NO_PERM },
#endif
{ 0 }
static int dct_error(const struct algo *dct, int test, int is_idct, int speed)
{
+ void (*ref)(DCTELEM *block) = is_idct ? ff_ref_idct : ff_ref_fdct;
int it, i, scale;
int err_inf, v;
int64_t err2, ti, ti1, it1, err_sum = 0;
}
}
- dct->ref(block1);
+ ref(block1);
blockSumErr = 0;
for (i = 0; i < 64; i++) {