summaryrefslogtreecommitdiff
path: root/libavcodec/dcadec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-10-29 05:21:47 +0100
committerJustin Ruggles <justin.ruggles@gmail.com>2012-11-26 22:50:37 -0500
commit5d47850bbd9ea70f6ab6b8eecaf3992a8c444492 (patch)
treecdfd6b6e29463e1c41bb0f22553147798a71088f /libavcodec/dcadec.c
parent2fe0094e0bf939f563c2600083bee8f183c2763d (diff)
dcadec: skip QMF on unused channels
When the extra rear channel is present but unused, the s->channel_order_tab[] value for that channel is -1. The QMF can be skipped for the extra channel, and doing so avoids an out-of-array read on s->samples_chanptr[]. Signed-off-by: Michael Niedermayer <michaelni@gmx.at> Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Diffstat (limited to 'libavcodec/dcadec.c')
-rw-r--r--libavcodec/dcadec.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
index 712a72aed0..325f3fe96d 100644
--- a/libavcodec/dcadec.c
+++ b/libavcodec/dcadec.c
@@ -1279,9 +1279,10 @@ static int dca_filter_channels(DCAContext *s, int block_index)
for (k = 0; k < s->prim_channels; k++) {
/* static float pcm_to_double[8] = { 32768.0, 32768.0, 524288.0, 524288.0,
0, 8388608.0, 8388608.0 };*/
- qmf_32_subbands(s, k, subband_samples[k],
- s->samples_chanptr[s->channel_order_tab[k]],
- M_SQRT1_2 / 32768.0 /* pcm_to_double[s->source_pcm_res] */);
+ if (s->channel_order_tab[k] >= 0)
+ qmf_32_subbands(s, k, subband_samples[k],
+ s->samples_chanptr[s->channel_order_tab[k]],
+ M_SQRT1_2 / 32768.0 /* pcm_to_double[s->source_pcm_res] */);
}
/* Down mixing */