1 /* 2 * 3 * Bluetooth low-complexity, subband codec (SBC) library 4 * 5 * Copyright (C) 2004-2008 Marcel Holtmann <marcel@holtmann.org> 6 * Copyright (C) 2004-2005 Henryk Ploetz <henryk@ploetzli.ch> 7 * Copyright (C) 2005-2006 Brad Midgley <bmidgley@xmission.com> 8 * 9 * 10 * This library is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU Lesser General Public 12 * License as published by the Free Software Foundation; either 13 * version 2.1 of the License, or (at your option) any later version. 14 * 15 * This library is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * Lesser General Public License for more details. 19 * 20 * You should have received a copy of the GNU Lesser General Public 21 * License along with this library; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 23 * 24 */ 25 26 #ifndef __SBC_H 27 #define __SBC_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include <stdint.h> 34 35 /* sampling frequency */ 36 #define SBC_FREQ_16000 0x00 37 #define SBC_FREQ_32000 0x01 38 #define SBC_FREQ_44100 0x02 39 #define SBC_FREQ_48000 0x03 40 41 /* blocks */ 42 #define SBC_BLK_4 0x00 43 #define SBC_BLK_8 0x01 44 #define SBC_BLK_12 0x02 45 #define SBC_BLK_16 0x03 46 47 /* channel mode */ 48 #define SBC_MODE_MONO 0x00 49 #define SBC_MODE_DUAL_CHANNEL 0x01 50 #define SBC_MODE_STEREO 0x02 51 #define SBC_MODE_JOINT_STEREO 0x03 52 53 /* allocation method */ 54 #define SBC_AM_LOUDNESS 0x00 55 #define SBC_AM_SNR 0x01 56 57 /* subbands */ 58 #define SBC_SB_4 0x00 59 #define SBC_SB_8 0x01 60 61 /* Data endianess */ 62 #define SBC_LE 0x00 63 #define SBC_BE 0x01 64 65 struct sbc_struct { 66 unsigned long flags; 67 68 uint8_t frequency; 69 uint8_t blocks; 70 uint8_t subbands; 71 uint8_t mode; 72 uint8_t allocation; 73 uint8_t bitpool; 74 uint8_t endian; 75 76 void *priv; 77 }; 78 79 typedef struct sbc_struct sbc_t; 80 81 int sbc_init(sbc_t *sbc, unsigned long flags); 82 int sbc_reinit(sbc_t *sbc, unsigned long flags); 83 int sbc_parse(sbc_t *sbc, void *input, int input_len); 84 int sbc_decode(sbc_t *sbc, const void *input, int input_len, void *output, 85 int output_len, int *len); 86 int sbc_encode(sbc_t *sbc, const void *input, int input_len, void *output, 87 int output_len, int *written); 88 int sbc_get_frame_length(sbc_t *sbc); 89 int sbc_get_frame_duration(sbc_t *sbc); 90 int sbc_get_codesize(sbc_t *sbc); 91 void sbc_finish(sbc_t *sbc); 92 93 #ifdef __cplusplus 94 } 95 #endif 96 97 #endif /* __SBC_H */ 98