You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Add ff_init_ff_cos_tabs function and use it in rdft.c to ensure that the
necessary ff_cos_tabs tables are initialized. Fixes issue 1507 (QDM2 broken since r20237 without hardcoded tables). Originally committed as revision 20464 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		| @@ -769,6 +769,12 @@ extern COSTABLE(32768); | ||||
| extern COSTABLE(65536); | ||||
| extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17]; | ||||
|  | ||||
| /** | ||||
|  * Initializes the cosine table in ff_cos_tabs[index] | ||||
|  * \param index index in ff_cos_tabs array of the table to initialize | ||||
|  */ | ||||
| void ff_init_ff_cos_tabs(int index); | ||||
|  | ||||
| extern SINTABLE(16); | ||||
| extern SINTABLE(32); | ||||
| extern SINTABLE(64); | ||||
|   | ||||
| @@ -61,6 +61,20 @@ static int split_radix_permutation(int i, int n, int inverse) | ||||
|     else                  return split_radix_permutation(i, m, inverse)*4 - 1; | ||||
| } | ||||
|  | ||||
| av_cold void ff_init_ff_cos_tabs(int index) | ||||
| { | ||||
| #if !CONFIG_HARDCODED_TABLES | ||||
|     int i; | ||||
|     int m = 1<<index; | ||||
|     double freq = 2*M_PI/m; | ||||
|     FFTSample *tab = ff_cos_tabs[index]; | ||||
|     for(i=0; i<=m/4; i++) | ||||
|         tab[i] = cos(i*freq); | ||||
|     for(i=1; i<m/4; i++) | ||||
|         tab[m/2-i] = tab[i]; | ||||
| #endif | ||||
| } | ||||
|  | ||||
| av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse) | ||||
| { | ||||
|     int i, j, m, n; | ||||
| @@ -96,17 +110,9 @@ av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse) | ||||
|     if (HAVE_MMX)     ff_fft_init_mmx(s); | ||||
|  | ||||
|     if (s->split_radix) { | ||||
| #if !CONFIG_HARDCODED_TABLES | ||||
|         for(j=4; j<=nbits; j++) { | ||||
|             int m = 1<<j; | ||||
|             double freq = 2*M_PI/m; | ||||
|             FFTSample *tab = ff_cos_tabs[j]; | ||||
|             for(i=0; i<=m/4; i++) | ||||
|                 tab[i] = cos(i*freq); | ||||
|             for(i=1; i<m/4; i++) | ||||
|                 tab[m/2-i] = tab[i]; | ||||
|             ff_init_ff_cos_tabs(j); | ||||
|         } | ||||
| #endif | ||||
|         for(i=0; i<n; i++) | ||||
|             s->revtab[-split_radix_permutation(i, n, s->inverse) & (n-1)] = i; | ||||
|         s->tmp_buf = av_malloc(n * sizeof(FFTComplex)); | ||||
|   | ||||
| @@ -64,6 +64,7 @@ av_cold int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans) | ||||
|     if (ff_fft_init(&s->fft, nbits-1, trans == IRDFT || trans == RIDFT) < 0) | ||||
|         return -1; | ||||
|  | ||||
|     ff_init_ff_cos_tabs(nbits); | ||||
|     s->tcos = ff_cos_tabs[nbits]; | ||||
|     s->tsin = ff_sin_tabs[nbits]+(trans == RDFT || trans == IRIDFT)*(n>>2); | ||||
| #if !CONFIG_HARDCODED_TABLES | ||||
|   | ||||
		Reference in New Issue
	
	Block a user