diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2008-07-26 19:00:53 +0200 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2008-07-26 19:00:53 +0200 | 
| commit | d6ae1c3f777832f8e32702f81fe64e33a1396928 (patch) | |
| tree | 159a1e59f3929c9d795dbd1f3edd84d9dccba048 /sbc/sbc_math.h | |
| parent | b8e5fea8d31fbcd3d1c044385f8217dbf39892bb (diff) | |
| parent | 3382af9114a9b2e657c7ddd0a5511edda6a37a90 (diff) | |
Import bluez-utils-3.36 revision history
Diffstat (limited to 'sbc/sbc_math.h')
| -rw-r--r-- | sbc/sbc_math.h | 72 | 
1 files changed, 72 insertions, 0 deletions
diff --git a/sbc/sbc_math.h b/sbc/sbc_math.h new file mode 100644 index 00000000..b3d87a62 --- /dev/null +++ b/sbc/sbc_math.h @@ -0,0 +1,72 @@ +/* + * + *  Bluetooth low-complexity, subband codec (SBC) library + * + *  Copyright (C) 2004-2008  Marcel Holtmann <marcel@holtmann.org> + *  Copyright (C) 2004-2005  Henryk Ploetz <henryk@ploetzli.ch> + *  Copyright (C) 2005-2008  Brad Midgley <bmidgley@xmission.com> + * + * + *  This library is free software; you can redistribute it and/or + *  modify it under the terms of the GNU Lesser General Public + *  License as published by the Free Software Foundation; either + *  version 2.1 of the License, or (at your option) any later version. + * + *  This library is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + *  Lesser General Public License for more details. + * + *  You should have received a copy of the GNU Lesser General Public + *  License along with this library; if not, write to the Free Software + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + * + */ + +#define fabs(x) ((x) < 0 ? -(x) : (x)) +/* C does not provide an explicit arithmetic shift right but this will +   always be correct and every compiler *should* generate optimal code */ +#define ASR(val, bits) ((-2 >> 1 == -1) ? \ +		 ((int32_t)(val)) >> (bits) : ((int32_t) (val)) / (1 << (bits))) + +#define SCALE_PROTO4_TBL	15 +#define SCALE_ANA4_TBL		17 +#define SCALE_PROTO8_TBL	16 +#define SCALE_ANA8_TBL		17 +#define SCALE_SPROTO4_TBL	12 +#define SCALE_SPROTO8_TBL	14 +#define SCALE_NPROTO4_TBL	11 +#define SCALE_NPROTO8_TBL	11 +#define SCALE4_STAGE1_BITS	15 +#define SCALE4_STAGE2_BITS	16 +#define SCALE4_STAGED1_BITS	15 +#define SCALE4_STAGED2_BITS	16 +#define SCALE8_STAGE1_BITS	15 +#define SCALE8_STAGE2_BITS	15 +#define SCALE8_STAGED1_BITS	15 +#define SCALE8_STAGED2_BITS	16 + +typedef int32_t sbc_fixed_t; + +#define SCALE4_STAGE1(src)  ASR(src, SCALE4_STAGE1_BITS) +#define SCALE4_STAGE2(src)  ASR(src, SCALE4_STAGE2_BITS) +#define SCALE4_STAGED1(src) ASR(src, SCALE4_STAGED1_BITS) +#define SCALE4_STAGED2(src) ASR(src, SCALE4_STAGED2_BITS) +#define SCALE8_STAGE1(src)  ASR(src, SCALE8_STAGE1_BITS) +#define SCALE8_STAGE2(src)  ASR(src, SCALE8_STAGE2_BITS) +#define SCALE8_STAGED1(src) ASR(src, SCALE8_STAGED1_BITS) +#define SCALE8_STAGED2(src) ASR(src, SCALE8_STAGED2_BITS) + +#define SBC_FIXED_0(val) { val = 0; } +#define MUL(a, b)        ((a) * (b)) +#ifdef __arm__ +#define MULA(a, b, res) ({				\ +		int tmp = res;			\ +		__asm__(				\ +			"mla %0, %2, %3, %0"		\ +			: "=&r" (tmp)			\ +			: "0" (tmp), "r" (a), "r" (b));	\ +		tmp; }) +#else +#define MULA(a, b, res)  ((a) * (b) + (res)) +#endif  | 
