]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
AAC: Unroll code within decode_spectrum_and_dequant(). Gives 12% net speed gain.
authorsuperdump <superdump@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 9 Dec 2008 17:08:40 +0000 (17:08 +0000)
committersuperdump <superdump@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 9 Dec 2008 17:08:40 +0000 (17:08 +0000)
Patch by Alex Converse (alex converse gmail com)

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@16040 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/aac.c

index b58fa874320eb36f092d40e203616f77817eddc4..5be16165b5bae8d34800ed35b5f833333bb605f8 100644 (file)
@@ -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];
+                        }
                     }
                 }
             }