summaryrefslogtreecommitdiffstats
path: root/src/libdca-2-normalisation-factor-sqrt2+output-bias.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/libdca-2-normalisation-factor-sqrt2+output-bias.patch')
-rw-r--r--src/libdca-2-normalisation-factor-sqrt2+output-bias.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/libdca-2-normalisation-factor-sqrt2+output-bias.patch b/src/libdca-2-normalisation-factor-sqrt2+output-bias.patch
new file mode 100644
index 0000000..2d4cdb5
--- /dev/null
+++ b/src/libdca-2-normalisation-factor-sqrt2+output-bias.patch
@@ -0,0 +1,112 @@
+This file is part of MXE.
+See index.html for further information.
+
+Taken from libdca svn: svn://svn.videolan.org/libdca/trunk.
+
+r84 | gbazin | 2008-06-01 16:13:33 +0000 (Sun, 01 Jun 2008) | 3 lines
+ * libdca/parse.c: Change output normalisation factor from 3/2 to sqrt(2).
+ Thanks to Alexander E. Patrakov for finding that this is the proper normalisation factor.
+ Fixed a bug where the output bias wasn't applied when downmixing wasn't being done.
+
+--- libdca.orig/libdca/parse.c
++++ libdca/libdca/parse.c
+@@ -59,12 +59,11 @@
+ static int decode_blockcode (int code, int levels, int *values);
+
+ static void qmf_32_subbands (dca_state_t * state, int chans,
+- double samples_in[32][8], sample_t *samples_out,
+- double rScale, sample_t bias);
++ double samples_in[32][8], sample_t *samples_out);
+
+ static void lfe_interpolation_fir (int nDecimationSelect, int nNumDeciSample,
+ double *samples_in, sample_t *samples_out,
+- double rScale, sample_t bias );
++ sample_t bias);
+
+ static void pre_calc_cosmod( dca_state_t * state );
+
+@@ -123,7 +122,9 @@
+ bitstream_get (state, 1);
+
+ *frame_length = (bitstream_get (state, 7) + 1) * 32;
++ if (*frame_length < 6 * 32) return 0;
+ frame_size = bitstream_get (state, 14) + 1;
++ if (frame_size < 96) return 0;
+ if (!state->word_mode) frame_size = frame_size * 8 / 14 * 2;
+
+ /* Audio channel arrangement */
+@@ -981,14 +982,7 @@
+ /* 32 subbands QMF */
+ for (k = 0; k < state->prim_channels; k++)
+ {
+- /*static double pcm_to_float[8] =
+- {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 8388608.0};*/
+-
+- qmf_32_subbands (state, k,
+- subband_samples[k],
+- &state->samples[256*k],
+- /*WTF ???*/ 32768.0*3/2/*pcm_to_float[state->source_pcm_res]*/,
+- 0/*state->bias*/);
++ qmf_32_subbands (state, k, subband_samples[k], &state->samples[256*k]);
+ }
+
+ /* Down/Up mixing */
+@@ -1000,6 +994,10 @@
+ {
+ dca_downmix (state->samples, state->amode, state->output, state->bias,
+ state->clev, state->slev);
++ } else if (state->bias)
++ {
++ for ( k = 0; k < 256*state->prim_channels; k++ )
++ state->samples[k] += state->bias;
+ }
+
+ /* Generate LFE samples for this subsubframe FIXME!!! */
+@@ -1011,8 +1009,7 @@
+ lfe_interpolation_fir (state->lfe, 2 * state->lfe,
+ state->lfe_data + lfe_samples +
+ 2 * state->lfe * subsubframe,
+- &state->samples[256*i_channels],
+- 8388608.0, state->bias);
++ &state->samples[256*i_channels], state->bias);
+ /* Outputs 20bits pcm samples */
+ }
+
+@@ -1142,9 +1139,9 @@
+ }
+
+ static void qmf_32_subbands (dca_state_t * state, int chans,
+- double samples_in[32][8], sample_t *samples_out,
+- double scale, sample_t bias)
++ double samples_in[32][8], sample_t *samples_out)
+ {
++ static const double scale = 1.4142135623730951 /* sqrt(2) */ * 32768.0;
+ const double *prCoeff;
+ int i, j, k;
+ double raXin[32];
+@@ -1211,7 +1208,7 @@
+
+ /* Create 32 PCM output samples */
+ for (i=0;i<32;i++)
+- samples_out[nChIndex++] = subband_fir_hist2[i] / scale + bias;
++ samples_out[nChIndex++] = subband_fir_hist2[i] / scale;
+
+ /* Update working arrays */
+ for (i=511;i>=32;i--)
+@@ -1225,7 +1222,7 @@
+
+ static void lfe_interpolation_fir (int nDecimationSelect, int nNumDeciSample,
+ double *samples_in, sample_t *samples_out,
+- double scale, sample_t bias)
++ sample_t bias)
+ {
+ /* samples_in: An array holding decimated samples.
+ * Samples in current subframe starts from samples_in[0],
+@@ -1235,6 +1232,7 @@
+ * samples_out: An array holding interpolated samples
+ */
+
++ static const double scale = 8388608.0;
+ int nDeciFactor, k, J;
+ const double *prCoeff;
+