[SCM] libav/experimental: Fix the short block transform for atrac1.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:51:27 UTC 2013


The following commit has been merged in the experimental branch:
commit 0105f49792f675ecdca76b59979a70e1e21872dd
Author: Benjamin Larsson <banan at ludd.ltu.se>
Date:   Sat Sep 19 01:45:00 2009 +0000

    Fix the short block transform for atrac1.
    
    Originally committed as revision 19917 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/atrac1.c b/libavcodec/atrac1.c
index 42c4801..17f90b1 100644
--- a/libavcodec/atrac1.c
+++ b/libavcodec/atrac1.c
@@ -73,7 +73,6 @@ typedef struct {
 typedef struct {
     AT1SUCtx            SUs[AT1_MAX_CHANNELS];              ///< channel sound unit
     DECLARE_ALIGNED_16(float,spec[AT1_SU_SAMPLES]);         ///< the mdct spectrum buffer
-    DECLARE_ALIGNED_16(float,short_buf[512]);               ///< buffer for the short mode
 
     DECLARE_ALIGNED_16(float, low[256]);
     DECLARE_ALIGNED_16(float, mid[256]);
@@ -133,6 +132,7 @@ static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q)
             return -1;
 
         if (num_blocks == 1) {
+            /* long blocks */
             at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos], nbits, band_num);
             pos += block_size; // move to the next mdct block in the spectrum
 
@@ -142,29 +142,21 @@ static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q)
             memcpy(q->bands[band_num]+32, &su->spectrum[0][ref_pos+16], 240 * sizeof(float));
 
         } else {
-            /* calc start position for the 1st short block: 96(128) or 112(256) */
-            int short_pos = 32;
+            /* short blocks */
             float *prev_buf;
-            start_pos = (band_samples * (num_blocks - 1)) >> (log2_block_count + 1);
-            memset(&su->spectrum[0][ref_pos], 0, sizeof(float) * (band_samples * 2));
-
+            start_pos = 0;
             prev_buf = &su->spectrum[1][ref_pos+band_samples-16];
             for (; num_blocks!=0 ; num_blocks--) {
-                /* use hardcoded nbits for the short mode */
-                at1_imdct(q, &q->spec[pos], &q->short_buf[short_pos], 5, band_num);
+                at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos+start_pos], 5, band_num);
 
                 /* overlap and window between short blocks */
-                q->dsp.vector_fmul_window(&su->spectrum[0][ref_pos+start_pos],
-                                          &q->short_buf[short_pos-16],
-                                          &q->short_buf[short_pos],short_window, 0, 16);
-
-                prev_buf = &q->short_buf[short_pos+16];
+                q->dsp.vector_fmul_window(&q->bands[band_num][start_pos], prev_buf,
+                                          &su->spectrum[0][ref_pos+start_pos], short_window, 0, 16);
 
+                prev_buf = &su->spectrum[0][ref_pos+start_pos+16];
                 start_pos += 32; // use hardcoded block_size
                 pos += 32;
-                short_pos +=32;
             }
-            memcpy(q->bands[band_num], &su->spectrum[0][ref_pos], band_samples*sizeof(float));
         }
         ref_pos += band_samples;
     }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list