Commit 6776061b authored by Vitor Sessak's avatar Vitor Sessak

Add two more sizes to ff_sine_windows[] and also pad it with NULLs so

that FF_ELEMS(ff_sine_windows[x]) == 1 << x.

Fix issue 1384.

Originally committed as revision 19862 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 05db409c
...@@ -760,13 +760,15 @@ void ff_kbd_window_init(float *window, float alpha, int n); ...@@ -760,13 +760,15 @@ void ff_kbd_window_init(float *window, float alpha, int n);
* @param n size of half window * @param n size of half window
*/ */
void ff_sine_window_init(float *window, int n); void ff_sine_window_init(float *window, int n);
extern float ff_sine_32 [ 32];
extern float ff_sine_64 [ 64];
extern float ff_sine_128 [ 128]; extern float ff_sine_128 [ 128];
extern float ff_sine_256 [ 256]; extern float ff_sine_256 [ 256];
extern float ff_sine_512 [ 512]; extern float ff_sine_512 [ 512];
extern float ff_sine_1024[1024]; extern float ff_sine_1024[1024];
extern float ff_sine_2048[2048]; extern float ff_sine_2048[2048];
extern float ff_sine_4096[4096]; extern float ff_sine_4096[4096];
extern float * const ff_sine_windows[6]; extern float * const ff_sine_windows[13];
int ff_mdct_init(MDCTContext *s, int nbits, int inverse, double scale); int ff_mdct_init(MDCTContext *s, int nbits, int inverse, double scale);
void ff_imdct_calc_c(MDCTContext *s, FFTSample *output, const FFTSample *input); void ff_imdct_calc_c(MDCTContext *s, FFTSample *output, const FFTSample *input);
......
...@@ -48,13 +48,17 @@ av_cold void ff_kbd_window_init(float *window, float alpha, int n) ...@@ -48,13 +48,17 @@ av_cold void ff_kbd_window_init(float *window, float alpha, int n)
window[i] = sqrt(local_window[i] / sum); window[i] = sqrt(local_window[i] / sum);
} }
DECLARE_ALIGNED(16, float, ff_sine_32 [ 32]);
DECLARE_ALIGNED(16, float, ff_sine_64 [ 64]);
DECLARE_ALIGNED(16, float, ff_sine_128 [ 128]); DECLARE_ALIGNED(16, float, ff_sine_128 [ 128]);
DECLARE_ALIGNED(16, float, ff_sine_256 [ 256]); DECLARE_ALIGNED(16, float, ff_sine_256 [ 256]);
DECLARE_ALIGNED(16, float, ff_sine_512 [ 512]); DECLARE_ALIGNED(16, float, ff_sine_512 [ 512]);
DECLARE_ALIGNED(16, float, ff_sine_1024[1024]); DECLARE_ALIGNED(16, float, ff_sine_1024[1024]);
DECLARE_ALIGNED(16, float, ff_sine_2048[2048]); DECLARE_ALIGNED(16, float, ff_sine_2048[2048]);
DECLARE_ALIGNED(16, float, ff_sine_4096[4096]); DECLARE_ALIGNED(16, float, ff_sine_4096[4096]);
float * const ff_sine_windows[6] = { float * const ff_sine_windows[] = {
NULL, NULL, NULL, NULL, NULL, // unused
ff_sine_32 , ff_sine_64 ,
ff_sine_128, ff_sine_256, ff_sine_512, ff_sine_1024, ff_sine_2048, ff_sine_4096 ff_sine_128, ff_sine_256, ff_sine_512, ff_sine_1024, ff_sine_2048, ff_sine_4096
}; };
......
...@@ -648,7 +648,7 @@ static void imdct_and_window(TwinContext *tctx, enum FrameType ftype, int wtype, ...@@ -648,7 +648,7 @@ static void imdct_and_window(TwinContext *tctx, enum FrameType ftype, int wtype,
tctx->dsp.vector_fmul_window(out2, tctx->dsp.vector_fmul_window(out2,
prev_buf + (bsize-wsize)/2, prev_buf + (bsize-wsize)/2,
buf1 + bsize*j, buf1 + bsize*j,
ff_sine_windows[av_log2(wsize) - 7], ff_sine_windows[av_log2(wsize)],
0.0, 0.0,
wsize/2); wsize/2);
out2 += wsize; out2 += wsize;
...@@ -903,9 +903,9 @@ static av_cold void init_mdct_win(TwinContext *tctx) ...@@ -903,9 +903,9 @@ static av_cold void init_mdct_win(TwinContext *tctx)
} }
ff_sine_window_init(ff_sine_windows[av_log2(size_m) - 7], size_m ); ff_sine_window_init(ff_sine_windows[av_log2(size_m) ], size_m );
ff_sine_window_init(ff_sine_windows[av_log2(size_s/2) - 7], size_s/2); ff_sine_window_init(ff_sine_windows[av_log2(size_s/2) ], size_s/2);
ff_sine_window_init(ff_sine_windows[av_log2(mtab->size) - 7], mtab->size); ff_sine_window_init(ff_sine_windows[av_log2(mtab->size)], mtab->size);
} }
/** /**
......
...@@ -341,8 +341,8 @@ int ff_wma_init(AVCodecContext *avctx, int flags2) ...@@ -341,8 +341,8 @@ int ff_wma_init(AVCodecContext *avctx, int flags2)
for (i = 0; i < s->nb_block_sizes; i++) { for (i = 0; i < s->nb_block_sizes; i++) {
int n; int n;
n = 1 << (s->frame_len_bits - i); n = 1 << (s->frame_len_bits - i);
ff_sine_window_init(ff_sine_windows[s->frame_len_bits - i - 7], n); ff_sine_window_init(ff_sine_windows[s->frame_len_bits - i], n);
s->windows[i] = ff_sine_windows[s->frame_len_bits - i - 7]; s->windows[i] = ff_sine_windows[s->frame_len_bits - i];
} }
s->reset_block_lengths = 1; s->reset_block_lengths = 1;
......
...@@ -426,7 +426,7 @@ static av_cold int decode_init(AVCodecContext *avctx) ...@@ -426,7 +426,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
/** init MDCT windows: simple sinus window */ /** init MDCT windows: simple sinus window */
for (i = 0; i < WMAPRO_BLOCK_SIZES; i++) { for (i = 0; i < WMAPRO_BLOCK_SIZES; i++) {
const int n = 1 << (WMAPRO_BLOCK_MAX_BITS - i); const int n = 1 << (WMAPRO_BLOCK_MAX_BITS - i);
const int win_idx = WMAPRO_BLOCK_MAX_BITS - i - 7; const int win_idx = WMAPRO_BLOCK_MAX_BITS - i;
ff_sine_window_init(ff_sine_windows[win_idx], n); ff_sine_window_init(ff_sine_windows[win_idx], n);
s->windows[WMAPRO_BLOCK_SIZES - i - 1] = ff_sine_windows[win_idx]; s->windows[WMAPRO_BLOCK_SIZES - i - 1] = ff_sine_windows[win_idx];
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment