---

Now removes some forgotten arch-specific headers from the C code.

 libavcodec/arm/dct-test.c | 40 ++++++++++++++++++++
 libavcodec/dct-test.c     | 93 ++++++++++++++++-------------------------------
 libavcodec/ppc/dct-test.c | 32 ++++++++++++++++
 libavcodec/x86/dct-test.c | 70 +++++++++++++++++++++++++++++++++++
 4 files changed, 173 insertions(+), 62 deletions(-)
 create mode 100644 libavcodec/arm/dct-test.c
 create mode 100644 libavcodec/ppc/dct-test.c
 create mode 100644 libavcodec/x86/dct-test.c

diff --git a/libavcodec/arm/dct-test.c b/libavcodec/arm/dct-test.c
new file mode 100644
index 0000000..70e5c1c
--- /dev/null
+++ b/libavcodec/arm/dct-test.c
@@ -0,0 +1,40 @@
+/*
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "config.h"
+
+#include "idct.h"
+
+static const struct algo fdct_tab_arch[] = {
+    { 0 }
+};
+
+static const struct algo idct_tab_arch[] = {
+    { "SIMPLE-ARM",     ff_simple_idct_arm,     FF_IDCT_PERM_NONE },
+    { "INT-ARM",        ff_j_rev_dct_arm,       FF_IDCT_PERM_LIBMPEG2 },
+#if HAVE_ARMV5TE
+    { "SIMPLE-ARMV5TE", ff_simple_idct_armv5te, FF_IDCT_PERM_NONE,      
AV_CPU_FLAG_ARMV5TE },
+#endif
+#if HAVE_ARMV6
+    { "SIMPLE-ARMV6",   ff_simple_idct_armv6,   FF_IDCT_PERM_LIBMPEG2,  
AV_CPU_FLAG_ARMV6 },
+#endif
+#if HAVE_NEON
+    { "SIMPLE-NEON",    ff_simple_idct_neon,    FF_IDCT_PERM_PARTTRANS, 
AV_CPU_FLAG_NEON },
+#endif
+    { 0 }
+};
diff --git a/libavcodec/dct-test.c b/libavcodec/dct-test.c
index c9ebc60..979fc0b 100644
--- a/libavcodec/dct-test.c
+++ b/libavcodec/dct-test.c
@@ -39,18 +39,12 @@
 #include "libavutil/lfg.h"
 #include "libavutil/time.h"
 
-#include "arm/idct.h"
-#include "ppc/fdct.h"
 #include "dct.h"
 #include "idctdsp.h"
 #include "simple_idct.h"
 #include "aandcttab.h"
 #include "faandct.h"
 #include "faanidct.h"
-#include "x86/fdct.h"
-#include "x86/idct_permutation.h"
-#include "x86/idct_xvid.h"
-#include "x86/simple_idct.h"
 #include "dctref.h"
 
 struct algo {
@@ -61,62 +55,30 @@ struct algo {
     int nonspec;
 };
 
-static const struct algo fdct_tab[] = {
+static const struct algo fdct_tab[4] = {
     { "REF-DBL",     ff_ref_fdct,          FF_IDCT_PERM_NONE },
     { "FAAN",        ff_faandct,           FF_IDCT_PERM_NONE },
     { "IJG-AAN-INT", ff_fdct_ifast,        FF_IDCT_PERM_NONE },
     { "IJG-LLM-INT", ff_jpeg_fdct_islow_8, FF_IDCT_PERM_NONE },
-
-#if HAVE_MMX_INLINE
-    { "MMX",         ff_fdct_mmx,          FF_IDCT_PERM_NONE, AV_CPU_FLAG_MMX 
},
-#endif
-#if HAVE_MMXEXT_INLINE
-    { "MMXEXT",      ff_fdct_mmxext,       FF_IDCT_PERM_NONE, 
AV_CPU_FLAG_MMXEXT },
-#endif
-#if HAVE_SSE2_INLINE
-    { "SSE2",        ff_fdct_sse2,         FF_IDCT_PERM_NONE, AV_CPU_FLAG_SSE2 
},
-#endif
-
-#if HAVE_ALTIVEC
-    { "altivecfdct", ff_fdct_altivec,      FF_IDCT_PERM_NONE, 
AV_CPU_FLAG_ALTIVEC },
-#endif
-
-    { 0 }
 };
 
-static const struct algo idct_tab[] = {
+static const struct algo idct_tab[4] = {
     { "FAANI",       ff_faanidct,          FF_IDCT_PERM_NONE },
     { "REF-DBL",     ff_ref_idct,          FF_IDCT_PERM_NONE },
     { "INT",         ff_j_rev_dct,         FF_IDCT_PERM_LIBMPEG2 },
     { "SIMPLE-C",    ff_simple_idct_8,     FF_IDCT_PERM_NONE },
-
-#if HAVE_MMX_INLINE
-    { "SIMPLE-MMX",     ff_simple_idct_mmx,     FF_IDCT_PERM_SIMPLE,    
AV_CPU_FLAG_MMX },
-    { "XVID-MMX",       ff_idct_xvid_mmx,       FF_IDCT_PERM_NONE,      
AV_CPU_FLAG_MMX,    1 },
-#endif
-#if HAVE_MMXEXT_INLINE
-    { "XVID-MMXEXT",    ff_idct_xvid_mmxext,    FF_IDCT_PERM_NONE,      
AV_CPU_FLAG_MMXEXT, 1 },
-#endif
-#if HAVE_SSE2_INLINE
-    { "XVID-SSE2",      ff_idct_xvid_sse2,      FF_IDCT_PERM_SSE2,      
AV_CPU_FLAG_SSE2,   1 },
-#endif
+};
 
 #if ARCH_ARM
-    { "SIMPLE-ARM",     ff_simple_idct_arm,     FF_IDCT_PERM_NONE },
-    { "INT-ARM",        ff_j_rev_dct_arm,       FF_IDCT_PERM_LIBMPEG2 },
-#endif
-#if HAVE_ARMV5TE
-    { "SIMPLE-ARMV5TE", ff_simple_idct_armv5te, FF_IDCT_PERM_NONE,      
AV_CPU_FLAG_ARMV5TE },
+#include "arm/dct-test.c"
+#elif ARCH_PPC
+#include "ppc/dct-test.c"
+#elif ARCH_X86
+#include "x86/dct-test.c"
+#else
+static const struct algo fdct_tab_arch[] = { 0 };
+static const struct algo idct_tab_arch[] = { 0 };
 #endif
-#if HAVE_ARMV6
-    { "SIMPLE-ARMV6",   ff_simple_idct_armv6,   FF_IDCT_PERM_LIBMPEG2,  
AV_CPU_FLAG_ARMV6 },
-#endif
-#if HAVE_NEON && ARCH_ARM
-    { "SIMPLE-NEON",    ff_simple_idct_neon,    FF_IDCT_PERM_PARTTRANS, 
AV_CPU_FLAG_NEON },
-#endif
-
-    { 0 }
-};
 
 #define AANSCALE_BITS 12
 
@@ -159,19 +121,16 @@ static void permute(int16_t dst[64], const int16_t 
src[64],
 {
     int i;
 
+#if ARCH_X86
+    if (permute_x86(dst, src, perm_type))
+        return;
+#endif
+
     switch (perm_type) {
     case FF_IDCT_PERM_LIBMPEG2:
         for (i = 0; i < 64; i++)
             dst[(i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2)] = src[i];
         break;
-    case FF_IDCT_PERM_SIMPLE:
-        for (i = 0; i < 64; i++)
-            dst[simple_mmx_permutation[i]] = src[i];
-        break;
-    case FF_IDCT_PERM_SSE2:
-        for (i = 0; i < 64; i++)
-            dst[(i & 0x38) | idct_sse2_row_perm[i & 7]] = src[i];
-        break;
     case FF_IDCT_PERM_PARTTRANS:
         for (i = 0; i < 64; i++)
             dst[(i & 0x24) | ((i & 3) << 3) | ((i >> 3) & 3)] = src[i];
@@ -477,11 +436,21 @@ int main(int argc, char **argv)
         idct248_error("SIMPLE-C", ff_simple_idct248_put, speed);
     } else {
         const int cpu_flags = av_get_cpu_flags();
-        const struct algo *algos = test_idct ? idct_tab : fdct_tab;
-        for (i = 0; algos[i].name; i++)
-            if (!(~cpu_flags & algos[i].cpu_flag)) {
-                err |= dct_error(&algos[i], test, test_idct, speed);
-            }
+        if (test_idct) {
+            for (i = 0; i < FF_ARRAY_ELEMS(idct_tab); i++)
+                err |= dct_error(&idct_tab[i], test, test_idct, speed);
+
+            for (i = 0; idct_tab_arch[i].name; i++)
+                if (!(~cpu_flags & idct_tab_arch[i].cpu_flag))
+                    err |= dct_error(&idct_tab_arch[i], test, test_idct, 
speed);
+        } else {
+            for (i = 0; i < FF_ARRAY_ELEMS(fdct_tab); i++)
+                err |= dct_error(&fdct_tab[i], test, test_idct, speed);
+
+            for (i = 0; fdct_tab_arch[i].name; i++)
+                if (!(~cpu_flags & fdct_tab_arch[i].cpu_flag))
+                    err |= dct_error(&fdct_tab_arch[i], test, test_idct, 
speed);
+        }
     }
 
     if (err)
diff --git a/libavcodec/ppc/dct-test.c b/libavcodec/ppc/dct-test.c
new file mode 100644
index 0000000..37fd8bb
--- /dev/null
+++ b/libavcodec/ppc/dct-test.c
@@ -0,0 +1,32 @@
+/*
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "config.h"
+
+#include "fdct.h"
+
+static const struct algo fdct_tab_arch[] = {
+#if HAVE_ALTIVEC
+    { "altivecfdct", ff_fdct_altivec, FF_IDCT_PERM_NONE, AV_CPU_FLAG_ALTIVEC },
+#endif
+    { 0 }
+};
+
+static const struct algo idct_tab_arch[] = {
+    { 0 }
+};
diff --git a/libavcodec/x86/dct-test.c b/libavcodec/x86/dct-test.c
new file mode 100644
index 0000000..557d8f3
--- /dev/null
+++ b/libavcodec/x86/dct-test.c
@@ -0,0 +1,70 @@
+/*
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "config.h"
+
+#include "fdct.h"
+#include "idct_permutation.h"
+#include "idct_xvid.h"
+#include "simple_idct.h"
+
+static const struct algo fdct_tab_arch[] = {
+#if HAVE_MMX_INLINE
+    { "MMX",    ff_fdct_mmx,    FF_IDCT_PERM_NONE, AV_CPU_FLAG_MMX },
+#endif
+#if HAVE_MMXEXT_INLINE
+    { "MMXEXT", ff_fdct_mmxext, FF_IDCT_PERM_NONE, AV_CPU_FLAG_MMXEXT },
+#endif
+#if HAVE_SSE2_INLINE
+    { "SSE2",   ff_fdct_sse2,   FF_IDCT_PERM_NONE, AV_CPU_FLAG_SSE2 },
+#endif
+    { 0 }
+};
+
+static const struct algo idct_tab_arch[] = {
+#if HAVE_MMX_INLINE
+    { "SIMPLE-MMX",  ff_simple_idct_mmx,  FF_IDCT_PERM_SIMPLE, AV_CPU_FLAG_MMX 
},
+    { "XVID-MMX",    ff_idct_xvid_mmx,    FF_IDCT_PERM_NONE,   
AV_CPU_FLAG_MMX,    1 },
+#endif
+#if HAVE_MMXEXT_INLINE
+    { "XVID-MMXEXT", ff_idct_xvid_mmxext, FF_IDCT_PERM_NONE,   
AV_CPU_FLAG_MMXEXT, 1 },
+#endif
+#if HAVE_SSE2_INLINE
+    { "XVID-SSE2",   ff_idct_xvid_sse2,   FF_IDCT_PERM_SSE2,   
AV_CPU_FLAG_SSE2,   1 },
+#endif
+    { 0 }
+};
+
+static int permute_x86(int16_t dst[64], const int16_t src[64],
+                       enum idct_permutation_type perm_type)
+{
+    int i;
+
+    switch (perm_type) {
+    case FF_IDCT_PERM_SIMPLE:
+        for (i = 0; i < 64; i++)
+            dst[simple_mmx_permutation[i]] = src[i];
+        return 1;
+    case FF_IDCT_PERM_SSE2:
+        for (i = 0; i < 64; i++)
+            dst[(i & 0x38) | idct_sse2_row_perm[i & 7]] = src[i];
+        return 1;
+    }
+
+    return 0;
+}
-- 
1.8.3.2

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to