summaryrefslogtreecommitdiff
path: root/libavcodec/dcadec.c
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2015-10-03 12:36:42 +0200
committerHendrik Leppkes <h.leppkes@gmail.com>2015-10-03 12:36:42 +0200
commita11741c293939193657a82e6055a37dfc6ed910c (patch)
treebf640b254616024bb42e8569a798ea5ce493d6bb /libavcodec/dcadec.c
parent98ca981a238c4db5145fc705561ce1b29b2fc8f0 (diff)
parentd0a3e89d41b05f9ed0e7401c352b60ed4f4d1ed5 (diff)
Merge commit 'd0a3e89d41b05f9ed0e7401c352b60ed4f4d1ed5'
* commit 'd0a3e89d41b05f9ed0e7401c352b60ed4f4d1ed5': dcadec: make a number of samples per subband per subsubframe a named constant Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
Diffstat (limited to 'libavcodec/dcadec.c')
-rw-r--r--libavcodec/dcadec.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
index 10efddadea..bf28f3bca1 100644
--- a/libavcodec/dcadec.c
+++ b/libavcodec/dcadec.c
@@ -112,6 +112,7 @@ enum DCAXxchSpeakerMask {
#define DCA_NSYNCAUX 0x9A1105A0
+#define SAMPLES_PER_SUBBAND 8 // number of samples per subband per subsubframe
/** Bit allocation */
typedef struct BitAlloc {
@@ -437,7 +438,7 @@ static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
if (!base_channel) {
s->subsubframes[s->current_subframe] = get_bits(&s->gb, 2) + 1;
- if (block_index + s->subsubframes[s->current_subframe] > s->sample_blocks/8) {
+ if (block_index + s->subsubframes[s->current_subframe] > (s->sample_blocks / SAMPLES_PER_SUBBAND)) {
s->subsubframes[s->current_subframe] = 1;
return AVERROR_INVALIDDATA;
}
@@ -616,7 +617,7 @@ static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
}
static void qmf_32_subbands(DCAContext *s, int chans,
- float samples_in[32][8], float *samples_out,
+ float samples_in[32][SAMPLES_PER_SUBBAND], float *samples_out,
float scale)
{
const float *prCoeff;
@@ -664,7 +665,7 @@ static QMF64_table *qmf64_precompute(void)
/* FIXME: Totally unoptimized. Based on the reference code and
* http://multimedia.cx/mirror/dca-transform.pdf, with guessed tweaks
* for doubling the size. */
-static void qmf_64_subbands(DCAContext *s, int chans, float samples_in[64][8],
+static void qmf_64_subbands(DCAContext *s, int chans, float samples_in[64][SAMPLES_PER_SUBBAND],
float *samples_out, float scale)
{
float raXin[64];
@@ -675,7 +676,7 @@ static void qmf_64_subbands(DCAContext *s, int chans, float samples_in[64][8],
for (i = s->subband_activity[chans]; i < 64; i++)
raXin[i] = 0.0;
- for (subindex = 0; subindex < 8; subindex++) {
+ for (subindex = 0; subindex < SAMPLES_PER_SUBBAND; subindex++) {
for (i = 0; i < s->subband_activity[chans]; i++)
raXin[i] = samples_in[i][subindex];
@@ -866,8 +867,8 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
const float *quant_step_table;
/* FIXME */
- float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
- LOCAL_ALIGNED_16(int32_t, block, [8 * DCA_SUBBANDS]);
+ float (*subband_samples)[DCA_SUBBANDS][SAMPLES_PER_SUBBAND] = s->subband_samples[block_index];
+ LOCAL_ALIGNED_16(int32_t, block, [SAMPLES_PER_SUBBAND * DCA_SUBBANDS]);
/*
* Audio data
@@ -905,7 +906,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
*/
if (!abits) {
rscale[l] = 0;
- memset(block + 8 * l, 0, 8 * sizeof(block[0]));
+ memset(block + SAMPLES_PER_SUBBAND * l, 0, SAMPLES_PER_SUBBAND * sizeof(block[0]));
} else {
/* Deal with transients */
int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l];
@@ -923,7 +924,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
block_code1 = get_bits(&s->gb, size);
block_code2 = get_bits(&s->gb, size);
err = decode_blockcodes(block_code1, block_code2,
- levels, block + 8 * l);
+ levels, block + SAMPLES_PER_SUBBAND * l);
if (err) {
av_log(s->avctx, AV_LOG_ERROR,
"ERROR: block code look-up failed\n");
@@ -931,20 +932,20 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
}
} else {
/* no coding */
- for (m = 0; m < 8; m++)
- block[8 * l + m] = get_sbits(&s->gb, abits - 3);
+ for (m = 0; m < SAMPLES_PER_SUBBAND; m++)
+ block[SAMPLES_PER_SUBBAND * l + m] = get_sbits(&s->gb, abits - 3);
}
} else {
/* Huffman coded */
- for (m = 0; m < 8; m++)
- block[8 * l + m] = get_bitalloc(&s->gb,
+ for (m = 0; m < SAMPLES_PER_SUBBAND; m++)
+ block[SAMPLES_PER_SUBBAND * l + m] = get_bitalloc(&s->gb,
&dca_smpl_bitalloc[abits], sel);
}
}
}
s->fmt_conv.int32_to_float_fmul_array8(&s->fmt_conv, subband_samples[k][0],
- block, rscale, 8 * s->vq_start_subband[k]);
+ block, rscale, SAMPLES_PER_SUBBAND * s->vq_start_subband[k]);
for (l = 0; l < s->vq_start_subband[k]; l++) {
int m;
@@ -963,7 +964,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
ff_dca_adpcm_vb[s->prediction_vq[k][l]][3] *
s->subband_samples_hist[k][l][0]) *
(1.0f / 8192);
- for (m = 1; m < 8; m++) {
+ for (m = 1; m < SAMPLES_PER_SUBBAND; m++) {
float sum = ff_dca_adpcm_vb[s->prediction_vq[k][l]][0] *
subband_samples[k][l][m - 1];
for (n = 2; n <= 4; n++)
@@ -988,7 +989,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
s->debug_flag |= 0x01;
}
s->dcadsp.decode_hf(subband_samples[k], s->high_freq_vq[k],
- ff_dca_high_freq_vq, subsubframe * 8,
+ ff_dca_high_freq_vq, subsubframe * SAMPLES_PER_SUBBAND,
s->scale_factor[k], s->vq_start_subband[k],
s->subband_activity[k]);
}
@@ -1012,7 +1013,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
static int dca_filter_channels(DCAContext *s, int block_index, int upsample)
{
- float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index];
+ float (*subband_samples)[DCA_SUBBANDS][SAMPLES_PER_SUBBAND] = s->subband_samples[block_index];
int k;
if (upsample) {
@@ -1742,7 +1743,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
s->profile = FF_PROFILE_DTS;
- for (i = 0; i < (s->sample_blocks / 8); i++) {
+ for (i = 0; i < (s->sample_blocks / SAMPLES_PER_SUBBAND); i++) {
if ((ret = dca_decode_block(s, 0, i))) {
av_log(avctx, AV_LOG_ERROR, "error decoding block\n");
return ret;
@@ -1811,7 +1812,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
return ret;
/* get output buffer */
- frame->nb_samples = 256 * (s->sample_blocks / 8);
+ frame->nb_samples = 256 * (s->sample_blocks / SAMPLES_PER_SUBBAND);
if (s->exss_ext_mask & DCA_EXT_EXSS_XLL) {
int xll_nb_samples = s->xll_segments * s->xll_smpl_in_seg;
/* Check for invalid/unsupported conditions first */
@@ -1881,7 +1882,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
}
/* filter to get final output */
- for (i = 0; i < (s->sample_blocks / 8); i++) {
+ for (i = 0; i < (s->sample_blocks / SAMPLES_PER_SUBBAND); i++) {
int ch;
unsigned block = upsample ? 512 : 256;
for (ch = 0; ch < channels; ch++)
@@ -1950,7 +1951,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
}
/* update lfe history */
- lfe_samples = 2 * s->lfe * (s->sample_blocks / 8);
+ lfe_samples = 2 * s->lfe * (s->sample_blocks / SAMPLES_PER_SUBBAND);
for (i = 0; i < 2 * s->lfe * 4; i++)
s->lfe_data[i] = s->lfe_data[i + lfe_samples];