Browse code

libavcodec: Implementation of AAC_fixed_decoder (LC-module) [2/4]

Add fixed point implementation of functions for generating tables

Signed-off-by: Nedeljko Babic <nedeljko.babic@imgtec.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Jovan Zelincevic authored on 2015/06/30 18:53:04
Showing 16 changed files
... ...
@@ -30,6 +30,29 @@
30 30
 #ifndef AVCODEC_AAC_H
31 31
 #define AVCODEC_AAC_H
32 32
 
33
+#ifndef USE_FIXED
34
+#define USE_FIXED 0
35
+#endif
36
+
37
+#if USE_FIXED
38
+
39
+#include "libavutil/softfloat.h"
40
+
41
+#define FFT_FLOAT    0
42
+#define FFT_FIXED_32 1
43
+
44
+#define Q30(x)              (int)((x)*1073741824.0 + 0.5)
45
+#define Q31(x)              (int)((x)*2147483648.0 + 0.5)
46
+
47
+#else
48
+
49
+#define FFT_FLOAT    1
50
+#define FFT_FIXED_32 0
51
+
52
+#define Q30(x)              x
53
+#define Q31(x)              x
54
+#endif /* USE_FIXED */
55
+
33 56
 #include "libavutil/float_dsp.h"
34 57
 #include "avcodec.h"
35 58
 #include "imdct15.h"
... ...
@@ -38,9 +38,9 @@
38 38
 /* @name ltp_coef
39 39
  * Table of the LTP coefficients
40 40
  */
