[soc]: r2945 - nellyenc/nellymoserenc.c
Author: bwolowiec Date: Wed Jul 30 23:06:37 2008 New Revision: 2945 Log: precalculate most used pow() values Modified: nellyenc/nellymoserenc.c Modified: nellyenc/nellymoserenc.c ============================================================================== --- nellyenc/nellymoserenc.c (original) +++ nellyenc/nellymoserenc.c Wed Jul 30 23:06:37 2008 @@ -24,6 +24,7 @@ #include "avcodec.h" #include "dsputil.h" +#define MAX_POW_CACHED (1<<15) /* * FIXME: Bitstream from vorbis_enc.c (move to seperate file?) @@ -81,6 +82,7 @@ typedef struct NellyMoserEncodeContext { DSPContext dsp; MDCTContext mdct_ctx; float pows[NELLY_FILL_LEN]; + float pow_table[MAX_POW_CACHED]; DECLARE_ALIGNED_16(float,mdct_tmp[NELLY_BUF_LEN*2]); DECLARE_ALIGNED_16(float,mdct_out[NELLY_BUF_LEN*2]); } NellyMoserEncodeContext; @@ -123,6 +125,8 @@ static av_cold int encode_init(AVCodecCo sine_window[255-i] = sine_window[i]; } } + for(i=0; i<MAX_POW_CACHED; i++) + s->pow_table[i] = -pow(2, -i/2048.0 - 3.0); s->bufsize = 0; return 0; @@ -203,7 +207,11 @@ static void encode_block(NellyMoserEncod val = ff_nelly_init_table[bk]; } - pval = -pow(2, -val/2048.0 - 3.0); + if(val >= 0 && val < MAX_POW_CACHED){ + pval = s->pow_table[val]; + }else{ + pval = -pow(2, -val/2048.0 - 3.0); + } for (k = 0; k < ff_nelly_band_sizes_table[i]; k++) { s->mdct_out[j+k] *= pval; s->mdct_out[j+k+NELLY_BUF_LEN] *= pval;
On Wed, Jul 30, 2008 at 11:06:37PM +0200, bwolowiec wrote:
Author: bwolowiec Date: Wed Jul 30 23:06:37 2008 New Revision: 2945
Log: precalculate most used pow() values
Modified: nellyenc/nellymoserenc.c
Modified: nellyenc/nellymoserenc.c ============================================================================== --- nellyenc/nellymoserenc.c (original) +++ nellyenc/nellymoserenc.c Wed Jul 30 23:06:37 2008 @@ -24,6 +24,7 @@ #include "avcodec.h" #include "dsputil.h"
+#define MAX_POW_CACHED (1<<15)
/* * FIXME: Bitstream from vorbis_enc.c (move to seperate file?) @@ -81,6 +82,7 @@ typedef struct NellyMoserEncodeContext { DSPContext dsp; MDCTContext mdct_ctx; float pows[NELLY_FILL_LEN]; + float pow_table[MAX_POW_CACHED];
please dont put arrays of constants in the context, they would be duplicated that way for every instance of the encoder.
DECLARE_ALIGNED_16(float,mdct_tmp[NELLY_BUF_LEN*2]); DECLARE_ALIGNED_16(float,mdct_out[NELLY_BUF_LEN*2]); } NellyMoserEncodeContext; @@ -123,6 +125,8 @@ static av_cold int encode_init(AVCodecCo sine_window[255-i] = sine_window[i]; } } + for(i=0; i<MAX_POW_CACHED; i++) + s->pow_table[i] = -pow(2, -i/2048.0 - 3.0);
s->bufsize = 0; return 0; @@ -203,7 +207,11 @@ static void encode_block(NellyMoserEncod val = ff_nelly_init_table[bk]; }
- pval = -pow(2, -val/2048.0 - 3.0); + if(val >= 0 && val < MAX_POW_CACHED){ + pval = s->pow_table[val]; + }else{ + pval = -pow(2, -val/2048.0 - 3.0); + }
you only need a table of 2048 entries pow(2, x/2048 + y) == pow(2, x/2048)*pow(2, y) and pow(2, y) is 1,2,4,8 ... aka a shift above x contains the 0.0 ... 1.0 part and y the integer part [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Breaking DRM is a little like attempting to break through a door even though the window is wide open and the only thing in the house is a bunch of things you dont want and which you would get tomorrow for free anyway
participants (2)
-
bwolowiec -
Michael Niedermayer