From: Djordje Pesut <djordje.pe...@imgtec.com> Add float emulation
Signed-off-by: Nedeljko Babic <nedeljko.ba...@imgtec.com> --- libavcodec/float_emu.h | 295 +++++++++++++++++++++++++++++++++++++++++++++ libavcodec/float_emu_tab.c | 293 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 588 insertions(+) create mode 100644 libavcodec/float_emu.h create mode 100644 libavcodec/float_emu_tab.c diff --git a/libavcodec/float_emu.h b/libavcodec/float_emu.h new file mode 100644 index 0000000..8dc975a --- /dev/null +++ b/libavcodec/float_emu.h @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2012 + * MIPS Technologies, Inc., California. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of is + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Author: Stanislav Ocovaj (stanislav.ocovaj imgtec com) + * + * This file is part of FFmpeg. + * + * FFmpeg 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. + * + * FFmpeg 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 FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Note: Rounding-to-nearest used unless otherwise stated + */ + +#ifndef AVCODEC_FLOAT_EMU_H +#define AVCODEC_FLOAT_EMU_H + +#include "libavutil/common.h" +#include "libavutil/intmath.h" + +extern const int divTable[128]; +extern const int sqrtTab[513]; +extern const int sqrExpMultTab[2]; +extern const int aac_costbl_1[16]; +extern const int aac_costbl_2[32]; +extern const int aac_sintbl_2[32]; +extern const int aac_costbl_3[32]; +extern const int aac_sintbl_3[32]; +extern const int aac_costbl_4[33]; +extern const int aac_sintbl_4[33]; + +typedef struct aac_float_t { + int mant; + int expo; +} aac_float_t; + +static const aac_float_t FLOAT_0 = { 0, 0}; +static const aac_float_t FLOAT_05 = { 536870912, 0}; +static const aac_float_t FLOAT_1 = { 536870912, 1}; +static const aac_float_t FLOAT_EPSILON = { 703687442, -16}; +static const aac_float_t FLOAT_1584893192 = { 850883053, 1}; +static const aac_float_t FLOAT_100000 = { 819200000, 17}; +static const aac_float_t FLOAT_0999999 = {1073740750, 0}; + +static av_always_inline aac_float_t int2float(int x, int exp) +{ + aac_float_t ret; + + if (x == 0) + { + ret.mant = 0; + ret.expo = 0; + } + else + { + int nz = 29 - ff_log2(FFABS(x)); + ret.mant = x << nz; + ret.expo = exp - nz; + } + + return ret; +} + +/* Rounding to zero used for simplicity */ +static av_always_inline aac_float_t float_add(aac_float_t a, aac_float_t b) +{ + int diff; + + if (a.mant == 0) + return b; + + if (b.mant == 0) + return a; + + diff = a.expo - b.expo; + + if (diff < 0) // a.expo < b.expo + { + diff = -diff; + if (diff >= 31) + a.mant = 0; + else + a.mant >>= diff; + a.expo = b.expo; + } + else // a.expo >= b.expo + { + if (diff >= 31) + b.mant = 0; + else + b.mant >>= diff; + } + + a.mant = a.mant + b.mant; + + if (a.mant == 0) + a.expo = 0; + else + { + int nz = 30 - ff_log2(FFABS(a.mant)); + a.mant <<= nz; + a.mant >>= 1; + a.expo -= (nz - 1); + } + + return a; +} + +static av_always_inline aac_float_t float_sub(aac_float_t a, aac_float_t b) +{ + + b.mant = -b.mant; + + return float_add(a, b); +} + +static av_always_inline aac_float_t float_mul(aac_float_t a, aac_float_t b) +{ + a.expo = a.expo + b.expo; + a.mant = (int)(((int64_t)a.mant * b.mant + 0x20000000) >> 30); + if (a.mant == 0) + a.expo = 0; + else if (a.mant > -0x20000000 && a.mant < 0x20000000) + { + a.mant <<= 1; + a.expo--; + } + + return a; +} + +static av_always_inline aac_float_t float_recip(aac_float_t a) +{ + int s = a.mant >> 31; + + a.expo = 1 - a.expo; + a.mant = (a.mant ^ s) - s; + a.mant = divTable[(a.mant - 0x20000000) >> 22]; + a.mant = (a.mant ^ s) - s; + + return a; +} + +static av_always_inline aac_float_t float_div(aac_float_t a, aac_float_t b) +{ + aac_float_t res; + aac_float_t iB, tmp; + + if (b.mant != 0) + { + iB = float_recip(b); + /* Newton iteration to double precision */ + tmp = float_sub(FLOAT_1, float_mul(b, iB)); + iB = float_add(iB, float_mul(iB, tmp)); + res = float_mul(a, iB); + } + else + { + /* handle division-by-zero */ + res.mant = 1; + res.expo = 0x7FFFFFFF; + } + + return res; +} + +static av_always_inline int float_gt(aac_float_t a, aac_float_t b) +{ + if (a.mant == 0) + return 0; + + if (b.mant == 0) + return 1; + + if (a.expo > b.expo) + return 1; + if (a.expo < b.expo) + return 0; + + return a.mant > b.mant; +} + +static av_always_inline aac_float_t float_sqrt(aac_float_t val) +{ + int tabIndex, rem; + + if (val.mant == 0) + val.expo = 0; + else + { + tabIndex = (val.mant - 0x20000000) >> 20; + + rem = val.mant & 0xfffff; + val.mant = (int)(((int64_t)sqrtTab[tabIndex] * (0x100000 - rem) + \ + (int64_t)sqrtTab[tabIndex + 1] * rem + \ + 0x80000) >> 20); + val.mant = (int)(((int64_t)sqrExpMultTab[val.expo & 1] * val.mant + \ + 0x10000000) >> 29); + + if (val.mant < 0x40000000) + val.expo -= 2; + else + val.mant >>= 1; + + val.expo = (val.expo >> 1) + 1; + } + + return val; +} + +static av_always_inline void aac_fixed_sincos(int a, int *s, int *c) +{ + int idx, sign; + int sv, cv; + int st, ct; + + idx = a >> 26; + sign = (idx << 27) >> 31; + cv = aac_costbl_1[idx & 0xf]; + cv = (cv ^ sign) - sign; + + idx -= 8; + sign = (idx << 27) >> 31; + sv = aac_costbl_1[idx & 0xf]; + sv = (sv ^ sign) - sign; + + idx = a >> 21; + ct = aac_costbl_2[idx & 0x1f]; + st = aac_sintbl_2[idx & 0x1f]; + + idx = (int)(((int64_t)cv * ct - (int64_t)sv * st + 0x20000000) >> 30); + + sv = (int)(((int64_t)cv * st + (int64_t)sv * ct + 0x20000000) >> 30); + + cv = idx; + + idx = a >> 16; + ct = aac_costbl_3[idx & 0x1f]; + st = aac_sintbl_3[idx & 0x1f]; + + idx = (int)(((int64_t)cv * ct - (int64_t)sv * st + 0x20000000) >> 30); + + sv = (int)(((int64_t)cv * st + (int64_t)sv * ct + 0x20000000) >> 30); + cv = idx; + + idx = a >> 11; + + ct = (int)(((int64_t)aac_costbl_4[idx & 0x1f] * (0x800 - (a & 0x7ff)) + \ + (int64_t)aac_costbl_4[(idx & 0x1f)+1]*(a & 0x7ff) + \ + 0x400) >> 11); + st = (int)(((int64_t)aac_sintbl_4[idx & 0x1f] * (0x800 - (a & 0x7ff)) + \ + (int64_t)aac_sintbl_4[(idx & 0x1f) + 1] * (a & 0x7ff) + \ + 0x400) >> 11); + + *c = (int)(((int64_t)cv * ct + (int64_t)sv * st + 0x20000000) >> 30); + + *s = (int)(((int64_t)cv * st + (int64_t)sv * ct + 0x20000000) >> 30); +} + +#endif /* AVCODEC_FLOAT_EMU_H */ diff --git a/libavcodec/float_emu_tab.c b/libavcodec/float_emu_tab.c new file mode 100644 index 0000000..396a7a3 --- /dev/null +++ b/libavcodec/float_emu_tab.c @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2012 + * MIPS Technologies, Inc., California. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of is + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Author: Stanislav Ocovaj (stanislav.ocovaj imgtec com) + * + * This file is part of FFmpeg. + * + * FFmpeg 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. + * + * FFmpeg 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 FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +const int divTable[128] = { + 0x3fffffff,0x3f80fe04,0x3f03f03f,0x3e88cb3d, + 0x3e0f83e1,0x3d980f66,0x3d226358,0x3cae7592, + 0x3c3c3c3c,0x3bcbadc8,0x3b5cc0ed,0x3aef6ca9, + 0x3a83a83b,0x3a196b1f,0x39b0ad12,0x3949660b, + 0x38e38e39,0x387f1e04,0x381c0e07,0x37ba5713, + 0x3759f22a,0x36fad87c,0x369d036a,0x36406c81, + 0x35e50d7a,0x358ae035,0x3531dec1,0x34da034e, + 0x34834834,0x342da7f3,0x33d91d2a,0x3385a29e, + 0x33333333,0x32e1c9f0,0x329161f9,0x3241f694, + 0x31f3831f,0x31a6031b,0x3159721f,0x310dcbe1, + 0x30c30c31,0x30792ef5,0x30303030,0x2fe80bfa, + 0x2fa0be83,0x2f5a4412,0x2f149903,0x2ecfb9c8, + 0x2e8ba2e9,0x2e4850ff,0x2e05c0b8,0x2dc3eed7, + 0x2d82d82d,0x2d4279a2,0x2d02d02d,0x2cc3d8d5, + 0x2c8590b2,0x2c47f4ee,0x2c0b02c0,0x2bceb772, + 0x2b931057,0x2b580ad6,0x2b1da461,0x2ae3da78, + 0x2aaaaaaa,0x2a721292,0x2a3a0fd6,0x2a02a02a, + 0x29cbc14e,0x2995710f,0x295fad40,0x292a73c8, + 0x28f5c28f,0x28c19790,0x288df0cb,0x285acc4c, + 0x28282828,0x27f6027f,0x27c4597a,0x27932b49, + 0x27627628,0x27323858,0x27027027,0x26d31be8, + 0x26a439f7,0x2675c8b7,0x2647c695,0x261a3202, + 0x25ed097b,0x25c04b81,0x2593f69b,0x2568095a, + 0x253c8254,0x25116025,0x24e6a171,0x24bc44e1, + 0x24924925,0x2468acf1,0x243f6f02,0x24168e19, + 0x23ee08fc,0x23c5de77,0x239e0d5b,0x23769481, + 0x234f72c2,0x2328a701,0x23023023,0x22dc0d12, + 0x22b63cbf,0x2290be1c,0x226b9022,0x2246b1ce, + 0x22222222,0x21fde022,0x21d9ead8,0x21b64151, + 0x2192e2a0,0x216fcdd9,0x214d0215,0x212a7e72, + 0x21084210,0x20e64c14,0x20c49ba6,0x20a32ff0, + 0x20820820,0x2061236a,0x20408102,0x20202020, +}; + +const int sqrtTab[512+1] = { /* sqrt(x), 0.5<=x<1 */ + 0x2d413ccd,0x2d4c8bb3,0x2d57d7c6,0x2d63210a, + 0x2d6e677f,0x2d79ab2a,0x2d84ec0b,0x2d902a23, + 0x2d9b6578,0x2da69e08,0x2db1d3d6,0x2dbd06e6, + 0x2dc83738,0x2dd364ce,0x2dde8fac,0x2de9b7d2, + 0x2df4dd43,0x2e000000,0x2e0b200c,0x2e163d68, + 0x2e215816,0x2e2c701a,0x2e378573,0x2e429824, + 0x2e4da830,0x2e58b598,0x2e63c05d,0x2e6ec883, + 0x2e79ce0a,0x2e84d0f5,0x2e8fd144,0x2e9acefb, + 0x2ea5ca1b,0x2eb0c2a7,0x2ebbb89e,0x2ec6ac04, + 0x2ed19cda,0x2edc8b23,0x2ee776df,0x2ef26012, + 0x2efd46bb,0x2f082add,0x2f130c7b,0x2f1deb95, + 0x2f28c82e,0x2f33a246,0x2f3e79e1,0x2f494eff, + 0x2f5421a3,0x2f5ef1ce,0x2f69bf81,0x2f748abe, + 0x2f7f5388,0x2f8a19e0,0x2f94ddc7,0x2f9f9f3e, + 0x2faa5e48,0x2fb51ae8,0x2fbfd51c,0x2fca8ce9, + 0x2fd5424e,0x2fdff54e,0x2feaa5eb,0x2ff55426, + 0x30000000,0x300aa97b,0x3015509a,0x301ff55c, + 0x302a97c5,0x303537d5,0x303fd58e,0x304a70f2, + 0x30550a01,0x305fa0be,0x306a352a,0x3074c747, + 0x307f5716,0x3089e499,0x30946fd2,0x309ef8c0, + 0x30a97f67,0x30b403c7,0x30be85e2,0x30c905bb, + 0x30d38351,0x30ddfea6,0x30e877bc,0x30f2ee96, + 0x30fd6332,0x3107d594,0x311245bc,0x311cb3ad, + 0x31271f67,0x313188ec,0x313bf03d,0x3146555c, + 0x3150b84a,0x315b1909,0x31657798,0x316fd3fc, + 0x317a2e34,0x31848642,0x318edc28,0x31992fe5, + 0x31a3817d,0x31add0f0,0x31b81e40,0x31c2696e, + 0x31ccb27b,0x31d6f969,0x31e13e38,0x31eb80eb, + 0x31f5c182,0x32000000,0x320a3c65,0x321476b1, + 0x321eaee8,0x3228e50a,0x32331917,0x323d4b13, + 0x32477afc,0x3251a8d6,0x325bd4a2,0x3265fe5f, + 0x32702611,0x327a4bb8,0x32846f55,0x328e90e9, + 0x3298b076,0x32a2cdfd,0x32ace97e,0x32b702fd, + 0x32c11a79,0x32cb2ff3,0x32d5436d,0x32df54e9, + 0x32e96466,0x32f371e8,0x32fd7d6d,0x330786f9, + 0x33118e8c,0x331b9426,0x332597cb,0x332f9979, + 0x33399933,0x334396fa,0x334d92cf,0x33578cb2, + 0x336184a6,0x336b7aab,0x33756ec3,0x337f60ed, + 0x3389512d,0x33933f83,0x339d2bef,0x33a71672, + 0x33b0ff10,0x33bae5c7,0x33c4ca99,0x33cead88, + 0x33d88e95,0x33e26dbf,0x33ec4b09,0x33f62673, + 0x34000000,0x3409d7af,0x3413ad82,0x341d817a, + 0x34275397,0x343123db,0x343af248,0x3444bedd, + 0x344e899d,0x34585288,0x3462199f,0x346bdee3, + 0x3475a254,0x347f63f5,0x348923c6,0x3492e1c9, + 0x349c9dfe,0x34a65865,0x34b01101,0x34b9c7d2, + 0x34c37cda,0x34cd3018,0x34d6e18f,0x34e0913f, + 0x34ea3f29,0x34f3eb4d,0x34fd95ae,0x35073e4c, + 0x3510e528,0x351a8a43,0x35242d9d,0x352dcf39, + 0x35376f16,0x35410d36,0x354aa99a,0x35544442, + 0x355ddd2f,0x35677463,0x357109df,0x357a9da2, + 0x35842fb0,0x358dc007,0x35974ea9,0x35a0db98, + 0x35aa66d3,0x35b3f05c,0x35bd7833,0x35c6fe5a, + 0x35d082d3,0x35da059c,0x35e386b7,0x35ed0626, + 0x35f683e8,0x36000000,0x36097a6e,0x3612f331, + 0x361c6a4d,0x3625dfc1,0x362f538f,0x3638c5b7, + 0x36423639,0x364ba518,0x36551252,0x365e7deb, + 0x3667e7e2,0x36715039,0x367ab6f0,0x36841c07, + 0x368d7f81,0x3696e15d,0x36a0419d,0x36a9a040, + 0x36b2fd49,0x36bc58b8,0x36c5b28e,0x36cf0acb, + 0x36d86170,0x36e1b680,0x36eb09f8,0x36f45bdc, + 0x36fdac2b,0x3706fae7,0x37104810,0x371993a7, + 0x3722ddad,0x372c2622,0x37356d08,0x373eb25f, + 0x3747f629,0x37513865,0x375a7914,0x3763b838, + 0x376cf5d0,0x377631e0,0x377f6c64,0x3788a561, + 0x3791dcd6,0x379b12c4,0x37a4472c,0x37ad7a0e, + 0x37b6ab6a,0x37bfdb44,0x37c90999,0x37d2366d, + 0x37db61be,0x37e48b8e,0x37edb3de,0x37f6daae, + 0x38000000,0x380923d3,0x3812462a,0x381b6703, + 0x38248660,0x382da442,0x3836c0aa,0x383fdb97, + 0x3848f50c,0x38520d09,0x385b238d,0x3864389b, + 0x386d4c33,0x38765e55,0x387f6f01,0x38887e3b, + 0x38918c00,0x389a9853,0x38a3a334,0x38acaca3, + 0x38b5b4a3,0x38bebb32,0x38c7c051,0x38d0c402, + 0x38d9c645,0x38e2c71b,0x38ebc685,0x38f4c482, + 0x38fdc114,0x3906bc3c,0x390fb5fa,0x3918ae4f, + 0x3921a53a,0x392a9abe,0x39338edb,0x393c8192, + 0x394572e2,0x394e62ce,0x39575155,0x39603e77, + 0x39692a36,0x39721494,0x397afd8f,0x3983e527, + 0x398ccb60,0x3995b039,0x399e93b2,0x39a775cc, + 0x39b05689,0x39b935e8,0x39c213e9,0x39caf08e, + 0x39d3cbd9,0x39dca5c7,0x39e57e5b,0x39ee5596, + 0x39f72b77,0x3a000000,0x3a08d331,0x3a11a50a, + 0x3a1a758d,0x3a2344ba,0x3a2c1291,0x3a34df13, + 0x3a3daa41,0x3a46741b,0x3a4f3ca3,0x3a5803d7, + 0x3a60c9ba,0x3a698e4b,0x3a72518b,0x3a7b137c, + 0x3a83d41d,0x3a8c936f,0x3a955173,0x3a9e0e29, + 0x3aa6c992,0x3aaf83ae,0x3ab83c7e,0x3ac0f403, + 0x3ac9aa3c,0x3ad25f2c,0x3adb12d1,0x3ae3c52d, + 0x3aec7642,0x3af5260e,0x3afdd492,0x3b0681d0, + 0x3b0f2dc6,0x3b17d878,0x3b2081e4,0x3b292a0c, + 0x3b31d0f0,0x3b3a7690,0x3b431aec,0x3b4bbe06, + 0x3b545fdf,0x3b5d0077,0x3b659fcd,0x3b6e3de4, + 0x3b76daba,0x3b7f7651,0x3b8810aa,0x3b90a9c4, + 0x3b9941a1,0x3ba1d842,0x3baa6da5,0x3bb301cd, + 0x3bbb94b9,0x3bc4266a,0x3bccb6e2,0x3bd5461f, + 0x3bddd423,0x3be660ee,0x3beeec81,0x3bf776dc, + 0x3c000000,0x3c0887ed,0x3c110ea4,0x3c199426, + 0x3c221872,0x3c2a9b8a,0x3c331d6e,0x3c3b9e1d, + 0x3c441d9a,0x3c4c9be5,0x3c5518fd,0x3c5d94e3, + 0x3c660f98,0x3c6e891d,0x3c770172,0x3c7f7898, + 0x3c87ee8e,0x3c906356,0x3c98d6ef,0x3ca1495b, + 0x3ca9ba9a,0x3cb22aac,0x3cba9992,0x3cc3074c, + 0x3ccb73dc,0x3cd3df41,0x3cdc497b,0x3ce4b28c, + 0x3ced1a73,0x3cf58132,0x3cfde6c8,0x3d064b37, + 0x3d0eae7f,0x3d17109f,0x3d1f719a,0x3d27d16e, + 0x3d30301d,0x3d388da8,0x3d40ea0d,0x3d49454f, + 0x3d519f6d,0x3d59f867,0x3d625040,0x3d6aa6f6, + 0x3d72fc8b,0x3d7b50fe,0x3d83a451,0x3d8bf683, + 0x3d944796,0x3d9c9788,0x3da4e65c,0x3dad3412, + 0x3db580a9,0x3dbdcc24,0x3dc61680,0x3dce5fc0, + 0x3dd6a7e4,0x3ddeeeed,0x3de734d9,0x3def79ab, + 0x3df7bd62,0x3e000000,0x3e084184,0x3e1081ee, + 0x3e18c140,0x3e20ff7a,0x3e293c9c,0x3e3178a7, + 0x3e39b39a,0x3e41ed77,0x3e4a263d,0x3e525def, + 0x3e5a948b,0x3e62ca12,0x3e6afe85,0x3e7331e4, + 0x3e7b642f,0x3e839567,0x3e8bc58c,0x3e93f49f, + 0x3e9c22a1,0x3ea44f91,0x3eac7b6f,0x3eb4a63e, + 0x3ebccffb,0x3ec4f8aa,0x3ecd2049,0x3ed546d9, + 0x3edd6c5a,0x3ee590cd,0x3eedb433,0x3ef5d68c, + 0x3efdf7d7,0x3f061816,0x3f0e3749,0x3f165570, + 0x3f1e728c,0x3f268e9d,0x3f2ea9a4,0x3f36c3a0, + 0x3f3edc93,0x3f46f47c,0x3f4f0b5d,0x3f572135, + 0x3f5f3606,0x3f6749cf,0x3f6f5c90,0x3f776e4a, + 0x3f7f7efe,0x3f878eab,0x3f8f9d53,0x3f97aaf6, + 0x3f9fb793,0x3fa7c32c,0x3fafcdc1,0x3fb7d752, + 0x3fbfdfe0,0x3fc7e76b,0x3fcfedf3,0x3fd7f378, + 0x3fdff7fc,0x3fe7fb7f,0x3feffe00,0x3ff7ff80, + 0x3fffffff, +}; + +const int sqrExpMultTab[2] = { + 0x20000000,0x2d413ccd, +}; + +const int aac_costbl_1[16] = { + 0x40000000,0x3ec52fa0,0x3b20d79e,0x3536cc52, + 0x2d413ccd,0x238e7673,0x187de2a7,0x0c7c5c1e, + 0x00000000,0xf383a3e3,0xe7821d5a,0xdc71898e, + 0xd2bec334,0xcac933af,0xc4df2863,0xc13ad061, +}; + +const int aac_costbl_2[32] = { + 0x40000000,0x3fffb10b,0x3ffec42d,0x3ffd3969, + 0x3ffb10c1,0x3ff84a3c,0x3ff4e5e0,0x3ff0e3b6, + 0x3fec43c7,0x3fe7061f,0x3fe12acb,0x3fdab1d9, + 0x3fd39b5a,0x3fcbe75e,0x3fc395f9,0x3fbaa740, + 0x3fb11b48,0x3fa6f228,0x3f9c2bfb,0x3f90c8da, + 0x3f84c8e2,0x3f782c30,0x3f6af2e3,0x3f5d1d1d, + 0x3f4eaafe,0x3f3f9cab,0x3f2ff24a,0x3f1fabff, + 0x3f0ec9f5,0x3efd4c54,0x3eeb3347,0x3ed87efc, +}; + +const int aac_sintbl_2[32] = { + 0x00000000,0x006487c4,0x00c90e90,0x012d936c, + 0x0192155f,0x01f69373,0x025b0caf,0x02bf801a, + 0x0323ecbe,0x038851a2,0x03ecadcf,0x0451004d, + 0x04b54825,0x0519845e,0x057db403,0x05e1d61b, + 0x0645e9af,0x06a9edc9,0x070de172,0x0771c3b3, + 0x07d59396,0x08395024,0x089cf867,0x09008b6a, + 0x09640837,0x09c76dd8,0x0a2abb59,0x0a8defc3, + 0x0af10a22,0x0b540982,0x0bb6ecef,0x0c19b374, +}; + +const int aac_costbl_3[32] = { + 0x40000000,0x3fffffec,0x3fffffb1,0x3fffff4e, + 0x3ffffec4,0x3ffffe13,0x3ffffd39,0x3ffffc39, + 0x3ffffb11,0x3ffff9c1,0x3ffff84a,0x3ffff6ac, + 0x3ffff4e6,0x3ffff2f8,0x3ffff0e3,0x3fffeea7, + 0x3fffec43,0x3fffe9b7,0x3fffe705,0x3fffe42a, + 0x3fffe128,0x3fffddff,0x3fffdaae,0x3fffd736, + 0x3fffd396,0x3fffcfcf,0x3fffcbe0,0x3fffc7ca, + 0x3fffc38c,0x3fffbf27,0x3fffba9b,0x3fffb5e7, +}; + +const int aac_sintbl_3[32] = { + 0x00000000,0x0003243f,0x0006487f,0x00096cbe, + 0x000c90fe,0x000fb53d,0x0012d97c,0x0015fdbb, + 0x001921fb,0x001c463a,0x001f6a79,0x00228eb8, + 0x0025b2f7,0x0028d736,0x002bfb74,0x002f1fb3, + 0x003243f1,0x00356830,0x00388c6e,0x003bb0ac, + 0x003ed4ea,0x0041f928,0x00451d66,0x004841a3, + 0x004b65e1,0x004e8a1e,0x0051ae5b,0x0054d297, + 0x0057f6d4,0x005b1b10,0x005e3f4c,0x00616388, +}; + +const int aac_costbl_4[33] = { + 0x40000000,0x40000000,0x40000000,0x40000000, + 0x40000000,0x40000000,0x3fffffff,0x3fffffff, + 0x3fffffff,0x3ffffffe,0x3ffffffe,0x3ffffffe, + 0x3ffffffd,0x3ffffffd,0x3ffffffc,0x3ffffffc, + 0x3ffffffb,0x3ffffffa,0x3ffffffa,0x3ffffff9, + 0x3ffffff8,0x3ffffff7,0x3ffffff7,0x3ffffff6, + 0x3ffffff5,0x3ffffff4,0x3ffffff3,0x3ffffff2, + 0x3ffffff1,0x3ffffff0,0x3fffffef,0x3fffffed, + 0x3fffffec, +}; + +const int aac_sintbl_4[33] = { + 0x00000000,0x00001922,0x00003244,0x00004b66, + 0x00006488,0x00007daa,0x000096cc,0x0000afee, + 0x0000c910,0x0000e232,0x0000fb54,0x00011476, + 0x00012d98,0x000146ba,0x00015fdc,0x000178fe, + 0x00019220,0x0001ab42,0x0001c464,0x0001dd86, + 0x0001f6a8,0x00020fca,0x000228ec,0x0002420e, + 0x00025b30,0x00027452,0x00028d74,0x0002a696, + 0x0002bfb7,0x0002d8d9,0x0002f1fb,0x00030b1d, + 0x0003243f, +}; + -- 1.8.2.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel