From c0893c3abb640fb9f2f337de7753bc53cf44b910 Mon Sep 17 00:00:00 2001 From: Alex Converse Date: Tue, 9 Dec 2008 17:08:40 +0000 Subject: [PATCH] AAC: Unroll code within decode_spectrum_and_dequant(). Gives 12% net speed gain. Patch by Alex Converse (alex converse gmail com) Originally committed as revision 16040 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/aac.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/libavcodec/aac.c b/libavcodec/aac.c index b58fa87432..5be16165b5 100644 --- a/libavcodec/aac.c +++ b/libavcodec/aac.c @@ -784,12 +784,19 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit } 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(AACContext * ac, float coef[1024], GetBit 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]; + } } } }