]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mips/h264chroma_init_mips.c
avutil/pixdesc: Remove deprecated off-by-one fields from pix fmt descs
[ffmpeg] / libavcodec / mips / h264chroma_init_mips.c
index ae817e47ae6586ade0809e47e2d74d8e1a950dd7..5551a7c2fe5f8ef1eacc87d9d815a6684a4de973 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
+#include "libavutil/mips/cpu.h"
 #include "h264chroma_mips.h"
 
-#if HAVE_MSA
-static av_cold void h264chroma_init_msa(H264ChromaContext *c, int bit_depth)
-{
-    const int high_bit_depth = bit_depth > 8;
-
-    if (!high_bit_depth) {
-        c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_msa;
-        c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_msa;
-        c->put_h264_chroma_pixels_tab[2] = ff_put_h264_chroma_mc2_msa;
-
-        c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_msa;
-        c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_msa;
-        c->avg_h264_chroma_pixels_tab[2] = ff_avg_h264_chroma_mc2_msa;
-    }
-}
-#endif  // #if HAVE_MSA
 
-#if HAVE_MMI
-static av_cold void h264chroma_init_mmi(H264ChromaContext *c, int bit_depth)
+av_cold void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth)
 {
+    int cpu_flags = av_get_cpu_flags();
     int high_bit_depth = bit_depth > 8;
 
-    if (!high_bit_depth) {
-        c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmi;
-        c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_mmi;
-        c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmi;
-        c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_mmi;
+    /* MMI apears to be faster than MSA here */
+    if (have_msa(cpu_flags)) {
+        if (!high_bit_depth) {
+            c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_msa;
+            c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_msa;
+            c->put_h264_chroma_pixels_tab[2] = ff_put_h264_chroma_mc2_msa;
+
+            c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_msa;
+            c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_msa;
+            c->avg_h264_chroma_pixels_tab[2] = ff_avg_h264_chroma_mc2_msa;
+        }
     }
-}
-#endif /* HAVE_MMI */
 
-av_cold void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth)
-{
-#if HAVE_MMI
-    h264chroma_init_mmi(c, bit_depth);
-#endif /* HAVE_MMI */
-#if HAVE_MSA
-    h264chroma_init_msa(c, bit_depth);
-#endif  // #if HAVE_MSA
+    if (have_mmi(cpu_flags)) {
+        if (!high_bit_depth) {
+            c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmi;
+            c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_mmi;
+            c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmi;
+            c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_mmi;
+        }
+    }
 }