]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Add generic ff_sine_window_init function and implement in codecs appropriately
authorsuperdump <superdump@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 22 Jun 2008 15:12:27 +0000 (15:12 +0000)
committersuperdump <superdump@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 22 Jun 2008 15:12:27 +0000 (15:12 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@13888 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/cook.c
libavcodec/dsputil.h
libavcodec/imc.c
libavcodec/mdct.c
libavcodec/nellymoserdec.c

index fa945ec8411575d105e77e8cc028d169730e76fe..6661ee4979c1ab517184f79437e397dc54dbf0df 100644 (file)
@@ -239,9 +239,9 @@ static int init_cook_mlt(COOKContext *q) {
       return -1;
 
     /* Initialize the MLT window: simple sine window. */
-    alpha = M_PI / (2.0 * (float)mlt_size);
+    ff_sine_window_init(q->mlt_window, mlt_size);
     for(j=0 ; j<mlt_size ; j++)
-        q->mlt_window[j] = sin((j + 0.5) * alpha) * sqrt(2.0 / q->samples_per_channel);
+        q->mlt_window[j] *= sqrt(2.0 / q->samples_per_channel);
 
     /* Initialize the MDCT. */
     if (ff_mdct_init(&q->mdct_ctx, av_log2(mlt_size)+1, 1)) {
index cd9ae08211c3a869cad8d84852110b8f20bd682a..0316a451b3e2cb00148b429d9b749ad263533de2 100644 (file)
@@ -649,6 +649,13 @@ typedef struct MDCTContext {
  */
 void ff_kbd_window_init(float *window, float alpha, int n);
 
+/**
+ * Generate a sine window.
+ * @param   window  pointer to half window
+ * @param   n       size of half window
+ */
+void ff_sine_window_init(float *window, int n);
+
 int ff_mdct_init(MDCTContext *s, int nbits, int inverse);
 void ff_imdct_calc(MDCTContext *s, FFTSample *output,
                 const FFTSample *input, FFTSample *tmp);
index 80372b82b404ba691fb70e3ff6a69b6cf946314b..934de4a6a9a18ae3e5fa12359c47d4963299dccd 100644 (file)
@@ -102,8 +102,9 @@ static av_cold int imc_decode_init(AVCodecContext * avctx)
         q->old_floor[i] = 1.0;
 
     /* Build mdct window, a simple sine window normalized with sqrt(2) */
+    ff_sine_window_init(q->mdct_sine_window, COEFFS);
     for(i = 0; i < COEFFS; i++)
-        q->mdct_sine_window[i] = sin((i + 0.5) / 512.0 * M_PI) * sqrt(2.0);
+        q->mdct_sine_window[i] *= sqrt(2.0);
     for(i = 0; i < COEFFS/2; i++){
         q->post_cos[i] = cos(i / 256.0 * M_PI);
         q->post_sin[i] = sin(i / 256.0 * M_PI);
index c51f809714417a35f3923203bf9e38a960bc1d81..07eef2b3d4c423a6cf3c210cba502a4078ae7fe6 100644 (file)
@@ -48,6 +48,13 @@ void ff_kbd_window_init(float *window, float alpha, int n)
        window[i] = sqrt(local_window[i] / sum);
 }
 
+// Generate a sine window.
+void ff_sine_window_init(float *window, int n) {
+    int i;
+    for(i = 0; i < n; i++)
+        window[i] = sin((i + 0.5) / (2 * n) * M_PI);
+}
+
 /**
  * init MDCT or IMDCT computation.
  */
index 5db963ebcf7d3cd8bb872c062e7779aae5736bab..b30400b680327a02fdcccfdd7e98ae08ac64892e 100644 (file)
@@ -148,9 +148,7 @@ static av_cold int decode_init(AVCodecContext * avctx) {
 
     /* Generate overlap window */
     if (!sine_window[0])
-        for (i=0 ; i<128; i++) {
-            sine_window[i] = sin((i + 0.5) / 256.0 * M_PI);
-        }
+        ff_sine_window_init(sine_window, 128);
 
     return 0;
 }