dca: convert dca_default_coeffs to float.
authorTim Walker <tdskywalker@gmail.com>
Fri, 22 Nov 2013 19:19:55 +0000 (20:19 +0100)
committerAnton Khirnov <anton@khirnov.net>
Thu, 28 Nov 2013 20:38:22 +0000 (21:38 +0100)
Easier to read, modify, and avoids relying on an outdated table.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
libavcodec/dcadata.h
libavcodec/dcadec.c

index 324e40f..e8f07e8 100644 (file)
@@ -7522,17 +7522,17 @@ static const float dca_downmix_coeffs[65] = {
   0.001412537544623, 0.001000000000000, 0.000501187233627, 0.000251188643151, 0.000000000000000,
 };
 
-static const uint8_t dca_default_coeffs[10][5][2] = {
-    { { 13, 13 },                                                 },
-    { {  0, 64 }, { 64,  0 },                                     },
-    { {  0, 64 }, { 64,  0 },                                     },
-    { {  0, 64 }, { 64,  0 },                                     },
-    { {  0, 64 }, { 64,  0 },                                     },
-    { {  6,  6 }, {  0, 25 }, { 25,  0 },                         },
-    { {  0, 25 }, { 25,  0 }, { 13, 13 },                         },
-    { {  6,  6 }, {  0, 25 }, { 25,  0 }, { 13, 13 },             },
-    { {  0, 25 }, { 25,  0 }, {  0, 13 }, { 13,  0 },             },
-    { {  6,  6 }, {  0, 25 }, { 25,  0 }, {  0, 13 }, { 13,  0 }, },
+static const float dca_default_coeffs[10][5][2] = {
+    { { 0.707946, 0.707946 },                                                                                                 }, // A
+    { { 1.000000, 0.000000 }, { 0.000000, 1.000000 },                                                                         }, // A + B (dual mono)
+    { { 1.000000, 0.000000 }, { 0.000000, 1.000000 },                                                                         }, // L + R (stereo)
+    { { 1.000000, 0.000000 }, { 0.000000, 1.000000 },                                                                         }, // (L+R) + (L-R) (sum-difference)
+    { { 1.000000, 0.000000 }, { 0.000000, 1.000000 },                                                                         }, // LT + RT (left and right total)
+    { { 0.865964, 0.865964 }, { 1.000000, 0.501187 }, { 0.501187, 1.000000 },                                                 }, // C + L + R
+    { { 1.000000, 0.501187 }, { 0.501187, 1.000000 }, { 0.707946, 0.707946 },                                                 }, // L + R + S
+    { { 0.865964, 0.865964 }, { 1.000000, 0.501187 }, { 0.501187, 1.000000 }, { 0.707946, 0.707946 },                         }, // C + L + R + S
+    { { 1.000000, 0.501187 }, { 0.501187, 1.000000 }, { 1.000000, 0.707946 }, { 0.707946, 1.000000 },                         }, // L + R + SL + SR
+    { { 0.865964, 0.865964 }, { 1.000000, 0.501187 }, { 0.501187, 1.000000 }, { 1.000000, 0.707946 }, { 0.707946, 1.000000 }, }, // C + L + R + SL + SR
 };
 
 /* downmix coeffs
index 79f2c63..33a2ac6 100644 (file)
@@ -819,8 +819,8 @@ static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
             }
 
             for (j = base_channel; j < s->prim_channels; j++) {
-                s->downmix_coef[j][0] = dca_downmix_coeffs[dca_default_coeffs[am][j][0]];
-                s->downmix_coef[j][1] = dca_downmix_coeffs[dca_default_coeffs[am][j][1]];
+                s->downmix_coef[j][0] = dca_default_coeffs[am][j][0];
+                s->downmix_coef[j][1] = dca_default_coeffs[am][j][1];
             }
         }
     }