summaryrefslogtreecommitdiff
path: root/libavcodec/dsd_tablegen.h
diff options
context:
space:
mode:
authorGanesh Ajjanagadde <gajjanagadde@gmail.com>2015-12-29 08:18:44 -0800
committerGanesh Ajjanagadde <gajjanagadde@gmail.com>2015-12-30 08:45:19 -0800
commitb272c3a5aabeafb37d5aeecc4524e8a8aeecf9da (patch)
tree8961827080f56c292c29dd27e2bf730c3529ea37 /libavcodec/dsd_tablegen.h
parent29bc293297a6edb44114818b3485f50c137d428d (diff)
lavc/dsd_tablegen: speed up table generation
Tables are bit identical. Sample benchmark (Haswell, GNU/Linux+gcc): old: 814485 decicycles in dsd_ctables_tableinit, 512 runs, 0 skips new: 356808 decicycles in dsd_ctable_tableinit, 512 runs, 0 skips Binary size should essentially be identical, and is in fact identical on the configuration I tested on. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
Diffstat (limited to 'libavcodec/dsd_tablegen.h')
-rw-r--r--libavcodec/dsd_tablegen.h19
1 files changed, 10 insertions, 9 deletions
diff --git a/libavcodec/dsd_tablegen.h b/libavcodec/dsd_tablegen.h
index 6afb4167da..d4ef302188 100644
--- a/libavcodec/dsd_tablegen.h
+++ b/libavcodec/dsd_tablegen.h
@@ -78,16 +78,17 @@ static float ctables[CTABLES][256];
static av_cold void dsd_ctables_tableinit(void)
{
- int t, e, m, k;
- double acc;
- for (t = 0; t < CTABLES; ++t) {
- k = FFMIN(HTAPS - t * 8, 8);
- for (e = 0; e < 256; ++e) {
- acc = 0.0;
- for (m = 0; m < k; ++m)
- acc += (((e >> (7 - m)) & 1) * 2 - 1) * htaps[t * 8 + m];
- ctables[CTABLES - 1 - t][e] = (float)acc;
+ int t, e, m, sign;
+ double acc[CTABLES];
+ for (e = 0; e < 256; ++e) {
+ memset(acc, 0, sizeof(acc));
+ for (m = 0; m < 8; ++m) {
+ sign = (((e >> (7 - m)) & 1) * 2 - 1);
+ for (t = 0; t < CTABLES; ++t)
+ acc[t] += sign * htaps[t * 8 + m];
}
+ for (t = 0; t < CTABLES; ++t)
+ ctables[CTABLES - 1 - t][e] = acc[t];
}
}
#endif /* CONFIG_HARDCODED_TABLES */