/* * 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},Lines 1–500 of 1671. Load more
/* * 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},