| /* |
| * AMR narrowband data and definitions |
| * Copyright (c) 2006-2007 Robert Swain |
| * Copyright (c) 2009 Colin McQuillan |
| * |
| * This file is part of FFmpeg. |
| * |
| * FFmpeg is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * FFmpeg is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with FFmpeg; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| |
| /** |
| * @file |
| * AMR narrowband data and definitions |
| */ |
| |
| #ifndef AVCODEC_AMRNBDATA_H |
| #define AVCODEC_AMRNBDATA_H |
| |
| #include <stdint.h> |
| |
| #include "libavutil/common.h" /* offsetof */ |
| |
| #define AMR_SUBFRAME_SIZE 40 ///< samples per subframe |
| |
| /** Frame type (Table 1a in 3GPP TS 26.101) */ |
| enum Mode { |
| MODE_4k75 = 0, ///< 4.75 kbit/s |
| MODE_5k15, ///< 5.15 kbit/s |
| MODE_5k9, ///< 5.90 kbit/s |
| MODE_6k7, ///< 6.70 kbit/s |
| MODE_7k4, ///< 7.40 kbit/s |
| MODE_7k95, ///< 7.95 kbit/s |
| MODE_10k2, ///< 10.2 kbit/s |
| MODE_12k2, ///< 12.2 kbit/s |
| MODE_DTX, ///< silent frame |
| N_MODES, ///< number of modes |
| NO_DATA = 15 ///< no transmission |
| }; |
| |
| #define LP_FILTER_ORDER 10 ///< linear predictive coding filter order |
| |
| /** |
| * AMRNB unpacked data subframe |
| */ |
| typedef struct AMRNBSubframe { |
| uint16_t p_lag; ///< index to decode the pitch lag |
| uint16_t p_gain; ///< index to decode the pitch gain |
| uint16_t fixed_gain; ///< index to decode the fixed gain factor, for MODE_12k2 and MODE_7k95 |
| uint16_t pulses[10]; ///< pulses: 10 for MODE_12k2, 7 for MODE_10k2, and index and sign for others |
| } AMRNBSubframe; |
| |
| /** |
| * AMRNB unpacked data frame |
| */ |
| typedef struct AMRNBFrame { |
| uint16_t lsf[5]; ///< lsf parameters: 5 parameters for MODE_12k2, only 3 for other modes |
| AMRNBSubframe subframe[4]; ///< unpacked data for each subframe |
| } AMRNBFrame; |
| |
| /** The index of a frame parameter */ |
| #define AMR_BIT(field) (offsetof(AMRNBFrame, field)) |
| /** The index of a subframe-specific parameter */ |
| #define AMR_OF(frame_num, variable) AMR_BIT(subframe[frame_num].variable) |
| |
| // The following order* tables are used to convert AMR frame parameters to and |
| // from a bitstream. See 3GPP TS 26.101 for more information. |
| // Each field in AMRNBFrame is stored as: |
| // * one byte for the number of bits in the field |
| // * one byte for the field index |
| // * then, one byte for each bit of the field (from most-significant to least) |
| // of the position of that bit in the AMR frame. |
| static const uint8_t order_MODE_4k75[] = { |
| 8, AMR_BIT(lsf[0]), 7, 6, 5, 4, 3, 2, 1, 0, |
| 8, AMR_BIT(lsf[1]), 15, 14, 13, 12, 11, 10, 9, 8, |
| 7, AMR_BIT(lsf[2]), 51, 35, 34, 50, 33, 49, 32, |
| 8, AMR_OF(0,p_lag), 23, 22, 21, 20, 19, 18, 43, 42, |
| 8, AMR_OF(0,p_gain), 54, 55, 40, 41, 24, 25, 26, 27, |
| 7, AMR_OF(0,pulses[0]), 92, 68, 67, 84, 66, 65, 80, |
| 2, AMR_OF(0,pulses[1]), 53, 52, |
| 4, AMR_OF(1,p_lag), 17, 16, 48, 63, |
| 7, AMR_OF(1,pulses[0]), 91, 64, 79, 83, 78, 77, 95, |
| 2, AMR_OF(1,pulses[1]), 62, 61, |
| 4, AMR_OF(2,p_lag), 31, 30, 60, 59, |
| 8, AMR_OF(2,p_gain), 44, 45, 46, 47, 36, 37, 38, 39, |
| 7, AMR_OF(2,pulses[0]), 90, 76, 75, 82, 74, 73, 94, |
| 2, AMR_OF(2,pulses[1]), 58, 57, |
| 4, AMR_OF(3,p_lag), 29, 28, 56, 71, |
| 7, AMR_OF(3,pulses[0]), 89, 72, 87, 81, 86, 85, 93, |
| 2, AMR_OF(3,pulses[1]), 70, 69, |
| 0 |
| }; |
| |
| static const uint8_t order_MODE_5k15[] = { |
| 8, AMR_BIT(lsf[0]), 0, 1, 2, 3, 4, 5, 6, 7, |
| 8, AMR_BIT(lsf[1]), 8, 9, 10, 11, 12, 13, 14, 15, |
| 7, AMR_BIT(lsf[2]), 70, 51, 43, 71, 50, 60, 49, |
| 8, AMR_OF(0,p_lag), 23, 22, 21, 20, 19, 47, 54, 59, |
| 6, AMR_OF(0,p_gain), 48, 42, 35, 29, 30, 31, |
| 7, AMR_OF(0,pulses[0]), 92, 84, 82, 100, 79, 72, 88, |
| 2, AMR_OF(0,pulses[1]), 67, 68, |
| 4, AMR_OF(1,p_lag), 18, 46, 53, 58, |
| 6, AMR_OF(1,p_gain), 63, 41, 34, 26, 27, 28, |
| 7, AMR_OF(1,pulses[0]), 91, 83, 81, 99, 78, 87, 103, |
| 2, AMR_OF(1,pulses[1]), 65, 66, |
| 4, AMR_OF(2,p_lag), 17, 45, 52, 57, |
| 6, AMR_OF(2,p_gain), 62, 40, 33, 39, 24, 25, |
| 7, AMR_OF(2,pulses[0]), 90, 80, 95, 98, 77, 86, 102, |
| 2, AMR_OF(2,pulses[1]), 75, 64, |
| 4, AMR_OF(3,p_lag), 16, 44, 56, 69, |
| 6, AMR_OF(3,p_gain), 61, 55, 32, 36, 37, 38, |
| 7, AMR_OF(3,pulses[0]), 89, 94, 93, 97, 76, 85, 101, |
| 2, AMR_OF(3,pulses[1]), 73, 74, |
| 0 |
| }; |
| |
| static const uint8_t order_MODE_5k9[] = { |
| 8, AMR_BIT(lsf[0]), 7, 6, 0, 3, 5, 4, 2, 1, |
| 9, AMR_BIT(lsf[1]), 13, 12, 8, 11, 10, 15, 9, 14, 23, |
| 9, AMR_BIT(lsf[2]), 71, 56, 60, 70, 59, 57, 58, 69, 76, |
| 8, AMR_OF(0,p_lag), 16, 18, 22, 20, 30, 38, 44, 42, |
| 6, AMR_OF(0,p_gain), 75, 48, 52, 40, 34, 26, |
| 9, AMR_OF(0,pulses[0]), 101, 89, 93, 117, 105, 81, 85, 109, 97, |
| 2, AMR_OF(0,pulses[1]), 67, 78, |
| 4, AMR_OF(1,p_lag), 28, 36, 46, 87, |
| 6, AMR_OF(1,p_gain), 74, 63, 51, 55, 33, 25, |
| 9, AMR_OF(1,pulses[0]), 100, 88, 92, 116, 104, 80, 84, 108, 96, |
| 2, AMR_OF(1,pulses[1]), 64, 79, |
| 8, AMR_OF(2,p_lag), 31, 17, 21, 19, 29, 37, 43, 41, |
| 6, AMR_OF(2,p_gain), 73, 62, 50, 54, 32, 24, |
| 9, AMR_OF(2,pulses[0]), 99, 103, 91, 115, 119, 95, 83, 107, 111, |
| 2, AMR_OF(2,pulses[1]), 66, 77, |
| 4, AMR_OF(3,p_lag), 27, 35, 45, 86, |
| 6, AMR_OF(3,p_gain), 72, 61, 49, 53, 47, 39, |
| 9, AMR_OF(3,pulses[0]), 98, 102, 90, 114, 118, 94, 82, 106, 110, |
| 2, AMR_OF(3,pulses[1]), 65, 68, |
| 0 |
| }; |
| |
| static const uint8_t order_MODE_6k7[] = { |
| 8, AMR_BIT(lsf[0]), 7, 6, 15, 4, 5, 3, 2, 0, |
| 9, AMR_BIT(lsf[1]), 14, 13, 8, 12, 10, 1, 9, 11, 29, |
| 9, AMR_BIT(lsf[2]), 57, 58, 50, 56, 60, 59, 49, 71, 70, |
| 8, AMR_OF(0,p_lag), 17, 19, 23, 21, 31, 24, 32, 52, |
| 7, AMR_OF(0,p_gain), 36, 82, 69, 46, 42, 48, 77, |
| 11, AMR_OF(0,pulses[0]), 109, 97, 133, 121, 101, 89, 125, 113, 93, 117, |
| 105, |
| 3, AMR_OF(0,pulses[1]), 81, 73, 65, |
| 4, AMR_OF(1,p_lag), 28, 26, 38, 54, |
| 7, AMR_OF(1,p_gain), 35, 83, 68, 45, 41, 63, 76, |
| 11, AMR_OF(1,pulses[0]), 108, 96, 132, 120, 100, 88, 124, 112, 92, 116, |
| 104, |
| 3, AMR_OF(1,pulses[1]), 80, 72, 64, |
| 8, AMR_OF(2,p_lag), 16, 18, 22, 20, 30, 39, 47, 51, |
| 7, AMR_OF(2,p_gain), 34, 84, 67, 44, 40, 62, 75, |
| 11, AMR_OF(2,pulses[0]), 107, 111, 131, 135, 99, 103, 123, 127, 91, 115, |
| 119, |
| 3, AMR_OF(2,pulses[1]), 95, 87, 79, |
| 4, AMR_OF(3,p_lag), 27, 25, 37, 53, |
| 7, AMR_OF(3,p_gain), 33, 85, 66, 43, 55, 61, 74, |
| 11, AMR_OF(3,pulses[0]), 106, 110, 130, 134, 98, 102, 122, 126, 90, 114, |
| 118, |
| 3, AMR_OF(3,pulses[1]), 94, 86, 78, |
| 0 |
| }; |
| |
| static const uint8_t order_MODE_7k4[] = { |
| 8, AMR_BIT(lsf[0]), 7, 6, 5, 4, 3, 2, 1, 0, |
| 9, AMR_BIT(lsf[1]), 15, 14, 13, 12, 11, 10, 9, 8, 23, |
| 9, AMR_BIT(lsf[2]), 53, 52, 51, 58, 40, 55, 54, 57, 56, |
| 8, AMR_OF(0,p_lag), 22, 20, 18, 16, 30, 50, 95, 94, |
| 7, AMR_OF(0,p_gain), 28, 24, 73, 36, 32, 62, 67, |
| 13, AMR_OF(0,pulses[0]), 127, 123, 135, 131, 143, 139, 151, 103, 102, 101, |
| 100, 99, 98, |
| 4, AMR_OF(0,pulses[1]), 83, 75, 79, 71, |
| 5, AMR_OF(1,p_lag), 44, 42, 49, 93, 92, |
| 7, AMR_OF(1,p_gain), 27, 39, 72, 35, 47, 61, 66, |
| 13, AMR_OF(1,pulses[0]), 126, 122, 134, 130, 142, 138, 150, 97, 96, 111, |
| 110, 109, 108, |
| 4, AMR_OF(1,pulses[1]), 82, 74, 78, 70, |
| 8, AMR_OF(2,p_lag), 21, 19, 17, 31, 29, 48, 91, 90, |
| 7, AMR_OF(2,p_gain), 26, 38, 87, 34, 46, 60, 65, |
| 13, AMR_OF(2,pulses[0]), 125, 121, 133, 129, 141, 137, 149, 107, 106, 105, |
| 104, 119, 118, |
| 4, AMR_OF(2,pulses[1]), 81, 85, 77, 69, |
| 5, AMR_OF(3,p_lag), 43, 41, 63, 89, 88, |
| 7, AMR_OF(3,p_gain), 25, 37, 86, 33, 45, 59, 64, |
| 13, AMR_OF(3,pulses[0]), 124, 120, 132, 128, 140, 136, 148, 117, 116, 115, |
| 114, 113, 112, |
| 4, AMR_OF(3,pulses[1]), 80, 84, 76, 68, |
| 0 |
| }; |
| |
| static const uint8_t order_MODE_7k95[] = { |
| 9, AMR_BIT(lsf[0]), 67, 68, 1, 2, 3, 4, 5, 6, 7, |
| 9, AMR_BIT(lsf[1]), 14, 13, 9, 12, 11, 0, 10, 15, 8, |
| 9, AMR_BIT(lsf[2]), 18, 19, 23, 17, 22, 20, 21, 66, 65, |
| 8, AMR_OF(0,p_lag), 44, 42, 40, 54, 52, 56, 64, 78, |
| 4, AMR_OF(0,p_gain), 36, 32, 72, 80, |
| 5, AMR_OF(0,fixed_gain), 16, 28, 24, 60, 84, |
| 13, AMR_OF(0,pulses[0]), 135, 109, 144, 156, 120, 97, 148, 121, 101, 122, |
| 123, 89, 124, |
| 4, AMR_OF(0,pulses[1]), 125, 126, 127, 112, |
| 6, AMR_OF(1,p_lag), 50, 48, 62, 70, 76, 74, |
| 4, AMR_OF(1,p_gain), 35, 47, 87, 95, |
| 5, AMR_OF(1,fixed_gain), 31, 27, 39, 59, 83, |
| 13, AMR_OF(1,pulses[0]), 129, 108, 159, 155, 130, 96, 147, 131, 100, 132, |
| 133, 88, 134, |
| 4, AMR_OF(1,pulses[1]), 113, 114, 115, 116, |
| 8, AMR_OF(2,p_lag), 43, 41, 55, 53, 51, 71, 79, 77, |
| 4, AMR_OF(2,p_gain), 34, 46, 86, 94, |
| 5, AMR_OF(2,fixed_gain), 30, 26, 38, 58, 82, |
| 13, AMR_OF(2,pulses[0]), 139, 107, 158, 154, 140, 111, 146, 141, 99, 142, |
| 143, 103, 128, |
| 4, AMR_OF(2,pulses[1]), 105, 90, 91, 92, |
| 6, AMR_OF(3,p_lag), 49, 63, 61, 69, 75, 73, |
| 4, AMR_OF(3,p_gain), 33, 45, 85, 93, |
| 5, AMR_OF(3,fixed_gain), 29, 25, 37, 57, 81, |
| 13, AMR_OF(3,pulses[0]), 149, 106, 157, 153, 150, 110, 145, 151, 98, 136, |
| 137, 102, 138, |
| 4, AMR_OF(3,pulses[1]), 117, 118, 119, 104, |
| 0 |
| }; |
| |
| static const uint8_t order_MODE_10k2[] = { |
| 8, AMR_BIT(lsf[0]), 0, 1, 2, 3, 4, 5, 6, 7, |
| 9, AMR_BIT(lsf[1]), 23, 8, 9, 10, 11, 12, 13, 14, 15, |
| 9, AMR_BIT(lsf[2]), 57, 58, 62, 56, 60, 59, 61, 71, 70, |
| 8, AMR_OF(0,p_lag), 22, 21, 20, 19, 18, 17, 42, 41, |
| 7, AMR_OF(0,p_gain), 38, 50, 84, 37, 36, 85, 83, |
| 1, AMR_OF(0,pulses[0]), 66, |
| 1, AMR_OF(0,pulses[1]), 67, |
| 1, AMR_OF(0,pulses[2]), 68, |
| 1, AMR_OF(0,pulses[3]), 69, |
| 10, AMR_OF(0,pulses[4]), 145, 144, 156, 153, 154, 163, 161, 192, 206, 195, |
| 10, AMR_OF(0,pulses[5]), 158, 159, 157, 152, 155, 165, 160, 205, 204, 194, |
| 7, AMR_OF(0,pulses[6]), 167, 166, 162, 164, 196, 207, 193, |
| 5, AMR_OF(1,p_lag), 26, 25, 54, 53, 89, |
| 7, AMR_OF(1,p_gain), 35, 49, 81, 34, 33, 82, 80, |
| 1, AMR_OF(1,pulses[0]), 78, |
| 1, AMR_OF(1,pulses[1]), 79, |
| 1, AMR_OF(1,pulses[2]), 64, |
| 1, AMR_OF(1,pulses[3]), 65, |
| 10, AMR_OF(1,pulses[4]), 103, 102, 98, 111, 96, 105, 119, 185, 199, 188, |
| 10, AMR_OF(1,pulses[5]), 100, 101, 99, 110, 97, 107, 118, 198, 197, 187, |
| 7, AMR_OF(1,pulses[6]), 109, 108, 104, 106, 189, 184, 186, |
| 8, AMR_OF(2,p_lag), 16, 31, 30, 29, 28, 27, 40, 55, |
| 7, AMR_OF(2,p_gain), 32, 48, 94, 47, 46, 95, 93, |
| 1, AMR_OF(2,pulses[0]), 74, |
| 1, AMR_OF(2,pulses[1]), 75, |
| 1, AMR_OF(2,pulses[2]), 76, |
| 1, AMR_OF(2,pulses[3]), 77, |
| 10, AMR_OF(2,pulses[4]), 117, 116, 112, 125, 126, 135, 133, 178, 176, 181, |
| 10, AMR_OF(2,pulses[5]), 114, 115, 113, 124, 127, 121, 132, 191, 190, 180, |
| 7, AMR_OF(2,pulses[6]), 123, 122, 134, 120, 182, 177, 179, |
| 5, AMR_OF(3,p_lag), 24, 39, 52, 51, 88, |
| 7, AMR_OF(3,p_gain), 45, 63, 91, 44, 43, 92, 90, |
| 1, AMR_OF(3,pulses[0]), 86, |
| 1, AMR_OF(3,pulses[1]), 87, |
| 1, AMR_OF(3,pulses[2]), 72, |
| 1, AMR_OF(3,pulses[3]), 73, |
| 10, AMR_OF(3,pulses[4]), 131, 130, 142, 139, 140, 149, 147, 171, 169, 174, |
| 10, AMR_OF(3,pulses[5]), 128, 129, 143, 138, 141, 151, 146, 168, 183, 173, |
| 7, AMR_OF(3,pulses[6]), 137, 136, 148, 150, 175, 170, 172, |
| 0 |
| }; |
| |
| static const uint8_t order_MODE_12k2[] = { |
| 7, AMR_BIT(lsf[0]), 7, 6, 5, 4, 3, 2, 1, |
| 8, AMR_BIT(lsf[1]), 0, 15, 14, 13, 12, 11, 10, 9, |
| 9, AMR_BIT(lsf[2]), 23, 22, 21, 20, 19, 18, 17, 16, 8, |
| 8, AMR_BIT(lsf[3]), 31, 30, 29, 28, 27, 86, 85, 84, |
| 6, AMR_BIT(lsf[4]), 83, 82, 81, 80, 127, 126, |
| 9, AMR_OF(0,p_lag), 26, 24, 38, 36, 34, 32, 46, 44, 42, |
| 4, AMR_OF(0,p_gain), 40, 52, 48, 95, |
| 5, AMR_OF(0,fixed_gain), 60, 56, 68, 91, 111, |
| 3, AMR_OF(0,pulses[0]), 191, 176, 177, |
| 4, AMR_OF(0,pulses[1]), 103, 123, 124, 125, |
| 3, AMR_OF(0,pulses[2]), 188, 189, 190, |
| 4, AMR_OF(0,pulses[3]), 99, 120, 121, 122, |
| 3, AMR_OF(0,pulses[4]), 185, 186, 187, |
| 4, AMR_OF(0,pulses[5]), 107, 133, 134, 135, |
| 3, AMR_OF(0,pulses[6]), 198, 199, 184, |
| 4, AMR_OF(0,pulses[7]), 119, 130, 131, 132, |
| 3, AMR_OF(0,pulses[8]), 195, 196, 197, |
| 4, AMR_OF(0,pulses[9]), 115, 143, 128, 129, |
| 6, AMR_OF(1,p_lag), 64, 78, 76, 74, 72, 245, |
| 4, AMR_OF(1,p_gain), 55, 51, 63, 94, |
| 5, AMR_OF(1,fixed_gain), 59, 71, 67, 90, 110, |
| 3, AMR_OF(1,pulses[0]), 192, 193, 194, |
| 4, AMR_OF(1,pulses[1]), 102, 140, 141, 142, |
| 3, AMR_OF(1,pulses[2]), 205, 206, 207, |
| 4, AMR_OF(1,pulses[3]), 98, 137, 138, 139, |
| 3, AMR_OF(1,pulses[4]), 202, 203, 204, |
| 4, AMR_OF(1,pulses[5]), 106, 150, 151, 136, |
| 3, AMR_OF(1,pulses[6]), 215, 200, 201, |
| 4, AMR_OF(1,pulses[7]), 118, 147, 148, 149, |
| 3, AMR_OF(1,pulses[8]), 212, 213, 214, |
| 4, AMR_OF(1,pulses[9]), 114, 144, 145, 146, |
| 9, AMR_OF(2,p_lag), 25, 39, 37, 35, 33, 47, 45, 43, 41, |
| 4, AMR_OF(2,p_gain), 54, 50, 62, 93, |
| 5, AMR_OF(2,fixed_gain), 58, 70, 66, 89, 109, |
| 3, AMR_OF(2,pulses[0]), 209, 210, 211, |
| 4, AMR_OF(2,pulses[1]), 101, 157, 158, 159, |
| 3, AMR_OF(2,pulses[2]), 222, 223, 208, |
| 4, AMR_OF(2,pulses[3]), 97, 154, 155, 156, |
| 3, AMR_OF(2,pulses[4]), 219, 220, 221, |
| 4, AMR_OF(2,pulses[5]), 105, 167, 152, 153, |
| 3, AMR_OF(2,pulses[6]), 216, 217, 218, |
| 4, AMR_OF(2,pulses[7]), 117, 164, 165, 166, |
| 3, AMR_OF(2,pulses[8]), 229, 230, 231, |
| 4, AMR_OF(2,pulses[9]), 113, 161, 162, 163, |
| 6, AMR_OF(3,p_lag), 79, 77, 75, 73, 87, 244, |
| 4, AMR_OF(3,p_gain), 53, 49, 61, 92, |
| 5, AMR_OF(3,fixed_gain), 57, 69, 65, 88, 108, |
| 3, AMR_OF(3,pulses[0]), 226, 227, 228, |
| 4, AMR_OF(3,pulses[1]), 100, 174, 175, 160, |
| 3, AMR_OF(3,pulses[2]), 239, 224, 225, |
| 4, AMR_OF(3,pulses[3]), 96, 171, 172, 173, |
| 3, AMR_OF(3,pulses[4]), 236, 237, 238, |
| 4, AMR_OF(3,pulses[5]), 104, 168, 169, 170, |
| 3, AMR_OF(3,pulses[6]), 233, 234, 235, |
| 4, AMR_OF(3,pulses[7]), 116, 181, 182, 183, |
| 3, AMR_OF(3,pulses[8]), 246, 247, 232, |
| 4, AMR_OF(3,pulses[9]), 112, 178, 179, 180, |
| 0 |
| }; |
| |
| /** |
| * position of the bitmapping data for each packet type in |
| * the AMRNBFrame |
| */ |
| static const uint8_t * const amr_unpacking_bitmaps_per_mode[N_MODES] = { |
| order_MODE_4k75, |
| order_MODE_5k15, |
| order_MODE_5k9, |
| order_MODE_6k7, |
| order_MODE_7k4, |
| order_MODE_7k95, |
| order_MODE_10k2, |
| order_MODE_12k2, |
| }; |
| |
| /** number of bytes for each mode */ |
| static const uint8_t frame_sizes_nb[N_MODES] = { |
| 12, 13, 15, 17, 19, 20, 26, 31, 5 |
| }; |
| |
| /** |
| * Base-5 representation for values 0-124 |
| * |
| * This is useful for decoding pulse positions in 10.2 kbit/s frames. |
| * Safe values are provided for out of range positions 125-127. |
| */ |
| static const uint8_t base_five_table[128][3] = { |
| {0, 0, 0}, {0, 0, 1}, {0, 0, 2}, {0, 0, 3}, {0, 0, 4}, {0, 1, 0}, {0, 1, 1}, |
| {0, 1, 2}, {0, 1, 3}, {0, 1, 4}, {0, 2, 0}, {0, 2, 1}, {0, 2, 2}, {0, 2, 3}, |
| {0, 2, 4}, {0, 3, 0}, {0, 3, 1}, {0, 3, 2}, {0, 3, 3}, {0, 3, 4}, {0, 4, 0}, |
| {0, 4, 1}, {0, 4, 2}, {0, 4, 3}, {0, 4, 4}, {1, 0, 0}, {1, 0, 1}, {1, 0, 2}, |
| {1, 0, 3}, {1, 0, 4}, {1, 1, 0}, {1, 1, 1}, {1, 1, 2}, {1, 1, 3}, {1, 1, 4}, |
| {1, 2, 0}, {1, 2, 1}, {1, 2, 2}, {1, 2, 3}, {1, 2, 4}, {1, 3, 0}, {1, 3, 1}, |
| {1, 3, 2}, {1, 3, 3}, {1, 3, 4}, {1, 4, 0}, {1, 4, 1}, {1, 4, 2}, {1, 4, 3}, |
| {1, 4, 4}, {2, 0, 0}, {2, 0, 1}, {2, 0, 2}, {2, 0, 3}, {2, 0, 4}, {2, 1, 0}, |
| {2, 1, 1}, {2, 1, 2}, {2, 1, 3}, {2, 1, 4}, {2, 2, 0}, {2, 2, 1}, {2, 2, 2}, |
| {2, 2, 3}, {2, 2, 4}, {2, 3, 0}, {2, 3, 1}, {2, 3, 2}, {2, 3, 3}, {2, 3, 4}, |
| {2, 4, 0}, {2, 4, 1}, {2, 4, 2}, {2, 4, 3}, {2, 4, 4}, {3, 0, 0}, {3, 0, 1}, |
| {3, 0, 2}, {3, 0, 3}, {3, 0, 4}, {3, 1, 0}, {3, 1, 1}, {3, 1, 2}, {3, 1, 3}, |
| {3, 1, 4}, {3, 2, 0}, {3, 2, 1}, {3, 2, 2}, {3, 2, 3}, {3, 2, 4}, {3, 3, 0}, |
| {3, 3, 1}, {3, 3, 2}, {3, 3, 3}, {3, 3, 4}, {3, 4, 0}, {3, 4, 1}, {3, 4, 2}, |
| {3, 4, 3}, {3, 4, 4}, {4, 0, 0}, {4, 0, 1}, {4, 0, 2}, {4, 0, 3}, {4, 0, 4}, |
| {4, 1, 0}, {4, 1, 1}, {4, 1, 2}, {4, 1, 3}, {4, 1, 4}, {4, 2, 0}, {4, 2, 1}, |
| {4, 2, 2}, {4, 2, 3}, {4, 2, 4}, {4, 3, 0}, {4, 3, 1}, {4, 3, 2}, {4, 3, 3}, |
| {4, 3, 4}, {4, 4, 0}, {4, 4, 1}, {4, 4, 2}, {4, 4, 3}, {4, 4, 4}, {0, 0, 0}, |
| {0, 0, 0}, {0, 0, 0} |
| }; |
| |
| /** |
| * Values for the lsp vector from the 4th subframe of the |
| * previous subframe values. |
| * |
| * @note: Taken from Decoder_amr_reset in Q15 using val/1000 |
| */ |
| static const int8_t lsp_sub4_init[LP_FILTER_ORDER] = { |
| 30, 26, 21, 15, 8, 0, -8, -15, -21, -26 |
| }; |
| |
| /** |
| * Mean lsp values. |
| * |
| * @note: Taken from Decoder_amr_reset in Q15 |
| */ |
| static const int16_t lsp_avg_init[LP_FILTER_ORDER] = { |
| 1384, 2077, 3420, 5108, 6742, 8122, 9863, 11092, 12714, 13701 |
| }; |
| |
| // LSF tables |
| |
| // These are stored as integers to save space. The values are taken from |
| // q_plsf_3.tab and q_plsf_5.tab in 3GPP TS 26.090. |
| |
| static const int16_t lsf_3_3_MODE_5k15[128][4] = { |
| { 419, 163, -30, -262}, { -455, -789,-1430, -721}, { 1006, 664, 269, 25}, |
| { 619, 260, 183, 96}, { -968,-1358, -388, 135}, { -693, 835, 456, 154}, |
| { 1105, 703, 569, 363}, { 1625, 1326, 985, 748}, { -220, 219, 76, -208}, |
| {-1455,-1662, 49, 149}, { -964, -172, -752, -336}, { 625, 209, -250, -66}, |
| {-1017, -838, -2, 317}, {-2168,-1485, -138, 123}, {-1876,-2099, -521, 85}, |
| { -967, -366, -695, -881}, { -921,-1011, -763, -949}, { -124, -256, -352, -660}, |
| { 178, 463, 354, 304}, {-1744, -591, -282, 79}, {-2249, 175, 867, 499}, |
| { -138, -180, -181, -21}, {-2291,-1241, -460, -520}, { -771, 451, -10, -308}, |
| { 271, -65, 4, 214}, { -279, -435, -43, -348}, { -670, 35, -65, -211}, |
| { 806, 535, 85, 297}, { 57, 239, 722, 493}, { 225, 661, 840, 547}, |
| { -540, -376, 14, 349}, { 469, 721, 331, 162}, { -544, -752, -62, -10}, |
| { 398, -88, 724, 701}, { -19, -533, -94, 601}, { 136, -71, -681, -747}, |
| { -166, -344, 261, -50}, { 161, -52, 485, 337}, {-1675, 50, 190, -93}, |
| {-2282, -231, -194, -82}, { -95, -595, -154, 128}, { 894, 501, 588, 457}, |
| { -345, 206, 122, 110}, { -631, -227, -569, 3}, { 408, 239, 397, 226}, |
| { -197, -2, 128, 491}, { 1281, 904, 292, 215}, { 538, 306, 259, 509}, |
| { -677,-1047, 13, 321}, { -679, -588, -358, -212}, { -558, 243, 646, 479}, |
| { 486, 342, 634, 532}, { 107, 802, 331, 136}, { -112, -398,-1031, -286}, |
| { -326, -705, 288, 272}, { 1299, 1144, 1178, 860}, { -423, 121, -385, -148}, |
| { -295, -302, -834, -819}, { 16, -24, -201, -476}, { 555, 91, -245, 294}, |
| { -38, -379, -962,-1221}, {-1191,-1518, -273, -395}, { -390,-1013, -645, 573}, |
| {-1843,-1030, 505, 468}, { 744, 947, 609, 493}, { -689,-1172, -628, -135}, |
| {-1026, 195, 411, 196}, { 1582, 1147, 575, 337}, {-1239, -777, -648, -142}, |
| { 595, 825, 967, 735}, {-1206, -970, -81, -342}, { -745, 13, -72, 375}, |
| { 454, 19, 1407, 921}, {-1647, -172, 861, 562}, { 928, 1537, 1063, 740}, |
| {-2472, -952, 264, 82}, { -502, -965,-1334, 123}, { 867, 1236, 534, 171}, |
| {-2320, -460, 780, 363}, {-1190, -617, 252, -61}, { -174, 34, 1011, 788}, |
| {-2333, 247, 423, 153}, { -16, -355, 262, 449}, {-1576,-1073, -544, -371}, |
| { -615, -305, 1051, 805}, { 687, 528, 6, -182}, { 935, 875, 1002, 809}, |
| { 199, 257, 126, 76}, { -584,-1138, 599, 556}, {-1105,-1391,-1591, -519}, |
| { -977,-1325, 108, 347}, { -722, -975, 365, 101}, { -145, 681, 249, -153}, |
| { 0, -334, -570, 159}, { 412, 285, -336, -617}, { -953, -966, 887, 689}, |
| {-1251, 84, -185, -398}, { -592, 433, 1044, 653}, { 85, 329, -40, 361}, |
| { -433, -705, 466, 574}, { -154, 654, 592, 290}, { -167, 72, 349, 175}, |
| { 674, 297, 977, 720}, { 1235, 1204, 757, 488}, { -400, -269, 538, 372}, |
| {-1350,-1387,-1194, -91}, { 1262, 876, 775, 700}, { -599, -38, -430, -722}, |
| { 1976, 1630, 991, 608}, { 111, 276, -226, -96}, { -947, -388, -11, -7}, |
| { -303, -531, -839, 338}, { 1734, 1710, 1405, 1013}, { -516, -855, -645, 210}, |
| { -688, -416, 513, 230}, { -822, -637,-1146, -320}, { -952, -658, -694, 183}, |
| { -114, -623, 818, 674}, { -191, -204, 731, 635}, { 51, 1221, 883, 576}, |
| { -954, -431, 826, 598}, { -342, -755, -900, -407}, {-1126, -354, -206, -512}, |
| { -547, -810, -357, -620}, { 66, 515, -73, -410}, { -872, -945,-1444,-1227}, |
| { 191, -17, -544, -231}, {-1540, -544, -901, -886} |
| }; |
| |
| static const int16_t lsf_3_1_MODE_7k95[512][3] = { |
| { -890,-1550,-2541}, { -819, -970, 175}, { -826,-1234, -762}, |
| { -599, -22, 634}, { -811, -987, -902}, { -323, 203, 26}, |
| { -383, -235, -781}, { -399, 1262, 906}, { -932,-1399,-1380}, |
| { -624, 93, 87}, { -414, -539, -691}, { 37, 633, 510}, |
| { -387, -476,-1330}, { 399, 66, 263}, { -407, -49, -335}, |
| { -417, 1041, 1865}, { -779,-1089,-1440}, { -746, -858, 832}, |
| { -581, -759, -371}, { -673, -506, 2088}, { -560, -634,-1179}, |
| { 271, 241, 14}, { -438, -244, -397}, { 463, 1202, 1047}, |
| { -606, -797,-1438}, { -51, -323, 481}, { -224, -584, -527}, |
| { 494, 881, 682}, { -433, -306,-1002}, { 554, 659, 222}, |
| { 171, -160, -353}, { 681, 1798, 1565}, { -852,-1181,-1695}, |
| { -336, -666, 114}, { -581, -756, -744}, { -195, 375, 497}, |
| { -465, -804,-1098}, { 154, 282, -131}, { -50, -191, -719}, |
| { 323, 732, 1542}, { -722, -819,-1404}, { 105, -250, 185}, |
| { -178, -502, -742}, { 321, 510, 1111}, { -323, -567, -966}, |
| { 127, 484, 338}, { -160, 52, -338}, { 732, 1367, 1554}, |
| { -626, -802,-1696}, { -286, -586, 676}, { -695, -343, -370}, |
| { -490, 295, 1893}, { -630, -574,-1014}, { -80, 645, -69}, |
| { -6, -318, -364}, { 782, 1450, 1038}, { -313, -733,-1395}, |
| { 120, 60, 477}, { -264, -585, -123}, { 711, 1245, 633}, |
| { -91, -355,-1016}, { 771, 758, 261}, { 253, 81, -474}, |
| { 930, 2215, 1720}, { -808,-1099,-1925}, { -560, -782, 169}, |
| { -804,-1074, -188}, { -626, -55, 1405}, { -694, -716,-1194}, |
| { -660, 354, 329}, { -514, -55, -543}, { 366, 1033, 1182}, |
| { -658, -959,-1357}, { -55, -184, 93}, { -605, -286, -662}, |
| { 404, 449, 827}, { -286, -350,-1263}, { 628, 306, 227}, |
| { -16, 147, -623}, { 186, 923, 2146}, { -674, -890,-1606}, |
| { -443, -228, 339}, { -369, -790, -409}, { 231, 86, 1469}, |
| { -448, -581,-1061}, { 594, 450, -177}, { -124, -170, -447}, |
| { 671, 1159, 1404}, { -476, -667,-1511}, { -77, -138, 716}, |
| { -177, -372, -381}, { 451, 934, 915}, { -250, -432, -822}, |
| { 272, 828, 446}, { 26, 19, -31}, { 698, 1692, 2168}, |
| { -646, -977,-1924}, { -179, -473, 268}, { -379, -745, -691}, |
| { 11, 127, 1033}, { -488, -917, -825}, { 61, 323, 135}, |
| { 147, -145, -686}, { 685, 786, 1682}, { -506, -848,-1297}, |
| { 35, 90, 222}, { -23, -346, -670}, { 455, 591, 1287}, |
| { -203, -593,-1086}, { 652, 352, 437}, { 39, 63, -457}, |
| { 841, 1265, 2105}, { -520, -882,-1584}, { -328, -711, 1421}, |
| { -596, -342, -70}, { 209, 173, 1928}, { -423, -598, -921}, |
| { 421, 605, -38}, { -2, -245, -127}, { 896, 1969, 1135}, |
| { -379, -518,-1579}, { 173, 118, 753}, { -55, -381, -52}, |
| { 985, 1021, 753}, { -2, -291, -891}, { 753, 992, 423}, |
| { 264, 131, -196}, { 895, 2274, 2543}, { -635,-1088,-2499}, |
| { -529, -982, 526}, { -764, -830, -548}, { -436, 316, 599}, |
| { -675, -940, -746}, { -57, 236, -11}, { -201, -81, -798}, |
| { 16, 845, 1558}, { -737, -985,-1212}, { -468, 17, 290}, |
| { -279, -584, -700}, { 183, 822, 705}, { -265, -492,-1187}, |
| { 421, 152, 468}, { -390, 166, -268}, { 39, 1550, 1868}, |
| { -635, -966,-1571}, { -453, -492, 910}, { -284,-1027, -75}, |
| { -181, -133, 1852}, { -445, -624,-1174}, { 420, 367, -49}, |
| { -389, -212, -169}, { 707, 1073, 1208}, { -539, -710,-1449}, |
| { 83, -163, 484}, { -236, -543, -355}, { 338, 1175, 814}, |
| { -246, -309, -958}, { 606, 760, 60}, { 166, -8, -163}, |
| { -306, 1849, 2563}, { -747,-1025,-1783}, { -419, -446, 209}, |
| { -718, -566, -534}, { -506, 693, 857}, { -463, -697,-1082}, |
| { 325, 431, -206}, { -15, -8, -763}, { 545, 919, 1518}, |
| { -611, -783,-1313}, { 256, -55, 208}, { -165, -348, -662}, |
| { 321, 680, 930}, { -326, -429, -951}, { 484, 446, 570}, |
| { -197, 72, -73}, { 909, 1455, 1741}, { -563, -737,-1974}, |
| { -124, -416, 718}, { -478, -404, -314}, { -16, 446, 1636}, |
| { -551, -537, -750}, { -58, 638, 214}, { 55, -185, -271}, |
| { 1148, 1301, 1212}, { -483, -671,-1264}, { 117, 285, 543}, |
| { -204, -391, -111}, { 513, 1538, 854}, { -114, -190, -978}, |
| { 877, 595, 464}, { 260, 260, -311}, { 748, 2283, 2216}, |
| { -517, -945,-2171}, { -326, -708, 378}, { -812, -691, -232}, |
| { -560, 687, 1409}, { -732, -690, -836}, { -359, 645, 386}, |
| { -265, 62, -678}, { 145, 1644, 1208}, { -555, -988,-1233}, |
| { -78, 14, 114}, { -327, -358, -489}, { 392, 677, 697}, |
| { -201, -236,-1140}, { 693, 449, 178}, { -243, 256, -433}, |
| { 611, 1385, 2456}, { -612, -901,-1464}, { -307, -17, 499}, |
| { -315, -667, -254}, { 256, 428, 1463}, { -486, -422,-1056}, |
| { 655, 370, 18}, { -102, -185, -276}, { 755, 1578, 1335}, |
| { -488, -603,-1418}, { 182, -93, 870}, { -73, -458, -348}, |
| { 835, 862, 957}, { -282, -333, -746}, { 547, 839, 428}, |
| { 273, -89, 13}, { 940, 1708, 2576}, { -418,-1084,-1758}, |
| { -44, -358, 259}, { -497, -643, -560}, { 99, 557, 961}, |
| { -421, -766, -917}, { 295, 326, 184}, { 175, 15, -626}, |
| { 532, 878, 1981}, { -443, -768,-1275}, { 221, 156, 268}, |
| { 39, -363, -505}, { 695, 772, 1140}, { -162, -459, -912}, |
| { 709, 444, 658}, { 25, 303, -312}, { 1268, 1410, 1715}, |
| { -297, -766,-1836}, { -263, -108, 1070}, { -406, -13, -129}, |
| { 57, 438, 2734}, { -374, -487, -835}, { 304, 696, 164}, |
| { 104, -235, 5}, { 1611, 1900, 1399}, { -229, -582,-1325}, |
| { 405, 192, 817}, { -87, -438, 111}, { 1028, 1199, 993}, |
| { 68, -175, -934}, { 1033, 1117, 451}, { 478, 200, -248}, |
| { 2127, 2696, 2042}, { -835,-1323,-2131}, { -799, -692, 466}, |
| { -812,-1032, -469}, { -622, 288, 920}, { -701, -841,-1070}, |
| { -411, 512, 8}, { -390, -91, -744}, { -30, 1043, 1161}, |
| { -822,-1148,-1156}, { -294, -46, 110}, { -411, -374, -678}, |
| { 214, 531, 668}, { -406, -420,-1194}, { 487, 232, 303}, |
| { -318, 91, -472}, { 123, 1232, 2445}, { -722, -952,-1495}, |
| { -738, -675, 1332}, { -543, -606, -211}, { -95, -98, 1508}, |
| { -549, -514,-1193}, { 473, 211, 73}, { -288, -112, -389}, |
| { 537, 1332, 1258}, { -567, -755,-1545}, { 71, -283, 632}, |
| { -170, -481, -493}, { 681, 1002, 817}, { -356, -331, -877}, |
| { 419, 706, 346}, { 241, -34, -326}, { 377, 1950, 1883}, |
| { -727,-1075,-1625}, { -233, -543, 116}, { -524, -806, -585}, |
| { -73, 478, 729}, { -288, -925,-1143}, { 173, 447, -52}, |
| { 68, -229, -606}, { 449, 529, 1797}, { -591, -875,-1363}, |
| { 183, -144, 324}, { -103, -452, -666}, { 623, 488, 1176}, |
| { -238, -511,-1004}, { 326, 552, 458}, { 136, 108, -319}, |
| { 626, 1343, 1883}, { -490, -646,-1730}, { -186, -449, 984}, |
| { -738, -76, -170}, { -550, 755, 2560}, { -496, -510, -947}, |
| { 210, 694, -52}, { 84, -322, -199}, { 1090, 1625, 1224}, |
| { -376, -603,-1396}, { 343, 74, 632}, { -175, -502, -32}, |
| { 972, 1332, 734}, { 52, -295,-1113}, { 1065, 918, 160}, |
| { 393, 107, -397}, { 1214, 2649, 1741}, { -632,-1201,-1891}, |
| { -719, -277, 353}, { -651, -880, -122}, { -211, 209, 1338}, |
| { -562, -714,-1059}, { -208, 388, 159}, { -320, -61, -551}, |
| { 293, 1092, 1443}, { -648, -865,-1253}, { -49, -143, 305}, |
| { -401, -227, -585}, { 561, 532, 927}, { -117, -443,-1188}, |
| { 507, 436, 292}, { -79, 233, -458}, { 671, 1025, 2396}, |
| { -633, -842,-1525}, { -308, -286, 640}, { -373, -621, -407}, |
| { 418, 253, 1305}, { -315, -581,-1137}, { 572, 685, -281}, |
| { 61, -68, -371}, { 991, 1101, 1498}, { -493, -683,-1362}, |
| { -47, 164, 704}, { -256, -314, -268}, { 631, 949, 1052}, |
| { -118, -348, -833}, { 68, 1180, 568}, { 152, 117, 34}, |
| { 1113, 1902, 2239}, { -601, -959,-1706}, { -143, -489, 480}, |
| { -332, -655, -574}, { 54, 353, 1192}, { -462, -652, -796}, |
| { 150, 549, 112}, { 195, -111, -515}, { 679, 1108, 1647}, |
| { -558, -749,-1217}, { -9, 272, 341}, { -53, -265, -535}, |
| { 489, 843, 1298}, { -120, -482,-1032}, { 632, 543, 408}, |
| { 179, 306, -526}, { 1124, 1464, 2244}, { -417, -786,-1562}, |
| { -224, -384, 1364}, { -377, -459, -25}, { 385, 489, 2174}, |
| { -332, -651, -829}, { 544, 553, 61}, { 22, -113, -89}, |
| { 1128, 1725, 1524}, { -216, -373,-1653}, { 161, 316, 908}, |
| { -165, -222, -67}, { 1362, 1175, 789}, { 73, -252, -767}, |
| { 738, 932, 616}, { 362, 246, -126}, { 787, 2654, 3027}, |
| { -691,-1106,-2190}, { -565, -588, 524}, { -590, -979, -490}, |
| { -263, 397, 982}, { -577, -837, -945}, { -22, 435, -49}, |
| { -190, -118, -629}, { -88, 1240, 1513}, { -636,-1051,-1019}, |
| { -291, 189, 259}, { -257, -470, -629}, { 145, 945, 894}, |
| { -326, -364,-1094}, { 543, 260, 630}, { -202, 189, -209}, |
| { 357, 1379, 2091}, { -569,-1075,-1449}, { -714, -239, 919}, |
| { -420, -705, -84}, { -109, -114, 2407}, { -413, -529,-1177}, |
| { 482, 368, 131}, { -186, -72, -131}, { 861, 1255, 1220}, |
| { -611, -658,-1341}, { 227, -121, 631}, { -176, -489, -218}, |
| { 745, 1175, 957}, { -321, -148, -936}, { 671, 966, 216}, |
| { 340, -3, -143}, { 469, 1848, 2437}, { -729, -961,-1683}, |
| { -213, -254, 321}, { -511, -438, -521}, { -126, 725, 903}, |
| { -340, -685,-1032}, { 316, 480, 20}, { 23, -89, -551}, |
| { 353, 1051, 1789}, { -544, -757,-1364}, { 298, -25, 436}, |
| { -100, -392, -519}, { 467, 754, 1078}, { -210, -398,-1078}, |
| { 620, 658, 630}, { 33, 147, -178}, { 921, 1687, 1921}, |
| { -325, -528,-1978}, { 2, -285, 910}, { -371, -490, -230}, |
| { 0, 597, 2010}, { -496, -395, -834}, { 37, 945, 245}, |
| { 181, -160, -144}, { 1481, 1373, 1357}, { -355, -601,-1270}, |
| { 298, 322, 672}, { -193, -336, 77}, { 1089, 1533, 922}, |
| { 177, -39,-1125}, { 996, 781, 536}, { 456, 366, -432}, |
| { 1415, 2440, 2279}, { -466, -758,-2325}, { -303, -509, 387}, |
| { -727, -557, 66}, { -145, 643, 1248}, { -544, -676, -916}, |
| { -225, 862, 588}, { -152, 40, -533}, { 423, 1423, 1558}, |
| { -572, -843,-1145}, { -128, 85, 461}, { -238, -257, -584}, |
| { 605, 748, 861}, { 24, -202,-1409}, { 797, 487, 303}, |
| { -181, 364, -182}, { 616, 1378, 2942}, { -494, -852,-1441}, |
| { -292, 61, 812}, { -84, -723, -182}, { 555, 532, 1506}, |
| { -365, -493,-1057}, { 822, 588, 11}, { -14, -18, -230}, |
| { 1001, 1401, 1451}, { -474, -569,-1292}, { 302, 62, 1062}, |
| { -70, -376, -222}, { 982, 974, 1149}, { -196, -234, -795}, |
| { 479, 1098, 499}, { 362, 58, 70}, { 1147, 2069, 2857}, |
| { -487, -878,-1824}, { 73, -288, 348}, { -358, -500, -508}, |
| { 199, 721, 1242}, { -78, -697, -795}, { 361, 536, 196}, |
| { 374, 110, -735}, { 847, 1051, 1896}, { -366, -713,-1182}, |
| { 315, 320, 429}, { 72, -215, -450}, { 759, 886, 1363}, |
| { -30, -428, -834}, { 861, 627, 796}, { 118, 468, -279}, |
| { 1355, 1883, 1893}, { -188, -642,-1612}, { 63, -175, 1198}, |
| { -418, -211, 51}, { 414, 587, 2601}, { -234, -557, -858}, |
| { 424, 889, 222}, { 136, -101, 83}, { 1413, 2278, 1383}, |
| { -84, -445,-1389}, { 414, 313, 1045}, { 29, -343, 65}, |
| { 1552, 1647, 980}, { 183, -91, -829}, { 1273, 1413, 360}, |
| { 553, 272, -107}, { 1587, 3149, 2603} |
| }; |
| |
| static const int16_t lsf_3_1[256][3] = { |
| { 6, 82, -131}, { 154, -56, -735}, { 183, -65, -265}, |
| { 9, -210, -361}, { 113, 718, 1817}, { 1010, 1214, 1573}, |
| { 857, 1333, 2276}, { 827, 1568, 1933}, { 717, 1989, 2206}, |
| { 838, 1172, 1823}, { 721, 1000, 2154}, { 286, 476, 1509}, |
| { -247, -531, 230}, { 147, -82, 569}, { 26, -177, -944}, |
| { -27, -273, 692}, { -164, -264, -183}, { 224, 790, 1039}, |
| { 899, 946, 601}, { 485, 771, 1150}, { 524, 677, 903}, |
| { -140, 375, 778}, { 410, 676, 429}, { 301, 530, 1009}, |
| { 719, 646, 38}, { 226, 367, 40}, { 145, -45, -505}, |
| { 290, 121, -121}, { 302, 127, 166}, { -124, -383, -956}, |
| { -358, -455, -977}, { 715, 878, 894}, { 978, 923, 211}, |
| { 477, 272, 64}, { 188, -78, 17}, { -143, -65, 38}, |
| { 643, 586, 621}, { -134, -426, -651}, { 347, 545, 2820}, |
| { 1188, 2726, 2442}, { 142, -80, 1735}, { 283, 130, 461}, |
| { -262, -399,-1145}, { -411, 155, 430}, { 329, 375, 779}, |
| { 53, -226, -139}, { -129, -236, 1682}, { 285, 744, 1327}, |
| { 738, 697, 1664}, { 312, 409, 266}, { 325, 720, 135}, |
| { 1, 221, 453}, { 8, 203, 145}, { 299, 640, 760}, |
| { 29, 468, 638}, { 103, 429, 379}, { 420, 954, 932}, |
| { 1326, 1210, 1258}, { 704, 1012, 1152}, { -166, -444, -266}, |
| { -316, -130, -376}, { 191, 1151, 1904}, { -240, -543,-1260}, |
| { -112, 268, 1207}, { 70, 1062, 1583}, { 278, 1360, 1574}, |
| { -258, -272, -768}, { 19, 563, 2240}, { -3, -265, 135}, |
| { -295, -591, -388}, { 140, 354, -206}, { -260, -504, -795}, |
| { -433, -718,-1319}, { 109, 331, 962}, { -429, -87, 652}, |
| { -296, 426, 1019}, { -239, 775, 851}, { 489, 1334, 1073}, |
| { -334, -332, 25}, { 543, 1206, 1807}, { 326, 61, 727}, |
| { 578, 849, 1405}, { -208, -277, 329}, { -152, 64, 669}, |
| { -434, -678, -727}, { -454, -71, 251}, { 605, 480, 254}, |
| { -482, 11, 996}, { -289, 395, 486}, { 722, 1049, 1440}, |
| { -30, -316, -786}, { -106, -115, -619}, { 861, 1474, 1412}, |
| { 1055, 1366, 1184}, { 812, 1237, 925}, { 42, -251, -576}, |
| { 342, 141, -454}, { -168, -80, 1359}, { -342, -656,-1763}, |
| { 100, 821, 725}, { 990, 747, 800}, { 332, 440, 568}, |
| { 663, 379, 852}, { 112, 165, -369}, { 597, 910, 282}, |
| { -8, 834, 1281}, { -352, 572, 695}, { 462, 2246, 1806}, |
| { 345, 190, 1374}, { 416, 915, 2166}, { 168, -82, 280}, |
| { -516, -446, 840}, { 47, 533, 44}, { -362, -711,-1143}, |
| { 22, 193, 1472}, { -85, 233, 1813}, { -62, 579, 1504}, |
| { 550, 944, 1749}, { 723, 650, 1148}, { 972, 884, 1395}, |
| { -425, 643, 0}, { 1000, 952, 1098}, { 249, 1446, 672}, |
| { -334, -87, 2172}, { -554, 1882, 2672}, { 140, 1826, 1853}, |
| { 920, 1749, 2590}, { 1076, 1933, 2038}, { -137, -443,-1555}, |
| { 1269, 1174, 468}, { -493, -122, 1521}, { -451, 1033, 1214}, |
| { 482, 1695, 1118}, { 815, 649, 384}, { -446, -692, 107}, |
| { -319, -605, -118}, { -207, -505, 525}, { -468, -12, 2736}, |
| { 75, 1934, 1305}, { 880, 2358, 2267}, { 1285, 1575, 2004}, |
| { -48, -304,-1186}, { -435, -461, -251}, { -366, -404, -547}, |
| { -289, -605, -597}, { -538, -810, -165}, { -120, 3, 356}, |
| { 639, 1241, 1502}, { 96, 177, 750}, { -435, -585,-1174}, |
| { -356, 109, -79}, { -485, 288, 2005}, { 9, 1116, 731}, |
| { 880, 2134, 946}, { -265, 1585, 1065}, { 1157, 1210, 843}, |
| { -498, -668, 431}, { 374, 321, -229}, { 1440, 2101, 1381}, |
| { 449, 461, 1155}, { -105, 39, -384}, { -263, 367, 182}, |
| { -371, -660, 773}, { -188, 1151, 971}, { 1333, 1632, 1435}, |
| { 774, 1267, 1221}, { -482, -832,-1489}, { -237, -210, 860}, |
| { 890, 1615, 1064}, { 472, 1062, 1192}, { 185, 1077, 989}, |
| { -568, -992,-1704}, { -449, -902,-2043}, { -142, -377, -458}, |
| { -210, -554,-1029}, { -11, 1133, 2265}, { -329, -675, -893}, |
| { -250, 657, 1187}, { 519, 1510, 1779}, { 520, 539, 1403}, |
| { 527, 1421, 1302}, { -563, -871,-1248}, { -147, -463, 879}, |
| { -76, 2334, 2840}, { 563, 2573, 2385}, { 632, 1926, 2920}, |
| { 719, 2023, 1840}, { -545, -723, 1108}, { 129, -125, 884}, |
| { 1417, 1632, 925}, { -94, 1566, 1751}, { -341, 1533, 1551}, |
| { 591, 395, -274}, { -76, 981, 2831}, { 153, 2985, 1844}, |
| { 1032, 2565, 2749}, { 1508, 2832, 1879}, { 791, 1199, 538}, |
| { -190, -453, 1489}, { -278, -548, 1158}, { -245, 1941, 2044}, |
| { 1024, 1560, 1650}, { 512, 253, 466}, { -62, -323, 1151}, |
| { -473, -376, 507}, { -433, 1380, 2162}, { 899, 1943, 1445}, |
| { 134, 704, 440}, { 460, 525, -28}, { -450, 279, 1338}, |
| { 0, 971, 252}, { -445, -627, -991}, { -348, -602,-1424}, |
| { 398, 712, 1656}, { -107, 314, -178}, { 93, 2226, 2238}, |
| { 518, 849, 656}, { -462, -711, -447}, { 174, -34, 1191}, |
| { -119, 42, 1005}, { -372, 274, 758}, { 1036, 2352, 1838}, |
| { 675, 1724, 1498}, { 430, 1286, 2133}, { -129, -439, 0}, |
| { -373, 800, 2144}, { 6, 1587, 2478}, { 478, 596, 2128}, |
| { -428, -736, 1505}, { 385, 178, 980}, { 139, 449, 1225}, |
| { -526, -842, -982}, { 145, 1554, 1242}, { 623, 1448, 656}, |
| { 349, 1016, 1482}, { 31, -280, 415}, { -316, 724, 1641}, |
| { 360, 1058, 556}, { -436, -358, 1201}, { -355, 1123, 1939}, |
| { 401, 1584, 2248}, { -527,-1012, 355}, { 233, 238, 2233}, |
| { -550, -897, -639}, { -365, -501, 1957}, { 389, 1860, 1621}, |
| { 162, 1132, 1264}, { -237, 1174, 1390}, { -640, -411, 116}, |
| { -228, 1694, 2298}, { 1639, 2186, 2267}, { 562, 1273, 2658}, |
| { 323, 338, 1774}, { 578, 1107, 852}, { 22, 594, 934}, |
| { -143, 718, 446} |
| }; |
| |
| |
| static const int16_t lsf_3_2[512][3] = { |
| { 50, 71, -9}, { -338, -698,-1407}, { 102, -138, -820}, |
| { -310, -469,-1147}, { 414, 67, -267}, { 1060, 814, 1441}, |
| { 1548, 1360, 1272}, { 1754, 1895, 1661}, { 2019, 2133, 1820}, |
| { 1808, 2318, 1845}, { 644, -93, 454}, { 858, 329, -136}, |
| { 489, -258, -128}, { -198, -745, -41}, { -52, -265, -985}, |
| { 346, 137, 479}, {-1741, -748, -684}, {-1163,-1725, -367}, |
| { -895,-1145, -784}, { -488, -946, -968}, { -85, -390, -725}, |
| { 215, -340, -171}, { 1020, 916, 1969}, { 564, 179, 746}, |
| { 662, 977, 1734}, { 887, 622, 914}, { 939, 856, 1165}, |
| { 309, 688, 803}, { 917, 161, 570}, { 118, -20, -283}, |
| { -816, -42, 204}, {-1228, -325, -462}, { -963, -202, -143}, |
| { -988, -484, -361}, { -702, -978, -477}, { -302, -790,-1188}, |
| { -100, -786,-1088}, {-1054, -947,-1684}, { -202, -843, -782}, |
| {-1039,-1378, -901}, { -624, -110, -85}, { 356, 213, -10}, |
| { -493, 364, 774}, { 425, 822, 479}, { -83, 557, 520}, |
| { -992,-1560, -572}, { -603, -741, -26}, { -502, -638, -903}, |
| { 209, 306, 147}, { -316, -593, -596}, { -85, -211, -225}, |
| { -918, -529, 117}, { 233, -439, -738}, { 1101, 751, 633}, |
| { 1457, 1716, 1511}, { 1765, 1457, 910}, { 1122, 1156, 849}, |
| { 1354, 868, 470}, { -871,-1150,-1796}, { -871, -861, -992}, |
| { -118, 155, 212}, {-1051, -849, -606}, {-1117,-1849,-2750}, |
| {-1019,-1427,-1869}, { 370, -184, -414}, { 959, 493, 104}, |
| { 958, 1039, 543}, { 154, 653, 201}, { 1249, 507, 150}, |
| { 663, 503, 230}, { 623, 777, 675}, { 659, 88, -110}, |
| { 843, 244, 224}, { 382, 541, 302}, { 724, 433, 666}, |
| { 1166, 734, 341}, { -138, 20, -397}, {-1183, -424, -46}, |
| { -321, -352, -124}, { 1333, 1021, 1080}, { 262, 366, 723}, |
| { 922, 283, -551}, { 31, -636, -611}, { -689, -697, -415}, |
| { -952, -779, -201}, {-1329, -598, -359}, { -953,-1285, 166}, |
| { 493, 305, 221}, { 846, 703, 610}, { 840, 936, 774}, |
| { -723,-1324,-1261}, { -357,-1025,-1388}, {-1096,-1376, -365}, |
| {-1416,-1881, -608}, {-1798,-1727, -674}, { -545,-1173, -703}, |
| { 678, 786, 148}, { -123, 696, 1288}, { 644, 350, -10}, |
| { 414, 614, 15}, { 137, 344, -211}, { -814,-1512, -819}, |
| { -391, -930, -588}, { 47, -591, -898}, { -909,-1097, -163}, |
| {-1272,-1167, -157}, {-1464,-1525, -389}, {-1274,-1188, -624}, |
| { 671, 213, 454}, { 124, -274, -525}, { -729, -496, -152}, |
| {-1344, 122, 135}, {-2905, -589, -394}, {-1728, 441, -50}, |
| { 1476, 904, 787}, { 316, 236, -440}, { -347, 217, 413}, |
| { -911, -917, 121}, { -455, -932, 202}, { -92, -465, -375}, |
| { 488, 390, 474}, { 876, 729, 316}, {-1815,-1312, -669}, |
| { 87, 962, 432}, { 563, -249,-1058}, { 250, 285, 1105}, |
| { 1141, 427, 696}, {-1038,-1664,-1582}, { -948, 346, 160}, |
| { -309, -272, -858}, { 670, 624, 1250}, { -944, -408, -666}, |
| { -606, -320, -384}, { -492, 230, 65}, { 334, -50, -16}, |
| { -16, -690,-1397}, { 1791, 1716, 1399}, { 2478, 2063, 1404}, |
| { 1245, 1471, 1426}, { -382,-1037, -2}, { 173, -398, 1145}, |
| { 1491, 2024, 1801}, { 772, 1274, 1506}, { 1429, 1735, 2001}, |
| { 1079, 1218, 1273}, {-1154,-1851,-1329}, { -808,-1133,-1096}, |
| { -451,-1033,-1722}, { 65, 578, -84}, {-1476,-2434,-1778}, |
| { -765,-1366, -494}, { -218, -594, -931}, { 337, -236, 562}, |
| { 2357, 2662, 1938}, { 1489, 1276, 874}, { 189, 358, 374}, |
| {-1519,-2281,-2346}, { -967,-1271,-2095}, { -628,-1188,-1542}, |
| { 1661, 1043, 546}, { 565, 1061, 732}, { -64, -836, -434}, |
| { -436, -96, 203}, { 1078, 1216, 1636}, { 907, 1534, 986}, |
| { 326, 965, 845}, { 142, -84, 197}, { 470, 2379, 1570}, |
| { 1133, 470, 1214}, { 395, 1376, 1200}, { 1125, 1042, 348}, |
| { -543,-1234, -376}, { -215, -181, 481}, {-1947,-1621, -210}, |
| { -750,-1185, 390}, { 29, -399, 27}, { 820, 1236, 755}, |
| { 695, 979, 409}, { -174, 1197, 1035}, { 912, 1356, 1846}, |
| { -992,-1437, 484}, {-1485,-1700, 208}, { -412, 1204, 1432}, |
| { -271, 896, 1144}, { -416, 1777, 1434}, {-1696,-2644, -204}, |
| {-1789,-1551, 1033}, {-1656,-1559, 1303}, {-1253,-1589, 1081}, |
| { -669,-1095, -66}, { -682, 320, -345}, { 659, 305, 1069}, |
| {-1292, -804, -19}, {-1635,-1291, 29}, {-1683, -497, 71}, |
| { -287, -7, -100}, { -494, -962, -237}, { 852, 1881, 1740}, |
| {-1217,-1387, 227}, { -660, 302, 373}, { 96, 1087, 1257}, |
| {-1074,-1669, 160}, { 485, 2076, 1798}, { -934, -220, 552}, |
| { -596, -612, 237}, { 336, 1720, 879}, { 643, 629, 434}, |
| { 1267, 522, 1633}, { 15, 244, -441}, { 1475, 717, 184}, |
| { 1819, 1590, 1709}, { 988, 261, 937}, { 2093, 2345, 1520}, |
| { 2139, 1858, 1606}, { -577, -579,-1203}, { -956, 135, -488}, |
| { -464, 51, -338}, { -629, -348, -723}, { 1146, 2073, 1442}, |
| { 2192, 1466, 911}, {-1444,-1572,-2278}, { 1400, 710, 1297}, |
| { 1335, 633, 928}, { 1434, 2194, 2594}, { 2422, 2204, 1881}, |
| { 982, 2242, 1854}, { 380, 792, 1145}, { -63, -539, 414}, |
| { -252, -964, -314}, {-1261, -683, -780}, { -831, -526,-1005}, |
| {-1666,-1135, -424}, {-1611, -452, -299}, { 1268, 1048, 642}, |
| { 1147, 853, 856}, { -675, -336, 139}, { 2268, 1343, 1418}, |
| { 29, 768, 797}, {-1224, 423, 564}, {-1318,-1082, 245}, |
| {-1302, -812, 573}, {-1298,-1617, 646}, { -968, 834, 723}, |
| { 993, 1652, 2027}, { -191, -817, 432}, { 662, 60, 198}, |
| { 626, 997, 1330}, { 1648, 1963, 1289}, {-1597, -93, -45}, |
| {-1088, 37, -84}, { 1653, 2607, 2337}, { 1065, 2040, 2377}, |
| { 1139, 2326, 2118}, { 859, 357, 1510}, { 664, 1227, 1099}, |
| { 479, 1360, 912}, { 1897, 1754, 2019}, { 1168, 1909, 1784}, |
| { 399, 34, 256}, { -593, -304,-1053}, { 547, 1694, 1407}, |
| { 647, -99, -341}, { 1492, 1647, 1190}, { 38, -644, -212}, |
| { 395, 846, 222}, { -704, -765, -716}, { -724,-1964,-2804}, |
| { -150, 291, -82}, { 1233, 1459, 1007}, { -140, -155, 153}, |
| { 439, 297, 1568}, {-1529, -410, -636}, { 1536, 455, -237}, |
| {-1328, -139, -260}, { 531, 554, 868}, { 269, 1264, 606}, |
| { -233, 883, 463}, { 742, 600, -120}, { -73, 421, 212}, |
| { -439, -58, 804}, {-1286,-1241, 728}, { 294, -490, 50}, |
| { -591, -905,-1254}, { 42, -687, 147}, { -25, 273, 596}, |
| { -311, 1213, 601}, { -754, 849, 584}, { 429, 607, 587}, |
| { -602, -166, 461}, { -796, -823, 777}, { 1380, 910, 1755}, |
| { 119, 1417, 972}, { -219, -880,-1596}, {-1049,-1010, 438}, |
| { -713,-1379, 78}, { 0, -447,-1179}, {-1136,-1319,-1573}, |
| { 2248, 1767, 1309}, { 946, 1583, 1432}, { 1150, 482, 436}, |
| { -469,-1108, 618}, { -447, -966, 1088}, {-1252,-1515, -114}, |
| {-1104,-2008, -579}, { 210, 613, 497}, {-1975,-1437, 642}, |
| {-1269, -856, 1011}, {-1646,-1185, 1063}, {-1555, -672, 1204}, |
| {-1692,-1114, 623}, { -979,-1326,-1277}, { 539, -147, 894}, |
| {-1354, -897, -434}, { 888, 475, 428}, { 153, -384, 338}, |
| {-1492, -511, 359}, { -974,-1115, -470}, { 105, -550, 677}, |
| { -937,-1145, 877}, { 380, -260, 210}, { 1685, 924, 1256}, |
| { 1775, 1190, 1095}, { 1419, 631, 533}, { 627, 299, -347}, |
| { -411, -534, 647}, { -650, 29, -595}, { -378,-1367, 1563}, |
| { 1402, 1121, 1465}, { 1089, 1410, 648}, {-2096,-1090, -6}, |
| { 311, -194, -869}, { -639, -831, 416}, {-1162,-1224, 1349}, |
| {-1247, -941, 1813}, {-2193,-1987, 453}, { -619,-1367, -956}, |
| {-1606,-1972,-1507}, {-1175,-1057,-1104}, { -377, 601, 201}, |
| { 1876, 825, 374}, { -430,-1323, 29}, {-1397,-1249,-1331}, |
| {-1007,-1504, 960}, {-1401,-2009, 197}, {-1379,-1949, -236}, |
| {-1077, 123, 422}, { 615, 1269, 546}, { -306, 1526, 904}, |
| { 1194, 1788, 1177}, { -626, -884,-1526}, { 199, 766, 1504}, |
| {-1065, 862, 197}, {-1034,-1773, -887}, { -800, 145, 599}, |
| {-1134, -519, 626}, {-1205,-1926, 500}, { -910,-1041,-1395}, |
| {-1476,-1567, -969}, { -523, 842, 34}, { 1794, 646, 862}, |
| {-1207,-1888,-1002}, { -78, -9, -672}, { 1044, 759, 80}, |
| { -600, 1139, 1019}, { 57, 2000, 1422}, { -833, 1414, 1121}, |
| {-1202, 1630, 1260}, { -461, 1420, 1244}, { 1537, 975, 253}, |
| { -283, 324, -359}, { 599, -195, 106}, { 588, 62, -587}, |
| { -757, 645, 205}, { 51, 1201, 758}, {-1209, 673, -390}, |
| { -624, 1581, 941}, { -151, 1023, 735}, { 2820, 1301, 690}, |
| { -302, 524, -99}, { -900,-1588,-1189}, { 1084, 251, 238}, |
| { 2014, 1792, 1010}, { 1245, 1633, 1741}, {-1227,-1540,-1208}, |
| { -621, 456, -109}, { 40, -65, 788}, { -805, -699,-1350}, |
| { -583, 904, 832}, { -801, 532, 594}, { 1972, 1408, 1351}, |
| {-1177,-1880,-2114}, { -773, 568, 948}, {-1015, 1079, 1260}, |
| {-1111, 482, -130}, { 1778, 1044, 780}, {-1491, 245, 912}, |
| { -316,-1141, -917}, { -536,-1442,-2346}, { -785,-1546,-1988}, |
| {-2003, 257, 909}, {-1849, -633,-1209}, {-1538,-1918,-1054}, |
| { 1606, 2239, 1576}, { -567,-1500,-1544}, {-1279, 195, 1369}, |
| { -817, 293, 1219}, { -525, 630, 1197}, {-1698,-2425,-1840}, |
| { -303, 731, 747}, {-1169, -251, 269}, { -950, -75, 1684}, |
| {-1182, -453, 1005}, {-1599, 585, 378}, {-2075, -571, -427}, |
| { -529,-1159,-1171}, { -283, -205, -564}, { -796, 1246, 717}, |
| { 2277, 927, 539}, { -454, 559, 440}, { -717, 1460, 1615}, |
| {-1030, 1052, 1610}, {-1169, -138, 847}, { 226, 39, -612}, |
| {-1251, -106, -729}, { -651, 968, 1302}, { -714, -636, 1727}, |
| { 353, 1069, 410}, { -798, -156, 1099}, { -574, 918, 446}, |
| {-1310, 1012, 466}, { 1408, 1591, 765}, { 1429, 1380, 1757}, |
| { 1949, 1956, 2378}, { 1578, 2047, 2148}, { 916, 98, -7}, |
| { 1893, 1418, 2141}, { 348, 1405, 1579}, { 152, 1134, 1801}, |
| { -267, 154, 1395}, {-1166, 469, 1054}, {-1142, -405,-1073}, |
| {-1341,-2264,-1581}, { -364, 869, 1706}, {-1162, 549, 1550}, |
| {-1225,-1932,-1666}, {-1485,-1977,-2055}, {-1727, -906, -98}, |
| {-1897, 233, 1492}, { 892, 108, -331}, {-1728,-1170,-1700}, |
| {-1060, 1980, 1790}, {-1070,-1741,-1909}, { -11, 1539, 1317}, |
| {-1600, 94, 497}, { 421, 443, -197}, {-1578, -349, -994}, |
| { -599, -539, 1140}, { -965,-1419, -129}, {-1341, 175, -447}, |
| { -375, 1311, 2055}, { -371, -650, -307}, {-1073, 605, 365}, |
| {-2057, -113, 430}, { 652, 914, 967}, {-1012,-1586,-2323}, |
| { 1505, 1248, 559}, { 262, -486, -401}, {-1727, 1342, 1546}, |
| { 50, 56, 432}, { -330, 119, -604}, {-1517,-1080, -810}, |
| { 946, 1127, 1055}, {-1400,-1703,-1712}, {-1270, -704,-1317}, |
| { 807, 1821, 1143}, { 2760, 1606, 2171}, { 1120, 409, -150}, |
| { -147, 404, 959}, { 2439, 1911, 2189}, { -906, -141, -866}, |
| { -904, -142, -458}, { -557, -708,-1679}, { -830,-1431,-1583}, |
| {-1842,-1346,-1086}, {-1604, -272, 915}, {-1196, 772, 1056}, |
| { -638,-1234,-1897}, { -500, -81, -822}, {-1289,-1613, -735}, |
| { -117, 785, 168}, {-1090, 1133, 922}, {-1096, -746, 1384}, |
| { 287, -547,-1063}, {-1376,-2201,-1204}, {-2176,-1570,-1757}, |
| {-1511,-2241, -771}, {-1737, 1099, 830}, {-1588, 724, 1243}, |
| {-1542, 693, 805}, {-1690, -240, 1665}, {-1700, -4, -668}, |
| { 2149, 816, 1042}, { -818,-1841, 22}, { -764, -507, 449}, |
| {-1151, -617, 289}, { -843,-1596, -240}, { 498, -234, -657}, |
| { -752, 480, 1678}, { -319, -481, 193}, { -811, 171, -119}, |
| {-2128, -202, -848}, { 1717, 1140, 1700} |
| }; |
| |
| static const int16_t lsf_3_3[512][4] = { |
| { 67, -17, 66, -12}, {-1690, -581, -104, -272}, {-1076,-1186,-1845, -376}, |
| {-1140, -926, -420, -58}, { -259, -656,-1134, -553}, { 1788, 1227, 455, 129}, |
| { 462, 441, -240, -528}, { 840, 514, 130, -75}, { 1114, 623, 153, 216}, |
| { 1068, 564, -6, -276}, { 1119, 727, 190, -68}, { 704, 306, 119, -264}, |
| { 329, 61, -100, 156}, { 364, 123, 183, -208}, { -171, -123, 220, -65}, |
| { -306, -62, 402, 17}, { -660, -938, -266, 0}, { 385, 235, 276, 285}, |
| { 320, 268, -336, -200}, { -724, 17, -84, 381}, { -544, 429, 494, 519}, |
| { -117, 288, 304, 329}, { 643, 157, 701, 508}, { 1200, 625, 796, 608}, |
| { 998, 421, 492, 632}, { 1204, 780, 446, 132}, { 1257, 844, 547, 449}, |
| { 829, 658, 541, 470}, { 1132, 1258, 918, 639}, { 547, 51, 423, 279}, |
| { 9, 392, 83, 94}, { 542, 543, 229, -147}, { -198, 129, 194, -185}, |
| { -863,-1321, -302, 30}, { -597, -629, -19, 114}, { -900,-1081, 466, 353}, |
| {-1483,-1573, 15, -143}, {-1708,-2059, -751, 196}, {-1876,-2067, -642, -258}, |
| {-2335,-1470, -450, -564}, { -584, -186, -872, -414}, {-1805, -988,-1125,-1310}, |
| { -726,-1129, 28, 169}, {-1039, -864, -718, -246}, { 484, 36, -233, -49}, |
| { 265, 67, 289, 467}, { 178, 543, 810, 540}, { 84, 282, 672, 703}, |
| { -975, -777, 129, 287}, { -938, -227, 955, 595}, {-1617, -289, 836, 649}, |
| {-1847, -215, 1106, 718}, {-2034,-1085, 650, 440}, {-2101, -529, 907, 575}, |
| {-2011, -336, 670, 204}, {-2389, -692, 360, 137}, {-2156,-2204, -9, 280}, |
| { -266, 119, 39, 193}, { 78, -59, -120, 226}, { -975, -858, -781,-1095}, |
| { -619, -413, -451, -842}, {-1216,-1321, -813, -883}, {-1376,-1615, -394, -428}, |
| { -737,-1113, -549, -790}, { -880, -975, -967, -642}, { -985, -886,-1273,-1361}, |
| { -473, -804,-1401,-1407}, { 160, -265, -919, -275}, { -248, -250, -718, -380}, |
| { 97, -103, -375, -229}, { -415, -193, -135, -555}, { 628, 361, 119, 216}, |
| { 579, 364, 391, 209}, { 634, 522, -154, -148}, { 526, 389, 170, 33}, |
| { 105, 267, 64, 380}, {-1503,-1000, -30, -369}, {-1070, 58, 647, 223}, |
| {-1520, -291, 621, 307}, {-1531, 156, 762, 404}, {-2029, 141, 734, 499}, |
| {-1849, -650, 306, 512}, { -187, -104, -59, 438}, { 134, -230, 156, -186}, |
| { -61, -260, -16, 10}, { -569, -3, -421, -297}, {-1725, -521, -346, 178}, |
| {-1362, -59, -44, 157}, {-2146, -461, -470, -349}, {-2170, -1, -369, -121}, |
| {-1579, -373, -900,-1015}, {-1117, -591, -613, -784}, { -561, 122, -75, -449}, |
| { -4, -171, -123, -372}, { 192, 168, -76, -132}, { 252, -107, 340, 210}, |
| { 392, 509, 272, 181}, { -109, 145, 218, 119}, { -416, -263, 485, 265}, |
| { -181, -8, -286, 226}, { -244, -218, 69, -290}, { -158, 191, -1, -64}, |
| { -592, -90, 213, -96}, { 255, 435, 178, -80}, { -369, -18, -33, -80}, |
| { -42, 415, 140, -222}, { 1143, 651, 649, 329}, { 767, 556, 249, 235}, |
| { 948, 413, 442, 279}, { 141, 339, 356, 557}, { -470, -170, 99, 237}, |
| { -569, -800, 352, 565}, { 282, 473, 470, 332}, { -199, -690,-1284, -917}, |
| { -193, -426, -800,-1122}, { -26, -371, -490, -193}, { 637, 595, 519, 330}, |
| { 408, -115, 79, 12}, { 477, 87, -103, -376}, { -666, -347, -277, -291}, |
| { -510, -481, 169, 297}, { -829, -738, -205, -171}, { -320, -540, 328, 283}, |
| { -859, -958, 442, -2}, { 556, 686, 130, 56}, { 1383, 1012, 755, 427}, |
| { 612, 741, 628, 553}, { -339, -796, 134, 277}, { -633,-1085, -2, -246}, |
| { -880,-1035,-1607,-1064}, { -994, -474,-1138, -488}, { -414, -795, 73, -206}, |
| { -8, -139, 439, 204}, { -176, -578, 23, 131}, { -269, -757, -191, 245}, |
| { -109, -338, 112, 316}, { 120, -406, -118, 611}, { -180, -186, -645, 115}, |
| { -173, 34, -518, -489}, { -151, 61, -583, -844}, { 220, -138, -681,-1020}, |
| { 391, -17, -598, -321}, { 157, -295, 129, 155}, { -926, -875, -987, 285}, |
| { 241, -83, -125, -125}, { 620, 597, 432, 92}, { 393, 78, 409, 61}, |
| { -393, -739, -413, -748}, { 83, 54, 361, 27}, {-1084, 130, -337, -694}, |
| {-1565, 297, 318, -19}, {-1873, 36, 51, -317}, {-2323, -246, 231, -84}, |
| {-2306, -783, 40, -179}, {-2233, -930, -474, -462}, { -754, -86, -288, -626}, |
| {-2411, -455, -63, 171}, {-1099,-1094, -26, -143}, {-1193, -455, -406, -381}, |
| { -605, -210, -96, -51}, { -580, -476, -276, -15}, {-1195, -634,-1203, -881}, |
| { -378, -221, -669, -952}, { 594, 178, -403, -676}, { 763, 327, 601, 290}, |
| { 172, 300, 203, 157}, { -56, -336, 356, 24}, { -228, -296, -259, -29}, |
| { -186, 263, 416, 14}, { -353, 373, -12, -216}, { 257, 96, 174, 57}, |
| {-1526, -616, -954, -499}, { -497, -152, -333, 125}, { 105, 200, 179, -97}, |
| { -331, -224, 765, 697}, { 760, 256, 301, 59}, { 455, -85, 204, 288}, |
| { -514, 240, 251, -109}, { 256, 417, -34, -413}, { 101, 430, 384, 156}, |
| { -31, -10, 206, 426}, { 589, 145, 143, 71}, { 808, 906, 333, 349}, |
| { 986, 938, 589, 331}, { 1300, 824, 187, 509}, { 1062, 653, 379, 466}, |
| { 1462, 937, 401, 274}, { 787, 861, 265, 2}, { 609, 553, 28, 305}, |
| { 926, 340, 106, 386}, { 241, -267, -147, 225}, { -178, -534, 347, 502}, |
| { -643, -381, 397, 30}, { -651, -733, -435, 398}, { -407, -726, -484, -248}, |
| { -789, -914, -438, -476}, { -498, -390, 75, -295}, { -964, -590, -606, 150}, |
| { -121, -49, -155, -78}, { 935, 550, 389, 38}, { -321, 127, 424, 315}, |
| { -285, -113, 283, 259}, { 658, 203, 322, 486}, { 903, 505, 748, 417}, |
| { 611, 423, 555, 512}, { 239, -83, -578, -19}, { -339, -731, 349, 13}, |
| { -934,-1399, -114, -360}, { 107, 692, 182, 90}, {-1243,-1538,-1551, -725}, |
| { -568, -903,-1363, -525}, { -517, -853, -861,-1004}, { -168, -690, -835, 63}, |
| { -137, -556, -547, 144}, { -286, -817, 485, 319}, { -147, -408, 526, 246}, |
| { -347, -434, 297, -28}, { -290, -471,-1110,-1285}, { -460, -359, -988, -794}, |
| { 1347, 1299, 690, 523}, { 1216, 1068, 1094, 757}, { 825, 1140, 752, 494}, |
| { 1252, 1365, 1195, 898}, { 521, 1053, 532, 432}, { -334, -216, -313, -263}, |
| { -160, 52, -472, -155}, { 127, 136, -380, 44}, { 851, 410, -162, -489}, |
| { 123, -255, -796, -667}, { 1090, 917, 789, 493}, { 1397, 1197, 558, 202}, |
| { -51, -118, -342, -701}, { 83, 108, -42, -441}, { 61, 95, 287, 256}, |
| { -27, 89, 524, 531}, { 351, 227, 592, 545}, { 697, 155, -164, 307}, |
| { 638, 274, -489, -50}, { 754, 240, -166, -124}, { -116, -579,-1212, -63}, |
| { 190, -295,-1040,-1296}, { 147, -376, -177, -113}, { 841, 1241, 1051, 668}, |
| { 2, 293, 551, 304}, {-1096, -953, -248, 376}, { -750, -965, 87, 516}, |
| { -275, -516, 689, 391}, { -379, -643, 876, 594}, { -390,-1013, -645, 573}, |
| { -107, -568, -689, -826}, {-1025, -27, -328, -203}, { 861, 749, 548, 233}, |
| {-1660,-1043, 451, 108}, { -660, -620, 430, 236}, { 21, -396,-1158, -631}, |
| { 1372, 1298, 967, 577}, { 1125, 1125, 589, 454}, { -323, -865, -467, 153}, |
| { -468, -699, -804, -509}, { -392, -718, -204, -35}, { -603,-1093, -567, -162}, |
| { -505,-1004, -102, 350}, { 219, 224, 423, 252}, { 395, 591, 608, 363}, |
| { -746, -96, 373, 172}, { 171, 295, 714, 339}, { 233, 77, 107, 277}, |
| { 157, 153, -499, -356}, { 1547, 1073, 576, 494}, { -292, -339, -504, -592}, |
| { -903, -72, -619, -481}, {-1594,-1117, -567, -254}, { -793, -507, -564, -291}, |
| { -492, -532, 502, 560}, { -382, 427, 600, 230}, { -227, 477, 251, 75}, |
| { 285, 842, 813, 476}, {-1310,-1333, 186, 377}, { -587, -917, 643, 381}, |
| {-1186, -553, 411, 82}, {-1127, -820, -174, -540}, { -604, 119, 543, 205}, |
| { -380, 657, 909, 567}, { 112, -298, -374, 114}, { -857, -251, 56, 159}, |
| { 401, 345, -34, -140}, { -111, -607, 41, 614}, { 355, -114, -77, 474}, |
| { 578, 56, 1450, 924}, { 1098, 1420, 741, 400}, { 246, 22, 588, 313}, |
| { -121, 327, 831, 472}, {-1138, -608, 856, 552}, {-1241,-1072, 638, 600}, |
| { -358, 254, -333, -303}, { -646, 739, 358, 74}, { 1226, 1671, 1221, 849}, |
| { 2241, 1624, 983, 636}, { 1841, 1477, 749, 384}, { 350, 263, 87, 128}, |
| {-1902, -941, -144, -64}, {-1734, -255, 288, -31}, {-2644,-1238, 366, 235}, |
| {-1643,-1092,-1344, -304}, { -541,-1075,-1116, 123}, {-1178, -252, -816, -180}, |
| {-1016, 533, 565, 233}, { -487, -430, -188, 334}, { 867, 1236, 534, 171}, |
| {-1590,-1607, 635, 630}, {-2196, 310, 924, 412}, {-2358, -328, 956, 529}, |
| {-2639, -377, 630, 278}, {-2602, 317, 799, 299}, {-2406, 133, 340, 31}, |
| {-2156,-1468, 131, 125}, {-1184, -490, -139, 46}, { -744, 447, 891, 564}, |
| { 67, -451, 646, 604}, { -553, -429, -876, 396}, { 162, -66, 1305, 915}, |
| { 479, 579, 1088, 794}, { 450, 278, 566, 324}, {-1057, -154, 148, -177}, |
| {-2545, 168, 1070, 592}, {-2351, -42, 819, 345}, {-2344, -707, 721, 250}, |
| {-2175,-1497, -309, 122}, { -78, -73, 120, 173}, { -4, 262, -263, -261}, |
| { -431, -64, -405, -732}, {-2609, 116, -83, -193}, {-1525, -944, -477, -725}, |
| { -508, 307, 170, 172}, { 832, 417, 832, 686}, { -225, 177, 894, 818}, |
| { -482, -389, 1279, 1039}, { -383, 201, -350, 40}, { 730, 635, 226, 526}, |
| { 503, 462, 338, 398}, { 535, 714, 40, -282}, { 1482, 1471, 1085, 731}, |
| { 1561, 1072, 909, 693}, { 1419, 1282, 889, 879}, { 1153, 728, 1186, 840}, |
| { -226, 1130, 949, 689}, { -494, -986,-1556, -128}, { -568, -721, -713, -26}, |
| { 317, 524, 70, 135}, { -405, -865,-1766, -652}, { -174, -801, 885, 773}, |
| { -153, -91, 1099, 751}, { -506,-1149, 853, 646}, { 241, 782, 519, 539}, |
| { 1853, 1700, 1101, 684}, {-1249,-1486, -464, 188}, { -893,-1409,-1312, -341}, |
| { -135, 438, -175, 18}, { 1111, 976, 319, 208}, {-1430,-1768, 83, 458}, |
| { -530,-1000, 307, 129}, { -840, -15, -29, -356}, { -911, -924,-1147, -242}, |
| { -119, -528, 127, -133}, { -761, -765, 190, -83}, { -315, 895, 522, 231}, |
| { -222, 102, -63, -428}, { 316, 699, 379, 70}, { 25, 716, 314, -108}, |
| { 507, 874, 566, 238}, { 108, 941, 519, 195}, { 425, -60, -427, 257}, |
| { 139, -103, -630, 446}, { 334, 370, 412, 48}, { -172, -690, -283, 557}, |
| { 187, -286, 158, 483}, { 140, 270, -344, -631}, { 924, 579, -116, 132}, |
| { 142, 466, -68, -64}, { 230, -145, -302, -542}, { -803, -912, 1018, 737}, |
| { -773, 1015, 630, 297}, {-2596, 95, 445, 336}, {-2122, 491, 510, 191}, |
| {-1253, 161, -2, -324}, {-1450, -633, -712, -105}, { -842, -254, -411, 100}, |
| { -640, -290, 1010, 763}, { -650, 313, 1169, 730}, { 140, 505, 1030, 766}, |
| { 772, 287, 1067, 823}, { 495, 749, 305, 323}, { -164, 462, 78, 399}, |
| { -342, -874, 69, 597}, { -16, 620, 621, 337}, { -138, -444, -265, 218}, |
| { 84, -450, 953, 666}, { -222, -803, 541, 604}, { -921,-1376, 244, 116}, |
| { -841, -723, 630, 588}, { 140, 663, 294, 368}, { 935, 1046, 881, 759}, |
| { 1746, 1464, 916, 628}, { 436, 963, 281, 1}, { -119, 74, 542, 213}, |
| { 1, -567, 301, 241}, { 260, 435, 222, 396}, { 936, 957, 1108, 703}, |
| { 510, 506, 808, 478}, { 601, 694, 960, 620}, { 972, 741, 980, 600}, |
| { 834, 717, 767, 684}, { 643, 972, 935, 638}, { 501, 661, 720, 851}, |
| { -105, -632, -303, -117}, { -429, 130, 789, 442}, { -522, -188, 704, 373}, |
| { -759, 42, 814, 523}, { -531,-1137, 373, 578}, { -682,-1203, -455, 285}, |
| {-1163,-1577,-1098, 44}, { 81, -82, 712, 363}, { 477, 246, 954, 622}, |
| { 1604, 1622, 1277, 891}, { 1409, 859, 924, 892}, { 774, 1041, 947, 1142}, |
| { 40, -546, -75, 288}, { -616, -106, -697, -26}, { -169, -160, -891, -739}, |
| { -279, -384,-1029, -350}, { 1781, 1308, 1046, 816}, { 1580, 1533, 1472, 1178}, |
| { 1505, 1076, 1216, 899}, { 890, 904, 564, 654}, { 920, 692, 1021, 856}, |
| { -493, 132, 177, 505}, { 71, 195, -28, 97}, { 456, 351, -164, 88}, |
| { 439, 278, -40, 350}, { 1395, 949, 234, -95}, { -805, -472, 38, -163}, |
| { 367, -98, 489, 523}, { 1025, 1178, 1212, 906}, { 319, 1314, 814, 461}, |
| { -123, -543, -804, 447}, { -748, -324, -897,-1127}, { -737, -501, -789, -713}, |
| { 715, 777, 1239, 922}, { 1949, 1939, 1368, 865}, { 730, 880, 758, 388}, |
| { -871, 454, 17, -251}, { -381, -810,-1583, 239}, { -521, -966, -792, 259}, |
| { -890,-1358, -770, -73}, { 166, 349, -212, 323}, { -840, -301, 473, 435}, |
| { -679, -464, 728, 351}, { -156, -199, 667, 432}, { 29, -252, 415, 480}, |
| { -731, -379, 145, 559}, { -528, -631,-1158, -159}, { 445, 273, 123, 639}, |
| { 373, -126, 800, 568}, { 84, -162, 720, 712}, { -830, -536, -185, 222}, |
| { 408, 452, 501, 771}, { -897,-1355, -67, 442}, { -792,-1406, 566, 602}, |
| { 167, -326, 509, 330}, { -95, -626, -730, -344}, { 1668, 1217, 779, 455}, |
| { 1316, 828, 584, 719}, { 404, -31, 1013, 789}, { 89, 107, 891, 549}, |
| { 871, 1581, 917, 671}, { 866, 1479, 1289, 854}, { 391, 1068, 1122, 812}, |
| { 78, -562, 345, 563}, { 429, -103, 417, 787}, { -122, -437, 411, 788}, |
| { -913, -417, 602, 754}, { -226, -16, 151, 760}, { -700, 118, -104, -14}, |
| {-1128, 48, 284, 393}, { -390, -419, -639, -116}, { -910, 306, 316, -13}, |
| { 1207, 984, 821, 669}, {-1195, -693, 140, -213}, { -884, -416, -199, -558}, |
| { -616, 245, -404, -664}, { 262, 56, -617, -724<
|