3 * Bluetooth low-complexity, subband codec (SBC) library
5 * Copyright (C) 2008-2010 Nokia Corporation
6 * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
7 * Copyright (C) 2004-2005 Henryk Ploetz <henryk@ploetzli.ch>
8 * Copyright (C) 2005-2008 Brad Midgley <bmidgley@xmission.com>
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.
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.
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
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
43 #include <sys/types.h>
47 #include "sbc_tables.h"
50 #include "sbc_primitives.h"
52 #define SBC_SYNCWORD 0x9C
54 /* This structure contains an unpacked SBC frame.
55 Yes, there is probably quite some unused space herein */
62 DUAL_CHANNEL = SBC_MODE_DUAL_CHANNEL,
63 STEREO = SBC_MODE_STEREO,
64 JOINT_STEREO = SBC_MODE_JOINT_STEREO
68 LOUDNESS = SBC_AM_LOUDNESS,
77 /* bit number x set means joint stereo has been used in subband x */
80 /* only the lower 4 bits of every element are to be used */
81 uint32_t SBC_ALIGNED scale_factor[2][8];
83 /* raw integer subband samples in the frame */
84 int32_t SBC_ALIGNED sb_sample_f[16][2][8];
86 /* modified subband samples */
87 int32_t SBC_ALIGNED sb_sample[16][2][8];
89 /* original pcm audio samples */
90 int16_t SBC_ALIGNED pcm_sample[2][16*8];
93 struct sbc_decoder_state {
100 * Calculates the CRC-8 of the first len bits in data
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
137 static uint8_t sbc_crc8(const uint8_t *data, size_t len)
143 for (i = 0; i < len / 8; i++)
144 crc = crc_table[crc ^ data[i]];
147 for (i = 0; i < len % 8; i++) {
148 char bit = ((octet ^ crc) & 0x80) >> 7;
150 crc = ((crc & 0x7f) << 1) ^ (bit ? 0x1d : 0);
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)
163 static SBC_ALWAYS_INLINE void sbc_calculate_bits_internal(
164 const struct sbc_frame *frame, int (*bits)[8], int subbands)
166 uint8_t sf = frame->frequency;
168 if (frame->mode == MONO || frame->mode == DUAL_CHANNEL) {
169 int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice;
172 for (ch = 0; ch < frame->channels; ch++) {
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];
181 for (sb = 0; sb < subbands; sb++) {
182 if (frame->scale_factor[ch][sb] == 0)
183 bitneed[ch][sb] = -5;
186 loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb];
188 loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb];
190 bitneed[ch][sb] = loudness / 2;
192 bitneed[ch][sb] = loudness;
194 if (bitneed[ch][sb] > max_bitneed)
195 max_bitneed = bitneed[ch][sb];
201 bitslice = max_bitneed + 1;
204 bitcount += slicecount;
206 for (sb = 0; sb < subbands; sb++) {
207 if ((bitneed[ch][sb] > bitslice + 1) && (bitneed[ch][sb] < bitslice + 16))
209 else if (bitneed[ch][sb] == bitslice + 1)
212 } while (bitcount + slicecount < frame->bitpool);
214 if (bitcount + slicecount == frame->bitpool) {
215 bitcount += slicecount;
219 for (sb = 0; sb < subbands; sb++) {
220 if (bitneed[ch][sb] < bitslice + 2)
223 bits[ch][sb] = bitneed[ch][sb] - bitslice;
224 if (bits[ch][sb] > 16)
229 for (sb = 0; bitcount < frame->bitpool &&
230 sb < subbands; sb++) {
231 if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) {
234 } else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) {
240 for (sb = 0; bitcount < frame->bitpool &&
241 sb < subbands; sb++) {
242 if (bits[ch][sb] < 16) {
250 } else if (frame->mode == STEREO || frame->mode == JOINT_STEREO) {
251 int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice;
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];
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;
270 loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb];
272 loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb];
274 bitneed[ch][sb] = loudness / 2;
276 bitneed[ch][sb] = loudness;
278 if (bitneed[ch][sb] > max_bitneed)
279 max_bitneed = bitneed[ch][sb];
286 bitslice = max_bitneed + 1;
289 bitcount += slicecount;
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))
295 else if (bitneed[ch][sb] == bitslice + 1)
299 } while (bitcount + slicecount < frame->bitpool);
301 if (bitcount + slicecount == frame->bitpool) {
302 bitcount += slicecount;
306 for (ch = 0; ch < 2; ch++) {
307 for (sb = 0; sb < subbands; sb++) {
308 if (bitneed[ch][sb] < bitslice + 2) {
311 bits[ch][sb] = bitneed[ch][sb] - bitslice;
312 if (bits[ch][sb] > 16)
320 while (bitcount < frame->bitpool) {
321 if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) {
324 } else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) {
339 while (bitcount < frame->bitpool) {
340 if (bits[ch][sb] < 16) {
357 static void sbc_calculate_bits(const struct sbc_frame *frame, int (*bits)[8])
359 if (frame->subbands == 4)
360 sbc_calculate_bits_internal(frame, bits, 4);
362 sbc_calculate_bits_internal(frame, bits, 8);
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:
371 * -1 Data stream too short
372 * -2 Sync byte incorrect
374 * -4 Bitpool value out of bounds
376 static int sbc_unpack_frame(const uint8_t *data, struct sbc_frame *frame,
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 };
386 uint32_t audio_sample;
387 int ch, sb, blk, bit; /* channel, subband, block and bit standard
389 int bits[2][8]; /* bits distribution */
390 uint32_t levels[2][8]; /* levels derived from that */
395 if (data[0] != SBC_SYNCWORD)
398 frame->frequency = (data[1] >> 6) & 0x03;
400 frame->block_mode = (data[1] >> 4) & 0x03;
401 switch (frame->block_mode) {
416 frame->mode = (data[1] >> 2) & 0x03;
417 switch (frame->mode) {
421 case DUAL_CHANNEL: /* fall-through */
428 frame->allocation = (data[1] >> 1) & 0x01;
430 frame->subband_mode = (data[1] & 0x01);
431 frame->subbands = frame->subband_mode ? 8 : 4;
433 frame->bitpool = data[2];
435 if ((frame->mode == MONO || frame->mode == DUAL_CHANNEL) &&
436 frame->bitpool > 16 * frame->subbands)
439 if ((frame->mode == STEREO || frame->mode == JOINT_STEREO) &&
440 frame->bitpool > 32 * frame->subbands)
443 /* data[3] is crc, we're checking it later */
447 crc_header[0] = data[1];
448 crc_header[1] = data[2];
451 if (frame->mode == JOINT_STEREO) {
452 if (len * 8 < consumed + frame->subbands)
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;
461 crc_header[crc_pos / 8] = data[4];
463 consumed += frame->subbands;
464 crc_pos += frame->subbands;
467 if (len * 8 < consumed + (4 * frame->subbands * frame->channels))
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));
483 if (data[3] != sbc_crc8(crc_header, crc_pos))
486 sbc_calculate_bits(frame, bits);
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;
493 for (blk = 0; blk < frame->blocks; blk++) {
494 for (ch = 0; ch < frame->channels; ch++) {
495 for (sb = 0; sb < frame->subbands; sb++) {
498 if (levels[ch][sb] == 0) {
499 frame->sb_sample[blk][ch][sb] = 0;
503 shift = frame->scale_factor[ch][sb] +
504 1 + SBCDEC_FIXED_EXTRA_BITS;
507 for (bit = 0; bit < bits[ch][sb]; bit++) {
508 if (consumed > len * 8)
511 if ((data[consumed >> 3] >> (7 - (consumed & 0x7))) & 0x01)
512 audio_sample |= 1 << (bits[ch][sb] - bit - 1);
517 frame->sb_sample[blk][ch][sb] = (int32_t)
518 (((((uint64_t) audio_sample << 1) | 1) << shift) /
519 levels[ch][sb]) - (1 << shift);
524 if (frame->mode == JOINT_STEREO) {
525 for (blk = 0; blk < frame->blocks; blk++) {
526 for (sb = 0; sb < frame->subbands; sb++) {
527 if (frame->joint & (0x01 << sb)) {
528 temp = frame->sb_sample[blk][0][sb] +
529 frame->sb_sample[blk][1][sb];
530 frame->sb_sample[blk][1][sb] =
531 frame->sb_sample[blk][0][sb] -
532 frame->sb_sample[blk][1][sb];
533 frame->sb_sample[blk][0][sb] = temp;
539 if ((consumed & 0x7) != 0)
540 consumed += 8 - (consumed & 0x7);
542 return consumed >> 3;
545 static void sbc_decoder_init(struct sbc_decoder_state *state,
546 const struct sbc_frame *frame)
550 memset(state->V, 0, sizeof(state->V));
551 state->subbands = frame->subbands;
553 for (ch = 0; ch < 2; ch++)
554 for (i = 0; i < frame->subbands * 2; i++)
555 state->offset[ch][i] = (10 * i + 10);
558 static SBC_ALWAYS_INLINE int16_t sbc_clip16(int32_t s)
562 else if (s < -0x8000)
568 static inline void sbc_synthesize_four(struct sbc_decoder_state *state,
569 struct sbc_frame *frame, int ch, int blk)
572 int32_t *v = state->V[ch];
573 int *offset = state->offset[ch];
575 for (i = 0; i < 8; i++) {
580 memcpy(v + 80, v, 9 * sizeof(*v));
583 /* Distribute the new matrix value to the shifted position */
584 v[offset[i]] = SCALE4_STAGED1(
585 MULA(synmatrix4[i][0], frame->sb_sample[blk][ch][0],
586 MULA(synmatrix4[i][1], frame->sb_sample[blk][ch][1],
587 MULA(synmatrix4[i][2], frame->sb_sample[blk][ch][2],
588 MUL (synmatrix4[i][3], frame->sb_sample[blk][ch][3])))));
591 /* Compute the samples */
592 for (idx = 0, i = 0; i < 4; i++, idx += 5) {
595 /* Store in output, Q0 */
596 frame->pcm_sample[ch][blk * 4 + i] = sbc_clip16(SCALE4_STAGED1(
597 MULA(v[offset[i] + 0], sbc_proto_4_40m0[idx + 0],
598 MULA(v[offset[k] + 1], sbc_proto_4_40m1[idx + 0],
599 MULA(v[offset[i] + 2], sbc_proto_4_40m0[idx + 1],
600 MULA(v[offset[k] + 3], sbc_proto_4_40m1[idx + 1],
601 MULA(v[offset[i] + 4], sbc_proto_4_40m0[idx + 2],
602 MULA(v[offset[k] + 5], sbc_proto_4_40m1[idx + 2],
603 MULA(v[offset[i] + 6], sbc_proto_4_40m0[idx + 3],
604 MULA(v[offset[k] + 7], sbc_proto_4_40m1[idx + 3],
605 MULA(v[offset[i] + 8], sbc_proto_4_40m0[idx + 4],
606 MUL( v[offset[k] + 9], sbc_proto_4_40m1[idx + 4]))))))))))));
610 static inline void sbc_synthesize_eight(struct sbc_decoder_state *state,
611 struct sbc_frame *frame, int ch, int blk)
614 int *offset = state->offset[ch];
616 for (i = 0; i < 16; i++) {
621 for (j = 0; j < 9; j++)
622 state->V[ch][j + 160] = state->V[ch][j];
625 /* Distribute the new matrix value to the shifted position */
626 state->V[ch][offset[i]] = SCALE8_STAGED1(
627 MULA(synmatrix8[i][0], frame->sb_sample[blk][ch][0],
628 MULA(synmatrix8[i][1], frame->sb_sample[blk][ch][1],
629 MULA(synmatrix8[i][2], frame->sb_sample[blk][ch][2],
630 MULA(synmatrix8[i][3], frame->sb_sample[blk][ch][3],
631 MULA(synmatrix8[i][4], frame->sb_sample[blk][ch][4],
632 MULA(synmatrix8[i][5], frame->sb_sample[blk][ch][5],
633 MULA(synmatrix8[i][6], frame->sb_sample[blk][ch][6],
634 MUL( synmatrix8[i][7], frame->sb_sample[blk][ch][7])))))))));
637 /* Compute the samples */
638 for (idx = 0, i = 0; i < 8; i++, idx += 5) {
641 /* Store in output, Q0 */
642 frame->pcm_sample[ch][blk * 8 + i] = sbc_clip16(SCALE8_STAGED1(
643 MULA(state->V[ch][offset[i] + 0], sbc_proto_8_80m0[idx + 0],
644 MULA(state->V[ch][offset[k] + 1], sbc_proto_8_80m1[idx + 0],
645 MULA(state->V[ch][offset[i] + 2], sbc_proto_8_80m0[idx + 1],
646 MULA(state->V[ch][offset[k] + 3], sbc_proto_8_80m1[idx + 1],
647 MULA(state->V[ch][offset[i] + 4], sbc_proto_8_80m0[idx + 2],
648 MULA(state->V[ch][offset[k] + 5], sbc_proto_8_80m1[idx + 2],
649 MULA(state->V[ch][offset[i] + 6], sbc_proto_8_80m0[idx + 3],
650 MULA(state->V[ch][offset[k] + 7], sbc_proto_8_80m1[idx + 3],
651 MULA(state->V[ch][offset[i] + 8], sbc_proto_8_80m0[idx + 4],
652 MUL( state->V[ch][offset[k] + 9], sbc_proto_8_80m1[idx + 4]))))))))))));
656 static int sbc_synthesize_audio(struct sbc_decoder_state *state,
657 struct sbc_frame *frame)
661 switch (frame->subbands) {
663 for (ch = 0; ch < frame->channels; ch++) {
664 for (blk = 0; blk < frame->blocks; blk++)
665 sbc_synthesize_four(state, frame, ch, blk);
667 return frame->blocks * 4;
670 for (ch = 0; ch < frame->channels; ch++) {
671 for (blk = 0; blk < frame->blocks; blk++)
672 sbc_synthesize_eight(state, frame, ch, blk);
674 return frame->blocks * 8;
681 static int sbc_analyze_audio(struct sbc_encoder_state *state,
682 struct sbc_frame *frame)
687 switch (frame->subbands) {
689 for (ch = 0; ch < frame->channels; ch++) {
690 x = &state->X[ch][state->position - 16 +
692 for (blk = 0; blk < frame->blocks; blk += 4) {
693 state->sbc_analyze_4b_4s(
695 frame->sb_sample_f[blk][ch],
696 frame->sb_sample_f[blk + 1][ch] -
697 frame->sb_sample_f[blk][ch]);
701 return frame->blocks * 4;
704 for (ch = 0; ch < frame->channels; ch++) {
705 x = &state->X[ch][state->position - 32 +
707 for (blk = 0; blk < frame->blocks; blk += 4) {
708 state->sbc_analyze_4b_8s(
710 frame->sb_sample_f[blk][ch],
711 frame->sb_sample_f[blk + 1][ch] -
712 frame->sb_sample_f[blk][ch]);
716 return frame->blocks * 8;
723 /* Supplementary bitstream writing macros for 'sbc_pack_frame' */
725 #define PUT_BITS(data_ptr, bits_cache, bits_count, v, n) \
727 bits_cache = (v) | (bits_cache << (n)); \
729 if (bits_count >= 16) { \
731 *data_ptr++ = (uint8_t) \
732 (bits_cache >> bits_count); \
734 *data_ptr++ = (uint8_t) \
735 (bits_cache >> bits_count); \
739 #define FLUSH_BITS(data_ptr, bits_cache, bits_count) \
741 while (bits_count >= 8) { \
743 *data_ptr++ = (uint8_t) \
744 (bits_cache >> bits_count); \
746 if (bits_count > 0) \
747 *data_ptr++ = (uint8_t) \
748 (bits_cache << (8 - bits_count)); \
752 * Packs the SBC frame from frame into the memory at data. At most len
753 * bytes will be used, should more memory be needed an appropriate
754 * error code will be returned. Returns the length of the packed frame
755 * on success or a negative value on error.
757 * The error codes are:
758 * -1 Not enough memory reserved
759 * -2 Unsupported sampling rate
760 * -3 Unsupported number of blocks
761 * -4 Unsupported number of subbands
762 * -5 Bitpool value out of bounds
763 * -99 not implemented
766 static SBC_ALWAYS_INLINE ssize_t sbc_pack_frame_internal(uint8_t *data,
767 struct sbc_frame *frame, size_t len,
768 int frame_subbands, int frame_channels,
771 /* Bitstream writer starts from the fourth byte */
772 uint8_t *data_ptr = data + 4;
773 uint32_t bits_cache = 0;
774 uint32_t bits_count = 0;
776 /* Will copy the header parts for CRC-8 calculation here */
777 uint8_t crc_header[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
780 uint32_t audio_sample;
782 int ch, sb, blk; /* channel, subband, block and bit counters */
783 int bits[2][8]; /* bits distribution */
784 uint32_t levels[2][8]; /* levels are derived from that */
785 uint32_t sb_sample_delta[2][8];
787 data[0] = SBC_SYNCWORD;
789 data[1] = (frame->frequency & 0x03) << 6;
791 data[1] |= (frame->block_mode & 0x03) << 4;
793 data[1] |= (frame->mode & 0x03) << 2;
795 data[1] |= (frame->allocation & 0x01) << 1;
797 switch (frame_subbands) {
809 data[2] = frame->bitpool;
811 if ((frame->mode == MONO || frame->mode == DUAL_CHANNEL) &&
812 frame->bitpool > frame_subbands << 4)
815 if ((frame->mode == STEREO || frame->mode == JOINT_STEREO) &&
816 frame->bitpool > frame_subbands << 5)
819 /* Can't fill in crc yet */
821 crc_header[0] = data[1];
822 crc_header[1] = data[2];
825 if (frame->mode == JOINT_STEREO) {
826 PUT_BITS(data_ptr, bits_cache, bits_count,
827 joint, frame_subbands);
828 crc_header[crc_pos >> 3] = joint;
829 crc_pos += frame_subbands;
832 for (ch = 0; ch < frame_channels; ch++) {
833 for (sb = 0; sb < frame_subbands; sb++) {
834 PUT_BITS(data_ptr, bits_cache, bits_count,
835 frame->scale_factor[ch][sb] & 0x0F, 4);
836 crc_header[crc_pos >> 3] <<= 4;
837 crc_header[crc_pos >> 3] |= frame->scale_factor[ch][sb] & 0x0F;
842 /* align the last crc byte */
844 crc_header[crc_pos >> 3] <<= 8 - (crc_pos % 8);
846 data[3] = sbc_crc8(crc_header, crc_pos);
848 sbc_calculate_bits(frame, bits);
850 for (ch = 0; ch < frame_channels; ch++) {
851 for (sb = 0; sb < frame_subbands; sb++) {
852 levels[ch][sb] = ((1 << bits[ch][sb]) - 1) <<
853 (32 - (frame->scale_factor[ch][sb] +
854 SCALE_OUT_BITS + 2));
855 sb_sample_delta[ch][sb] = (uint32_t) 1 <<
856 (frame->scale_factor[ch][sb] +
861 for (blk = 0; blk < frame->blocks; blk++) {
862 for (ch = 0; ch < frame_channels; ch++) {
863 for (sb = 0; sb < frame_subbands; sb++) {
865 if (bits[ch][sb] == 0)
868 audio_sample = ((uint64_t) levels[ch][sb] *
869 (sb_sample_delta[ch][sb] +
870 frame->sb_sample_f[blk][ch][sb])) >> 32;
872 PUT_BITS(data_ptr, bits_cache, bits_count,
873 audio_sample, bits[ch][sb]);
878 FLUSH_BITS(data_ptr, bits_cache, bits_count);
880 return data_ptr - data;
883 static ssize_t sbc_pack_frame(uint8_t *data, struct sbc_frame *frame, size_t len,
886 if (frame->subbands == 4) {
887 if (frame->channels == 1)
888 return sbc_pack_frame_internal(
889 data, frame, len, 4, 1, joint);
891 return sbc_pack_frame_internal(
892 data, frame, len, 4, 2, joint);
894 if (frame->channels == 1)
895 return sbc_pack_frame_internal(
896 data, frame, len, 8, 1, joint);
898 return sbc_pack_frame_internal(
899 data, frame, len, 8, 2, joint);
903 static void sbc_encoder_init(struct sbc_encoder_state *state,
904 const struct sbc_frame *frame)
906 memset(&state->X, 0, sizeof(state->X));
907 state->position = (SBC_X_BUFFER_SIZE - frame->subbands * 9) & ~7;
909 sbc_init_primitives(state);
914 struct SBC_ALIGNED sbc_frame frame;
915 struct SBC_ALIGNED sbc_decoder_state dec_state;
916 struct SBC_ALIGNED sbc_encoder_state enc_state;
919 static void sbc_set_defaults(sbc_t *sbc, unsigned long flags)
921 sbc->frequency = SBC_FREQ_44100;
922 sbc->mode = SBC_MODE_STEREO;
923 sbc->subbands = SBC_SB_8;
924 sbc->blocks = SBC_BLK_16;
926 #if __BYTE_ORDER == __LITTLE_ENDIAN
927 sbc->endian = SBC_LE;
928 #elif __BYTE_ORDER == __BIG_ENDIAN
929 sbc->endian = SBC_BE;
931 #error "Unknown byte order"
935 int sbc_init(sbc_t *sbc, unsigned long flags)
940 memset(sbc, 0, sizeof(sbc_t));
942 sbc->priv_alloc_base = malloc(sizeof(struct sbc_priv) + SBC_ALIGN_MASK);
943 if (!sbc->priv_alloc_base)
946 sbc->priv = (void *) (((uintptr_t) sbc->priv_alloc_base +
947 SBC_ALIGN_MASK) & ~((uintptr_t) SBC_ALIGN_MASK));
949 memset(sbc->priv, 0, sizeof(struct sbc_priv));
951 sbc_set_defaults(sbc, flags);
956 ssize_t sbc_parse(sbc_t *sbc, const void *input, size_t input_len)
958 return sbc_decode(sbc, input, input_len, NULL, 0, NULL);
961 ssize_t sbc_decode(sbc_t *sbc, const void *input, size_t input_len,
962 void *output, size_t output_len, size_t *written)
964 struct sbc_priv *priv;
966 int i, ch, framelen, samples;
973 framelen = sbc_unpack_frame(input, &priv->frame, input_len);
976 sbc_decoder_init(&priv->dec_state, &priv->frame);
979 sbc->frequency = priv->frame.frequency;
980 sbc->mode = priv->frame.mode;
981 sbc->subbands = priv->frame.subband_mode;
982 sbc->blocks = priv->frame.block_mode;
983 sbc->allocation = priv->frame.allocation;
984 sbc->bitpool = priv->frame.bitpool;
986 priv->frame.codesize = sbc_get_codesize(sbc);
987 priv->frame.length = framelen;
988 } else if (priv->frame.bitpool != sbc->bitpool) {
989 priv->frame.length = framelen;
990 sbc->bitpool = priv->frame.bitpool;
1002 samples = sbc_synthesize_audio(&priv->dec_state, &priv->frame);
1006 if (output_len < (size_t) (samples * priv->frame.channels * 2))
1007 samples = output_len / (priv->frame.channels * 2);
1009 for (i = 0; i < samples; i++) {
1010 for (ch = 0; ch < priv->frame.channels; ch++) {
1012 s = priv->frame.pcm_sample[ch][i];
1014 if (sbc->endian == SBC_BE) {
1015 *ptr++ = (s & 0xff00) >> 8;
1016 *ptr++ = (s & 0x00ff);
1018 *ptr++ = (s & 0x00ff);
1019 *ptr++ = (s & 0xff00) >> 8;
1025 *written = samples * priv->frame.channels * 2;
1030 ssize_t sbc_encode(sbc_t *sbc, const void *input, size_t input_len,
1031 void *output, size_t output_len, ssize_t *written)
1033 struct sbc_priv *priv;
1036 int (*sbc_enc_process_input)(int position,
1037 const uint8_t *pcm, int16_t X[2][SBC_X_BUFFER_SIZE],
1038 int nsamples, int nchannels);
1049 priv->frame.frequency = sbc->frequency;
1050 priv->frame.mode = sbc->mode;
1051 priv->frame.channels = sbc->mode == SBC_MODE_MONO ? 1 : 2;
1052 priv->frame.allocation = sbc->allocation;
1053 priv->frame.subband_mode = sbc->subbands;
1054 priv->frame.subbands = sbc->subbands ? 8 : 4;
1055 priv->frame.block_mode = sbc->blocks;
1056 priv->frame.blocks = 4 + (sbc->blocks * 4);
1057 priv->frame.bitpool = sbc->bitpool;
1058 priv->frame.codesize = sbc_get_codesize(sbc);
1059 priv->frame.length = sbc_get_frame_length(sbc);
1061 sbc_encoder_init(&priv->enc_state, &priv->frame);
1063 } else if (priv->frame.bitpool != sbc->bitpool) {
1064 priv->frame.length = sbc_get_frame_length(sbc);
1065 priv->frame.bitpool = sbc->bitpool;
1068 /* input must be large enough to encode a complete frame */
1069 if (input_len < priv->frame.codesize)
1072 /* output must be large enough to receive the encoded frame */
1073 if (!output || output_len < priv->frame.length)
1076 /* Select the needed input data processing function and call it */
1077 if (priv->frame.subbands == 8) {
1078 if (sbc->endian == SBC_BE)
1079 sbc_enc_process_input =
1080 priv->enc_state.sbc_enc_process_input_8s_be;
1082 sbc_enc_process_input =
1083 priv->enc_state.sbc_enc_process_input_8s_le;
1085 if (sbc->endian == SBC_BE)
1086 sbc_enc_process_input =
1087 priv->enc_state.sbc_enc_process_input_4s_be;
1089 sbc_enc_process_input =
1090 priv->enc_state.sbc_enc_process_input_4s_le;
1093 priv->enc_state.position = sbc_enc_process_input(
1094 priv->enc_state.position, (const uint8_t *) input,
1095 priv->enc_state.X, priv->frame.subbands * priv->frame.blocks,
1096 priv->frame.channels);
1098 samples = sbc_analyze_audio(&priv->enc_state, &priv->frame);
1100 if (priv->frame.mode == JOINT_STEREO) {
1101 int j = priv->enc_state.sbc_calc_scalefactors_j(
1102 priv->frame.sb_sample_f, priv->frame.scale_factor,
1103 priv->frame.blocks, priv->frame.subbands);
1104 framelen = sbc_pack_frame(output, &priv->frame, output_len, j);
1106 priv->enc_state.sbc_calc_scalefactors(
1107 priv->frame.sb_sample_f, priv->frame.scale_factor,
1108 priv->frame.blocks, priv->frame.channels,
1109 priv->frame.subbands);
1110 framelen = sbc_pack_frame(output, &priv->frame, output_len, 0);
1114 *written = framelen;
1116 return samples * priv->frame.channels * 2;
1119 void sbc_finish(sbc_t *sbc)
1124 free(sbc->priv_alloc_base);
1126 memset(sbc, 0, sizeof(sbc_t));
1129 size_t sbc_get_frame_length(sbc_t *sbc)
1132 uint8_t subbands, channels, blocks, joint, bitpool;
1133 struct sbc_priv *priv;
1136 if (priv->init && priv->frame.bitpool == sbc->bitpool)
1137 return priv->frame.length;
1139 subbands = sbc->subbands ? 8 : 4;
1140 blocks = 4 + (sbc->blocks * 4);
1141 channels = sbc->mode == SBC_MODE_MONO ? 1 : 2;
1142 joint = sbc->mode == SBC_MODE_JOINT_STEREO ? 1 : 0;
1143 bitpool = sbc->bitpool;
1145 ret = 4 + (4 * subbands * channels) / 8;
1146 /* This term is not always evenly divide so we round it up */
1148 ret += ((blocks * channels * bitpool) + 7) / 8;
1150 ret += (((joint ? subbands : 0) + blocks * bitpool) + 7) / 8;
1155 unsigned sbc_get_frame_duration(sbc_t *sbc)
1157 uint8_t subbands, blocks;
1159 struct sbc_priv *priv;
1163 subbands = sbc->subbands ? 8 : 4;
1164 blocks = 4 + (sbc->blocks * 4);
1166 subbands = priv->frame.subbands;
1167 blocks = priv->frame.blocks;
1170 switch (sbc->frequency) {
1171 case SBC_FREQ_16000:
1175 case SBC_FREQ_32000:
1179 case SBC_FREQ_44100:
1183 case SBC_FREQ_48000:
1190 return (1000000 * blocks * subbands) / frequency;
1193 size_t sbc_get_codesize(sbc_t *sbc)
1195 uint16_t subbands, channels, blocks;
1196 struct sbc_priv *priv;
1200 subbands = sbc->subbands ? 8 : 4;
1201 blocks = 4 + (sbc->blocks * 4);
1202 channels = sbc->mode == SBC_MODE_MONO ? 1 : 2;
1204 subbands = priv->frame.subbands;
1205 blocks = priv->frame.blocks;
1206 channels = priv->frame.channels;
1209 return subbands * blocks * channels * 2;
1212 const char *sbc_get_implementation_info(sbc_t *sbc)
1214 struct sbc_priv *priv;
1223 return priv->enc_state.implementation_info;
1226 int sbc_reinit(sbc_t *sbc, unsigned long flags)
1228 struct sbc_priv *priv;
1230 if (!sbc || !sbc->priv)
1235 if (priv->init == 1)
1236 memset(sbc->priv, 0, sizeof(struct sbc_priv));
1238 sbc_set_defaults(sbc, flags);