Skip to content
Snippets Groups Projects
Commit 0105f497 authored by Benjamin Larsson's avatar Benjamin Larsson
Browse files

Fix the short block transform for atrac1.

Originally committed as revision 19917 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 0ae2ccff
No related branches found
No related tags found
No related merge requests found
...@@ -73,7 +73,6 @@ typedef struct { ...@@ -73,7 +73,6 @@ typedef struct {
typedef struct { typedef struct {
AT1SUCtx SUs[AT1_MAX_CHANNELS]; ///< channel sound unit AT1SUCtx SUs[AT1_MAX_CHANNELS]; ///< channel sound unit
DECLARE_ALIGNED_16(float,spec[AT1_SU_SAMPLES]); ///< the mdct spectrum buffer 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, low[256]);
DECLARE_ALIGNED_16(float, mid[256]); DECLARE_ALIGNED_16(float, mid[256]);
...@@ -133,6 +132,7 @@ static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q) ...@@ -133,6 +132,7 @@ static int at1_imdct_block(AT1SUCtx* su, AT1Ctx *q)
return -1; return -1;
if (num_blocks == 1) { if (num_blocks == 1) {
/* long blocks */
at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos], nbits, band_num); 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 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) ...@@ -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)); memcpy(q->bands[band_num]+32, &su->spectrum[0][ref_pos+16], 240 * sizeof(float));
} else { } else {
/* calc start position for the 1st short block: 96(128) or 112(256) */ /* short blocks */
int short_pos = 32;
float *prev_buf; float *prev_buf;
start_pos = (band_samples * (num_blocks - 1)) >> (log2_block_count + 1); start_pos = 0;
memset(&su->spectrum[0][ref_pos], 0, sizeof(float) * (band_samples * 2));
prev_buf = &su->spectrum[1][ref_pos+band_samples-16]; prev_buf = &su->spectrum[1][ref_pos+band_samples-16];
for (; num_blocks!=0 ; num_blocks--) { for (; num_blocks!=0 ; num_blocks--) {
/* use hardcoded nbits for the short mode */ at1_imdct(q, &q->spec[pos], &su->spectrum[0][ref_pos+start_pos], 5, band_num);
at1_imdct(q, &q->spec[pos], &q->short_buf[short_pos], 5, band_num);
/* overlap and window between short blocks */ /* overlap and window between short blocks */
q->dsp.vector_fmul_window(&su->spectrum[0][ref_pos+start_pos], q->dsp.vector_fmul_window(&q->bands[band_num][start_pos], prev_buf,
&q->short_buf[short_pos-16], &su->spectrum[0][ref_pos+start_pos], short_window, 0, 16);
&q->short_buf[short_pos],short_window, 0, 16);
prev_buf = &q->short_buf[short_pos+16];
prev_buf = &su->spectrum[0][ref_pos+start_pos+16];
start_pos += 32; // use hardcoded block_size start_pos += 32; // use hardcoded block_size
pos += 32; pos += 32;
short_pos +=32;
} }
memcpy(q->bands[band_num], &su->spectrum[0][ref_pos], band_samples*sizeof(float));
} }
ref_pos += band_samples; ref_pos += band_samples;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment