diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-12-02 03:52:40 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-05-02 05:14:42 +0200 |
commit | a7f4abbc62cb6b768c9bcb927ba2485ba6e61913 (patch) | |
tree | 2995d2f17dd43fcede383b8f8ecf0804389cdbf2 /libavcodec | |
parent | 56df06dd8346687d6d9b7321f2af41e4fd614ee3 (diff) | |
download | ffmpeg-a7f4abbc62cb6b768c9bcb927ba2485ba6e61913.tar.gz |
avcodec/snow: Hardcode table to save space
The size of ff_qexp is only 32 bytes, but the code to generate it at
runtime takes 47 bytes (GCC 9.3, x64, -O3 in an av_cold function); so
just hardcode it.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/snow.c | 10 | ||||
-rw-r--r-- | libavcodec/snow.h | 2 | ||||
-rw-r--r-- | libavcodec/snowdata.h | 10 |
3 files changed, 9 insertions, 13 deletions
diff --git a/libavcodec/snow.c b/libavcodec/snow.c index bb65a6f43f..a037e36873 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -123,15 +123,6 @@ int ff_snow_alloc_blocks(SnowContext *s){ return 0; } -static av_cold void init_qexp(void){ - int i; - double v=128; - - for(i=0; i<QROOT; i++){ - ff_qexp[i]= lrintf(v); - v *= pow(2, 1.0 / QROOT); - } -} static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, int stride, int b_w, int b_h, int dx, int dy){ static const uint8_t weight[64]={ 8,7,6,5,4,3,2,1, @@ -433,7 +424,6 @@ static av_cold void snow_static_init(void) for (int i = 0; i < MAX_REF_FRAMES; i++) for (int j = 0; j < MAX_REF_FRAMES; j++) ff_scale_mv_ref[i][j] = 256 * (i + 1) / (j + 1); - init_qexp(); } av_cold int ff_snow_common_init(AVCodecContext *avctx){ diff --git a/libavcodec/snow.h b/libavcodec/snow.h index 41a3bef4de..c0d2599859 100644 --- a/libavcodec/snow.h +++ b/libavcodec/snow.h @@ -194,7 +194,7 @@ typedef struct SnowContext{ /* Tables */ extern const uint8_t * const ff_obmc_tab[4]; -extern uint8_t ff_qexp[QROOT]; +extern const uint8_t ff_qexp[QROOT]; extern int ff_scale_mv_ref[MAX_REF_FRAMES][MAX_REF_FRAMES]; /* C bits used by mmx/sse2/altivec */ diff --git a/libavcodec/snowdata.h b/libavcodec/snowdata.h index 490fdf8bd6..ca0c1e3f7a 100644 --- a/libavcodec/snowdata.h +++ b/libavcodec/snowdata.h @@ -124,8 +124,14 @@ const uint8_t * const ff_obmc_tab[4]= { obmc32, obmc16, obmc8, obmc4 }; -/* runtime generated tables */ -uint8_t ff_qexp[QROOT]; +/* ff_qexp[i] = lrintf(128 * 2^(i / QROOT)) with QROOT = 32 */ +const uint8_t ff_qexp[QROOT] = { + 128, 131, 134, 137, 140, 143, 146, 149, 152, 156, 159, + 162, 166, 170, 173, 177, 181, 185, 189, 193, 197, 202, + 206, 211, 215, 220, 225, 230, 235, 240, 245, 251, +}; + +/* table generated at runtime */ int ff_scale_mv_ref[MAX_REF_FRAMES][MAX_REF_FRAMES]; |