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