summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2009-09-27 07:16:51 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2009-09-27 07:16:51 +0000
commit8b11b44ea73f8052c8c2b606532037df848b1d76 (patch)
tree0cef29d1ab4e2d8a317d023c4279c12010872c4c
parente96f885aa092958cc0d54bbb191b82a0796518a4 (diff)
Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
depending on content. Originally committed as revision 20055 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/ac3dec.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index efeb284b4a..85c60241ed 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -416,17 +416,22 @@ static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
bin = s->start_freq[CPL_CH];
for (band = 0; band < s->num_cpl_bands; band++) {
+ int band_start = bin;
int band_end = bin + s->cpl_band_sizes[band];
- for (; bin < band_end; bin++) {
- for (ch = 1; ch <= s->fbw_channels; ch++) {
- if (s->channel_in_cpl[ch]) {
+ for (ch = 1; ch <= s->fbw_channels; ch++) {
+ if (s->channel_in_cpl[ch]) {
+ int64_t cpl_coord = s->cpl_coords[ch][band];
+ for (bin = band_start; bin < band_end; bin++) {
s->fixed_coeffs[ch][bin] = ((int64_t)s->fixed_coeffs[CPL_CH][bin] *
- (int64_t)s->cpl_coords[ch][band]) >> 23;
- if (ch == 2 && s->phase_flags[band])
- s->fixed_coeffs[ch][bin] = -s->fixed_coeffs[ch][bin];
+ cpl_coord) >> 23;
+ }
+ if (ch == 2 && s->phase_flags[band]) {
+ for (bin = band_start; bin < band_end; bin++)
+ s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
}
}
}
+ bin = band_end;
}
}