mpegaudio: avoid unnecessary copy in high-precision mode

Originally committed as revision 18745 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Måns Rullgård 2009-05-05 18:44:10 +00:00
parent adb206c238
commit bf030c887f
1 changed files with 9 additions and 9 deletions

View File

@ -846,31 +846,31 @@ void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset,
OUT_INT *samples, int incr, OUT_INT *samples, int incr,
int32_t sb_samples[SBLIMIT]) int32_t sb_samples[SBLIMIT])
{ {
int32_t tmp[32];
register MPA_INT *synth_buf; register MPA_INT *synth_buf;
register const MPA_INT *w, *w2, *p; register const MPA_INT *w, *w2, *p;
int j, offset, v; int j, offset;
OUT_INT *samples2; OUT_INT *samples2;
#if FRAC_BITS <= 15 #if FRAC_BITS <= 15
int32_t tmp[32];
int sum, sum2; int sum, sum2;
#else #else
int64_t sum, sum2; int64_t sum, sum2;
#endif #endif
dct32(tmp, sb_samples);
offset = *synth_buf_offset; offset = *synth_buf_offset;
synth_buf = synth_buf_ptr + offset; synth_buf = synth_buf_ptr + offset;
for(j=0;j<32;j++) {
v = tmp[j];
#if FRAC_BITS <= 15 #if FRAC_BITS <= 15
dct32(tmp, sb_samples);
for(j=0;j<32;j++) {
/* NOTE: can cause a loss in precision if very high amplitude /* NOTE: can cause a loss in precision if very high amplitude
sound */ sound */
v = av_clip_int16(v); synth_buf[j] = av_clip_int16(tmp[j]);
#endif
synth_buf[j] = v;
} }
#else
dct32(synth_buf, sb_samples);
#endif
/* copy to avoid wrap */ /* copy to avoid wrap */
memcpy(synth_buf + 512, synth_buf, 32 * sizeof(MPA_INT)); memcpy(synth_buf + 512, synth_buf, 32 * sizeof(MPA_INT));