diff options
author | Niels Möller <nisse@lysator.liu.se> | 2014-05-06 09:41:05 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2014-05-23 15:07:05 +0200 |
commit | 6b7b8585d73548f08b98959df39d80b97677662f (patch) | |
tree | 94681d4e6e96d51770d3ee80d04372dd015f5cc0 | |
parent | c23c96b638cbf6c489fd301e6b3d5555632fba37 (diff) | |
download | ffmpeg-6b7b8585d73548f08b98959df39d80b97677662f.tar.gz |
dca: Convert dca_dmixtable to integers
Also include zero in the table, eliminating a special case in the
decoder.
Signed-off-by: Niels Möller <nisse@southpole.se>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r-- | libavcodec/dcadata.h | 64 | ||||
-rw-r--r-- | libavcodec/dcadec.c | 19 |
2 files changed, 42 insertions, 41 deletions
diff --git a/libavcodec/dcadata.h b/libavcodec/dcadata.h index da3422e09b..28c40cf55e 100644 --- a/libavcodec/dcadata.h +++ b/libavcodec/dcadata.h @@ -7520,38 +7520,38 @@ DECLARE_ALIGNED(16, static const float, lfe_fir_128)[] = * 2) [-29.750 to -15] with resolution of 0.250 dB * 3) [-14.875 to 0] with resolution of 0.125 dB */ -static const float dca_dmixtable[241] = { - 0.001000, 0.001059, 0.001122, 0.001189, 0.001259, 0.001334, 0.001413, 0.001496, - 0.001585, 0.001679, 0.001778, 0.001884, 0.001995, 0.002113, 0.002239, 0.002371, - 0.002512, 0.002661, 0.002818, 0.002985, 0.003162, 0.003350, 0.003548, 0.003758, - 0.003981, 0.004217, 0.004467, 0.004732, 0.005012, 0.005309, 0.005623, 0.005957, - 0.006310, 0.006683, 0.007079, 0.007499, 0.007943, 0.008414, 0.008913, 0.009441, - 0.010000, 0.010593, 0.011220, 0.011885, 0.012589, 0.013335, 0.014125, 0.014962, - 0.015849, 0.016788, 0.017783, 0.018836, 0.019953, 0.021135, 0.022387, 0.023714, - 0.025119, 0.026607, 0.028184, 0.029854, 0.031623, 0.032546, 0.033497, 0.034475, - 0.035481, 0.036517, 0.037584, 0.038681, 0.039811, 0.040973, 0.042170, 0.043401, - 0.044668, 0.045973, 0.047315, 0.048697, 0.050119, 0.051582, 0.053088, 0.054639, - 0.056234, 0.057876, 0.059566, 0.061306, 0.063096, 0.064938, 0.066834, 0.068786, - 0.070795, 0.072862, 0.074989, 0.077179, 0.079433, 0.081752, 0.084140, 0.086596, - 0.089125, 0.091728, 0.094406, 0.097163, 0.100000, 0.102920, 0.105925, 0.109018, - 0.112202, 0.115478, 0.118850, 0.122321, 0.125893, 0.129569, 0.133352, 0.137246, - 0.141254, 0.145378, 0.149624, 0.153993, 0.158489, 0.163117, 0.167880, 0.172783, - 0.177828, 0.180406, 0.183021, 0.185674, 0.188365, 0.191095, 0.193865, 0.196675, - 0.199526, 0.202418, 0.205353, 0.208329, 0.211349, 0.214412, 0.217520, 0.220673, - 0.223872, 0.227117, 0.230409, 0.233749, 0.237137, 0.240575, 0.244062, 0.247600, - 0.251189, 0.254830, 0.258523, 0.262271, 0.266073, 0.269929, 0.273842, 0.277811, - 0.281838, 0.285924, 0.290068, 0.294273, 0.298538, 0.302866, 0.307256, 0.311709, - 0.316228, 0.320812, 0.325462, 0.330179, 0.334965, 0.339821, 0.344747, 0.349744, - 0.354813, 0.359956, 0.365174, 0.370467, 0.375837, 0.381285, 0.386812, 0.392419, - 0.398107, 0.403878, 0.409732, 0.415671, 0.421697, 0.427809, 0.434010, 0.440301, - 0.446684, 0.453158, 0.459727, 0.466391, 0.473151, 0.480010, 0.486968, 0.494026, - 0.501187, 0.508452, 0.515822, 0.523299, 0.530884, 0.538580, 0.546387, 0.554307, - 0.562341, 0.570493, 0.578762, 0.587151, 0.595662, 0.604296, 0.613056, 0.621942, - 0.630957, 0.640103, 0.649382, 0.658795, 0.668344, 0.678032, 0.687860, 0.697831, - 0.707107, 0.718208, 0.728618, 0.739180, 0.749894, 0.760764, 0.771792, 0.782979, - 0.794328, 0.805842, 0.817523, 0.829373, 0.841395, 0.853591, 0.865964, 0.878517, - 0.891251, 0.904170, 0.917276, 0.930572, 0.944061, 0.957745, 0.971628, 0.985712, - 1.000000, +static const uint16_t dca_dmixtable[242] = { + 0, 33, 35, 37, 39, 41, 44, 46, + 49, 52, 55, 58, 62, 65, 69, 73, + 78, 82, 87, 92, 98, 104, 110, 116, + 123, 130, 138, 146, 155, 164, 174, 184, + 195, 207, 219, 232, 246, 260, 276, 292, + 309, 328, 347, 368, 389, 413, 437, 463, + 490, 519, 550, 583, 617, 654, 693, 734, + 777, 823, 872, 924, 978, 1036, 1066, 1098, + 1130, 1163, 1197, 1232, 1268, 1305, 1343, 1382, + 1422, 1464, 1506, 1550, 1596, 1642, 1690, 1740, + 1790, 1843, 1896, 1952, 2009, 2068, 2128, 2190, + 2254, 2320, 2388, 2457, 2529, 2603, 2679, 2757, + 2838, 2920, 3006, 3093, 3184, 3277, 3372, 3471, + 3572, 3677, 3784, 3894, 4008, 4125, 4246, 4370, + 4497, 4629, 4764, 4903, 5046, 5193, 5345, 5501, + 5662, 5827, 5912, 5997, 6084, 6172, 6262, 6353, + 6445, 6538, 6633, 6729, 6827, 6925, 7026, 7128, + 7231, 7336, 7442, 7550, 7659, 7771, 7883, 7997, + 8113, 8231, 8350, 8471, 8594, 8719, 8845, 8973, + 9103, 9235, 9369, 9505, 9643, 9783, 9924, 10068, + 10214, 10362, 10512, 10665, 10819, 10976, 11135, 11297, + 11460, 11627, 11795, 11966, 12139, 12315, 12494, 12675, + 12859, 13045, 13234, 13426, 13621, 13818, 14018, 14222, + 14428, 14637, 14849, 15064, 15283, 15504, 15729, 15957, + 16188, 16423, 16661, 16902, 17147, 17396, 17648, 17904, + 18164, 18427, 18694, 18965, 19240, 19519, 19802, 20089, + 20380, 20675, 20975, 21279, 21587, 21900, 22218, 22540, + 22867, 23170, 23534, 23875, 24221, 24573, 24929, 25290, + 25657, 26029, 26406, 26789, 27177, 27571, 27970, 28376, + 28787, 29205, 29628, 30057, 30493, 30935, 31383, 31838, + 32300, 32768, }; static const float dca_default_coeffs[10][6][2] = { diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c index c8877d6d1f..0727857bb6 100644 --- a/libavcodec/dcadec.c +++ b/libavcodec/dcadec.c @@ -1695,6 +1695,13 @@ static void dca_exss_parse_header(DCAContext *s) * from the asset header */ } +static float dca_dmix_code(unsigned code) +{ + int sign = (code >> 8) - 1; + code &= 0xff; + return ldexpf((dca_dmixtable[code] ^ sign) - sign, -15); +} + /** * Main frame decoding function * FIXME add arguments @@ -1902,16 +1909,10 @@ FF_ENABLE_DEPRECATION_WARNINGS */ if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO || s->core_downmix_amode == DCA_STEREO_TOTAL)) { - int sign, code; for (i = 0; i < num_core_channels + !!s->lfe; i++) { - sign = s->core_downmix_codes[i][0] & 0x100 ? 1 : -1; - code = s->core_downmix_codes[i][0] & 0x0FF; - s->downmix_coef[i][0] = (!code ? 0.0f : - sign * dca_dmixtable[code - 1]); - sign = s->core_downmix_codes[i][1] & 0x100 ? 1 : -1; - code = s->core_downmix_codes[i][1] & 0x0FF; - s->downmix_coef[i][1] = (!code ? 0.0f : - sign * dca_dmixtable[code - 1]); + /* Range checked earlier */ + s->downmix_coef[i][0] = dca_dmix_code(s->core_downmix_codes[i][0]); + s->downmix_coef[i][1] = dca_dmix_code(s->core_downmix_codes[i][1]); } s->output = s->core_downmix_amode; } else { |