aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGanesh Ajjanagadde <gajjanagadde@gmail.com>2015-11-25 16:59:07 -0500
committerGanesh Ajjanagadde <gajjanagadde@gmail.com>2015-12-01 19:05:19 -0500
commit2f5075f5513fdec21ddba802af0f2433fcfd430e (patch)
treee7851f6ef3e2ee88cd828208ea342240118e95f2
parent1d0c94ddaef8225c75f72d5d8c54c34270f88d80 (diff)
downloadffmpeg-2f5075f5513fdec21ddba802af0f2433fcfd430e.tar.gz
avcodec/cbrt_tablegen: speed up dynamic table creation
On systems having cbrt, there is no reason to use the slow pow function. Sample benchmark (x86-64, Haswell, GNU/Linux): new: 5124920 decicycles in cbrt_tableinit, 1 runs, 0 skips old: 12321680 decicycles in cbrt_tableinit, 1 runs, 0 skips Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
-rw-r--r--libavcodec/cbrt_tablegen.h5
-rw-r--r--libavcodec/cbrt_tablegen_template.c1
2 files changed, 3 insertions, 3 deletions
diff --git a/libavcodec/cbrt_tablegen.h b/libavcodec/cbrt_tablegen.h
index 27a3e3ae29..59b5a1d236 100644
--- a/libavcodec/cbrt_tablegen.h
+++ b/libavcodec/cbrt_tablegen.h
@@ -29,7 +29,7 @@
#include "libavcodec/aac_defines.h"
#if USE_FIXED
-#define CBRT(x) (int)floor((x).f * 8192 + 0.5)
+#define CBRT(x) lrint((x).f * 8192)
#else
#define CBRT(x) x.i
#endif
@@ -49,13 +49,12 @@ static av_cold void AAC_RENAME(cbrt_tableinit)(void)
{
if (!cbrt_tab[(1<<13) - 1]) {
int i;
- /* cbrtf() isn't available on all systems, so we use powf(). */
for (i = 0; i < 1<<13; i++) {
union {
float f;
uint32_t i;
} f;
- f.f = pow(i, 1.0 / 3.0) * i;
+ f.f = cbrt(i) * i;
cbrt_tab[i] = CBRT(f);
}
}
diff --git a/libavcodec/cbrt_tablegen_template.c b/libavcodec/cbrt_tablegen_template.c
index 9dd2cf5de6..1d71d342ec 100644
--- a/libavcodec/cbrt_tablegen_template.c
+++ b/libavcodec/cbrt_tablegen_template.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#define CONFIG_HARDCODED_TABLES 0
#include "cbrt_tablegen.h"
+#include "libavutil/tablegen.h"
#include "tableprint.h"
int main(void)