+extern void odivx_idct_c (short *block);
+
+// BFIN
+extern void ff_bfin_idct (DCTELEM *block) ;
+extern void ff_bfin_fdct (DCTELEM *block) ;
+
+// ALTIVEC
+extern void fdct_altivec (DCTELEM *block);
+//extern void idct_altivec (DCTELEM *block);?? no routine
+
+
+struct algo {
+ char *name;
+ enum { FDCT, IDCT } is_idct;
+ void (* func) (DCTELEM *block);
+ void (* ref) (DCTELEM *block);
+ enum formattag { NO_PERM,MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM } format;
+};
+
+#ifndef FAAN_POSTSCALE
+#define FAAN_SCALE SCALE_PERM
+#else
+#define FAAN_SCALE NO_PERM
+#endif
+
+#define DCT_ERROR(name,is_idct,func,ref,form) {name,is_idct,func,ref,form}
+
+
+struct algo algos[] = {
+ DCT_ERROR( "REF-DBL", 0, fdct, fdct, NO_PERM),
+ DCT_ERROR("FAAN", 0, ff_faandct, fdct, FAAN_SCALE),
+ DCT_ERROR("IJG-AAN-INT", 0, fdct_ifast, fdct, SCALE_PERM),
+ DCT_ERROR("IJG-LLM-INT", 0, ff_jpeg_fdct_islow, fdct, NO_PERM),
+ DCT_ERROR("REF-DBL", 1, idct, idct, NO_PERM),
+ DCT_ERROR("INT", 1, j_rev_dct, idct, MMX_PERM),
+ DCT_ERROR("SIMPLE-C", 1, simple_idct, idct, NO_PERM),
+
+#ifdef HAVE_MMX
+ DCT_ERROR("MMX", 0, ff_fdct_mmx, fdct, NO_PERM),
+#ifdef HAVE_MMX2
+ DCT_ERROR("MMX2", 0, ff_fdct_mmx2, fdct, NO_PERM),
+#endif
+
+#ifdef CONFIG_GPL
+ DCT_ERROR("LIBMPEG2-MMX", 1, ff_mmx_idct, idct, MMX_PERM),
+ DCT_ERROR("LIBMPEG2-MMXEXT", 1, ff_mmxext_idct, idct, MMX_PERM),
+#endif
+ DCT_ERROR("SIMPLE-MMX", 1, ff_simple_idct_mmx, idct, MMX_SIMPLE_PERM),
+ DCT_ERROR("XVID-MMX", 1, ff_idct_xvid_mmx, idct, NO_PERM),
+ DCT_ERROR("XVID-MMX2", 1, ff_idct_xvid_mmx2, idct, NO_PERM),
+#endif
+
+#ifdef HAVE_ALTIVEC
+ DCT_ERROR("altivecfdct", 0, fdct_altivec, fdct, NO_PERM),
+#endif
+
+#ifdef ARCH_BFIN
+ DCT_ERROR("BFINfdct", 0, ff_bfin_fdct, fdct, NO_PERM),
+ DCT_ERROR("BFINidct", 1, ff_bfin_idct, idct, NO_PERM),
+#endif
+
+ { 0 }
+};
+