17f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*
27f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
37f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
47f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * you may not use this file except in compliance with the License.
67f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * You may obtain a copy of the License at
77f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
87f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * See the License for the specific language governing permissions and
147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * limitations under the License.
157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */
187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Phase.h"
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Math.h"
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ auxiliary functions } ---------------------------------------- */
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor / destructor } ----------------------------------- */
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ I/O } -------------------------------------------------------- */
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifndef bbs_SIN_INTERPOLATION_METHOD_2
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectconst int32 bbs_sin32_table1G[] =
837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	0,			1608,	411648,		1607,	823040,		1606,	1234176,	1602,
857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1644288,	1599,	2053632,	1594,	2461696,	1588,	2868224,	1581,
867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	3272960,	1574,	3675904,	1564,	4076288,	1556,	4474624,	1545,
877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	4870144,	1533,	5262592,	1521,	5651968,	1508,	6038016,	1493,
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	6420224,	1478,	6798592,	1463,	7173120,	1445,	7543040,	1428,
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	7908608,	1409,	8269312,	1390,	8625152,	1369,	8975616,	1348,
907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	9320704,	1327,	9660416,	1303,	9993984,	1280,	10321664,	1256,
917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	10643200,	1231,	10958336,	1205,	11266816,	1178,	11568384,	1151,
927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	11863040,	1124,	12150784,	1094,	12430848,	1066,	12703744,	1036,
937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	12968960,	1005,	13226240,	974,	13475584,	942,	13716736,	910,
947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	13949696,	877,	14174208,	844,	14390272,	810,	14597632,	775,
957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	14796032,	741,	14985728,	705,	15166208,	670,	15337728,	634,
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	15500032,	597,	15652864,	561,	15796480,	523,	15930368,	486,
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16054784,	448,	16169472,	409,	16274176,	372,	16369408,	333,
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16454656,	295,	16530176,	255,	16595456,	217,	16651008,	177,
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16696320,	138,	16731648,	99,		16756992,	59,		16772096,	20,
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16777216,	-20,	16772096,	-59,	16756992,	-99,	16731648,	-138,
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16696320,	-177,	16651008,	-217,	16595456,	-255,	16530176,	-295,
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16454656,	-333,	16369408,	-372,	16274176,	-409,	16169472,	-448,
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16054784,	-486,	15930368,	-523,	15796480,	-561,	15652864,	-597,
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	15500032,	-634,	15337728,	-670,	15166208,	-705,	14985728,	-741,
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	14796032,	-775,	14597632,	-810,	14390272,	-844,	14174208,	-877,
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	13949696,	-910,	13716736,	-942,	13475584,	-974,	13226240,	-1005,
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	12968960,	-1036,	12703744,	-1066,	12430848,	-1094,	12150784,	-1124,
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	11863040,	-1151,	11568384,	-1178,	11266816,	-1205,	10958336,	-1231,
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	10643200,	-1256,	10321664,	-1280,	9993984,	-1303,	9660416,	-1327,
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	9320704,	-1348,	8975616,	-1369,	8625152,	-1390,	8269312,	-1409,
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	7908608,	-1428,	7543040,	-1445,	7173120,	-1463,	6798592,	-1478,
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	6420224,	-1493,	6038016,	-1508,	5651968,	-1521,	5262592,	-1533,
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	4870144,	-1545,	4474624,	-1556,	4076288,	-1564,	3675904,	-1574,
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	3272960,	-1581,	2868224,	-1588,	2461696,	-1594,	2053632,	-1599,
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1644288,	-1602,	1234176,	-1606,	823040,		-1607,	411648,		-1608
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project};
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#else
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectconst int32 bbs_sin32_table2G[] =
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	0,			12907,	-122,
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	209469440,	12662,	-368,
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	410894336,	11926,	-596,
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	596525056,	10733,	-802,
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	759234560,	9129,	-978,
1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	892780544,	7168,	-1112,
1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	992002048,	4939,	-1210,
1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1053097984, 2516,	-1256,
1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1073741824, -4,		-1256,
1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1053097984, -2519,	-1210,
1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	992002048,	-4944,	-1112,
1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	892780544,	-7173,	-978,
1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	759234560,	-9129,	-802,
1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	596525056,	-10734, -596,
1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	410894336,	-11926, -368,
1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	209469440,	-12663,	-122
1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project};
1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif
1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectint32 bbs_sin32( phase16 phaseA )
1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifndef bbs_SIN_INTERPOLATION_METHOD_2
1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 oL = ( phaseA & 0x00FF );
1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint16  indexL = ( ( phaseA & 0x7F00 ) >> 8 ) << 1;
1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 sinL = bbs_sin32_table1G[ indexL ] + oL * bbs_sin32_table1G[ indexL + 1 ];
1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ( phaseA & 0x8000 ) != 0 )
1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return -sinL;
1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return sinL;
1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#else /*bbs_SIN_INTERPOLATION_METHOD_2*/
1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 o1L = ( phaseA & 0x07FF );
1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 o2L = ( o1L * o1L ) >> 8;
1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint16 indexL = ( ( phaseA & 0x7800 ) >> 11 ) * 3;
1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 sinL = bbs_sin32_table2G[ indexL ] + ( ( o1L * bbs_sin32_table2G[ indexL + 1 ] )  << 3 ) + o2L * bbs_sin32_table2G[ indexL + 2 ];
1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ( phaseA & 0x8000 ) != 0 )
1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return -sinL >> 6;
1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return sinL >> 6;
1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif /*bbs_SIN_INTERPOLATION_METHOD_2*/
1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** computation of sine tables (do not uncomment or remove)
1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid sin1Table()
1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	long iL;
1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < 128; iL++ )
1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 phase1L = iL * 256;
1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 phase2L = phase1L + 256;
1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		double angle1L = ( M_PI * phase1L ) / 32768;
1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		double angle2L = ( M_PI * phase2L ) / 32768;
1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 sin1L = ( sin( angle1L ) * 65536 );
1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 sin2L = ( sin( angle2L ) * 65536 );
1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 diffL = sin2L - sin1L;
1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		eout << iL << ": " << ( sin1L << 8 ) << " + oL * " << diffL << endl;
1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid sin2Table()
1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	long iL;
1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < 16; iL++ )
1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 p0L = iL  * ( 1 << 11 );
1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 p1L = p0L + ( 1 << 10 );
1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 p2L = p0L + ( 1 << 11 );
2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		double a0L = ( M_PI * p0L ) / ( 1 << 15 );
2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		double a1L = ( M_PI * p1L ) / ( 1 << 15 );
2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		double a2L = ( M_PI * p2L ) / ( 1 << 15 );
2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 s0L = ( sin( a0L ) * ( 1 << 16 ) );
2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 s1L = ( sin( a1L ) * ( 1 << 16 ) );
2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 s2L = ( sin( a2L ) * ( 1 << 16 ) );
2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 aL = 4 * s1L - 3 * s0L - s2L;
2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 bL = 2 * s2L + 2 * s0L - 4 * s1L;
2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		eout << iL << ": " << ( s0L << 14 ) << " + ( ( o1L * " << aL << " ) << 3 )"
2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			 << " + o2L * " << bL << endl;
2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project*/
2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectint32 bbs_cos32( phase16 phaseA )
2217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bbs_sin32( ( phase16 )( phaseA + bbs_M_PI_2_16 ) );
2237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectint16 bbs_sin16( phase16 phaseA )
2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bbs_sin32( phaseA ) >> 10;
2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectint16 bbs_cos16( phase16 phaseA )
2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bbs_sin32( ( phase16 )( phaseA + bbs_M_PI_2_16 ) ) >> 10;
2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectconst int32 bbs_atan16_tableG[] =
2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	0,			325,	332800,		326,	666624,		326,	1000448,	325,
2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1333248,	324,	1665024,	323,	1995776,	323,	2326528,	322,
2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	2656256,	320,	2983936,	319,	3310592,	317,	3635200,	316,
2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	3958784,	314,	4280320,	312,	4599808,	310,	4917248,	308,
2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	5232640,	306,	5545984,	303,	5856256,	301,	6164480,	298,
2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	6469632,	296,	6772736,	292,	7071744,	291,	7369728,	287,
2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	7663616,	284,	7954432,	281,	8242176,	279,	8527872,	275,
2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	8809472,	272,	9088000,	269,	9363456,	265,	9634816,	263,
2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	9904128,	259,	10169344,	256,	10431488,	252,	10689536,	249,
2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	10944512,	246,	11196416,	243,	11445248,	239,	11689984,	236,
2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	11931648,	233,	12170240,	230,	12405760,	226,	12637184,	223,
2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	12865536,	219,	13089792,	217,	13312000,	213,	13530112,	210,
2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	13745152,	207,	13957120,	204,	14166016,	201,	14371840,	198,
2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	14574592,	195,	14774272,	192,	14970880,	189,	15164416,	186,
2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	15354880,	183,	15542272,	180,	15726592,	178,	15908864,	175,
2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	16088064,	172,	16264192,	169,	16437248,	167,	16608256,	165
2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project};
2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectphase16 bbs_atan16( uint32 valA )
2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 oL = valA & 0x03FF;
2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint16 indexL = ( valA >> 10 ) << 1;
2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 phaseL = bbs_atan16_tableG[ indexL ] + oL * bbs_atan16_tableG[ indexL + 1 ];
2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return ( phase16 )( phaseL >> 11 );
2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectphase16 bbs_phase16( int32 xA, int32 yA )
2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 xL = ( xA > 0 ) ? xA : -xA;
2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 yL = ( yA > 0 ) ? yA : -yA;
2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	phase16 phaseL;
2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( xL == 0 && yL == 0 ) return 0;
2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( xL == yL )
2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		phaseL = bbs_M_PI_4_16; /*PI/4*/
2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else if( xL > yL )
2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( yL >= 65536 ) /* avoid overflow (1 << 16) */
2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			uint32 shiftL = bbs_intLog2( yL ) - 15;
2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			xL >>= shiftL;
2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			yL >>= shiftL;
2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		phaseL = bbs_atan16( ( yL << 16 ) / xL );
2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( xL >= 65536 ) /* avoid overflow (1 << 16) */
2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			uint32 shiftL = bbs_intLog2( xL ) - 15;
2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			xL >>= shiftL;
2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			yL >>= shiftL;
3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		phaseL = bbs_M_PI_2_16 - bbs_atan16( ( xL << 16 ) / yL );
3027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( xA >= 0 )
3057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( yA >= 0 )
3077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return phaseL;
3097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		else
3117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return -phaseL;
3137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
3167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( yA >= 0 )
3187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return bbs_M_PI_16 - phaseL;
3207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		else
3227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return phaseL - bbs_M_PI_16;
3247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
3277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
3297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
3317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
333