You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -760,13 +760,15 @@ void ff_kbd_window_init(float *window, float alpha, int n); | ||||
|  * @param   n       size of half window | ||||
|  */ | ||||
| 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_256 [ 256]; | ||||
| extern float ff_sine_512 [ 512]; | ||||
| extern float ff_sine_1024[1024]; | ||||
| extern float ff_sine_2048[2048]; | ||||
| 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); | ||||
| 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) | ||||
|        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_256 [ 256]); | ||||
| DECLARE_ALIGNED(16, float, ff_sine_512 [ 512]); | ||||
| DECLARE_ALIGNED(16, float, ff_sine_1024[1024]); | ||||
| DECLARE_ALIGNED(16, float, ff_sine_2048[2048]); | ||||
| 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 | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -648,7 +648,7 @@ static void imdct_and_window(TwinContext *tctx, enum FrameType ftype, int wtype, | ||||
|         tctx->dsp.vector_fmul_window(out2, | ||||
|                                      prev_buf + (bsize-wsize)/2, | ||||
|                                      buf1 + bsize*j, | ||||
|                                      ff_sine_windows[av_log2(wsize) - 7], | ||||
|                                      ff_sine_windows[av_log2(wsize)], | ||||
|                                      0.0, | ||||
|                                      wsize/2); | ||||
|         out2 += wsize; | ||||
| @@ -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_s/2)   - 7], 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(size_m)    ], size_m  ); | ||||
|     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)], mtab->size); | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -341,8 +341,8 @@ int ff_wma_init(AVCodecContext *avctx, int flags2) | ||||
|     for (i = 0; i < s->nb_block_sizes; i++) { | ||||
|         int n; | ||||
|         n = 1 << (s->frame_len_bits - i); | ||||
|         ff_sine_window_init(ff_sine_windows[s->frame_len_bits - i - 7], n); | ||||
|         s->windows[i] = ff_sine_windows[s->frame_len_bits - i - 7]; | ||||
|         ff_sine_window_init(ff_sine_windows[s->frame_len_bits - i], n); | ||||
|         s->windows[i] = ff_sine_windows[s->frame_len_bits - i]; | ||||
|     } | ||||
|  | ||||
|     s->reset_block_lengths = 1; | ||||
|   | ||||
| @@ -426,7 +426,7 @@ static av_cold int decode_init(AVCodecContext *avctx) | ||||
|     /** init MDCT windows: simple sinus window */ | ||||
|     for (i = 0; i < WMAPRO_BLOCK_SIZES; 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); | ||||
|         s->windows[WMAPRO_BLOCK_SIZES - i - 1] = ff_sine_windows[win_idx]; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user