diff options
author | Ganesh Ajjanagadde <gajjanagadde@gmail.com> | 2015-11-25 16:59:07 -0500 |
---|---|---|
committer | Ganesh Ajjanagadde <gajjanagadde@gmail.com> | 2015-12-01 19:05:19 -0500 |
commit | 2f5075f5513fdec21ddba802af0f2433fcfd430e (patch) | |
tree | e7851f6ef3e2ee88cd828208ea342240118e95f2 | |
parent | 1d0c94ddaef8225c75f72d5d8c54c34270f88d80 (diff) | |
download | ffmpeg-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.h | 5 | ||||
-rw-r--r-- | libavcodec/cbrt_tablegen_template.c | 1 |
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) |