41
-static const float ltp_coef[8] = {
42
-    0.570829, 0.696616, 0.813004, 0.911304,
43
-    0.984900, 1.067894, 1.194601, 1.369533,
41
+static const INTFLOAT ltp_coef[8] = {
42
+    Q30(0.570829f), Q30(0.696616f), Q30(0.813004f), Q30(0.911304f),
43
+    Q30(0.984900f), Q30(1.067894f), Q30(1.194601f), Q30(1.369533f),
44 44
 };
45 45
 
46 46
 /* @name tns_tmp2_map
... ...
@@ -49,28 +49,28 @@ static const float ltp_coef[8] = {
49 49
  * respectively.
50 50
  * @{
51 51
  */
52
-static const float tns_tmp2_map_1_3[4] = {
53
-     0.00000000, -0.43388373,  0.64278758,  0.34202015,
52
+static const INTFLOAT tns_tmp2_map_1_3[4] = {
53
+     Q31(0.00000000f), Q31(-0.43388373f),  Q31(0.64278758f),  Q31(0.34202015f),
54 54
 };
55 55
 
56
-static const float tns_tmp2_map_0_3[8] = {
57
-     0.00000000, -0.43388373, -0.78183150, -0.97492790,
58
-     0.98480773,  0.86602539,  0.64278758,  0.34202015,
56
+static const INTFLOAT tns_tmp2_map_0_3[8] = {
57
+     Q31(0.00000000f), Q31(-0.43388373f), Q31(-0.78183150f), Q31(-0.97492790f),
58
+     Q31(0.98480773f), Q31( 0.86602539f), Q31( 0.64278758f), Q31( 0.34202015f),
59 59
 };
60 60
 
61
-static const float tns_tmp2_map_1_4[8] = {
62
-     0.00000000, -0.20791170, -0.40673664, -0.58778524,
63
-     0.67369562,  0.52643216,  0.36124167,  0.18374951,
61
+static const INTFLOAT tns_tmp2_map_1_4[8] = {
62
+     Q31(0.00000000f), Q31(-0.20791170f), Q31(-0.40673664f), Q31(-0.58778524f),
63
+     Q31(0.67369562f), Q31( 0.52643216f), Q31( 0.36124167f), Q31( 0.18374951f),
64 64
 };
65 65
 
66
-static const float tns_tmp2_map_0_4[16] = {
67
-     0.00000000, -0.20791170, -0.40673664, -0.58778524,
68
-    -0.74314481, -0.86602539, -0.95105654, -0.99452192,
69
-     0.99573416,  0.96182561,  0.89516330,  0.79801720,
70
-     0.67369562,  0.52643216,  0.36124167,  0.18374951,
66
+static const INTFLOAT tns_tmp2_map_0_4[16] = {
67
+    Q31( 0.00000000f), Q31(-0.20791170f), Q31(-0.40673664f), Q31(-0.58778524f),
68
+    Q31(-0.74314481f), Q31(-0.86602539f), Q31(-0.95105654f), Q31(-0.99452192f),
69
+    Q31( 0.99573416f), Q31( 0.96182561f), Q31( 0.89516330f), Q31( 0.79801720f),
70
+    Q31( 0.67369562f), Q31( 0.52643216f), Q31( 0.36124167f), Q31( 0.18374951f),
71 71
 };
72 72
 
73
-static const float * const tns_tmp2_map[4] = {
73
+static const INTFLOAT * const tns_tmp2_map[4] = {
74 74
     tns_tmp2_map_0_3,
75 75
     tns_tmp2_map_0_4,
76 76
     tns_tmp2_map_1_3,
... ...
@@ -35,6 +35,8 @@
35 35
 
36 36
 DECLARE_ALIGNED(32, float,  ff_aac_kbd_long_1024)[1024];
37 37
 DECLARE_ALIGNED(32, float,  ff_aac_kbd_short_128)[128];
38
+DECLARE_ALIGNED(32, int,    ff_aac_kbd_long_1024_fixed)[1024];
39
+DECLARE_ALIGNED(32, int,    ff_aac_kbd_short_128_fixed)[128];
38 40
 
39 41
 const uint8_t ff_aac_num_swb_1024[] = {
40 42
     41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40, 40
... ...
@@ -1767,6 +1769,490 @@ const DECLARE_ALIGNED(32, float, ff_aac_eld_window_512)[1920] = {
1767 1767
     -0.00111144, -0.00109764, -0.00108377, -0.00106989,
1768 1768
 };
1769 1769
 
1770
+/* Q30 representation of ff_aac_eld_window_512 table */
1771
+const DECLARE_ALIGNED(32, int, ff_aac_eld_window_512_fixed)[1920] = {
1772
+    0x003783ba, 0x005d04f4, 0x008ae226, 0x00c02021,
1773
+    0x00fb1804, 0x013a30a8, 0x017be9e6, 0x01bf296c,
1774
+    0x02033204, 0x0247502c, 0x028adab0, 0x02cd9568,
1775
+    0x030fa980, 0x03513dc0, 0x03927274, 0x03d363e0,
1776
+    0x04142e40, 0x0454edc0, 0x0495bd48, 0x04d6a060,
1777
+    0x051786d8, 0x05586548, 0x059935e8, 0x05d9feb0,
1778
+    0x061acea0, 0x065bb680, 0x069cc800, 0x06de13f0,
1779
+    0x071fa748, 0x07618b80, 0x07a3c7a8, 0x07e66da0,
1780
+    0x082999d0, 0x086d6590, 0x08b1e640, 0x08f72850,
1781
+    0x093d3120, 0x09840550, 0x09cba880, 0x0a1415f0,
1782
+    0x0a5d41b0, 0x0aa720d0, 0x0af1a9a0, 0x0b3cce70,
1783
+    0x0b887ec0, 0x0bd4ac10, 0x0c214a70, 0x0c6e5130,
1784
+    0x0cbbba50, 0x0d098130, 0x0d57a240, 0x0da61a60,
1785
+    0x0df4e620, 0x0e4401d0, 0x0e9369f0, 0x0ee31de0,
1786
+    0x0f332000, 0x0f837180, 0x0fd412a0, 0x10250260,
1787
+    0x10763f20, 0x10c7c660, 0x11199560, 0x116baa00,
1788
+    0x11be0400, 0x1210a1c0, 0x12638180, 0x12b69ee0,
1789
+    0x1309f3e0, 0x135d7ac0, 0x13b12dc0, 0x1404ffa0,
1790
+    0x1458dd40, 0x14acb720, 0x15008120, 0x15543260,
1791
+    0x15a7c460, 0x15fb3160, 0x164e7520, 0x16a193c0,
1792
+    0x16f49740, 0x17478720, 0x179a6720, 0x17ed3720,
1793
+    0x183ff460, 0x18929c20, 0x18e52b00, 0x19379c00,
1794
+    0x1989e900, 0x19dc0ca0, 0x1a2e0280, 0x1a7fc400,
1795
+    0x1ad14a00, 0x1b228ec0, 0x1b738ea0, 0x1bc44540,
1796
+    0x1c14ada0, 0x1c64c380, 0x1cb48440, 0x1d03f420,
1797
+    0x1d531c00, 0x1da20160, 0x1df0a660, 0x1e3f0860,
1798
+    0x1e8d2340, 0x1edaf340, 0x1f2875e0, 0x1f75a700,
1799
+    0x1fc281e0, 0x200f0380, 0x205b2ac0, 0x20a6f980,
1800
+    0x20f27200, 0x213d9600, 0x21886580, 0x21d2e040,
1801
+    0x221d0640, 0x2266d6c0, 0x22b05180, 0x22f97580,
1802
+    0x23424280, 0x238ab880, 0x23d2d780, 0x241aa040,
1803
+    0x246213c0, 0x24a93300, 0x24efff80, 0x25367b40,
1804
+    0x256f68c0, 0x25b53580, 0x25faa580, 0x263fb940,
1805
+    0x26847080, 0x26c8cbc0, 0x270ccb00, 0x27506e40,
1806
+    0x2793b600, 0x27d6a200, 0x281932c0, 0x285b6880,
1807
+    0x289d4400, 0x28dec5c0, 0x291feec0, 0x2960bf80,
1808
+    0x29a137c0, 0x29e15800, 0x2a212000, 0x2a609080,
1809
+    0x2a9fa980, 0x2ade6b40, 0x2b1cd600, 0x2b5aea00,
1810
+    0x2b98a740, 0x2bd60d80, 0x2c131cc0, 0x2c4fd500,
1811
+    0x2c8c3600, 0x2cc83f00, 0x2d03f040, 0x2d3f48c0,
1812
+    0x2d7a48c0, 0x2db4ef40, 0x2def3c40, 0x2e292ec0,
1813
+    0x2e62c700, 0x2e9c0400, 0x2ed4e580, 0x2f0d6ac0,
1814
+    0x2f4592c0, 0x2f7d5c80, 0x2fb4c6c0, 0x2febd140,
1815
+    0x30227b40, 0x3058c400, 0x308eab40, 0x30c43040,
1816
+    0x30f95100, 0x312e0d00, 0x31626240, 0x31965040,
1817
+    0x31c9d5c0, 0x31fcf240, 0x322fa480, 0x3261ec00,
1818
+    0x3293c7c0, 0x32c53680, 0x32f63780, 0x3326c9c0,
1819
+    0x3356ec00, 0x33869d00, 0x33b5db80, 0x33e4a700,
1820
+    0x3412fdc0, 0x3440df40, 0x346e4a80, 0x349b3e40,
1821
+    0x34c7ba00, 0x34f3bd80, 0x351f47c0, 0x354a5840,
1822
+    0x3574ee40, 0x359f0900, 0x35c8a840, 0x35f1cb80,
1823
+    0x361a71c0, 0x36429a80, 0x366a4580, 0x36917280,
1824
+    0x36b82100, 0x36de5180, 0x37040340, 0x372936c0,
1825
+    0x374dec40, 0x37722340, 0x3795dc40, 0x37b91780,
1826
+    0x37dbd600, 0x37fe18c0, 0x381fe080, 0x38412e00,
1827
+    0x38620280, 0x38825f40, 0x38a24540, 0x38c1b680,
1828
+    0x38e0b5c0, 0x38ff4540, 0x391d6800, 0x393b20c0,
1829
+    0x39587280, 0x39755fc0, 0x3991eb80, 0x39ae1a80,
1830
+    0x39c9f280, 0x39e57980, 0x3a00b600, 0x3a1bae00,
1831
+    0x3a366800, 0x3a50e9c0, 0x3a6b3a40, 0x3a8560c0,
1832
+    0x3a9f6640, 0x3ab95400, 0x3ad332c0, 0x3aed0680,
1833
+    0x3b06cf80, 0x3b208d40, 0x3b3a3e80, 0x3b53cb80,
1834
+    0x3b6d0780, 0x3b85c380, 0x3b9dd0c0, 0x3bb4eb40,
1835
+    0x3bcabac0, 0x3bdee680, 0x3bf11680, 0x3c011440,
1836
+    0x3c179ac0, 0x3c1c4f00, 0x3c21aa40, 0x3c278880,
1837
+    0x3c2dba80, 0x3c341140, 0x3c3a5e80, 0x3c409100,
1838
+    0x3c46b480, 0x3c4cd5c0, 0x3c530180, 0x3c593cc0,
1839
+    0x3c5f84c0, 0x3c65d640, 0x3c6c2e40, 0x3c728b40,
1840
+    0x3c78ee80, 0x3c7f5840, 0x3c85c940, 0x3c8c4240,
1841
+    0x3c92c380, 0x3c994cc0, 0x3c9fde40, 0x3ca67880,
1842
+    0x3cad1ac0, 0x3cb3c540, 0x3cba7800, 0x3cc132c0,
1843
+    0x3cc7f640, 0x3ccec280, 0x3cd59800, 0x3cdc76c0,
1844
+    0x3ce35e80, 0x3cea4f00, 0x3cf147c0, 0x3cf84900,
1845
+    0x3cff5340, 0x3d0666c0, 0x3d0d8400, 0x3d14ab40,
1846
+    0x3d1bdc00, 0x3d2315c0, 0x3d2a5880, 0x3d31a440,
1847
+    0x3d38f900, 0x3d405780, 0x3d47c040, 0x3d4f3300,
1848
+    0x3d56af40, 0x3d5e3500, 0x3d65c380, 0x3d6d5ac0,
1849
+    0x3d74fb40, 0x3d7ca540, 0x3d845900, 0x3d8c1680,
1850
+    0x3d93dd00, 0x3d9bac80, 0x3da38400, 0x3dab6400,
1851
+    0x3db34c80, 0x3dbb3dc0, 0x3dc33840, 0x3dcb3bc0,
1852
+    0x3dd347c0, 0x3ddb5bc0, 0x3de37780, 0x3deb9b00,
1853
+    0x3df3c600, 0x3dfbf940, 0x3e0434c0, 0x3e0c7840,
1854
+    0x3e14c3c0, 0x3e1d1640, 0x3e256f80, 0x3e2dcf40,
1855
+    0x3e363580, 0x3e3ea300, 0x3e4717c0, 0x3e4f9380,
1856
+    0x3e581600, 0x3e609e40, 0x3e692c40, 0x3e71bf80,
1857
+    0x3e7a5840, 0x3e82f740, 0x3e8b9c40, 0x3e944700,
1858
+    0x3e9cf780, 0x3ea5ad00, 0x3eae66c0, 0x3eb72500,
1859
+    0x3ebfe780, 0x3ec8af00, 0x3ed17b80, 0x3eda4d00,
1860
+    0x3ee32340, 0x3eebfd40, 0x3ef4dac0, 0x3efdbbc0,
1861
+    0x3f06a040, 0x3f0f88c0, 0x3f187540, 0x3f216600,
1862
+    0x3f2a5a80, 0x3f335200, 0x3f3c4c40, 0x3f454940,
1863
+    0x3f4e4940, 0x3f574c80, 0x3f605340, 0x3f695dc0,
1864
+    0x3f726b40, 0x3f7b7b40, 0x3f848dc0, 0x3f8da240,
1865
+    0x3f96b940, 0x3f9fd300, 0x3fa8f040, 0x3fb21080,
1866
+    0x3fbb33c0, 0x3fc459c0, 0x3fcd81c0, 0x3fd6abc0,
1867
+    0x3fdfd780, 0x3fe90480, 0x3ff23280, 0x3ffb6100,
1868
+    0x40049f80, 0x400dd080, 0x40170400, 0x40203880,
1869
+    0x40296f00, 0x4032a600, 0x403bde00, 0x40451680,
1870
+    0x404e4f00, 0x40578700, 0x4060be80, 0x4069f500,
1871
+    0x40732b80, 0x407c6280, 0x40859980, 0x408ed100,
1872
+    0x40980800, 0x40a13f00, 0x40aa7500, 0x40b3a980,
1873
+    0x40bcdd80, 0x40c61180, 0x40cf4500, 0x40d87800,
1874
+    0x40e1ab00, 0x40eadc80, 0x40f40c80, 0x40fd3a80,
1875
+    0x41066700, 0x410f9300, 0x4118bd80, 0x4121e700,
1876
+    0x412b0f80, 0x41343580, 0x413d5880, 0x41467980,
1877
+    0x414f9780, 0x4158b380, 0x4161cd80, 0x416ae580,
1878
+    0x4173fb00, 0x417d0d00, 0x41861b80, 0x418f2600,
1879
+    0x41982c80, 0x41a12f80, 0x41aa3000, 0x41b32c80,
1880
+    0x41bc2580, 0x41c51a00, 0x41ce0900, 0x41d6f300,
1881
+    0x41dfd800, 0x41e8b880, 0x41f19400, 0x41fa6b80,
1882
+    0x42033d00, 0x420c0900, 0x4214cf00, 0x421d8e00,
1883
+    0x42264680, 0x422ef980, 0x4237a680, 0x42404d80,
1884
+    0x4248ee00, 0x42518780, 0x425a1a00, 0x4262a480,
1885
+    0x426b2800, 0x4273a400, 0x427c1980, 0x42848880,
1886
+    0x428cef80, 0x42954f00, 0x429da680, 0x42a5f500,
1887
+    0x42ae3b80, 0x42b67a00, 0x42beb100, 0x42c6e080,
1888
+    0x42cf0780, 0x42d72680, 0x42df3c00, 0x42e74880,
1889
+    0x42ef4c80, 0x42f74880, 0x42ff3c80, 0x43072880,
1890
+    0x430f0c80, 0x4316e800, 0x431eba00, 0x43268380,
1891
+    0x432e4480, 0x4335fd00, 0x433dae80, 0x43455800,
1892
+    0x434cfa00, 0x43549400, 0x435c2500, 0x4363ad80,
1893
+    0x436b2e00, 0x4372a700, 0x437a1800, 0x43818200,
1894
+    0x4388e400, 0x43903f00, 0x43979200, 0x439edd00,
1895
+    0x43a62080, 0x43ad5c80, 0x43b49180, 0x43bbbf80,
1896
+    0x43c2e800, 0x43ca0b00, 0x43d12980, 0x43d84280,
1897
+    0x43df5200, 0x43e65500, 0x43ed4800, 0x43f43080,
1898
+    0x43fb1c80, 0x44021b80, 0x44093a00, 0x44106480,
1899
+    0x44176700, 0x441e0c00, 0x44241e00, 0x44297380,
1900
+    0x4425dc00, 0x44240180, 0x441ff300, 0x4419e300,
1901
+    0x44123f80, 0x44097500, 0x43ffe900, 0x43f5e700,
1902
+    0x43eb9f00, 0x43e13f00, 0x43d6f200, 0x43ccbd80,
1903
+    0x43c28400, 0x43b82780, 0x43ad8b00, 0x43a29c80,
1904
+    0x43975180, 0x438ba080, 0x437f8180, 0x4372fd00,
1905
+    0x43662b00, 0x43592480, 0x434c0000, 0x433ecd00,
1906
+    0x43319180, 0x43245300, 0x43171700, 0x4309da80,
1907
+    0x42fc9300, 0x42ef3500, 0x42e1b600, 0x42d40280,
1908
+    0x42c60000, 0x42b79300, 0x42a8a180, 0x42991a00,
1909
+    0x4288f200, 0x42782100, 0x42669e00, 0x42546880,
1910
+    0x42418800, 0x422e0480, 0x4219e500, 0x42053680,
1911
+    0x41f00980, 0x41da7080, 0x41c47b00, 0x41ae3600,
1912
+    0x4197ab80, 0x4180e400, 0x4169e780, 0x4152bb00,
1913
+    0x413b5e80, 0x4123d180, 0x410c1480, 0x40f42100,
1914
+    0x40dbed00, 0x40c36c80, 0x40aa9600, 0x40915f80,
1915
+    0x4077c100, 0x405db280, 0x40432c80, 0x40282580,
1916
+    0x400c9280, 0x3ff068c0, 0x3fd39dc0, 0x3fb62bc0,
1917
+    0x3f981200, 0x3f795080, 0x3f59e780, 0x3f39ebc0,
1918
+    0x3f198680, 0x3ef8e100, 0x3ed82440, 0x3eb76c80,
1919
+    0x3e96c940, 0x3e764900, 0x3e55f980, 0x3e35cb00,
1920
+    0x3e1590c0, 0x3df51cc0, 0x3dd44200, 0x3db2e640,
1921
+    0x3d910200, 0x3d6e8e40, 0x3d4b8480, 0x3d27e600,
1922
+    0x3d03bc00, 0x3cdf0fc0, 0x3cb9eb80, 0x3c946240,
1923
+    0x3c6e9180, 0x3c489700, 0x3c229000, 0x3bfc95c0,
1924
+    0x3bd6bd00, 0x3bb11a80, 0x3b8bc180, 0x3b669bc0,
1925
+    0x3b416a00, 0x3b1beb80, 0x3af5e140, 0x3acf3300,
1926
+    0x3aa7ef80, 0x3a802780, 0x3a57eb80, 0x3a2f5880,
1927
+    0x3a069640, 0x39ddcd40, 0x39b524c0, 0x398ca540,
1928
+    0x39643800, 0x393bc540, 0x39133580, 0x38ea7ac0,
1929
+    0x38c19040, 0x389871c0, 0x386f1b40, 0x38458e00,
1930
+    0x381bd000, 0x37f1e780, 0x37c7db00, 0x379db080,
1931
+    0x37736e80, 0x37491b00, 0x371ebcc0, 0x36f45980,
1932
+    0x36c96600, 0x369ed300, 0x36740380, 0x3648ffc0,
1933
+    0x361dcf40, 0x35f27a00, 0x35c70780, 0x359b7f80,
1934
+    0x356fe9c0, 0x35444dc0, 0x3518b280, 0x34ed1940,
1935
+    0x34c17c00, 0x3495d4c0, 0x346a1d40, 0x343e4300,
1936
+    0x34122840, 0x33e5ae00, 0x33b8b780, 0x338b4dc0,
1937
+    0x335d9f00, 0x332fdc00, 0x33023440, 0x32d4cc40,
1938
+    0x32a7bc80, 0x327b1d40, 0x324f04c0, 0x32235280,
1939
+    0x31f7b100, 0x31cbc7c0, 0x319f4140, 0x3171fb40,
1940
+    0x31440840, 0x31157d00, 0x30e66e80, 0x30b6fc40,
1941
+    0x30875080, 0x30579600, 0x3027f700, 0x2ff89140,
1942
+    0x2fc976c0, 0x2f9ab880, 0x2f6c6780, 0x2f3e8780,
1943
+    0x2f111000, 0x2ee3f800, 0x2eb73480, 0x2e8a9840,
1944
+    0x2e5dd340, 0x2e3093c0, 0x2e028ac0, 0x2dd39680,
1945
+    0x2da3c480, 0x2d732380, 0x2d41c400, 0x2d0fd300,
1946
+    0x2cdd9ac0, 0x2cab6640, 0x2c797f00, 0x2c480d40,
1947
+    0x2c171700, 0x2be6a0c0, 0x2bb6ae80, 0x2b8739c0,
1948
+    0x2b583200, 0x2b298600, 0x2afb2400, 0x2accfa40,
1949
+    0x2a9ef500, 0x2a710100, 0x2a430ac0, 0x2a14f9c0,
1950
+    0x29e6b0c0, 0x29b81240, 0x29890140, 0x29596900,
1951
+    0x29293e00, 0x28f87500, 0x28c70340, 0x2894efc0,
1952
+    0x28625140, 0x282f4040, 0x27fbd5c0, 0x27c83540,
1953
+    0x27948ec0, 0x27611240, 0x272def80, 0x26fb4cc0,
1954
+    0x26c94780, 0x2697fcc0, 0x26678880, 0x2637f740,
1955
+    0x26094540, 0x25db6dc0, 0x25ae6b40, 0x25821680,
1956
+    0x255627c0, 0x252a55c0, 0x24fe5680, 0x24d1db40,
1957
+    0x24a48fc0, 0x24761f40, 0x244637c0, 0x2414c900,
1958
+    0x23e20240, 0x23ae1740, 0x23793bc0, 0x2343cc00,
1959
+    0x230e4ac0, 0x22d93c80, 0x22a52400, 0x22725180,
1960
+    0x2240e480, 0x2210f9c0, 0x21e2ab40, 0x21b5c7c0,
1961
+    0x2189d2c0, 0x215e4d40, 0x2132b900, 0x2106ba80,
1962
+    0x20da1940, 0x20ac9d80, 0x207e11c0, 0x204e77c0,
1963
+    0x201e0880, 0x1fecfea0, 0x1fbb94e0, 0x1f8a0500,
1964
+    0x1f59d340, 0x1f27ac20, 0x1ef67c60, 0x1ec64e40,
1965
+    0x1e96fdc0, 0x1e686400, 0x1e3a5a00, 0x1e0cae80,
1966
+    0x1ddf25e0, 0x1db18460, 0x1d839020, 0x1d5536e0,
1967
+    0x1d268e80, 0x1cf7ae60, 0x1cc8aea0, 0x1c99af00,
1968
+    0x1c6ad820, 0x1c3c5280, 0x1c0e4500, 0x1be0ab60,
1969
+    0x1bb35620, 0x1b861400, 0x1b58b480, 0x1b2b1a00,
1970
+    0x1afd39c0, 0x1acf09a0, 0x1aa080c0, 0x1a71b020,
1971
+    0x1a42c2a0, 0x1a13e420, 0x19e53fc0, 0x19b6eb00,
1972
+    0x1988e620, 0x195b3060, 0x192dc8a0, 0x1900a8a0,
1973
+    0x18d3c4e0, 0x18a711e0, 0x187a83e0, 0x184e10e0,
1974
+    0x1821b060, 0x17f55a00, 0x17c90580, 0x179cb100,
1975
+    0x177060a0, 0x17441880, 0x1717dd20, 0x16ebb080,
1976
+    0x16bf9260, 0x169382e0, 0x166781c0, 0x163b8f80,
1977
+    0x160fade0, 0x15e3de40, 0x15b82220, 0x158c7ae0,
1978
+    0x1560ea80, 0x15357240, 0x150a1400, 0x14ded020,
1979
+    0x14b3a640, 0x148895a0, 0x145d9dc0, 0x1432bde0,
1980
+    0x1407f540, 0x13dd4380, 0x13b2a860, 0x13882460,
1981
+    0x135db880, 0x133365a0, 0x13092cc0, 0x12df0e60,
1982
+    0x12b50aa0, 0x128b2120, 0x12615200, 0x12379da0,
1983
+    0x120e04c0, 0x11e48820, 0x11bb2860, 0x1191e600,
1984
+    0x1168c080, 0x113fb7a0, 0x1116cb40, 0x10edfba0,
1985
+    0x10c54a00, 0x109cb7a0, 0x10744560, 0x104bf420,
1986
+    0x1023c3e0, 0x0ffbb500, 0x0fd3c790, 0x0fabfbe0,
1987
+    0x0f845290, 0x0f5ccc40, 0x0f356970, 0x0f0e2a60,
1988
+    0x0ee70eb0, 0x0ec01610, 0x0e994040, 0x0e728d50,
1989
+    0x0e4bfdf0, 0x0e2592c0, 0x0dff4c70, 0x0dd92af0,
1990
+    0x0db32da0, 0x0d8d53e0, 0x0d679cf0, 0x0d420880,
1991
+    0x0d1c9680, 0x0cf74700, 0x0cd219f0, 0x0cad0eb0,
1992
+    0x0c882450, 0x0c6359a0, 0x0c3ead90, 0x0c1a1f80,
1993
+    0x0bf5af40, 0x0bd15cf0, 0x0bad2870, 0x0b891440,
1994
+    0x0b652530, 0x0b416020, 0x0b1dca30, 0x0afa6810,
1995
+    0x0ad73ee0, 0x0ab45370, 0x0a91aac0, 0x0a6f49b0,
1996
+    0x0a4da7f0, 0x0a2c7e20, 0x0a0ba310, 0x09eb1220,
1997
+    0x09cac6e0, 0x09aabc70, 0x098aee40, 0x096b57a0,
1998
+    0x094bf400, 0x092cbea0, 0x090db2e0, 0x08eecef0,
1999
+    0x08d01360, 0x08b18110, 0x089318b0, 0x0874db00,
2000
+    0x0856c880, 0x0838e1b0, 0x081b2730, 0x07fd99a8,
2001
+    0x07e03a28, 0x07c309a8, 0x07a60910, 0x07893918,
2002
+    0x076c99d0, 0x07502b90, 0x0733ee70, 0x0717e2f8,
2003
+    0x06fc09b8, 0x06e06378, 0x06c4f0b8, 0x06a9b1c8,
2004
+    0x068ea6a0, 0x0673cf18, 0x06592b18, 0x063ebad0,
2005
+    0x06247ed0, 0x060a7780, 0x05f0a570, 0x05d708b8,
2006
+    0x05bda128, 0x05a46e80, 0x058b7078, 0x0572a740,
2007
+    0x055a1330, 0x0541b4d8, 0x05298c98, 0x05119a88,
2008
+    0x04f9de50, 0x04e257a0, 0x04cb0630, 0x04b3ea00,
2009
+    0x049d0378, 0x04865308, 0x046fd918, 0x045995a8,
2010
+    0x04438860, 0x042db0d0, 0x04180ea0, 0x0402a1d0,
2011
+    0x03ed6abc, 0x03d869b8, 0x03c39f28, 0x03af0af0,
2012
+    0x039aaca0, 0x038683b4, 0x03728fc0, 0x035ed0b0,
2013
+    0x034b46c4, 0x0337f254, 0x0324d3a0, 0x0311eab0,
2014
+    0x02ff370c, 0x02ecb85c, 0x02da6e34, 0x02c858a8,
2015
+    0x02b67820, 0x02a4cd28, 0x02935820, 0x02821920,
2016
+    0x02710fac, 0x02603b54, 0x024f9bb4, 0x023f308c,
2017
+    0x022ef9e8, 0x021ef7c8, 0x020f2a40, 0x01ff908e,
2018
+    0x01f02974, 0x01e0f38a, 0x01d1ed94, 0x01c316d6,
2019
+    0x01b46f5e, 0x01a5f720, 0x0197ae28, 0x018994ea,
2020
+    0x017bac54, 0x016df546, 0x016070ae, 0x01532078,
2021
+    0x01460760, 0x01392834, 0x012c85a4, 0x01201f7a,
2022
+    0x0113f27c, 0x0107fb6c, 0x00fc36fd, 0x00f0a2d5,
2023
+    0x00e53d51, 0x00da050f, 0x00cef88c, 0x00c41869,
2024
+    0x00b9671f, 0x00aee754, 0x00a49b80, 0x009a8384,
2025
+    0x00909ca6, 0x0086e400, 0x007d56e3, 0x0073f48f,
2026
+    0x006abe70, 0x0061b5de, 0x0058dc65, 0x005033b5,
2027
+    0x0047be30, 0x003f7e30, 0x00377619, 0x002fa4d4,
2028
+    0x002805ee, 0x002094cb, 0x00194cb8, 0x00122856,
2029
+    0x000b215c, 0x00043148, 0xfffd51f1, 0xfff683a1,
2030
+    0xffefcd4e, 0xffe93630, 0xffe2c57e, 0xffdc855d,
2031
+    0xffd682c4, 0xffd0cad4, 0xffcb6a2d, 0xffc663bd,
2032
+    0xffc1b070, 0xffbd48e2, 0xffb92571, 0xffb53a55,
2033
+    0xffb1779d, 0xffadcd39, 0xffaa2b43, 0xffa68856,
2034
+    0xffa2e142, 0xff9f332d, 0xff9b7b9d, 0xff97bf2f,
2035
+    0xff9409e3, 0xff9067e3, 0xff8ce557, 0xff898bf1,
2036
+    0xff866307, 0xff8371d0, 0xff80bf64, 0xff7e4ebb,
2037
+    0xff7c1eab, 0xff7a2e05, 0xff787b48, 0xff770281,
2038
+    0xff75bd07, 0xff74a3f8, 0xff73b0b3, 0xff72dd03,
2039
+    0xff72237f, 0xff717ebf, 0xff70e94d, 0xff705f5a,
2040
+    0xff6fde6b, 0xff6f6427, 0xff6eee41, 0xff6e7d0c,
2041
+    0xff6e135a, 0xff6db404, 0xff6d61f9, 0xff6d2055,
2042
+    0xff6cf268, 0xff6cdb77, 0xff6cdebc, 0xff6cff48,
2043
+    0xff6d3fca, 0xff6da307, 0xff6e2b83, 0xff6eda14,
2044
+    0xff6fad6e, 0xff70a464, 0xff71bd9e, 0xff72f663,
2045
+    0xff744a81, 0xff75b5c5, 0xff77340a, 0xff78c0a7,
2046
+    0xff7a5694, 0xff7bf0dd, 0xff7d8abc, 0xff7f2302,
2047
+    0xff80bc09, 0xff825855, 0xff83fa57, 0xff85a55c,
2048
+    0xff875d22, 0xff892599, 0xff8b025e, 0xff8cf53c,
2049
+    0xff8efdf5, 0xff911c48, 0xff934fca, 0xff959676,
2050
+    0xff97ec87, 0xff9a4e36, 0xff9cb7d2, 0xff9f26cd,
2051
+    0xffa199cf, 0xffa40f75, 0xffa6867d, 0xffa8feb2,
2052
+    0xffab78e0, 0xffadf5c8, 0xffb07640, 0xffb2fba1,
2053
+    0xffb587a2, 0xffb81bfc, 0xffbaba47, 0xffbd6237,
2054
+    0xffc011a9, 0xffc2c67a, 0xffc57e85, 0xffc83894,
2055
+    0xffcaf41b, 0xffcdb0b9, 0xffd06e18, 0xffd32bf8,
2056
+    0xffd5ea38, 0xffd8a8c4, 0xffdb6765, 0xffde25fc,
2057
+    0xffe0e472, 0xffe3a2b3, 0xffe66088, 0xffe91da7,
2058
+    0xffebd979, 0xffee9352, 0xfff14ab1, 0xfff3fef7,
2059
+    0xfff6af95, 0xfff95c0d, 0xfffc03c8, 0xfffea65a,
2060
+    0x00015885, 0x0003f2e9, 0x00068a73, 0x00091e8d,
2061
+    0x000bae7f, 0x000e39bf, 0x0010bf96, 0x00133f78,
2062
+    0x0015b8c4, 0x00182ae4, 0x001a9558, 0x001cf7b3,
2063
+    0x001f51e0, 0x0021a3b4, 0x0023ed25, 0x00262df2,
2064
+    0x002865c5, 0x002a9469, 0x002cb967, 0x002ed4aa,
2065
+    0x0030e607, 0x0032ed88, 0x0034eb2f, 0x0036de23,
2066
+    0x0038c503, 0x003a9e4c, 0x003c68a7, 0x003e23dd,
2067
+    0x003fd0db, 0x00417083, 0x0043038b, 0x00448adf,
2068
+    0x00460741, 0x0047799c, 0x0048e2b3, 0x004a42af,
2069
+    0x004b98fb, 0x004ce50b, 0x004e2654, 0x004f5b5d,
2070
+    0x005081c3, 0x00519717, 0x00529920, 0x005386d0,
2071
+    0x0054603f, 0x00552581, 0x0055d6cc, 0x00567558,
2072
+    0x0057033d, 0x005782b4, 0x0057f5b6, 0x00585e46,
2073
+    0x0058be68, 0x005917ff, 0x00596ce4, 0x0059bcc0,
2074
+    0x005a053a, 0x005a43ef, 0x005a76af, 0x005a9b37,
2075
+    0x005aaf39, 0x005ab07b, 0x005a9cef, 0x005a7349,
2076
+    0x005a3328, 0x0059dc0a, 0x00596db0, 0x0058e8e5,
2077
+    0x00584f98, 0x0057a3c1, 0x0056e738, 0x00561bec,
2078
+    0x005543df, 0x0054610b, 0x0053753e, 0x0052824e,
2079
+    0x005189f6, 0x00508ded, 0x004f8fc0, 0x004e8fd1,
2080
+    0x004d8d27, 0x004c86d7, 0x004b7c0a, 0x004a6b33,
2081
+    0x00495239, 0x00482f0e, 0x0046ffc4, 0x0045c201,
2082
+    0x00447337, 0x004310cc, 0x00419871, 0x004008e5,
2083
+    0x003e6231, 0x003ca461, 0x003acf8a, 0x0038e57a,
2084
+    0x0036e981, 0x0034defa, 0x0032c94b, 0x0030acc6,
2085
+    0x002e8eb4, 0x002c7452, 0x002a62aa, 0x00285bbf,
2086
+    0x00265eda, 0x00246b24, 0x00227f9c, 0x002098e7,
2087
+    0x001eb13b, 0x001cc2ef, 0x001ac899, 0x0018be3d,
2088
+    0x0016a198, 0x00147065, 0x00122897, 0x000fcbc5,
2089
+    0x000d5f03, 0x000ae77a, 0x00086a52, 0x0005eb92,
2090
+    0x00036e4a, 0x0000f57e, 0xfffe8415, 0xfffc1a79,
2091
+    0xfff9b6bc, 0xfff756da, 0xfff4f8d1, 0xfff29ade,
2092
+    0xfff03b88, 0xffedd94d, 0xffeb7296, 0xffe9072c,
2093
+    0xffe6981b, 0xffe4265c, 0xffe1b30f, 0xffdf3f2c,
2094
+    0xffdccb9e, 0xffda5994, 0xffd7ea0d, 0xffd57d61,
2095
+    0xffd31303, 0xffd0aa28, 0xffce4244, 0xffcbdb41,
2096
+    0xffc97596, 0xffc711a3, 0xffc4af9e, 0xffc24fa7,
2097
+    0xffbff1de, 0xffbd969a, 0xffbb3e45, 0xffb8e8d6,
2098
+    0xffb695f5, 0xffb44522, 0xffb1f628, 0xffafa8f1,
2099
+    0xffad5d92, 0xffab140b, 0xffa8cc1d, 0xffa68591,
2100
+    0xffa44067, 0xffa1fca0, 0xff9fba30, 0xff9d7903,
2101
+    0xff9b3917, 0xff98fa6e, 0xff96bd07, 0xff9480b7,
2102
+    0xff924532, 0xff900a25, 0xff8dcf42, 0xff8b9434,
2103
+    0xff895885, 0xff871bd4, 0xff84dd8b, 0xff829d34,
2104
+    0xff805a44, 0xff7e142e, 0xff7bca72, 0xff797c84,
2105
+    0xff7729e4, 0xff74d205, 0xff727452, 0xff70101f,
2106
+    0xff6da494, 0xff6b30d2, 0xff68b3f5, 0xff662d32,
2107
+    0xff639bd2, 0xff60ff0a, 0xff5e562d, 0xff5ba3e1,
2108
+    0xff58ee3a, 0xff563c23, 0xff5394f4, 0xff50fd1f,
2109
+    0xff4e759a, 0xff4bff33, 0xff499ad5, 0xff47490b,
2110
+    0xff450a37, 0xff42deb8, 0xff40c6d0, 0xff3ec2bf,
2111
+    0xff3cd29a, 0xff3af682, 0xff392e6b, 0xff377a4b,
2112
+    0xff35d9f8, 0xff344d45, 0xff32d3e9, 0xff316d97,
2113
+    0xff3019da, 0xff2ed83b, 0xff2da830, 0xff2c88c0,
2114
+    0xff2b78b5, 0xff2a76cd, 0xff298185, 0xff289891,
2115
+    0xff27bc7e, 0xff26ee22, 0xff262e29, 0xff257cdd,
2116
+    0xff24d9f5, 0xff244525, 0xff23be16, 0xff234489,
2117
+    0xff22d853, 0xff227948, 0xff22273e, 0xff21e1d3,
2118
+    0xff21a872, 0xff217a7a, 0xff215749, 0xff213ecb,
2119
+    0xff21319f, 0xff21305d, 0xff213bb0, 0xff2153c3,
2120
+    0xff21782c, 0xff21a893, 0xff21e478, 0xff222bdb,
2121
+    0xff227f27, 0xff22debe, 0xff234b0a, 0xff23c395,
2122
+    0xff24471e, 0xff24d42c, 0xff25695d, 0xff260539,
2123
+    0xff26a653, 0xff274b29, 0xff27f22e, 0xff2899d3,
2124
+    0xff295976, 0xff29f2ae, 0xff2a96d8, 0xff2b45f5,
2125
+    0xff2bffe4, 0xff2cc4bb, 0xff2d9459, 0xff2e6edf,
2126
+    0xff2f544d, 0xff3044b8, 0xff314035, 0xff3246fb,
2127
+    0xff33591f, 0xff3476e1, 0xff35a061, 0xff36d535,
2128
+    0xff381490, 0xff395db0, 0xff3aafd5, 0xff3c0ac9,
2129
+    0xff3d6ed7, 0xff3edc55, 0xff405383, 0xff41d3f6,
2130
+    0xff435ccd, 0xff44ed10, 0xff4683d4, 0xff482081,
2131
+    0xff49c298, 0xff4b69ac, 0xff4d1548, 0xff4ec4f6,
2132
+    0xff50781e, 0xff522e21, 0xff53e693, 0xff55a15e,
2133
+    0xff575f18, 0xff592023, 0xff5ae4df, 0xff5cacb5,
2134
+    0xff5e75e3, 0xff603ee6, 0xff620630, 0xff63caac,
2135
+    0xff658b56, 0xff67476e, 0xff68fe12, 0xff6aaea1,
2136
+    0xff6c589a, 0xff6dfb87, 0xff6f96e8, 0xff712a66,
2137
+    0xff72b5a0, 0xff74382c, 0xff75b1d4, 0xff772277,
2138
+    0xff788a21, 0xff79e8e6, 0xff7b3ef1, 0xff7c8c99,
2139
+    0xff7dd24a, 0xff7f108d, 0xff804805, 0xff817d0e,
2140
+    0xff82b74b, 0xff83fde7, 0xff855763, 0xff86c623,
2141
+    0xff884905, 0xff89ded2, 0xff8b8647, 0xff8d3e4d,
2142
+    0xff8f05cd, 0xff90dbc6, 0xff92bf2b, 0xff94af05,
2143
+    0xff96aa27, 0xff98af9a, 0xff9abe48, 0xff9cd544,
2144
+    0xff9ef3c2, 0xffa118eb, 0xffa343fe, 0xffa57424,
2145
+    0xffa7a891, 0xffa9e085, 0xffac1b32, 0xffae5803,
2146
+    0xffb09681, 0xffb2d622, 0xffb51678, 0xffb75705,
2147
+    0xffb99726, 0xffbbd646, 0xffbe13d8, 0xffc04f26,
2148
+    0xffc2879b, 0xffc4bc73, 0xffc6ed25, 0xffc918e4,
2149
+    0xffcb3eb9, 0xffcd5dcd, 0xffcf754a, 0xffd184d9,
2150
+    0xffd38c90, 0xffd58ca5, 0xffd7854e, 0xffd97695,
2151
+    0xffdb606f, 0xffdd42d2, 0xffdf1da8, 0xffe0f09c,
2152
+    0xffe2bb01, 0xffe47c42, 0xffe633c7, 0xffe7e151,
2153
+    0xffe98535, 0xffeb1fb5, 0xffecb10f, 0xffee3945,
2154
+    0xffefb7ea, 0xfff12cbf, 0xfff29763, 0xfff3f78a,
2155
+    0xfff54cbf, 0xfff69696, 0xfff7d4b9, 0xfff90749,
2156
+    0xfffa2ee6, 0xfffb4c3d, 0xfffc6004, 0xfffd6af1,
2157
+    0xfffe6ddb, 0xffff69b9, 0x00005f4b, 0x00014e7f,
2158
+    0x00023646, 0x000315b4, 0x0003ebd3, 0x0004b74a,
2159
+    0x00057677, 0x000627e2, 0x0006ca09, 0x00075ce1,
2160
+    0x0007e196, 0x00085955, 0x0008c556, 0x00092751,
2161
+    0x00098153, 0x0009d581, 0x000a25be, 0x000a732b,
2162
+    0x000abe1f, 0x000b06e4, 0x000b4db1, 0x000b91fa,
2163
+    0x000bd266, 0x000c0da0, 0x000c426e, 0x000c6ffb,
2164
+    0x000c95b0, 0x000cb2f7, 0x000cc76e, 0x000cd317,
2165
+    0x000cd647, 0x000cd17f, 0x000cc52b, 0x000cb1ea,
2166
+    0x000c98c0, 0x000c7a62, 0x000c57c7, 0x000c3187,
2167
+    0x000c0862, 0x000bdcd8, 0x000baf81, 0x000b80c7,
2168
+    0x000b50ec, 0x000b202f, 0x000aeec6, 0x000abcb2,
2169
+    0x000a89d2, 0x000a5605, 0x000a2116, 0x0009eafb,
2170
+    0x0009b37d, 0x00097a9d, 0x00094030, 0x00090440,
2171
+    0x0008c6b9, 0x000887ae, 0x0008470c, 0x00080512,
2172
+    0x0007c1f6, 0x00077df9, 0x0007395a, 0x0006f45b,
2173
+    0x0006af67, 0x00066abe, 0x000626b6, 0x0005e38f,
2174
+    0x0005a1a0, 0x0005611e, 0x00052234, 0x0004e502,
2175
+    0x0004a95d, 0x00046f46, 0x00043691, 0x0003ff33,
2176
+    0x0003c90d, 0x0003941f, 0x00036047, 0x00032d9c,
2177
+    0x0002fc1e, 0x0002cbed, 0x00029d1e, 0x00026fbc,
2178
+    0x000243f2, 0x000219d6, 0x0001f17d, 0x0001caf1,
2179
+    0x0001a63e, 0x00018363, 0x00016256, 0x00014316,
2180
+    0x0001258f, 0x000109cb, 0x0000efaa, 0x0000d720,
2181
+    0x0000c03a, 0x0000aacb, 0x000096de, 0x0000846a,
2182
+    0x0000736d, 0x000063d3, 0x000055a6, 0x000048d0,
2183
+    0x00003d47, 0x000032f6, 0x000029dc, 0x000021d9,
2184
+    0x00001ae3, 0x000014ee, 0x00000fdb, 0x00000ba9,
2185
+    0x00000839, 0x00000589, 0x00000370, 0x000001ee,
2186
+    0x000000d7, 0x00000036, 0xffffffe1, 0xffffffc1,
2187
+    0xffffffd6, 0xfffffff6, 0x0000000b, 0x0000000b,
2188
+    0x0000000b, 0x0000000b, 0xfffffff6, 0xffffffd6,
2189
+    0xffffffcb, 0xffffffe1, 0x00000036, 0x000000d7,
2190
+    0x000001ce, 0x0000033b, 0x00000529, 0x000007ad,
2191
+    0x00000ac8, 0x00000e99, 0x00001316, 0x0000185e,
2192
+    0x00001e7e, 0x00002575, 0x00002d4c, 0x0000361b,
2193
+    0x00003fd6, 0x00004a93, 0x00005647, 0x00006312,
2194
+    0x000070de, 0x00007fad, 0x00008f87, 0x0000a064,
2195
+    0x0000b242, 0x0000c52d, 0x0000d919, 0x0000ee12,
2196
+    0x0001040c, 0x00011b13, 0x0001331b, 0x00014c30,
2197
+    0x0001663c, 0x0001814a, 0x00019d4f, 0x0001ba35,
2198
+    0x0001d7e7, 0x0001f645, 0x00021544, 0x000234c3,
2199
+    0x000254b9, 0x00027505, 0x000295a7, 0x0002b67e,
2200
+    0x0002d7a1, 0x0002f904, 0x00031ab2, 0x00033ca0,
2201
+    0x00035ee5, 0x0003818a, 0x0003a485, 0x0003c7e1,
2202
+    0x0003eb72, 0x00040f0e, 0x0004329f, 0x000455e6,
2203
+    0x000478c0, 0x00049aef, 0x0004bc52, 0x0004dca9,
2204
+    0x0004fbde, 0x000519c5, 0x00053635, 0x0005512d,
2205
+    0x00056aae, 0x000582a1, 0x00059927, 0x0005ae40,
2206
+    0x0005c1f6, 0x0005d455, 0x0005e572, 0x0005f56d,
2207
+    0x00060446, 0x0006121e, 0x00061f09, 0x00062b08,
2208
+    0x00063605, 0x00063feb, 0x00064899, 0x00064ff1,
2209
+    0x000655a5, 0x00065996, 0x00065b6f, 0x00065af8,
2210
+    0x000657e9, 0x000651d4, 0x00064884, 0x00063bae,
2211
+    0x00062b33, 0x00061706, 0x0005fefd, 0x0005e344,
2212
+    0x0005c405, 0x0005a195, 0x00057c41, 0x00055473,
2213
+    0x00052ac2, 0x0004ffc4, 0x0004d410, 0x0004a7e5,
2214
+    0x00047b4f, 0x00044e39, 0x00042096, 0x0003f208,
2215
+    0x0003c1e1, 0x00038f77, 0x00035a12, 0x00032127,
2216
+    0x0002e476, 0x0002a389, 0x00025e29, 0x0002146d,
2217
+    0x0001c700, 0x00017682, 0x000123a1, 0x0000cefd,
2218
+    0x000078f7, 0x0000221a, 0xffffcad2, 0xffff7333,
2219
+    0xffff1b1f, 0xfffec254, 0xfffe6892, 0xfffe0da3,
2220
+    0xfffdb15d, 0xfffd5394, 0xfffcf413, 0xfffc92e4,
2221
+    0xfffc3033, 0xfffbcc2a, 0xfffb6715, 0xfffb0114,
2222
+    0xfffa9a5c, 0xfffa3338, 0xfff9cbd5, 0xfff96451,
2223
+    0xfff8fcad, 0xfff894dd, 0xfff82cd9, 0xfff7c4a9,
2224
+    0xfff75c6e, 0xfff6f45f, 0xfff68c85, 0xfff62501,
2225
+    0xfff5bde8, 0xfff5575b, 0xfff4f17a, 0xfff48c65,
2226
+    0xfff42811, 0xfff3c489, 0xfff361d8, 0xfff30009,
2227
+    0xfff29f3b, 0xfff23f79, 0xfff1e0d9, 0xfff1835c,
2228
+    0xfff1272b, 0xfff0cc47, 0xfff072d0, 0xfff01ad1,
2229
+    0xffefc46a, 0xffef6fa5, 0xffef1ca4, 0xffeecb7b,
2230
+    0xffee7c20, 0xffee2eb3, 0xffede33e, 0xffed99c2,
2231
+    0xffed524a, 0xffed0cdf, 0xffecc98e, 0xffec884a,
2232
+    0xffec4935, 0xffec0c39, 0xffebd176, 0xffeb98ec,
2233
+    0xffeb62a5, 0xffeb2eae, 0xffeafd1a, 0xffeacdeb,
2234
+    0xffeaa12a, 0xffea76cd, 0xffea4ef4, 0xffea29a0,
2235
+    0xffea06e6, 0xffe9e6cf, 0xffe9c97e, 0xffe9aebc,
2236
+    0xffe99652, 0xffe97fd7, 0xffe96ad4, 0xffe95712,
2237
+    0xffe9447e, 0xffe93316, 0xffe922cf, 0xffe913a1,
2238
+    0xffe90589, 0xffe8f888, 0xffe8ec94, 0xffe8e1c2,
2239
+    0xffe8d807, 0xffe8cf78, 0xffe8c816, 0xffe8c1ec,
2240
+    0xffe8bd04, 0xffe8b968, 0xffe8b72f, 0xffe8b64e,
2241
+    0xffe8b6d9, 0xffe8b8dd, 0xffe8bc6d, 0xffe8c18b,
2242
+    0xffe8c841, 0xffe8d0a5, 0xffe8dacb, 0xffe8e69f,
2243
+    0xffe8f42b, 0xffe9035a, 0xffe9142c, 0xffe926a1,
2244
+    0xffe93ab8, 0xffe95067, 0xffe967b9, 0xffe980ae,
2245
+    0xffe99b3b, 0xffe9b755, 0xffe9d512, 0xffe9f45c,
2246
+    0xffea1533, 0xffea3798, 0xffea5b8a, 0xffea8109,
2247
+    0xffeaa800, 0xffead07a, 0xffeafa56, 0xffeb259f,
2248
+    0xffeb5255, 0xffeb8062, 0xffebafdd, 0xffebe0af,
2249
+    0xffec12cf, 0xffec4630, 0xffec7ade, 0xffecb0a4,
2250
+    0xffece775, 0xffed1f33, 0xffed57a8, 0xffed90b3,
2251
+    0xffedca49, 0xffee042b, 0xffee3e58, 0xffee788f,
2252
+};
2253
+
1770 2254
 const DECLARE_ALIGNED(32, float, ff_aac_eld_window_480)[1800] = {
1771 2255
      0.00101191,  0.00440397,  0.00718669,  0.01072130,
1772 2256
      0.01459757,  0.01875954,  0.02308987,  0.02751541,
... ...
@@ -46,7 +46,11 @@
46 46
  */
47 47
 DECLARE_ALIGNED(32, extern float,  ff_aac_kbd_long_1024)[1024];
48 48
 DECLARE_ALIGNED(32, extern float,  ff_aac_kbd_short_128)[128];
49
+DECLARE_ALIGNED(32, extern int,    ff_aac_kbd_long_1024_fixed)[1024];
50
+DECLARE_ALIGNED(32, extern int,    ff_aac_kbd_long_512_fixed)[512];
51
+DECLARE_ALIGNED(32, extern int,    ff_aac_kbd_short_128_fixed)[128];
49 52
 const DECLARE_ALIGNED(32, extern float, ff_aac_eld_window_512)[1920];
53
+const DECLARE_ALIGNED(32, extern int,   ff_aac_eld_window_512_fixed)[1920];
50 54
 const DECLARE_ALIGNED(32, extern float, ff_aac_eld_window_480)[1800];
51 55
 // @}
52 56
 
53 57
new file mode 100644
... ...
@@ -0,0 +1,24 @@
0
+/*
1
+ * Generate a header file for hardcoded AAC cube-root table
2
+ *
3
+ * Copyright (c) 2010 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
4
+ *
5
+ * This file is part of FFmpeg.
6
+ *
7
+ * FFmpeg is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * FFmpeg is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with FFmpeg; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+#define USE_FIXED 1
23
+#include "cbrt_tablegen_template.c"
... ...
@@ -19,3 +19,6 @@
19 19
  * License along with FFmpeg; if not, write to the Free Software
20 20
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 21
  */
22
+
23
+#define USE_FIXED 0
24
+#include "cbrt_tablegen_template.c"
... ...
@@ -27,13 +27,26 @@
27 27
 #include <math.h>
28 28
 #include "libavutil/attributes.h"
29 29
 
30
+#if USE_FIXED
31
+#define CBRT_RENAME(a) a ## _fixed
32
+#define CBRT(x) (int)floor((x).f * 8192 + 0.5)
33
+#else
34
+#define CBRT_RENAME(a) a
35
+#define CBRT(x) x.i
36
+#endif
37
+
30 38
 #if CONFIG_HARDCODED_TABLES
39
+#if USE_FIXED
40
+#define cbrt_tableinit_fixed()
41
+#include "libavcodec/cbrt_fixed_tables.h"
42
+#else
31 43
 #define cbrt_tableinit()
32 44
 #include "libavcodec/cbrt_tables.h"
45
+#endif
33 46
 #else
34 47
 static uint32_t cbrt_tab[1 << 13];
35 48
 
36
-static av_cold void cbrt_tableinit(void)
49
+static av_cold void CBRT_RENAME(cbrt_tableinit)(void)
37 50
 {
38 51
     if (!cbrt_tab[(1<<13) - 1]) {
39 52
         int i;
... ...
@@ -44,7 +57,7 @@ static av_cold void cbrt_tableinit(void)
44 44
                 uint32_t i;
45 45
             } f;
46 46
             f.f = pow(i, 1.0 / 3.0) * i;
47
-            cbrt_tab[i] = f.i;
47
+            cbrt_tab[i] = CBRT(f);
48 48
         }
49 49
     }
50 50
 }
... ...
@@ -27,7 +27,7 @@
27 27
 
28 28
 int main(void)
29 29
 {
30
-    cbrt_tableinit();
30
+    CBRT_RENAME(cbrt_tableinit)();
31 31
 
32 32
     write_fileheader();
33 33
 
... ...
@@ -16,5 +16,6 @@
16 16
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 17
  */
18 18
 
19
+#define USE_FIXED 0
19 20
 #include "sinewin.h"
20 21
 #include "sinewin_tablegen.h"
... ...
@@ -30,20 +30,32 @@
30 30
 #   define SINETABLE_CONST
31 31
 #endif
32 32
 
33
+#ifndef USE_FIXED
34
+#define USE_FIXED 0
35
+#endif
36
+
37
+#if USE_FIXED
38
+#define SINEWIN_SUFFIX(a) a ## _fixed
39
+#define INTFLOAT int
40
+#else
41
+#define SINEWIN_SUFFIX(a) a
42
+#define INTFLOAT float
43
+#endif
44
+
33 45
 #define SINETABLE(size) \
34
-    SINETABLE_CONST DECLARE_ALIGNED(32, float, ff_sine_##size)[size]
46
+    SINETABLE_CONST DECLARE_ALIGNED(32, INTFLOAT, SINEWIN_SUFFIX(ff_sine_##size))[size]
35 47
 
36 48
 /**
37 49
  * Generate a sine window.
38 50
  * @param   window  pointer to half window
39 51
  * @param   n       size of half window
40 52
  */
41
-void ff_sine_window_init(float *window, int n);
53
+void SINEWIN_SUFFIX(ff_sine_window_init)(INTFLOAT *window, int n);
42 54
 
43 55
 /**
44 56
  * initialize the specified entry of ff_sine_windows
45 57
  */
46
-void ff_init_ff_sine_windows(int index);
58
+void SINEWIN_SUFFIX(ff_init_ff_sine_windows)(int index);
47 59
 
48 60
 extern SINETABLE(  32);
49 61
 extern SINETABLE(  64);
... ...
@@ -55,6 +67,6 @@ extern SINETABLE(2048);
55 55
 extern SINETABLE(4096);
56 56
 extern SINETABLE(8192);
57 57
 
58
-extern SINETABLE_CONST float * const ff_sine_windows[14];
58
+extern SINETABLE_CONST INTFLOAT * const SINEWIN_SUFFIX(ff_sine_windows)[14];
59 59
 
60 60
 #endif /* AVCODEC_SINEWIN_H */
61 61
new file mode 100644
... ...
@@ -0,0 +1,21 @@
0
+/*
1
+ * This file is part of FFmpeg.
2
+ *
3
+ * FFmpeg is free software; you can redistribute it and/or
4
+ * modify it under the terms of the GNU Lesser General Public
5
+ * License as published by the Free Software Foundation; either
6
+ * version 2.1 of the License, or (at your option) any later version.
7
+ *
8
+ * FFmpeg is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11
+ * Lesser General Public License for more details.
12
+ *
13
+ * You should have received a copy of the GNU Lesser General Public
14
+ * License along with FFmpeg; if not, write to the Free Software
15
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+ */
17
+
18
+#define USE_FIXED 1
19
+#include "sinewin.h"
20
+#include "sinewin_tablegen.h"
0 21
new file mode 100644
... ...
@@ -0,0 +1,24 @@
0
+/*
1
+ * Generate a header file for hardcoded sine windows
2
+ *
3
+ * Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
4
+ *
5
+ * This file is part of FFmpeg.
6
+ *
7
+ * FFmpeg is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * FFmpeg is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with FFmpeg; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+#define USE_FIXED 1
23
+#include "sinewin_tablegen_template.c"
... ...
@@ -19,3 +19,6 @@
19 19
  * License along with FFmpeg; if not, write to the Free Software
20 20
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 21
  */
22
+
23
+#define USE_FIXED 0
24
+#include "sinewin_tablegen_template.c"
... ...
@@ -41,26 +41,41 @@ SINETABLE(2048);
41 41
 SINETABLE(4096);
42 42
 SINETABLE(8192);
43 43
 #else
44
+#if USE_FIXED
45
+#include "libavcodec/sinewin_fixed_tables.h"
46
+#else
44 47
 #include "libavcodec/sinewin_tables.h"
45 48
 #endif
49
+#endif
50
+
51
+#if USE_FIXED
52
+#define SINEWIN_SUFFIX(a) a ## _fixed
53
+#define INTFLOAT int
54
+#define SIN_FIX(a) (int)floor((a) * 0x80000000 + 0.5)
55
+#else
56
+#define SINEWIN_SUFFIX(a) a
57
+#define INTFLOAT float
58
+#define SIN_FIX(a) a
59
+#endif
46 60
 
47
-SINETABLE_CONST float * const ff_sine_windows[] = {
61
+SINETABLE_CONST INTFLOAT * const SINEWIN_SUFFIX(ff_sine_windows)[] = {
48 62
     NULL, NULL, NULL, NULL, NULL, // unused
49
-    ff_sine_32 , ff_sine_64 ,
50
-    ff_sine_128, ff_sine_256, ff_sine_512, ff_sine_1024, ff_sine_2048, ff_sine_4096, ff_sine_8192
63
+    SINEWIN_SUFFIX(ff_sine_32) , SINEWIN_SUFFIX(ff_sine_64), SINEWIN_SUFFIX(ff_sine_128),
64
+    SINEWIN_SUFFIX(ff_sine_256), SINEWIN_SUFFIX(ff_sine_512), SINEWIN_SUFFIX(ff_sine_1024),
65
+    SINEWIN_SUFFIX(ff_sine_2048), SINEWIN_SUFFIX(ff_sine_4096), SINEWIN_SUFFIX(ff_sine_8192)
51 66
 };
52 67
 
53 68
 // Generate a sine window.
54
-av_cold void ff_sine_window_init(float *window, int n) {
69
+av_cold void SINEWIN_SUFFIX(ff_sine_window_init)(INTFLOAT *window, int n) {
55 70
     int i;
56 71
     for(i = 0; i < n; i++)
57
-        window[i] = sinf((i + 0.5) * (M_PI / (2.0 * n)));
72
+        window[i] = SIN_FIX(sinf((i + 0.5) * (M_PI / (2.0 * n))));
58 73
 }
59 74
 
60
-av_cold void ff_init_ff_sine_windows(int index) {
61
-    assert(index >= 0 && index < FF_ARRAY_ELEMS(ff_sine_windows));
75
+av_cold void SINEWIN_SUFFIX(ff_init_ff_sine_windows)(int index) {
76
+    assert(index >= 0 && index < FF_ARRAY_ELEMS(SINEWIN_SUFFIX(ff_sine_windows)));
62 77
 #if !CONFIG_HARDCODED_TABLES
63
-    ff_sine_window_init(ff_sine_windows[index], 1 << index);
78
+    SINEWIN_SUFFIX(ff_sine_window_init)(SINEWIN_SUFFIX(ff_sine_windows)[index], 1 << index);
64 79
 #endif
65 80
 }
66 81
 
... ...
@@ -22,9 +22,23 @@
22 22
 
23 23
 #include <stdlib.h>
24 24
 #define CONFIG_HARDCODED_TABLES 0
25
+
26
+#if USE_FIXED
27
+#define ADD_SUFFIX(a) a ## _fixed
28
+#define INTFLOAT int
29
+#define WRITE_FUNC write_int32_t_array
30
+
31
+#else
32
+
33
+#define ADD_SUFFIX(a) a
34
+#define INTFLOAT float
35
+#define WRITE_FUNC write_float_array
36
+
37
+#endif
38
+
25 39
 #define SINETABLE_CONST
26 40
 #define SINETABLE(size) \
27
-    float ff_sine_##size[size]
41
+    INTFLOAT ADD_SUFFIX(ff_sine_##size)[size]
28 42
 #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
29 43
 #include "sinewin_tablegen.h"
30 44
 #include "tableprint.h"
... ...
@@ -36,9 +50,9 @@ int main(void)
36 36
     write_fileheader();
37 37
 
38 38
     for (i = 5; i <= 13; i++) {
39
-        ff_init_ff_sine_windows(i);
39
+        ADD_SUFFIX(ff_init_ff_sine_windows)(i);
40 40
         printf("SINETABLE(%4i) = {\n", 1 << i);
41
-        write_float_array(ff_sine_windows[i], 1 << i);
41
+        WRITE_FUNC(ADD_SUFFIX(ff_sine_windows)[i], 1 << i);
42 42
         printf("};\n");
43 43
     }
44 44
 
... ...
@@ -64,6 +64,7 @@ void write_int8_t_array     (const int8_t   *, int);
64 64
 void write_uint8_t_array    (const uint8_t  *, int);
65 65
 void write_uint16_t_array   (const uint16_t *, int);
66 66
 void write_uint32_t_array   (const uint32_t *, int);
67
+void write_int32_t_array    (const int32_t  *, int);
67 68
 void write_float_array      (const float    *, int);
68 69
 void write_int8_t_2d_array  (const void *, int, int);
69 70
 void write_uint8_t_2d_array (const void *, int, int);
... ...
@@ -116,6 +117,7 @@ WRITE_1D_FUNC(uint8_t,  "0x%02"PRIx8, 15)
116 116
 WRITE_1D_FUNC(uint16_t, "0x%08"PRIx16, 7)
117 117
 WRITE_1D_FUNC(int16_t,  "%5"PRIi16, 7)
118 118
 WRITE_1D_FUNC(uint32_t, "0x%08"PRIx32, 7)
119
+WRITE_1D_FUNC(int32_t,  "0x%08"PRIx32, 7)
119 120
 WRITE_1D_FUNC(float,    "%.18e", 3)
120 121
 
121 122
 WRITE_2D_FUNC(int8_t)