dca: use defines for subband related constants
authorAlexandra Hájková <alexandra.khirnova@gmail.com>
Wed, 30 Dec 2015 14:29:03 +0000 (15:29 +0100)
committerJanne Grunau <janne-libav@jannau.net>
Thu, 31 Dec 2015 10:40:32 +0000 (11:40 +0100)
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
libavcodec/dca.h
libavcodec/dcadec.c
libavcodec/dcadsp.c
libavcodec/dcadsp.h

index a85470d..787a9c7 100644 (file)
@@ -147,7 +147,7 @@ typedef struct DCAAudioHeader {
 } DCAAudioHeader;
 
 typedef struct DCAChan {
-    DECLARE_ALIGNED(32, int32_t, subband_samples)[DCA_BLOCKS_MAX][DCA_SUBBANDS][8];
+    DECLARE_ALIGNED(32, int32_t, subband_samples)[DCA_BLOCKS_MAX][DCA_SUBBANDS][SAMPLES_PER_SUBBAND];
 
     /* Subband samples history (for ADPCM) */
     DECLARE_ALIGNED(32, int32_t, subband_samples_hist)[DCA_SUBBANDS][4];
index a25436c..43992dd 100644 (file)
@@ -140,8 +140,6 @@ static const uint64_t dca_core_channel_layout[] = {
 
 #define DCA_NSYNCAUX        0x9A1105A0
 
-#define SAMPLES_PER_SUBBAND 8 // number of samples per subband per subsubframe
-
 /** Bit allocation */
 typedef struct BitAlloc {
     int offset;                 ///< code values offset
@@ -544,7 +542,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][SAMPLES_PER_SUBBAND], float *samples_out,
+                            float samples_in[DCA_SUBBANDS][SAMPLES_PER_SUBBAND], float *samples_out,
                             float scale)
 {
     const float *prCoeff;
@@ -592,7 +590,8 @@ 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][SAMPLES_PER_SUBBAND],
+static void qmf_64_subbands(DCAContext *s, int chans,
+                            float samples_in[DCA_SUBBANDS_X96K][SAMPLES_PER_SUBBAND],
                             float *samples_out, float scale)
 {
     float raXin[64];
@@ -601,7 +600,7 @@ static void qmf_64_subbands(DCAContext *s, int chans, float samples_in[64][SAMPL
     float *raZ = s->dca_chan[chans].subband_fir_noidea;
     unsigned i, j, k, subindex;
 
-    for (i = s->audio_header.subband_activity[chans]; i < 64; i++)
+    for (i = s->audio_header.subband_activity[chans]; i < DCA_SUBBANDS_X96K; i++)
         raXin[i] = 0.0;
     for (subindex = 0; subindex < SAMPLES_PER_SUBBAND; subindex++) {
         for (i = 0; i < s->audio_header.subband_activity[chans]; i++)
@@ -622,14 +621,14 @@ static void qmf_64_subbands(DCAContext *s, int chans, float samples_in[64][SAMPL
             raX[63 - k] = s->qmf64_table->rsin[k] * (A[k] - B[k]);
         }
 
-        for (i = 0; i < 64; i++) {
+        for (i = 0; i < DCA_SUBBANDS_X96K; i++) {
             float out = raZ[i];
             for (j = 0; j < 1024; j += 128)
                 out += ff_dca_fir_64bands[j + i] * (raX[j + i] - raX[j + 63 - i]);
             *samples_out++ = out * scale;
         }
 
-        for (i = 0; i < 64; i++) {
+        for (i = 0; i < DCA_SUBBANDS_X96K; i++) {
             float hist = 0.0;
             for (j = 0; j < 1024; j += 128)
                 hist += ff_dca_fir_64bands[64 + j + i] * (-raX[i + j] - raX[j + 63 - i]);
@@ -938,7 +937,7 @@ static int dca_filter_channels(DCAContext *s, int block_index, int upsample)
     int k;
 
     if (upsample) {
-        LOCAL_ALIGNED(32, float, samples, [64], [SAMPLES_PER_SUBBAND]);
+        LOCAL_ALIGNED(32, float, samples, [DCA_SUBBANDS_X96K], [SAMPLES_PER_SUBBAND]);
 
         if (!s->qmf64_table) {
             s->qmf64_table = qmf64_precompute();
@@ -952,7 +951,7 @@ static int dca_filter_channels(DCAContext *s, int block_index, int upsample)
                      s->dca_chan[k].subband_samples[block_index];
 
             s->fmt_conv.int32_to_float(samples[0], subband_samples[0],
-                                       64 * SAMPLES_PER_SUBBAND);
+                                       DCA_SUBBANDS_X96K * SAMPLES_PER_SUBBAND);
 
             if (s->channel_order_tab[k] >= 0)
                 qmf_64_subbands(s, k, samples,
@@ -962,14 +961,14 @@ static int dca_filter_channels(DCAContext *s, int block_index, int upsample)
         }
     } else {
         /* 32 subbands QMF */
-        LOCAL_ALIGNED(32, float, samples, [32], [SAMPLES_PER_SUBBAND]);
+        LOCAL_ALIGNED(32, float, samples, [DCA_SUBBANDS], [SAMPLES_PER_SUBBAND]);
 
         for (k = 0; k < s->audio_header.prim_channels; k++) {
             int32_t (*subband_samples)[SAMPLES_PER_SUBBAND] =
                      s->dca_chan[k].subband_samples[block_index];
 
             s->fmt_conv.int32_to_float(samples[0], subband_samples[0],
-                                       32 * SAMPLES_PER_SUBBAND);
+                                       DCA_SUBBANDS * SAMPLES_PER_SUBBAND);
 
             if (s->channel_order_tab[k] >= 0)
                 qmf_32_subbands(s, k, samples,
index ec3561d..beec200 100644 (file)
@@ -27,7 +27,7 @@
 #include "dcadsp.h"
 #include "dcamath.h"
 
-static void decode_hf_c(int32_t dst[DCA_SUBBANDS][8],
+static void decode_hf_c(int32_t dst[DCA_SUBBANDS][SAMPLES_PER_SUBBAND],
                         const int32_t vq_num[DCA_SUBBANDS],
                         const int8_t hf_vq[1024][32], intptr_t vq_offset,
                         int32_t scale[DCA_SUBBANDS][2],
@@ -62,7 +62,7 @@ static inline void dca_lfe_fir(float *out, const float *in, const float *coefs,
     }
 }
 
-static void dca_qmf_32_subbands(float samples_in[32][8], int sb_act,
+static void dca_qmf_32_subbands(float samples_in[DCA_SUBBANDS][SAMPLES_PER_SUBBAND], int sb_act,
                                 SynthFilterContext *synth, FFTContext *imdct,
                                 float synth_buf_ptr[512],
                                 int *synth_buf_offset, float synth_buf2[32],
@@ -103,7 +103,7 @@ static void dequantize_c(int32_t *samples, uint32_t step_size, uint32_t scale)
         shift = 0;
     step_scale = (int32_t)(step >> shift);
 
-    for (i = 0; i < 8; i++)
+    for (i = 0; i < SAMPLES_PER_SUBBAND; i++)
         samples[i] = dca_clip23(dca_norm((int64_t)samples[i] * step_scale, 22 - shift));
 }
 
index ad361bf..9ea89ea 100644 (file)
 #include "avfft.h"
 #include "synth_filter.h"
 
-#define DCA_SUBBANDS 32
+#define DCA_SUBBANDS_X96K  64
+#define DCA_SUBBANDS       32
+#define SAMPLES_PER_SUBBAND 8 // number of samples per subband per subsubframe
+
 
 typedef struct DCADSPContext {
     void (*lfe_fir[2])(float *out, const float *in, const float *coefs);
-    void (*qmf_32_subbands)(float samples_in[32][8], int sb_act,
+    void (*qmf_32_subbands)(float samples_in[DCA_SUBBANDS][SAMPLES_PER_SUBBAND], int sb_act,
                             SynthFilterContext *synth, FFTContext *imdct,
                             float synth_buf_ptr[512],
                             int *synth_buf_offset, float synth_buf2[32],
                             const float window[512], float *samples_out,
                             float raXin[32], float scale);
-    void (*decode_hf)(int32_t dst[DCA_SUBBANDS][8],
+    void (*decode_hf)(int32_t dst[DCA_SUBBANDS][SAMPLES_PER_SUBBAND],
                       const int32_t vq_num[DCA_SUBBANDS],
                       const int8_t hf_vq[1024][32], intptr_t vq_offset,
                       int32_t scale[DCA_SUBBANDS][2],