[FFmpeg-cvslog] r16040 - trunk/libavcodec/aac.c
superdump
subversion
Tue Dec 9 18:08:41 CET 2008
Author: superdump
Date: Tue Dec 9 18:08:40 2008
New Revision: 16040
Log:
AAC: Unroll code within decode_spectrum_and_dequant(). Gives 12% net speed gain.
Patch by Alex Converse (alex converse gmail com)
Modified:
trunk/libavcodec/aac.c
Modified: trunk/libavcodec/aac.c
==============================================================================
--- trunk/libavcodec/aac.c (original)
+++ trunk/libavcodec/aac.c Tue Dec 9 18:08:40 2008
@@ -784,12 +784,19 @@ static int decode_spectrum_and_dequant(A
}
vq_ptr = &ff_aac_codebook_vectors[cur_band_type - 1][index * dim];
if (is_cb_unsigned) {
- for (j = 0; j < dim; j++)
- if (vq_ptr[j])
- coef[coef_tmp_idx + j] = 1 - 2*(int)get_bits1(gb);
+ if (vq_ptr[0]) coef[coef_tmp_idx ] = 1 - 2*(int)get_bits1(gb);
+ if (vq_ptr[1]) coef[coef_tmp_idx + 1] = 1 - 2*(int)get_bits1(gb);
+ if (dim == 4) {
+ if (vq_ptr[2]) coef[coef_tmp_idx + 2] = 1 - 2*(int)get_bits1(gb);
+ if (vq_ptr[3]) coef[coef_tmp_idx + 3] = 1 - 2*(int)get_bits1(gb);
+ }
}else {
- for (j = 0; j < dim; j++)
- coef[coef_tmp_idx + j] = 1.0f;
+ coef[coef_tmp_idx ] = 1.0f;
+ coef[coef_tmp_idx + 1] = 1.0f;
+ if (dim == 4) {
+ coef[coef_tmp_idx + 2] = 1.0f;
+ coef[coef_tmp_idx + 3] = 1.0f;
+ }
}
if (cur_band_type == ESC_BT) {
for (j = 0; j < 2; j++) {
@@ -808,10 +815,20 @@ static int decode_spectrum_and_dequant(A
coef[coef_tmp_idx + j] *= vq_ptr[j];
}
}else
- for (j = 0; j < dim; j++)
- coef[coef_tmp_idx + j] *= vq_ptr[j];
- for (j = 0; j < dim; j++)
- coef[coef_tmp_idx + j] *= sf[idx];
+ {
+ coef[coef_tmp_idx ] *= vq_ptr[0];
+ coef[coef_tmp_idx + 1] *= vq_ptr[1];
+ if (dim == 4) {
+ coef[coef_tmp_idx + 2] *= vq_ptr[2];
+ coef[coef_tmp_idx + 3] *= vq_ptr[3];
+ }
+ }
+ coef[coef_tmp_idx ] *= sf[idx];
+ coef[coef_tmp_idx + 1] *= sf[idx];
+ if (dim == 4) {
+ coef[coef_tmp_idx + 2] *= sf[idx];
+ coef[coef_tmp_idx + 3] *= sf[idx];
+ }
}
}
}
More information about the ffmpeg-cvslog
mailing list