1 /*********************************************************************** 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. 3 Redistribution and use in source and binary forms, with or without 4 modification, are permitted provided that the following conditions 5 are met: 6 - Redistributions of source code must retain the above copyright notice, 7 this list of conditions and the following disclaimer. 8 - Redistributions in binary form must reproduce the above copyright 9 notice, this list of conditions and the following disclaimer in the 10 documentation and/or other materials provided with the distribution. 11 - Neither the name of Internet Society, IETF or IETF Trust, nor the 12 names of specific contributors, may be used to endorse or promote 13 products derived from this software without specific prior written 14 permission. 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 POSSIBILITY OF SUCH DAMAGE. 26 ***********************************************************************/ 27 28 #ifdef HAVE_CONFIG_H 29 #include "config.h" 30 #endif 31 32 #include "tables.h" 33 34 const opus_uint8 silk_max_pulses_table[ 4 ] = { 35 8, 10, 12, 16 36 }; 37 38 const opus_uint8 silk_pulses_per_block_iCDF[ 10 ][ 18 ] = { 39 { 40 125, 51, 26, 18, 15, 12, 11, 10, 41 9, 8, 7, 6, 5, 4, 3, 2, 42 1, 0 43 }, 44 { 45 198, 105, 45, 22, 15, 12, 11, 10, 46 9, 8, 7, 6, 5, 4, 3, 2, 47 1, 0 48 }, 49 { 50 213, 162, 116, 83, 59, 43, 32, 24, 51 18, 15, 12, 9, 7, 6, 5, 3, 52 2, 0 53 }, 54 { 55 239, 187, 116, 59, 28, 16, 11, 10, 56 9, 8, 7, 6, 5, 4, 3, 2, 57 1, 0 58 }, 59 { 60 250, 229, 188, 135, 86, 51, 30, 19, 61 13, 10, 8, 6, 5, 4, 3, 2, 62 1, 0 63 }, 64 { 65 249, 235, 213, 185, 156, 128, 103, 83, 66 66, 53, 42, 33, 26, 21, 17, 13, 67 10, 0 68 }, 69 { 70 254, 249, 235, 206, 164, 118, 77, 46, 71 27, 16, 10, 7, 5, 4, 3, 2, 72 1, 0 73 }, 74 { 75 255, 253, 249, 239, 220, 191, 156, 119, 76 85, 57, 37, 23, 15, 10, 6, 4, 77 2, 0 78 }, 79 { 80 255, 253, 251, 246, 237, 223, 203, 179, 81 152, 124, 98, 75, 55, 40, 29, 21, 82 15, 0 83 }, 84 { 85 255, 254, 253, 247, 220, 162, 106, 67, 86 42, 28, 18, 12, 9, 6, 4, 3, 87 2, 0 88 } 89 }; 90 91 const opus_uint8 silk_pulses_per_block_BITS_Q5[ 9 ][ 18 ] = { 92 { 93 31, 57, 107, 160, 205, 205, 255, 255, 94 255, 255, 255, 255, 255, 255, 255, 255, 95 255, 255 96 }, 97 { 98 69, 47, 67, 111, 166, 205, 255, 255, 99 255, 255, 255, 255, 255, 255, 255, 255, 100 255, 255 101 }, 102 { 103 82, 74, 79, 95, 109, 128, 145, 160, 104 173, 205, 205, 205, 224, 255, 255, 224, 105 255, 224 106 }, 107 { 108 125, 74, 59, 69, 97, 141, 182, 255, 109 255, 255, 255, 255, 255, 255, 255, 255, 110 255, 255 111 }, 112 { 113 173, 115, 85, 73, 76, 92, 115, 145, 114 173, 205, 224, 224, 255, 255, 255, 255, 115 255, 255 116 }, 117 { 118 166, 134, 113, 102, 101, 102, 107, 118, 119 125, 138, 145, 155, 166, 182, 192, 192, 120 205, 150 121 }, 122 { 123 224, 182, 134, 101, 83, 79, 85, 97, 124 120, 145, 173, 205, 224, 255, 255, 255, 125 255, 255 126 }, 127 { 128 255, 224, 192, 150, 120, 101, 92, 89, 129 93, 102, 118, 134, 160, 182, 192, 224, 130 224, 224 131 }, 132 { 133 255, 224, 224, 182, 155, 134, 118, 109, 134 104, 102, 106, 111, 118, 131, 145, 160, 135 173, 131 136 } 137 }; 138 139 const opus_uint8 silk_rate_levels_iCDF[ 2 ][ 9 ] = 140 { 141 { 142 241, 190, 178, 132, 87, 74, 41, 14, 143 0 144 }, 145 { 146 223, 193, 157, 140, 106, 57, 39, 18, 147 0 148 } 149 }; 150 151 const opus_uint8 silk_rate_levels_BITS_Q5[ 2 ][ 9 ] = 152 { 153 { 154 131, 74, 141, 79, 80, 138, 95, 104, 155 134 156 }, 157 { 158 95, 99, 91, 125, 93, 76, 123, 115, 159 123 160 } 161 }; 162 163 const opus_uint8 silk_shell_code_table0[ 152 ] = { 164 128, 0, 214, 42, 0, 235, 128, 21, 165 0, 244, 184, 72, 11, 0, 248, 214, 166 128, 42, 7, 0, 248, 225, 170, 80, 167 25, 5, 0, 251, 236, 198, 126, 54, 168 18, 3, 0, 250, 238, 211, 159, 82, 169 35, 15, 5, 0, 250, 231, 203, 168, 170 128, 88, 53, 25, 6, 0, 252, 238, 171 216, 185, 148, 108, 71, 40, 18, 4, 172 0, 253, 243, 225, 199, 166, 128, 90, 173 57, 31, 13, 3, 0, 254, 246, 233, 174 212, 183, 147, 109, 73, 44, 23, 10, 175 2, 0, 255, 250, 240, 223, 198, 166, 176 128, 90, 58, 33, 16, 6, 1, 0, 177 255, 251, 244, 231, 210, 181, 146, 110, 178 75, 46, 25, 12, 5, 1, 0, 255, 179 253, 248, 238, 221, 196, 164, 128, 92, 180 60, 35, 18, 8, 3, 1, 0, 255, 181 253, 249, 242, 229, 208, 180, 146, 110, 182 76, 48, 27, 14, 7, 3, 1, 0 183 }; 184 185 const opus_uint8 silk_shell_code_table1[ 152 ] = { 186 129, 0, 207, 50, 0, 236, 129, 20, 187 0, 245, 185, 72, 10, 0, 249, 213, 188 129, 42, 6, 0, 250, 226, 169, 87, 189 27, 4, 0, 251, 233, 194, 130, 62, 190 20, 4, 0, 250, 236, 207, 160, 99, 191 47, 17, 3, 0, 255, 240, 217, 182, 192 131, 81, 41, 11, 1, 0, 255, 254, 193 233, 201, 159, 107, 61, 20, 2, 1, 194 0, 255, 249, 233, 206, 170, 128, 86, 195 50, 23, 7, 1, 0, 255, 250, 238, 196 217, 186, 148, 108, 70, 39, 18, 6, 197 1, 0, 255, 252, 243, 226, 200, 166, 198 128, 90, 56, 30, 13, 4, 1, 0, 199 255, 252, 245, 231, 209, 180, 146, 110, 200 76, 47, 25, 11, 4, 1, 0, 255, 201 253, 248, 237, 219, 194, 163, 128, 93, 202 62, 37, 19, 8, 3, 1, 0, 255, 203 254, 250, 241, 226, 205, 177, 145, 111, 204 79, 51, 30, 15, 6, 2, 1, 0 205 }; 206 207 const opus_uint8 silk_shell_code_table2[ 152 ] = { 208 129, 0, 203, 54, 0, 234, 129, 23, 209 0, 245, 184, 73, 10, 0, 250, 215, 210 129, 41, 5, 0, 252, 232, 173, 86, 211 24, 3, 0, 253, 240, 200, 129, 56, 212 15, 2, 0, 253, 244, 217, 164, 94, 213 38, 10, 1, 0, 253, 245, 226, 189, 214 132, 71, 27, 7, 1, 0, 253, 246, 215 231, 203, 159, 105, 56, 23, 6, 1, 216 0, 255, 248, 235, 213, 179, 133, 85, 217 47, 19, 5, 1, 0, 255, 254, 243, 218 221, 194, 159, 117, 70, 37, 12, 2, 219 1, 0, 255, 254, 248, 234, 208, 171, 220 128, 85, 48, 22, 8, 2, 1, 0, 221 255, 254, 250, 240, 220, 189, 149, 107, 222 67, 36, 16, 6, 2, 1, 0, 255, 223 254, 251, 243, 227, 201, 166, 128, 90, 224 55, 29, 13, 5, 2, 1, 0, 255, 225 254, 252, 246, 234, 213, 183, 147, 109, 226 73, 43, 22, 10, 4, 2, 1, 0 227 }; 228 229 const opus_uint8 silk_shell_code_table3[ 152 ] = { 230 130, 0, 200, 58, 0, 231, 130, 26, 231 0, 244, 184, 76, 12, 0, 249, 214, 232 130, 43, 6, 0, 252, 232, 173, 87, 233 24, 3, 0, 253, 241, 203, 131, 56, 234 14, 2, 0, 254, 246, 221, 167, 94, 235 35, 8, 1, 0, 254, 249, 232, 193, 236 130, 65, 23, 5, 1, 0, 255, 251, 237 239, 211, 162, 99, 45, 15, 4, 1, 238 0, 255, 251, 243, 223, 186, 131, 74, 239 33, 11, 3, 1, 0, 255, 252, 245, 240 230, 202, 158, 105, 57, 24, 8, 2, 241 1, 0, 255, 253, 247, 235, 214, 179, 242 132, 84, 44, 19, 7, 2, 1, 0, 243 255, 254, 250, 240, 223, 196, 159, 112, 244 69, 36, 15, 6, 2, 1, 0, 255, 245 254, 253, 245, 231, 209, 176, 136, 93, 246 55, 27, 11, 3, 2, 1, 0, 255, 247 254, 253, 252, 239, 221, 194, 158, 117, 248 76, 42, 18, 4, 3, 2, 1, 0 249 }; 250 251 const opus_uint8 silk_shell_code_table_offsets[ 17 ] = { 252 0, 0, 2, 5, 9, 14, 20, 27, 253 35, 44, 54, 65, 77, 90, 104, 119, 254 135 255 }; 256 257 const opus_uint8 silk_sign_iCDF[ 42 ] = { 258 254, 49, 67, 77, 82, 93, 99, 259 198, 11, 18, 24, 31, 36, 45, 260 255, 46, 66, 78, 87, 94, 104, 261 208, 14, 21, 32, 42, 51, 66, 262 255, 94, 104, 109, 112, 115, 118, 263 248, 53, 69, 80, 88, 95, 102 264 }; 265