]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mips/pixblockdsp_init_mips.c
lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h
[ffmpeg] / libavcodec / mips / pixblockdsp_init_mips.c
index fd0238d79bb4799cde8a33a83708e916e0b8969e..2e2d70953bdd97c6c15a3653b3463e10280d25ef 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/mips/cpu.h"
 #include "pixblockdsp_mips.h"
 
-#if HAVE_MSA
-static av_cold void pixblockdsp_init_msa(PixblockDSPContext *c,
-                                         AVCodecContext *avctx,
-                                         unsigned high_bit_depth)
+void ff_pixblockdsp_init_mips(PixblockDSPContext *c, AVCodecContext *avctx,
+                              unsigned high_bit_depth)
 {
-    c->diff_pixels = ff_diff_pixels_msa;
+    int cpu_flags = av_get_cpu_flags();
+
+    if (have_mmi(cpu_flags)) {
+        c->diff_pixels = ff_diff_pixels_mmi;
 
-    switch (avctx->bits_per_raw_sample) {
-    case 9:
-    case 10:
-    case 12:
-    case 14:
-        c->get_pixels = ff_get_pixels_16_msa;
-        break;
-    default:
-        if (avctx->bits_per_raw_sample <= 8 || avctx->codec_type !=
-            AVMEDIA_TYPE_VIDEO) {
-            c->get_pixels = ff_get_pixels_8_msa;
+        if (!high_bit_depth || avctx->codec_type != AVMEDIA_TYPE_VIDEO) {
+            c->get_pixels = ff_get_pixels_8_mmi;
         }
-        break;
     }
-}
-#endif  // #if HAVE_MSA
 
-#if HAVE_MMI
-static av_cold void pixblockdsp_init_mmi(PixblockDSPContext *c,
-        AVCodecContext *avctx, unsigned high_bit_depth)
-{
-    c->diff_pixels = ff_diff_pixels_mmi;
+    if (have_msa(cpu_flags)) {
+        c->diff_pixels = ff_diff_pixels_msa;
 
-    if (!high_bit_depth || avctx->codec_type != AVMEDIA_TYPE_VIDEO) {
-        c->get_pixels = ff_get_pixels_8_mmi;
+        switch (avctx->bits_per_raw_sample) {
+        case 9:
+        case 10:
+        case 12:
+        case 14:
+            c->get_pixels = ff_get_pixels_16_msa;
+            break;
+        default:
+            if (avctx->bits_per_raw_sample <= 8 || avctx->codec_type !=
+                AVMEDIA_TYPE_VIDEO) {
+                c->get_pixels = ff_get_pixels_8_msa;
+            }
+            break;
+        }
     }
 }
-#endif /* HAVE_MMI */
-
-void ff_pixblockdsp_init_mips(PixblockDSPContext *c, AVCodecContext *avctx,
-                              unsigned high_bit_depth)
-{
-#if HAVE_MMI
-    pixblockdsp_init_mmi(c, avctx, high_bit_depth);
-#endif /* HAVE_MMI */
-#if HAVE_MSA
-    pixblockdsp_init_msa(c, avctx, high_bit_depth);
-#endif  // #if HAVE_MSA
-}