| 235 | */ |
| 236 | |
| 237 | static void readQuantSpectralCoeffs (GetBitContext *gb, int selector, int codingFlag, int* mantissas, int numCodes) |
| 238 | { |
| 239 | int numBits, cnt, code, huffSymb; |
| 240 | |
| 241 | if (selector == 1) |
| 242 | numCodes /= 2; |
| 243 | |
| 244 | if (codingFlag != 0) { |
| 245 | /* constant length coding (CLC) */ |
| 246 | numBits = CLCLengthTab[selector]; |
| 247 | |
| 248 | if (selector > 1) { |
| 249 | for (cnt = 0; cnt < numCodes; cnt++) { |
| 250 | if (numBits) |
| 251 | code = get_sbits(gb, numBits); |
| 252 | else |
| 253 | code = 0; |
| 254 | mantissas[cnt] = code; |
| 255 | } |
| 256 | } else { |
| 257 | for (cnt = 0; cnt < numCodes; cnt++) { |
| 258 | if (numBits) |
| 259 | code = get_bits(gb, numBits); //numBits is always 4 in this case |
| 260 | else |
| 261 | code = 0; |
| 262 | mantissas[cnt*2] = seTab_0[code >> 2]; |
| 263 | mantissas[cnt*2+1] = seTab_0[code & 3]; |
| 264 | } |
| 265 | } |
| 266 | } else { |
| 267 | /* variable length coding (VLC) */ |
| 268 | if (selector != 1) { |
| 269 | for (cnt = 0; cnt < numCodes; cnt++) { |
| 270 | huffSymb = get_vlc2(gb, spectral_coeff_tab[selector-1].table, spectral_coeff_tab[selector-1].bits, 3); |
| 271 | huffSymb += 1; |
| 272 | code = huffSymb >> 1; |
| 273 | if (huffSymb & 1) |
| 274 | code = -code; |
| 275 | mantissas[cnt] = code; |
| 276 | } |
| 277 | } else { |
| 278 | for (cnt = 0; cnt < numCodes; cnt++) { |
| 279 | huffSymb = get_vlc2(gb, spectral_coeff_tab[selector-1].table, spectral_coeff_tab[selector-1].bits, 3); |
| 280 | mantissas[cnt*2] = decTable1[huffSymb*2]; |
| 281 | mantissas[cnt*2+1] = decTable1[huffSymb*2+1]; |
| 282 | } |
| 283 | } |
| 284 | } |
| 285 | } |
| 286 | |
| 287 | /** |
| 288 | * Restore the quantized band spectrum coefficients |
no test coverage detected