This is about 75% faster on Athlon64.
---
 libavcodec/ac3dsp.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/libavcodec/ac3dsp.c b/libavcodec/ac3dsp.c
index 98c7357..883a723 100644
--- a/libavcodec/ac3dsp.c
+++ b/libavcodec/ac3dsp.c
@@ -20,6 +20,7 @@
  */
 
 #include "libavutil/avassert.h"
+#include "libavutil/intreadwrite.h"
 #include "avcodec.h"
 #include "ac3.h"
 #include "ac3dsp.h"
@@ -164,8 +165,15 @@ static void ac3_extract_exponents_c(uint8_t *exp, int32_t 
*coef, int nb_coefs)
     int i;
 
     for (i = 0; i < nb_coefs; i++) {
+#if HAVE_FAST_CLZ
         int v = abs(coef[i]);
         exp[i] = v ? 23 - av_log2(v) : 24;
+#else
+        /* av_log2() is slow without fast clz, so get exponent from float 
instead */
+        av_alias32 c;
+        c.f32  = (abs(coef[i]) << 1) | 0x1;
+        exp[i] = 151 - (c.u32 >> 23);
+#endif
     }
 }
 
-- 
1.7.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to