1 /* 2 * 3 * Bluetooth low-complexity, subband codec (SBC) library 4 * 5 * Copyright (C) 2008-2010 Nokia Corporation 6 * Copyright (C) 2004-2010 Marcel Holtmann <marcel (at) holtmann.org> 7 * Copyright (C) 2004-2005 Henryk Ploetz <henryk (at) ploetzli.ch> 8 * Copyright (C) 2005-2008 Brad Midgley <bmidgley (at) xmission.com> 9 * 10 * 11 * This library is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU Lesser General Public 13 * License as published by the Free Software Foundation; either 14 * version 2.1 of the License, or (at your option) any later version. 15 * 16 * This library is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * Lesser General Public License for more details. 20 * 21 * You should have received a copy of the GNU Lesser General Public 22 * License along with this library; if not, write to the Free Software 23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 24 * 25 */ 26 27 /* todo items: 28 29 use a log2 table for byte integer scale factors calculation (sum log2 results 30 for high and low bytes) fill bitpool by 16 bits instead of one at a time in 31 bits allocation/bitpool generation port to the dsp 32 33 */ 34 35 #ifdef HAVE_CONFIG_H 36 #include <config.h> 37 #endif 38 39 #include <stdio.h> 40 #include <errno.h> 41 #include <string.h> 42 #include <stdlib.h> 43 #include <sys/types.h> 44 #include <limits.h> 45 46 #include "sbc_math.h" 47 #include "sbc_tables.h" 48 49 #include "sbc.h" 50 #include "sbc_primitives.h" 51 52 #define SBC_SYNCWORD 0x9C 53 54 /* This structure contains an unpacked SBC frame. 55 Yes, there is probably quite some unused space herein */ 56 struct sbc_frame { 57 uint8_t frequency; 58 uint8_t block_mode; 59 uint8_t blocks; 60 enum { 61 MONO = SBC_MODE_MONO, 62 DUAL_CHANNEL = SBC_MODE_DUAL_CHANNEL, 63 STEREO = SBC_MODE_STEREO, 64 JOINT_STEREO = SBC_MODE_JOINT_STEREO 65 } mode; 66 uint8_t channels; 67 enum { 68 LOUDNESS = SBC_AM_LOUDNESS, 69 SNR = SBC_AM_SNR 70 } allocation; 71 uint8_t subband_mode; 72 uint8_t subbands; 73 uint8_t bitpool; 74 uint16_t codesize; 75 uint8_t length; 76 77 /* bit number x set means joint stereo has been used in subband x */ 78 uint8_t joint; 79 80 /* only the lower 4 bits of every element are to be used */ 81 uint32_t SBC_ALIGNED scale_factor[2][8]; 82 83 /* raw integer subband samples in the frame */ 84 int32_t SBC_ALIGNED sb_sample_f[16][2][8]; 85 86 /* modified subband samples */ 87 int32_t SBC_ALIGNED sb_sample[16][2][8]; 88 89 /* original pcm audio samples */ 90 int16_t SBC_ALIGNED pcm_sample[2][16*8]; 91 }; 92 93 struct sbc_decoder_state { 94 int subbands; 95 int32_t V[2][170]; 96 int offset[2][16]; 97 }; 98 99 /* 100 * Calculates the CRC-8 of the first len bits in data 101 */ 102 static const uint8_t crc_table[256] = { 103 0x00, 0x1D, 0x3A, 0x27, 0x74, 0x69, 0x4E, 0x53, 104 0xE8, 0xF5, 0xD2, 0xCF, 0x9C, 0x81, 0xA6, 0xBB, 105 0xCD, 0xD0, 0xF7, 0xEA, 0xB9, 0xA4, 0x83, 0x9E, 106 0x25, 0x38, 0x1F, 0x02, 0x51, 0x4C, 0x6B, 0x76, 107 0x87, 0x9A, 0xBD, 0xA0, 0xF3, 0xEE, 0xC9, 0xD4, 108 0x6F, 0x72, 0x55, 0x48, 0x1B, 0x06, 0x21, 0x3C, 109 0x4A, 0x57, 0x70, 0x6D, 0x3E, 0x23, 0x04, 0x19, 110 0xA2, 0xBF, 0x98, 0x85, 0xD6, 0xCB, 0xEC, 0xF1, 111 0x13, 0x0E, 0x29, 0x34, 0x67, 0x7A, 0x5D, 0x40, 112 0xFB, 0xE6, 0xC1, 0xDC, 0x8F, 0x92, 0xB5, 0xA8, 113 0xDE, 0xC3, 0xE4, 0xF9, 0xAA, 0xB7, 0x90, 0x8D, 114 0x36, 0x2B, 0x0C, 0x11, 0x42, 0x5F, 0x78, 0x65, 115 0x94, 0x89, 0xAE, 0xB3, 0xE0, 0xFD, 0xDA, 0xC7, 116 0x7C, 0x61, 0x46, 0x5B, 0x08, 0x15, 0x32, 0x2F, 117 0x59, 0x44, 0x63, 0x7E, 0x2D, 0x30, 0x17, 0x0A, 118 0xB1, 0xAC, 0x8B, 0x96, 0xC5, 0xD8, 0xFF, 0xE2, 119 0x26, 0x3B, 0x1C, 0x01, 0x52, 0x4F, 0x68, 0x75, 120 0xCE, 0xD3, 0xF4, 0xE9, 0xBA, 0xA7, 0x80, 0x9D, 121 0xEB, 0xF6, 0xD1, 0xCC, 0x9F, 0x82, 0xA5, 0xB8, 122 0x03, 0x1E, 0x39, 0x24, 0x77, 0x6A, 0x4D, 0x50, 123 0xA1, 0xBC, 0x9B, 0x86, 0xD5, 0xC8, 0xEF, 0xF2, 124 0x49, 0x54, 0x73, 0x6E, 0x3D, 0x20, 0x07, 0x1A, 125 0x6C, 0x71, 0x56, 0x4B, 0x18, 0x05, 0x22, 0x3F, 126 0x84, 0x99, 0xBE, 0xA3, 0xF0, 0xED, 0xCA, 0xD7, 127 0x35, 0x28, 0x0F, 0x12, 0x41, 0x5C, 0x7B, 0x66, 128 0xDD, 0xC0, 0xE7, 0xFA, 0xA9, 0xB4, 0x93, 0x8E, 129 0xF8, 0xE5, 0xC2, 0xDF, 0x8C, 0x91, 0xB6, 0xAB, 130 0x10, 0x0D, 0x2A, 0x37, 0x64, 0x79, 0x5E, 0x43, 131 0xB2, 0xAF, 0x88, 0x95, 0xC6, 0xDB, 0xFC, 0xE1, 132 0x5A, 0x47, 0x60, 0x7D, 0x2E, 0x33, 0x14, 0x09, 133 0x7F, 0x62, 0x45, 0x58, 0x0B, 0x16, 0x31, 0x2C, 134 0x97, 0x8A, 0xAD, 0xB0, 0xE3, 0xFE, 0xD9, 0xC4 135 }; 136 137 static uint8_t sbc_crc8(const uint8_t *data, size_t len) 138 { 139 uint8_t crc = 0x0f; 140 size_t i; 141 uint8_t octet; 142 143 for (i = 0; i < len / 8; i++) 144 crc = crc_table[crc ^ data[i]]; 145 146 octet = data[i]; 147 for (i = 0; i < len % 8; i++) { 148 char bit = ((octet ^ crc) & 0x80) >> 7; 149 150 crc = ((crc & 0x7f) << 1) ^ (bit ? 0x1d : 0); 151 152 octet = octet << 1; 153 } 154 155 return crc; 156 } 157 158 /* 159 * Code straight from the spec to calculate the bits array 160 * Takes a pointer to the frame in question, a pointer to the bits array and 161 * the sampling frequency (as 2 bit integer) 162 */ 163 static SBC_ALWAYS_INLINE void sbc_calculate_bits_internal( 164 const struct sbc_frame *frame, int (*bits)[8], int subbands) 165 { 166 uint8_t sf = frame->frequency; 167 168 if (frame->mode == MONO || frame->mode == DUAL_CHANNEL) { 169 int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice; 170 int ch, sb; 171 172 for (ch = 0; ch < frame->channels; ch++) { 173 max_bitneed = 0; 174 if (frame->allocation == SNR) { 175 for (sb = 0; sb < subbands; sb++) { 176 bitneed[ch][sb] = frame->scale_factor[ch][sb]; 177 if (bitneed[ch][sb] > max_bitneed) 178 max_bitneed = bitneed[ch][sb]; 179 } 180 } else { 181 for (sb = 0; sb < subbands; sb++) { 182 if (frame->scale_factor[ch][sb] == 0) 183 bitneed[ch][sb] = -5; 184 else { 185 if (subbands == 4) 186 loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb]; 187 else 188 loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb]; 189 if (loudness > 0) 190 bitneed[ch][sb] = loudness / 2; 191 else 192 bitneed[ch][sb] = loudness; 193 } 194 if (bitneed[ch][sb] > max_bitneed) 195 max_bitneed = bitneed[ch][sb]; 196 } 197 } 198 199 bitcount = 0; 200 slicecount = 0; 201 bitslice = max_bitneed + 1; 202 do { 203 bitslice--; 204 bitcount += slicecount; 205 slicecount = 0; 206 for (sb = 0; sb < subbands; sb++) { 207 if ((bitneed[ch][sb] > bitslice + 1) && (bitneed[ch][sb] < bitslice + 16)) 208 slicecount++; 209 else if (bitneed[ch][sb] == bitslice + 1) 210 slicecount += 2; 211 } 212 } while (bitcount + slicecount < frame->bitpool); 213 214 if (bitcount + slicecount == frame->bitpool) { 215 bitcount += slicecount; 216 bitslice--; 217 } 218 219 for (sb = 0; sb < subbands; sb++) { 220 if (bitneed[ch][sb] < bitslice + 2) 221 bits[ch][sb] = 0; 222 else { 223 bits[ch][sb] = bitneed[ch][sb] - bitslice; 224 if (bits[ch][sb] > 16) 225 bits[ch][sb] = 16; 226 } 227 } 228 229 for (sb = 0; bitcount < frame->bitpool && 230 sb < subbands; sb++) { 231 if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) { 232 bits[ch][sb]++; 233 bitcount++; 234 } else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) { 235 bits[ch][sb] = 2; 236 bitcount += 2; 237 } 238 } 239 240 for (sb = 0; bitcount < frame->bitpool && 241 sb < subbands; sb++) { 242 if (bits[ch][sb] < 16) { 243 bits[ch][sb]++; 244 bitcount++; 245 } 246 } 247 248 } 249 250 } else if (frame->mode == STEREO || frame->mode == JOINT_STEREO) { 251 int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice; 252 int ch, sb; 253 254 max_bitneed = 0; 255 if (frame->allocation == SNR) { 256 for (ch = 0; ch < 2; ch++) { 257 for (sb = 0; sb < subbands; sb++) { 258 bitneed[ch][sb] = frame->scale_factor[ch][sb]; 259 if (bitneed[ch][sb] > max_bitneed) 260 max_bitneed = bitneed[ch][sb]; 261 } 262 } 263 } else { 264 for (ch = 0; ch < 2; ch++) { 265 for (sb = 0; sb < subbands; sb++) { 266 if (frame->scale_factor[ch][sb] == 0) 267 bitneed[ch][sb] = -5; 268 else { 269 if (subbands == 4) 270 loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb]; 271 else 272 loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb]; 273 if (loudness > 0) 274 bitneed[ch][sb] = loudness / 2; 275 else 276 bitneed[ch][sb] = loudness; 277 } 278 if (bitneed[ch][sb] > max_bitneed) 279 max_bitneed = bitneed[ch][sb]; 280 } 281 } 282 } 283 284 bitcount = 0; 285 slicecount = 0; 286 bitslice = max_bitneed + 1; 287 do { 288 bitslice--; 289 bitcount += slicecount; 290 slicecount = 0; 291 for (ch = 0; ch < 2; ch++) { 292 for (sb = 0; sb < subbands; sb++) { 293 if ((bitneed[ch][sb] > bitslice + 1) && (bitneed[ch][sb] < bitslice + 16)) 294 slicecount++; 295 else if (bitneed[ch][sb] == bitslice + 1) 296 slicecount += 2; 297 } 298 } 299 } while (bitcount + slicecount < frame->bitpool); 300 301 if (bitcount + slicecount == frame->bitpool) { 302 bitcount += slicecount; 303 bitslice--; 304 } 305 306 for (ch = 0; ch < 2; ch++) { 307 for (sb = 0; sb < subbands; sb++) { 308 if (bitneed[ch][sb] < bitslice + 2) { 309 bits[ch][sb] = 0; 310 } else { 311 bits[ch][sb] = bitneed[ch][sb] - bitslice; 312 if (bits[ch][sb] > 16) 313 bits[ch][sb] = 16; 314 } 315 } 316 } 317 318 ch = 0; 319 sb = 0; 320 while (bitcount < frame->bitpool) { 321 if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) { 322 bits[ch][sb]++; 323 bitcount++; 324 } else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) { 325 bits[ch][sb] = 2; 326 bitcount += 2; 327 } 328 if (ch == 1) { 329 ch = 0; 330 sb++; 331 if (sb >= subbands) 332 break; 333 } else 334 ch = 1; 335 } 336 337 ch = 0; 338 sb = 0; 339 while (bitcount < frame->bitpool) { 340 if (bits[ch][sb] < 16) { 341 bits[ch][sb]++; 342 bitcount++; 343 } 344 if (ch == 1) { 345 ch = 0; 346 sb++; 347 if (sb >= subbands) 348 break; 349 } else 350 ch = 1; 351 } 352 353 } 354 355 } 356 357 static void sbc_calculate_bits(const struct sbc_frame *frame, int (*bits)[8]) 358 { 359 if (frame->subbands == 4) 360 sbc_calculate_bits_internal(frame, bits, 4); 361 else 362 sbc_calculate_bits_internal(frame, bits, 8); 363 } 364 365 /* 366 * Unpacks a SBC frame at the beginning of the stream in data, 367 * which has at most len bytes into frame. 368 * Returns the length in bytes of the packed frame, or a negative 369 * value on error. The error codes are: 370 * 371 * -1 Data stream too short 372 * -2 Sync byte incorrect 373 * -3 CRC8 incorrect 374 * -4 Bitpool value out of bounds 375 */ 376 static int sbc_unpack_frame(const uint8_t *data, struct sbc_frame *frame, 377 size_t len) 378 { 379 unsigned int consumed; 380 /* Will copy the parts of the header that are relevant to crc 381 * calculation here */ 382 uint8_t crc_header[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 383 int crc_pos = 0; 384 int32_t temp; 385 386 int audio_sample; 387 int ch, sb, blk, bit; /* channel, subband, block and bit standard 388 counters */ 389 int bits[2][8]; /* bits distribution */ 390 uint32_t levels[2][8]; /* levels derived from that */ 391 392 if (len < 4) 393 return -1; 394 395 if (data[0] != SBC_SYNCWORD) 396 return -2; 397 398 frame->frequency = (data[1] >> 6) & 0x03; 399 400 frame->block_mode = (data[1] >> 4) & 0x03; 401 switch (frame->block_mode) { 402 case SBC_BLK_4: 403 frame->blocks = 4; 404 break; 405 case SBC_BLK_8: 406 frame->blocks = 8; 407 break; 408 case SBC_BLK_12: 409 frame->blocks = 12; 410 break; 411 case SBC_BLK_16: 412 frame->blocks = 16; 413 break; 414 } 415 416 frame->mode = (data[1] >> 2) & 0x03; 417 switch (frame->mode) { 418 case MONO: 419 frame->channels = 1; 420 break; 421 case DUAL_CHANNEL: /* fall-through */ 422 case STEREO: 423 case JOINT_STEREO: 424 frame->channels = 2; 425 break; 426 } 427 428 frame->allocation = (data[1] >> 1) & 0x01; 429 430 frame->subband_mode = (data[1] & 0x01); 431 frame->subbands = frame->subband_mode ? 8 : 4; 432 433 frame->bitpool = data[2]; 434 435 if ((frame->mode == MONO || frame->mode == DUAL_CHANNEL) && 436 frame->bitpool > 16 * frame->subbands) 437 return -4; 438 439 if ((frame->mode == STEREO || frame->mode == JOINT_STEREO) && 440 frame->bitpool > 32 * frame->subbands) 441 return -4; 442 443 /* data[3] is crc, we're checking it later */ 444 445 consumed = 32; 446 447 crc_header[0] = data[1]; 448 crc_header[1] = data[2]; 449 crc_pos = 16; 450 451 if (frame->mode == JOINT_STEREO) { 452 if (len * 8 < consumed + frame->subbands) 453 return -1; 454 455 frame->joint = 0x00; 456 for (sb = 0; sb < frame->subbands - 1; sb++) 457 frame->joint |= ((data[4] >> (7 - sb)) & 0x01) << sb; 458 if (frame->subbands == 4) 459 crc_header[crc_pos / 8] = data[4] & 0xf0; 460 else 461 crc_header[crc_pos / 8] = data[4]; 462 463 consumed += frame->subbands; 464 crc_pos += frame->subbands; 465 } 466 467 if (len * 8 < consumed + (4 * frame->subbands * frame->channels)) 468 return -1; 469 470 for (ch = 0; ch < frame->channels; ch++) { 471 for (sb = 0; sb < frame->subbands; sb++) { 472 /* FIXME assert(consumed % 4 == 0); */ 473 frame->scale_factor[ch][sb] = 474 (data[consumed >> 3] >> (4 - (consumed & 0x7))) & 0x0F; 475 crc_header[crc_pos >> 3] |= 476 frame->scale_factor[ch][sb] << (4 - (crc_pos & 0x7)); 477 478 consumed += 4; 479 crc_pos += 4; 480 } 481 } 482 483 if (data[3] != sbc_crc8(crc_header, crc_pos)) 484 return -3; 485 486 sbc_calculate_bits(frame, bits); 487 488 for (ch = 0; ch < frame->channels; ch++) { 489 for (sb = 0; sb < frame->subbands; sb++) 490 levels[ch][sb] = (1 << bits[ch][sb]) - 1; 491 } 492 493 for (blk = 0; blk < frame->blocks; blk++) { 494 for (ch = 0; ch < frame->channels; ch++) { 495 for (sb = 0; sb < frame->subbands; sb++) { 496 if (levels[ch][sb] > 0) { 497 audio_sample = 0; 498 for (bit = 0; bit < bits[ch][sb]; bit++) { 499 if (consumed > len * 8) 500 return -1; 501 502 if ((data[consumed >> 3] >> (7 - (consumed & 0x7))) & 0x01) 503 audio_sample |= 1 << (bits[ch][sb] - bit - 1); 504 505 consumed++; 506 } 507 508 frame->sb_sample[blk][ch][sb] = 509 (((audio_sample << 1) | 1) << frame->scale_factor[ch][sb]) / 510 levels[ch][sb] - (1 << frame->scale_factor[ch][sb]); 511 } else 512 frame->sb_sample[blk][ch][sb] = 0; 513 } 514 } 515 } 516 517 if (frame->mode == JOINT_STEREO) { 518 for (blk = 0; blk < frame->blocks; blk++) { 519 for (sb = 0; sb < frame->subbands; sb++) { 520 if (frame->joint & (0x01 << sb)) { 521 temp = frame->sb_sample[blk][0][sb] + 522 frame->sb_sample[blk][1][sb]; 523 frame->sb_sample[blk][1][sb] = 524 frame->sb_sample[blk][0][sb] - 525 frame->sb_sample[blk][1][sb]; 526 frame->sb_sample[blk][0][sb] = temp; 527 } 528 } 529 } 530 } 531 532 if ((consumed & 0x7) != 0) 533 consumed += 8 - (consumed & 0x7); 534 535 return consumed >> 3; 536 } 537 538 static void sbc_decoder_init(struct sbc_decoder_state *state, 539 const struct sbc_frame *frame) 540 { 541 int i, ch; 542 543 memset(state->V, 0, sizeof(state->V)); 544 state->subbands = frame->subbands; 545 546 for (ch = 0; ch < 2; ch++) 547 for (i = 0; i < frame->subbands * 2; i++) 548 state->offset[ch][i] = (10 * i + 10); 549 } 550 551 static SBC_ALWAYS_INLINE int16_t sbc_clip16(int32_t s) 552 { 553 if (s > 0x7FFF) 554 return 0x7FFF; 555 else if (s < -0x8000) 556 return -0x8000; 557 else 558 return s; 559 } 560 561 static inline void sbc_synthesize_four(struct sbc_decoder_state *state, 562 struct sbc_frame *frame, int ch, int blk) 563 { 564 int i, k, idx; 565 int32_t *v = state->V[ch]; 566 int *offset = state->offset[ch]; 567 568 for (i = 0; i < 8; i++) { 569 /* Shifting */ 570 offset[i]--; 571 if (offset[i] < 0) { 572 offset[i] = 79; 573 memcpy(v + 80, v, 9 * sizeof(*v)); 574 } 575 576 /* Distribute the new matrix value to the shifted position */ 577 v[offset[i]] = SCALE4_STAGED1( 578 MULA(synmatrix4[i][0], frame->sb_sample[blk][ch][0], 579 MULA(synmatrix4[i][1], frame->sb_sample[blk][ch][1], 580 MULA(synmatrix4[i][2], frame->sb_sample[blk][ch][2], 581 MUL (synmatrix4[i][3], frame->sb_sample[blk][ch][3]))))); 582 } 583 584 /* Compute the samples */ 585 for (idx = 0, i = 0; i < 4; i++, idx += 5) { 586 k = (i + 4) & 0xf; 587 588 /* Store in output, Q0 */ 589 frame->pcm_sample[ch][blk * 4 + i] = sbc_clip16(SCALE4_STAGED1( 590 MULA(v[offset[i] + 0], sbc_proto_4_40m0[idx + 0], 591 MULA(v[offset[k] + 1], sbc_proto_4_40m1[idx + 0], 592 MULA(v[offset[i] + 2], sbc_proto_4_40m0[idx + 1], 593 MULA(v[offset[k] + 3], sbc_proto_4_40m1[idx + 1], 594 MULA(v[offset[i] + 4], sbc_proto_4_40m0[idx + 2], 595 MULA(v[offset[k] + 5], sbc_proto_4_40m1[idx + 2], 596 MULA(v[offset[i] + 6], sbc_proto_4_40m0[idx + 3], 597 MULA(v[offset[k] + 7], sbc_proto_4_40m1[idx + 3], 598 MULA(v[offset[i] + 8], sbc_proto_4_40m0[idx + 4], 599 MUL( v[offset[k] + 9], sbc_proto_4_40m1[idx + 4])))))))))))); 600 } 601 } 602 603 static inline void sbc_synthesize_eight(struct sbc_decoder_state *state, 604 struct sbc_frame *frame, int ch, int blk) 605 { 606 int i, j, k, idx; 607 int *offset = state->offset[ch]; 608 609 for (i = 0; i < 16; i++) { 610 /* Shifting */ 611 offset[i]--; 612 if (offset[i] < 0) { 613 offset[i] = 159; 614 for (j = 0; j < 9; j++) 615 state->V[ch][j + 160] = state->V[ch][j]; 616 } 617 618 /* Distribute the new matrix value to the shifted position */ 619 state->V[ch][offset[i]] = SCALE8_STAGED1( 620 MULA(synmatrix8[i][0], frame->sb_sample[blk][ch][0], 621 MULA(synmatrix8[i][1], frame->sb_sample[blk][ch][1], 622 MULA(synmatrix8[i][2], frame->sb_sample[blk][ch][2], 623 MULA(synmatrix8[i][3], frame->sb_sample[blk][ch][3], 624 MULA(synmatrix8[i][4], frame->sb_sample[blk][ch][4], 625 MULA(synmatrix8[i][5], frame->sb_sample[blk][ch][5], 626 MULA(synmatrix8[i][6], frame->sb_sample[blk][ch][6], 627 MUL( synmatrix8[i][7], frame->sb_sample[blk][ch][7]))))))))); 628 } 629 630 /* Compute the samples */ 631 for (idx = 0, i = 0; i < 8; i++, idx += 5) { 632 k = (i + 8) & 0xf; 633 634 /* Store in output, Q0 */ 635 frame->pcm_sample[ch][blk * 8 + i] = sbc_clip16(SCALE8_STAGED1( 636 MULA(state->V[ch][offset[i] + 0], sbc_proto_8_80m0[idx + 0], 637 MULA(state->V[ch][offset[k] + 1], sbc_proto_8_80m1[idx + 0], 638 MULA(state->V[ch][offset[i] + 2], sbc_proto_8_80m0[idx + 1], 639 MULA(state->V[ch][offset[k] + 3], sbc_proto_8_80m1[idx + 1], 640 MULA(state->V[ch][offset[i] + 4], sbc_proto_8_80m0[idx + 2], 641 MULA(state->V[ch][offset[k] + 5], sbc_proto_8_80m1[idx + 2], 642 MULA(state->V[ch][offset[i] + 6], sbc_proto_8_80m0[idx + 3], 643 MULA(state->V[ch][offset[k] + 7], sbc_proto_8_80m1[idx + 3], 644 MULA(state->V[ch][offset[i] + 8], sbc_proto_8_80m0[idx + 4], 645 MUL( state->V[ch][offset[k] + 9], sbc_proto_8_80m1[idx + 4])))))))))))); 646 } 647 } 648 649 static int sbc_synthesize_audio(struct sbc_decoder_state *state, 650 struct sbc_frame *frame) 651 { 652 int ch, blk; 653 654 switch (frame->subbands) { 655 case 4: 656 for (ch = 0; ch < frame->channels; ch++) { 657 for (blk = 0; blk < frame->blocks; blk++) 658 sbc_synthesize_four(state, frame, ch, blk); 659 } 660 return frame->blocks * 4; 661 662 case 8: 663 for (ch = 0; ch < frame->channels; ch++) { 664 for (blk = 0; blk < frame->blocks; blk++) 665 sbc_synthesize_eight(state, frame, ch, blk); 666 } 667 return frame->blocks * 8; 668 669 default: 670 return -EIO; 671 } 672 } 673 674 static int sbc_analyze_audio(struct sbc_encoder_state *state, 675 struct sbc_frame *frame) 676 { 677 int ch, blk; 678 int16_t *x; 679 680 switch (frame->subbands) { 681 case 4: 682 for (ch = 0; ch < frame->channels; ch++) { 683 x = &state->X[ch][state->position - 16 + 684 frame->blocks * 4]; 685 for (blk = 0; blk < frame->blocks; blk += 4) { 686 state->sbc_analyze_4b_4s( 687 x, 688 frame->sb_sample_f[blk][ch], 689 frame->sb_sample_f[blk + 1][ch] - 690 frame->sb_sample_f[blk][ch]); 691 x -= 16; 692 } 693 } 694 return frame->blocks * 4; 695 696 case 8: 697 for (ch = 0; ch < frame->channels; ch++) { 698 x = &state->X[ch][state->position - 32 + 699 frame->blocks * 8]; 700 for (blk = 0; blk < frame->blocks; blk += 4) { 701 state->sbc_analyze_4b_8s( 702 x, 703 frame->sb_sample_f[blk][ch], 704 frame->sb_sample_f[blk + 1][ch] - 705 frame->sb_sample_f[blk][ch]); 706 x -= 32; 707 } 708 } 709 return frame->blocks * 8; 710 711 default: 712 return -EIO; 713 } 714 } 715 716 /* Supplementary bitstream writing macros for 'sbc_pack_frame' */ 717 718 #define PUT_BITS(data_ptr, bits_cache, bits_count, v, n) \ 719 do { \ 720 bits_cache = (v) | (bits_cache << (n)); \ 721 bits_count += (n); \ 722 if (bits_count >= 16) { \ 723 bits_count -= 8; \ 724 *data_ptr++ = (uint8_t) \ 725 (bits_cache >> bits_count); \ 726 bits_count -= 8; \ 727 *data_ptr++ = (uint8_t) \ 728 (bits_cache >> bits_count); \ 729 } \ 730 } while (0) 731 732 #define FLUSH_BITS(data_ptr, bits_cache, bits_count) \ 733 do { \ 734 while (bits_count >= 8) { \ 735 bits_count -= 8; \ 736 *data_ptr++ = (uint8_t) \ 737 (bits_cache >> bits_count); \ 738 } \ 739 if (bits_count > 0) \ 740 *data_ptr++ = (uint8_t) \ 741 (bits_cache << (8 - bits_count)); \ 742 } while (0) 743 744 /* 745 * Packs the SBC frame from frame into the memory at data. At most len 746 * bytes will be used, should more memory be needed an appropriate 747 * error code will be returned. Returns the length of the packed frame 748 * on success or a negative value on error. 749 * 750 * The error codes are: 751 * -1 Not enough memory reserved 752 * -2 Unsupported sampling rate 753 * -3 Unsupported number of blocks 754 * -4 Unsupported number of subbands 755 * -5 Bitpool value out of bounds 756 * -99 not implemented 757 */ 758 759 static SBC_ALWAYS_INLINE ssize_t sbc_pack_frame_internal(uint8_t *data, 760 struct sbc_frame *frame, size_t len, 761 int frame_subbands, int frame_channels, 762 int joint) 763 { 764 /* Bitstream writer starts from the fourth byte */ 765 uint8_t *data_ptr = data + 4; 766 uint32_t bits_cache = 0; 767 uint32_t bits_count = 0; 768 769 /* Will copy the header parts for CRC-8 calculation here */ 770 uint8_t crc_header[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 771 int crc_pos = 0; 772 773 uint32_t audio_sample; 774 775 int ch, sb, blk; /* channel, subband, block and bit counters */ 776 int bits[2][8]; /* bits distribution */ 777 uint32_t levels[2][8]; /* levels are derived from that */ 778 uint32_t sb_sample_delta[2][8]; 779 780 data[0] = SBC_SYNCWORD; 781 782 data[1] = (frame->frequency & 0x03) << 6; 783 784 data[1] |= (frame->block_mode & 0x03) << 4; 785 786 data[1] |= (frame->mode & 0x03) << 2; 787 788 data[1] |= (frame->allocation & 0x01) << 1; 789 790 switch (frame_subbands) { 791 case 4: 792 /* Nothing to do */ 793 break; 794 case 8: 795 data[1] |= 0x01; 796 break; 797 default: 798 return -4; 799 break; 800 } 801 802 data[2] = frame->bitpool; 803 804 if ((frame->mode == MONO || frame->mode == DUAL_CHANNEL) && 805 frame->bitpool > frame_subbands << 4) 806 return -5; 807 808 if ((frame->mode == STEREO || frame->mode == JOINT_STEREO) && 809 frame->bitpool > frame_subbands << 5) 810 return -5; 811 812 /* Can't fill in crc yet */ 813 814 crc_header[0] = data[1]; 815 crc_header[1] = data[2]; 816 crc_pos = 16; 817 818 if (frame->mode == JOINT_STEREO) { 819 PUT_BITS(data_ptr, bits_cache, bits_count, 820 joint, frame_subbands); 821 crc_header[crc_pos >> 3] = joint; 822 crc_pos += frame_subbands; 823 } 824 825 for (ch = 0; ch < frame_channels; ch++) { 826 for (sb = 0; sb < frame_subbands; sb++) { 827 PUT_BITS(data_ptr, bits_cache, bits_count, 828 frame->scale_factor[ch][sb] & 0x0F, 4); 829 crc_header[crc_pos >> 3] <<= 4; 830 crc_header[crc_pos >> 3] |= frame->scale_factor[ch][sb] & 0x0F; 831 crc_pos += 4; 832 } 833 } 834 835 /* align the last crc byte */ 836 if (crc_pos % 8) 837 crc_header[crc_pos >> 3] <<= 8 - (crc_pos % 8); 838 839 data[3] = sbc_crc8(crc_header, crc_pos); 840 841 sbc_calculate_bits(frame, bits); 842 843 for (ch = 0; ch < frame_channels; ch++) { 844 for (sb = 0; sb < frame_subbands; sb++) { 845 levels[ch][sb] = ((1 << bits[ch][sb]) - 1) << 846 (32 - (frame->scale_factor[ch][sb] + 847 SCALE_OUT_BITS + 2)); 848 sb_sample_delta[ch][sb] = (uint32_t) 1 << 849 (frame->scale_factor[ch][sb] + 850 SCALE_OUT_BITS + 1); 851 } 852 } 853 854 for (blk = 0; blk < frame->blocks; blk++) { 855 for (ch = 0; ch < frame_channels; ch++) { 856 for (sb = 0; sb < frame_subbands; sb++) { 857 858 if (bits[ch][sb] == 0) 859 continue; 860 861 audio_sample = ((uint64_t) levels[ch][sb] * 862 (sb_sample_delta[ch][sb] + 863 frame->sb_sample_f[blk][ch][sb])) >> 32; 864 865 PUT_BITS(data_ptr, bits_cache, bits_count, 866 audio_sample, bits[ch][sb]); 867 } 868 } 869 } 870 871 FLUSH_BITS(data_ptr, bits_cache, bits_count); 872 873 return data_ptr - data; 874 } 875 876 static ssize_t sbc_pack_frame(uint8_t *data, struct sbc_frame *frame, size_t len, 877 int joint) 878 { 879 if (frame->subbands == 4) { 880 if (frame->channels == 1) 881 return sbc_pack_frame_internal( 882 data, frame, len, 4, 1, joint); 883 else 884 return sbc_pack_frame_internal( 885 data, frame, len, 4, 2, joint); 886 } else { 887 if (frame->channels == 1) 888 return sbc_pack_frame_internal( 889 data, frame, len, 8, 1, joint); 890 else 891 return sbc_pack_frame_internal( 892 data, frame, len, 8, 2, joint); 893 } 894 } 895 896 static void sbc_encoder_init(struct sbc_encoder_state *state, 897 const struct sbc_frame *frame) 898 { 899 memset(&state->X, 0, sizeof(state->X)); 900 state->position = (SBC_X_BUFFER_SIZE - frame->subbands * 9) & ~7; 901 902 sbc_init_primitives(state); 903 } 904 905 struct sbc_priv { 906 int init; 907 struct SBC_ALIGNED sbc_frame frame; 908 struct SBC_ALIGNED sbc_decoder_state dec_state; 909 struct SBC_ALIGNED sbc_encoder_state enc_state; 910 }; 911 912 static void sbc_set_defaults(sbc_t *sbc, unsigned long flags) 913 { 914 sbc->frequency = SBC_FREQ_44100; 915 sbc->mode = SBC_MODE_STEREO; 916 sbc->subbands = SBC_SB_8; 917 sbc->blocks = SBC_BLK_16; 918 sbc->bitpool = 32; 919 #if __BYTE_ORDER == __LITTLE_ENDIAN 920 sbc->endian = SBC_LE; 921 #elif __BYTE_ORDER == __BIG_ENDIAN 922 sbc->endian = SBC_BE; 923 #else 924 #error "Unknown byte order" 925 #endif 926 } 927 928 int sbc_init(sbc_t *sbc, unsigned long flags) 929 { 930 if (!sbc) 931 return -EIO; 932 933 memset(sbc, 0, sizeof(sbc_t)); 934 935 sbc->priv_alloc_base = malloc(sizeof(struct sbc_priv) + SBC_ALIGN_MASK); 936 if (!sbc->priv_alloc_base) 937 return -ENOMEM; 938 939 sbc->priv = (void *) (((uintptr_t) sbc->priv_alloc_base + 940 SBC_ALIGN_MASK) & ~((uintptr_t) SBC_ALIGN_MASK)); 941 942 memset(sbc->priv, 0, sizeof(struct sbc_priv)); 943 944 sbc_set_defaults(sbc, flags); 945 946 return 0; 947 } 948 949 ssize_t sbc_parse(sbc_t *sbc, const void *input, size_t input_len) 950 { 951 return sbc_decode(sbc, input, input_len, NULL, 0, NULL); 952 } 953 954 ssize_t sbc_decode(sbc_t *sbc, const void *input, size_t input_len, 955 void *output, size_t output_len, size_t *written) 956 { 957 struct sbc_priv *priv; 958 char *ptr; 959 int i, ch, framelen, samples; 960 961 if (!sbc || !input) 962 return -EIO; 963 964 priv = sbc->priv; 965 966 framelen = sbc_unpack_frame(input, &priv->frame, input_len); 967 968 if (!priv->init) { 969 sbc_decoder_init(&priv->dec_state, &priv->frame); 970 priv->init = 1; 971 972 sbc->frequency = priv->frame.frequency; 973 sbc->mode = priv->frame.mode; 974 sbc->subbands = priv->frame.subband_mode; 975 sbc->blocks = priv->frame.block_mode; 976 sbc->allocation = priv->frame.allocation; 977 sbc->bitpool = priv->frame.bitpool; 978 979 priv->frame.codesize = sbc_get_codesize(sbc); 980 priv->frame.length = framelen; 981 } 982 983 if (!output) 984 return framelen; 985 986 if (written) 987 *written = 0; 988 989 if (framelen <= 0) 990 return framelen; 991 992 samples = sbc_synthesize_audio(&priv->dec_state, &priv->frame); 993 994 ptr = output; 995 996 if (output_len < (size_t) (samples * priv->frame.channels * 2)) 997 samples = output_len / (priv->frame.channels * 2); 998 999 for (i = 0; i < samples; i++) { 1000 for (ch = 0; ch < priv->frame.channels; ch++) { 1001 int16_t s; 1002 s = priv->frame.pcm_sample[ch][i]; 1003 1004 if (sbc->endian == SBC_BE) { 1005 *ptr++ = (s & 0xff00) >> 8; 1006 *ptr++ = (s & 0x00ff); 1007 } else { 1008 *ptr++ = (s & 0x00ff); 1009 *ptr++ = (s & 0xff00) >> 8; 1010 } 1011 } 1012 } 1013 1014 if (written) 1015 *written = samples * priv->frame.channels * 2; 1016 1017 return framelen; 1018 } 1019 1020 ssize_t sbc_encode(sbc_t *sbc, const void *input, size_t input_len, 1021 void *output, size_t output_len, ssize_t *written) 1022 { 1023 struct sbc_priv *priv; 1024 int samples; 1025 ssize_t framelen; 1026 int (*sbc_enc_process_input)(int position, 1027 const uint8_t *pcm, int16_t X[2][SBC_X_BUFFER_SIZE], 1028 int nsamples, int nchannels); 1029 1030 if (!sbc || !input) 1031 return -EIO; 1032 1033 priv = sbc->priv; 1034 1035 if (written) 1036 *written = 0; 1037 1038 if (!priv->init) { 1039 priv->frame.frequency = sbc->frequency; 1040 priv->frame.mode = sbc->mode; 1041 priv->frame.channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; 1042 priv->frame.allocation = sbc->allocation; 1043 priv->frame.subband_mode = sbc->subbands; 1044 priv->frame.subbands = sbc->subbands ? 8 : 4; 1045 priv->frame.block_mode = sbc->blocks; 1046 priv->frame.blocks = 4 + (sbc->blocks * 4); 1047 priv->frame.bitpool = sbc->bitpool; 1048 priv->frame.codesize = sbc_get_codesize(sbc); 1049 priv->frame.length = sbc_get_frame_length(sbc); 1050 1051 sbc_encoder_init(&priv->enc_state, &priv->frame); 1052 priv->init = 1; 1053 } 1054 1055 /* input must be large enough to encode a complete frame */ 1056 if (input_len < priv->frame.codesize) 1057 return 0; 1058 1059 /* output must be large enough to receive the encoded frame */ 1060 if (!output || output_len < priv->frame.length) 1061 return -ENOSPC; 1062 1063 /* Select the needed input data processing function and call it */ 1064 if (priv->frame.subbands == 8) { 1065 if (sbc->endian == SBC_BE) 1066 sbc_enc_process_input = 1067 priv->enc_state.sbc_enc_process_input_8s_be; 1068 else 1069 sbc_enc_process_input = 1070 priv->enc_state.sbc_enc_process_input_8s_le; 1071 } else { 1072 if (sbc->endian == SBC_BE) 1073 sbc_enc_process_input = 1074 priv->enc_state.sbc_enc_process_input_4s_be; 1075 else 1076 sbc_enc_process_input = 1077 priv->enc_state.sbc_enc_process_input_4s_le; 1078 } 1079 1080 priv->enc_state.position = sbc_enc_process_input( 1081 priv->enc_state.position, (const uint8_t *) input, 1082 priv->enc_state.X, priv->frame.subbands * priv->frame.blocks, 1083 priv->frame.channels); 1084 1085 samples = sbc_analyze_audio(&priv->enc_state, &priv->frame); 1086 1087 if (priv->frame.mode == JOINT_STEREO) { 1088 int j = priv->enc_state.sbc_calc_scalefactors_j( 1089 priv->frame.sb_sample_f, priv->frame.scale_factor, 1090 priv->frame.blocks, priv->frame.subbands); 1091 framelen = sbc_pack_frame(output, &priv->frame, output_len, j); 1092 } else { 1093 priv->enc_state.sbc_calc_scalefactors( 1094 priv->frame.sb_sample_f, priv->frame.scale_factor, 1095 priv->frame.blocks, priv->frame.channels, 1096 priv->frame.subbands); 1097 framelen = sbc_pack_frame(output, &priv->frame, output_len, 0); 1098 } 1099 1100 if (written) 1101 *written = framelen; 1102 1103 return samples * priv->frame.channels * 2; 1104 } 1105 1106 void sbc_finish(sbc_t *sbc) 1107 { 1108 if (!sbc) 1109 return; 1110 1111 free(sbc->priv_alloc_base); 1112 1113 memset(sbc, 0, sizeof(sbc_t)); 1114 } 1115 1116 size_t sbc_get_frame_length(sbc_t *sbc) 1117 { 1118 int ret; 1119 uint8_t subbands, channels, blocks, joint, bitpool; 1120 struct sbc_priv *priv; 1121 1122 priv = sbc->priv; 1123 if (priv->init) 1124 return priv->frame.length; 1125 1126 subbands = sbc->subbands ? 8 : 4; 1127 blocks = 4 + (sbc->blocks * 4); 1128 channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; 1129 joint = sbc->mode == SBC_MODE_JOINT_STEREO ? 1 : 0; 1130 bitpool = sbc->bitpool; 1131 1132 ret = 4 + (4 * subbands * channels) / 8; 1133 /* This term is not always evenly divide so we round it up */ 1134 if (channels == 1) 1135 ret += ((blocks * channels * bitpool) + 7) / 8; 1136 else 1137 ret += (((joint ? subbands : 0) + blocks * bitpool) + 7) / 8; 1138 1139 return ret; 1140 } 1141 1142 unsigned sbc_get_frame_duration(sbc_t *sbc) 1143 { 1144 uint8_t subbands, blocks; 1145 uint16_t frequency; 1146 struct sbc_priv *priv; 1147 1148 priv = sbc->priv; 1149 if (!priv->init) { 1150 subbands = sbc->subbands ? 8 : 4; 1151 blocks = 4 + (sbc->blocks * 4); 1152 } else { 1153 subbands = priv->frame.subbands; 1154 blocks = priv->frame.blocks; 1155 } 1156 1157 switch (sbc->frequency) { 1158 case SBC_FREQ_16000: 1159 frequency = 16000; 1160 break; 1161 1162 case SBC_FREQ_32000: 1163 frequency = 32000; 1164 break; 1165 1166 case SBC_FREQ_44100: 1167 frequency = 44100; 1168 break; 1169 1170 case SBC_FREQ_48000: 1171 frequency = 48000; 1172 break; 1173 default: 1174 return 0; 1175 } 1176 1177 return (1000000 * blocks * subbands) / frequency; 1178 } 1179 1180 size_t sbc_get_codesize(sbc_t *sbc) 1181 { 1182 uint16_t subbands, channels, blocks; 1183 struct sbc_priv *priv; 1184 1185 priv = sbc->priv; 1186 if (!priv->init) { 1187 subbands = sbc->subbands ? 8 : 4; 1188 blocks = 4 + (sbc->blocks * 4); 1189 channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; 1190 } else { 1191 subbands = priv->frame.subbands; 1192 blocks = priv->frame.blocks; 1193 channels = priv->frame.channels; 1194 } 1195 1196 return subbands * blocks * channels * 2; 1197 } 1198 1199 const char *sbc_get_implementation_info(sbc_t *sbc) 1200 { 1201 struct sbc_priv *priv; 1202 1203 if (!sbc) 1204 return NULL; 1205 1206 priv = sbc->priv; 1207 if (!priv) 1208 return NULL; 1209 1210 return priv->enc_state.implementation_info; 1211 } 1212 1213 int sbc_reinit(sbc_t *sbc, unsigned long flags) 1214 { 1215 struct sbc_priv *priv; 1216 1217 if (!sbc || !sbc->priv) 1218 return -EIO; 1219 1220 priv = sbc->priv; 1221 1222 if (priv->init == 1) 1223 memset(sbc->priv, 0, sizeof(struct sbc_priv)); 1224 1225 sbc_set_defaults(sbc, flags); 1226 1227 return 0; 1228 } 1229