#define DCT_RSC_FACTOR 8192 #define DCT_RESCALE( v ) ( ( ( v > 0 ) ? ( v + (DCT_RSC_FACTOR/2) ) : ( v - (DCT_RSC_FACTOR/2) ) ) / DCT_RSC_FACTOR ) // precalculated int values for 8x8 IDCT, multplied by 8192 const int icos_idct_8x8[ 4096 ] = { 1024, 1420, 1338, 1204, 1024, 805, 554, 283, 1420, 1970, 1856, 1670, 1420, 1116, 769, 392, 1338, 1856, 1748, 1573, 1338, 1051, 724, 369, 1204, 1670, 1573, 1416, 1204, 946, 652, 332, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, 805, 1116, 1051, 946, 805, 632, 435, 222, 554, 769, 724, 652, 554, 435, 300, 153, 283, 392, 369, 332, 283, 222, 153, 78, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, 1420, 1670, 769, -392, -1420, -1970, -1856, -1116, 1338, 1573, 724, -369, -1338, -1856, -1748, -1051, 1204, 1416, 652, -332, -1204, -1670, -1573, -946, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, 805, 946, 435, -222, -805, -1116, -1051, -632, 554, 652, 300, -153, -554, -769, -724, -435, 283, 332, 153, -78, -283, -392, -369, -222, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, 1420, 1116, -769, -1970, -1420, 392, 1856, 1670, 1338, 1051, -724, -1856, -1338, 369, 1748, 1573, 1204, 946, -652, -1670, -1204, 332, 1573, 1416, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, 805, 632, -435, -1116, -805, 222, 1051, 946, 554, 435, -300, -769, -554, 153, 724, 652, 283, 222, -153, -392, -283, 78, 369, 332, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, 1420, 392, -1856, -1116, 1420, 1670, -769, -1970, 1338, 369, -1748, -1051, 1338, 1573, -724, -1856, 1204, 332, -1573, -946, 1204, 1416, -652, -1670, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, 805, 222, -1051, -632, 805, 946, -435, -1116, 554, 153, -724, -435, 554, 652, -300, -769, 283, 78, -369, -222, 283, 332, -153, -392, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, 1420, -392, -1856, 1116, 1420, -1670, -769, 1970, 1338, -369, -1748, 1051, 1338, -1573, -724, 1856, 1204, -332, -1573, 946, 1204, -1416, -652, 1670, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, 805, -222, -1051, 632, 805, -946, -435, 1116, 554, -153, -724, 435, 554, -652, -300, 769, 283, -78, -369, 222, 283, -332, -153, 392, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, 1420, -1116, -769, 1970, -1420, -392, 1856, -1670, 1338, -1051, -724, 1856, -1338, -369, 1748, -1573, 1204, -946, -652, 1670, -1204, -332, 1573, -1416, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, 805, -632, -435, 1116, -805, -222, 1051, -946, 554, -435, -300, 769, -554, -153, 724, -652, 283, -222, -153, 392, -283, -78, 369, -332, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, 1420, -1670, 769, 392, -1420, 1970, -1856, 1116, 1338, -1573, 724, 369, -1338, 1856, -1748, 1051, 1204, -1416, 652, 332, -1204, 1670, -1573, 946, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, 805, -946, 435, 222, -805, 1116, -1051, 632, 554, -652, 300, 153, -554, 769, -724, 435, 283, -332, 153, 78, -283, 392, -369, 222, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, 1420, -1970, 1856, -1670, 1420, -1116, 769, -392, 1338, -1856, 1748, -1573, 1338, -1051, 724, -369, 1204, -1670, 1573, -1416, 1204, -946, 652, -332, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, 805, -1116, 1051, -946, 805, -632, 435, -222, 554, -769, 724, -652, 554, -435, 300, -153, 283, -392, 369, -332, 283, -222, 153, -78, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, 1204, 1670, 1573, 1416, 1204, 946, 652, 332, 554, 769, 724, 652, 554, 435, 300, 153, -283, -392, -369, -332, -283, -222, -153, -78, -1024, -1420, -1338, -1204, -1024, -805, -554, -283, -1420, -1970, -1856, -1670, -1420, -1116, -769, -392, -1338, -1856, -1748, -1573, -1338, -1051, -724, -369, -805, -1116, -1051, -946, -805, -632, -435, -222, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, 1204, 1416, 652, -332, -1204, -1670, -1573, -946, 554, 652, 300, -153, -554, -769, -724, -435, -283, -332, -153, 78, 283, 392, 369, 222, -1024, -1204, -554, 283, 1024, 1420, 1338, 805, -1420, -1670, -769, 392, 1420, 1970, 1856, 1116, -1338, -1573, -724, 369, 1338, 1856, 1748, 1051, -805, -946, -435, 222, 805, 1116, 1051, 632, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, 1204, 946, -652, -1670, -1204, 332, 1573, 1416, 554, 435, -300, -769, -554, 153, 724, 652, -283, -222, 153, 392, 283, -78, -369, -332, -1024, -805, 554, 1420, 1024, -283, -1338, -1204, -1420, -1116, 769, 1970, 1420, -392, -1856, -1670, -1338, -1051, 724, 1856, 1338, -369, -1748, -1573, -805, -632, 435, 1116, 805, -222, -1051, -946, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, 1204, 332, -1573, -946, 1204, 1416, -652, -1670, 554, 153, -724, -435, 554, 652, -300, -769, -283, -78, 369, 222, -283, -332, 153, 392, -1024, -283, 1338, 805, -1024, -1204, 554, 1420, -1420, -392, 1856, 1116, -1420, -1670, 769, 1970, -1338, -369, 1748, 1051, -1338, -1573, 724, 1856, -805, -222, 1051, 632, -805, -946, 435, 1116, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, 1204, -332, -1573, 946, 1204, -1416, -652, 1670, 554, -153, -724, 435, 554, -652, -300, 769, -283, 78, 369, -222, -283, 332, 153, -392, -1024, 283, 1338, -805, -1024, 1204, 554, -1420, -1420, 392, 1856, -1116, -1420, 1670, 769, -1970, -1338, 369, 1748, -1051, -1338, 1573, 724, -1856, -805, 222, 1051, -632, -805, 946, 435, -1116, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, 1204, -946, -652, 1670, -1204, -332, 1573, -1416, 554, -435, -300, 769, -554, -153, 724, -652, -283, 222, 153, -392, 283, 78, -369, 332, -1024, 805, 554, -1420, 1024, 283, -1338, 1204, -1420, 1116, 769, -1970, 1420, 392, -1856, 1670, -1338, 1051, 724, -1856, 1338, 369, -1748, 1573, -805, 632, 435, -1116, 805, 222, -1051, 946, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, 1204, -1416, 652, 332, -1204, 1670, -1573, 946, 554, -652, 300, 153, -554, 769, -724, 435, -283, 332, -153, -78, 283, -392, 369, -222, -1024, 1204, -554, -283, 1024, -1420, 1338, -805, -1420, 1670, -769, -392, 1420, -1970, 1856, -1116, -1338, 1573, -724, -369, 1338, -1856, 1748, -1051, -805, 946, -435, -222, 805, -1116, 1051, -632, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, 1204, -1670, 1573, -1416, 1204, -946, 652, -332, 554, -769, 724, -652, 554, -435, 300, -153, -283, 392, -369, 332, -283, 222, -153, 78, -1024, 1420, -1338, 1204, -1024, 805, -554, 283, -1420, 1970, -1856, 1670, -1420, 1116, -769, 392, -1338, 1856, -1748, 1573, -1338, 1051, -724, 369, -805, 1116, -1051, 946, -805, 632, -435, 222, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, 805, 1116, 1051, 946, 805, 632, 435, 222, -554, -769, -724, -652, -554, -435, -300, -153, -1420, -1970, -1856, -1670, -1420, -1116, -769, -392, -1024, -1420, -1338, -1204, -1024, -805, -554, -283, 283, 392, 369, 332, 283, 222, 153, 78, 1338, 1856, 1748, 1573, 1338, 1051, 724, 369, 1204, 1670, 1573, 1416, 1204, 946, 652, 332, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, 805, 946, 435, -222, -805, -1116, -1051, -632, -554, -652, -300, 153, 554, 769, 724, 435, -1420, -1670, -769, 392, 1420, 1970, 1856, 1116, -1024, -1204, -554, 283, 1024, 1420, 1338, 805, 283, 332, 153, -78, -283, -392, -369, -222, 1338, 1573, 724, -369, -1338, -1856, -1748, -1051, 1204, 1416, 652, -332, -1204, -1670, -1573, -946, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, 805, 632, -435, -1116, -805, 222, 1051, 946, -554, -435, 300, 769, 554, -153, -724, -652, -1420, -1116, 769, 1970, 1420, -392, -1856, -1670, -1024, -805, 554, 1420, 1024, -283, -1338, -1204, 283, 222, -153, -392, -283, 78, 369, 332, 1338, 1051, -724, -1856, -1338, 369, 1748, 1573, 1204, 946, -652, -1670, -1204, 332, 1573, 1416, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, 805, 222, -1051, -632, 805, 946, -435, -1116, -554, -153, 724, 435, -554, -652, 300, 769, -1420, -392, 1856, 1116, -1420, -1670, 769, 1970, -1024, -283, 1338, 805, -1024, -1204, 554, 1420, 283, 78, -369, -222, 283, 332, -153, -392, 1338, 369, -1748, -1051, 1338, 1573, -724, -1856, 1204, 332, -1573, -946, 1204, 1416, -652, -1670, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, 805, -222, -1051, 632, 805, -946, -435, 1116, -554, 153, 724, -435, -554, 652, 300, -769, -1420, 392, 1856, -1116, -1420, 1670, 769, -1970, -1024, 283, 1338, -805, -1024, 1204, 554, -1420, 283, -78, -369, 222, 283, -332, -153, 392, 1338, -369, -1748, 1051, 1338, -1573, -724, 1856, 1204, -332, -1573, 946, 1204, -1416, -652, 1670, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, 805, -632, -435, 1116, -805, -222, 1051, -946, -554, 435, 300, -769, 554, 153, -724, 652, -1420, 1116, 769, -1970, 1420, 392, -1856, 1670, -1024, 805, 554, -1420, 1024, 283, -1338, 1204, 283, -222, -153, 392, -283, -78, 369, -332, 1338, -1051, -724, 1856, -1338, -369, 1748, -1573, 1204, -946, -652, 1670, -1204, -332, 1573, -1416, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, 805, -946, 435, 222, -805, 1116, -1051, 632, -554, 652, -300, -153, 554, -769, 724, -435, -1420, 1670, -769, -392, 1420, -1970, 1856, -1116, -1024, 1204, -554, -283, 1024, -1420, 1338, -805, 283, -332, 153, 78, -283, 392, -369, 222, 1338, -1573, 724, 369, -1338, 1856, -1748, 1051, 1204, -1416, 652, 332, -1204, 1670, -1573, 946, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, 805, -1116, 1051, -946, 805, -632, 435, -222, -554, 769, -724, 652, -554, 435, -300, 153, -1420, 1970, -1856, 1670, -1420, 1116, -769, 392, -1024, 1420, -1338, 1204, -1024, 805, -554, 283, 283, -392, 369, -332, 283, -222, 153, -78, 1338, -1856, 1748, -1573, 1338, -1051, 724, -369, 1204, -1670, 1573, -1416, 1204, -946, 652, -332, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, 283, 392, 369, 332, 283, 222, 153, 78, -1338, -1856, -1748, -1573, -1338, -1051, -724, -369, -805, -1116, -1051, -946, -805, -632, -435, -222, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, 1204, 1670, 1573, 1416, 1204, 946, 652, 332, -554, -769, -724, -652, -554, -435, -300, -153, -1420, -1970, -1856, -1670, -1420, -1116, -769, -392, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, 283, 332, 153, -78, -283, -392, -369, -222, -1338, -1573, -724, 369, 1338, 1856, 1748, 1051, -805, -946, -435, 222, 805, 1116, 1051, 632, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, 1204, 1416, 652, -332, -1204, -1670, -1573, -946, -554, -652, -300, 153, 554, 769, 724, 435, -1420, -1670, -769, 392, 1420, 1970, 1856, 1116, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, 283, 222, -153, -392, -283, 78, 369, 332, -1338, -1051, 724, 1856, 1338, -369, -1748, -1573, -805, -632, 435, 1116, 805, -222, -1051, -946, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, 1204, 946, -652, -1670, -1204, 332, 1573, 1416, -554, -435, 300, 769, 554, -153, -724, -652, -1420, -1116, 769, 1970, 1420, -392, -1856, -1670, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, 283, 78, -369, -222, 283, 332, -153, -392, -1338, -369, 1748, 1051, -1338, -1573, 724, 1856, -805, -222, 1051, 632, -805, -946, 435, 1116, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, 1204, 332, -1573, -946, 1204, 1416, -652, -1670, -554, -153, 724, 435, -554, -652, 300, 769, -1420, -392, 1856, 1116, -1420, -1670, 769, 1970, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, 283, -78, -369, 222, 283, -332, -153, 392, -1338, 369, 1748, -1051, -1338, 1573, 724, -1856, -805, 222, 1051, -632, -805, 946, 435, -1116, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, 1204, -332, -1573, 946, 1204, -1416, -652, 1670, -554, 153, 724, -435, -554, 652, 300, -769, -1420, 392, 1856, -1116, -1420, 1670, 769, -1970, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, 283, -222, -153, 392, -283, -78, 369, -332, -1338, 1051, 724, -1856, 1338, 369, -1748, 1573, -805, 632, 435, -1116, 805, 222, -1051, 946, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, 1204, -946, -652, 1670, -1204, -332, 1573, -1416, -554, 435, 300, -769, 554, 153, -724, 652, -1420, 1116, 769, -1970, 1420, 392, -1856, 1670, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, 283, -332, 153, 78, -283, 392, -369, 222, -1338, 1573, -724, -369, 1338, -1856, 1748, -1051, -805, 946, -435, -222, 805, -1116, 1051, -632, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, 1204, -1416, 652, 332, -1204, 1670, -1573, 946, -554, 652, -300, -153, 554, -769, 724, -435, -1420, 1670, -769, -392, 1420, -1970, 1856, -1116, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, 283, -392, 369, -332, 283, -222, 153, -78, -1338, 1856, -1748, 1573, -1338, 1051, -724, 369, -805, 1116, -1051, 946, -805, 632, -435, 222, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, 1204, -1670, 1573, -1416, 1204, -946, 652, -332, -554, 769, -724, 652, -554, 435, -300, 153, -1420, 1970, -1856, 1670, -1420, 1116, -769, 392, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, -283, -392, -369, -332, -283, -222, -153, -78, -1338, -1856, -1748, -1573, -1338, -1051, -724, -369, 805, 1116, 1051, 946, 805, 632, 435, 222, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, -1204, -1670, -1573, -1416, -1204, -946, -652, -332, -554, -769, -724, -652, -554, -435, -300, -153, 1420, 1970, 1856, 1670, 1420, 1116, 769, 392, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, -283, -332, -153, 78, 283, 392, 369, 222, -1338, -1573, -724, 369, 1338, 1856, 1748, 1051, 805, 946, 435, -222, -805, -1116, -1051, -632, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, -1204, -1416, -652, 332, 1204, 1670, 1573, 946, -554, -652, -300, 153, 554, 769, 724, 435, 1420, 1670, 769, -392, -1420, -1970, -1856, -1116, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, -283, -222, 153, 392, 283, -78, -369, -332, -1338, -1051, 724, 1856, 1338, -369, -1748, -1573, 805, 632, -435, -1116, -805, 222, 1051, 946, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, -1204, -946, 652, 1670, 1204, -332, -1573, -1416, -554, -435, 300, 769, 554, -153, -724, -652, 1420, 1116, -769, -1970, -1420, 392, 1856, 1670, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, -283, -78, 369, 222, -283, -332, 153, 392, -1338, -369, 1748, 1051, -1338, -1573, 724, 1856, 805, 222, -1051, -632, 805, 946, -435, -1116, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, -1204, -332, 1573, 946, -1204, -1416, 652, 1670, -554, -153, 724, 435, -554, -652, 300, 769, 1420, 392, -1856, -1116, 1420, 1670, -769, -1970, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, -283, 78, 369, -222, -283, 332, 153, -392, -1338, 369, 1748, -1051, -1338, 1573, 724, -1856, 805, -222, -1051, 632, 805, -946, -435, 1116, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, -1204, 332, 1573, -946, -1204, 1416, 652, -1670, -554, 153, 724, -435, -554, 652, 300, -769, 1420, -392, -1856, 1116, 1420, -1670, -769, 1970, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, -283, 222, 153, -392, 283, 78, -369, 332, -1338, 1051, 724, -1856, 1338, 369, -1748, 1573, 805, -632, -435, 1116, -805, -222, 1051, -946, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, -1204, 946, 652, -1670, 1204, 332, -1573, 1416, -554, 435, 300, -769, 554, 153, -724, 652, 1420, -1116, -769, 1970, -1420, -392, 1856, -1670, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, -283, 332, -153, -78, 283, -392, 369, -222, -1338, 1573, -724, -369, 1338, -1856, 1748, -1051, 805, -946, 435, 222, -805, 1116, -1051, 632, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, -1204, 1416, -652, -332, 1204, -1670, 1573, -946, -554, 652, -300, -153, 554, -769, 724, -435, 1420, -1670, 769, 392, -1420, 1970, -1856, 1116, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, -283, 392, -369, 332, -283, 222, -153, 78, -1338, 1856, -1748, 1573, -1338, 1051, -724, 369, 805, -1116, 1051, -946, 805, -632, 435, -222, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, -1204, 1670, -1573, 1416, -1204, 946, -652, 332, -554, 769, -724, 652, -554, 435, -300, 153, 1420, -1970, 1856, -1670, 1420, -1116, 769, -392, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, -805, -1116, -1051, -946, -805, -632, -435, -222, -554, -769, -724, -652, -554, -435, -300, -153, 1420, 1970, 1856, 1670, 1420, 1116, 769, 392, -1024, -1420, -1338, -1204, -1024, -805, -554, -283, -283, -392, -369, -332, -283, -222, -153, -78, 1338, 1856, 1748, 1573, 1338, 1051, 724, 369, -1204, -1670, -1573, -1416, -1204, -946, -652, -332, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, -805, -946, -435, 222, 805, 1116, 1051, 632, -554, -652, -300, 153, 554, 769, 724, 435, 1420, 1670, 769, -392, -1420, -1970, -1856, -1116, -1024, -1204, -554, 283, 1024, 1420, 1338, 805, -283, -332, -153, 78, 283, 392, 369, 222, 1338, 1573, 724, -369, -1338, -1856, -1748, -1051, -1204, -1416, -652, 332, 1204, 1670, 1573, 946, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, -805, -632, 435, 1116, 805, -222, -1051, -946, -554, -435, 300, 769, 554, -153, -724, -652, 1420, 1116, -769, -1970, -1420, 392, 1856, 1670, -1024, -805, 554, 1420, 1024, -283, -1338, -1204, -283, -222, 153, 392, 283, -78, -369, -332, 1338, 1051, -724, -1856, -1338, 369, 1748, 1573, -1204, -946, 652, 1670, 1204, -332, -1573, -1416, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, -805, -222, 1051, 632, -805, -946, 435, 1116, -554, -153, 724, 435, -554, -652, 300, 769, 1420, 392, -1856, -1116, 1420, 1670, -769, -1970, -1024, -283, 1338, 805, -1024, -1204, 554, 1420, -283, -78, 369, 222, -283, -332, 153, 392, 1338, 369, -1748, -1051, 1338, 1573, -724, -1856, -1204, -332, 1573, 946, -1204, -1416, 652, 1670, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, -805, 222, 1051, -632, -805, 946, 435, -1116, -554, 153, 724, -435, -554, 652, 300, -769, 1420, -392, -1856, 1116, 1420, -1670, -769, 1970, -1024, 283, 1338, -805, -1024, 1204, 554, -1420, -283, 78, 369, -222, -283, 332, 153, -392, 1338, -369, -1748, 1051, 1338, -1573, -724, 1856, -1204, 332, 1573, -946, -1204, 1416, 652, -1670, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, -805, 632, 435, -1116, 805, 222, -1051, 946, -554, 435, 300, -769, 554, 153, -724, 652, 1420, -1116, -769, 1970, -1420, -392, 1856, -1670, -1024, 805, 554, -1420, 1024, 283, -1338, 1204, -283, 222, 153, -392, 283, 78, -369, 332, 1338, -1051, -724, 1856, -1338, -369, 1748, -1573, -1204, 946, 652, -1670, 1204, 332, -1573, 1416, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, -805, 946, -435, -222, 805, -1116, 1051, -632, -554, 652, -300, -153, 554, -769, 724, -435, 1420, -1670, 769, 392, -1420, 1970, -1856, 1116, -1024, 1204, -554, -283, 1024, -1420, 1338, -805, -283, 332, -153, -78, 283, -392, 369, -222, 1338, -1573, 724, 369, -1338, 1856, -1748, 1051, -1204, 1416, -652, -332, 1204, -1670, 1573, -946, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, -805, 1116, -1051, 946, -805, 632, -435, 222, -554, 769, -724, 652, -554, 435, -300, 153, 1420, -1970, 1856, -1670, 1420, -1116, 769, -392, -1024, 1420, -1338, 1204, -1024, 805, -554, 283, -283, 392, -369, 332, -283, 222, -153, 78, 1338, -1856, 1748, -1573, 1338, -1051, 724, -369, -1204, 1670, -1573, 1416, -1204, 946, -652, 332, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, -1204, -1670, -1573, -1416, -1204, -946, -652, -332, 554, 769, 724, 652, 554, 435, 300, 153, 283, 392, 369, 332, 283, 222, 153, 78, -1024, -1420, -1338, -1204, -1024, -805, -554, -283, 1420, 1970, 1856, 1670, 1420, 1116, 769, 392, -1338, -1856, -1748, -1573, -1338, -1051, -724, -369, 805, 1116, 1051, 946, 805, 632, 435, 222, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, -1204, -1416, -652, 332, 1204, 1670, 1573, 946, 554, 652, 300, -153, -554, -769, -724, -435, 283, 332, 153, -78, -283, -392, -369, -222, -1024, -1204, -554, 283, 1024, 1420, 1338, 805, 1420, 1670, 769, -392, -1420, -1970, -1856, -1116, -1338, -1573, -724, 369, 1338, 1856, 1748, 1051, 805, 946, 435, -222, -805, -1116, -1051, -632, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, -1204, -946, 652, 1670, 1204, -332, -1573, -1416, 554, 435, -300, -769, -554, 153, 724, 652, 283, 222, -153, -392, -283, 78, 369, 332, -1024, -805, 554, 1420, 1024, -283, -1338, -1204, 1420, 1116, -769, -1970, -1420, 392, 1856, 1670, -1338, -1051, 724, 1856, 1338, -369, -1748, -1573, 805, 632, -435, -1116, -805, 222, 1051, 946, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, -1204, -332, 1573, 946, -1204, -1416, 652, 1670, 554, 153, -724, -435, 554, 652, -300, -769, 283, 78, -369, -222, 283, 332, -153, -392, -1024, -283, 1338, 805, -1024, -1204, 554, 1420, 1420, 392, -1856, -1116, 1420, 1670, -769, -1970, -1338, -369, 1748, 1051, -1338, -1573, 724, 1856, 805, 222, -1051, -632, 805, 946, -435, -1116, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, -1204, 332, 1573, -946, -1204, 1416, 652, -1670, 554, -153, -724, 435, 554, -652, -300, 769, 283, -78, -369, 222, 283, -332, -153, 392, -1024, 283, 1338, -805, -1024, 1204, 554, -1420, 1420, -392, -1856, 1116, 1420, -1670, -769, 1970, -1338, 369, 1748, -1051, -1338, 1573, 724, -1856, 805, -222, -1051, 632, 805, -946, -435, 1116, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, -1204, 946, 652, -1670, 1204, 332, -1573, 1416, 554, -435, -300, 769, -554, -153, 724, -652, 283, -222, -153, 392, -283, -78, 369, -332, -1024, 805, 554, -1420, 1024, 283, -1338, 1204, 1420, -1116, -769, 1970, -1420, -392, 1856, -1670, -1338, 1051, 724, -1856, 1338, 369, -1748, 1573, 805, -632, -435, 1116, -805, -222, 1051, -946, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, -1204, 1416, -652, -332, 1204, -1670, 1573, -946, 554, -652, 300, 153, -554, 769, -724, 435, 283, -332, 153, 78, -283, 392, -369, 222, -1024, 1204, -554, -283, 1024, -1420, 1338, -805, 1420, -1670, 769, 392, -1420, 1970, -1856, 1116, -1338, 1573, -724, -369, 1338, -1856, 1748, -1051, 805, -946, 435, 222, -805, 1116, -1051, 632, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, -1204, 1670, -1573, 1416, -1204, 946, -652, 332, 554, -769, 724, -652, 554, -435, 300, -153, 283, -392, 369, -332, 283, -222, 153, -78, -1024, 1420, -1338, 1204, -1024, 805, -554, 283, 1420, -1970, 1856, -1670, 1420, -1116, 769, -392, -1338, 1856, -1748, 1573, -1338, 1051, -724, 369, 805, -1116, 1051, -946, 805, -632, 435, -222, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, -1420, -1970, -1856, -1670, -1420, -1116, -769, -392, 1338, 1856, 1748, 1573, 1338, 1051, 724, 369, -1204, -1670, -1573, -1416, -1204, -946, -652, -332, 1024, 1420, 1338, 1204, 1024, 805, 554, 283, -805, -1116, -1051, -946, -805, -632, -435, -222, 554, 769, 724, 652, 554, 435, 300, 153, -283, -392, -369, -332, -283, -222, -153, -78, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, -1420, -1670, -769, 392, 1420, 1970, 1856, 1116, 1338, 1573, 724, -369, -1338, -1856, -1748, -1051, -1204, -1416, -652, 332, 1204, 1670, 1573, 946, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, -805, -946, -435, 222, 805, 1116, 1051, 632, 554, 652, 300, -153, -554, -769, -724, -435, -283, -332, -153, 78, 283, 392, 369, 222, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, -1420, -1116, 769, 1970, 1420, -392, -1856, -1670, 1338, 1051, -724, -1856, -1338, 369, 1748, 1573, -1204, -946, 652, 1670, 1204, -332, -1573, -1416, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, -805, -632, 435, 1116, 805, -222, -1051, -946, 554, 435, -300, -769, -554, 153, 724, 652, -283, -222, 153, 392, 283, -78, -369, -332, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, -1420, -392, 1856, 1116, -1420, -1670, 769, 1970, 1338, 369, -1748, -1051, 1338, 1573, -724, -1856, -1204, -332, 1573, 946, -1204, -1416, 652, 1670, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, -805, -222, 1051, 632, -805, -946, 435, 1116, 554, 153, -724, -435, 554, 652, -300, -769, -283, -78, 369, 222, -283, -332, 153, 392, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, -1420, 392, 1856, -1116, -1420, 1670, 769, -1970, 1338, -369, -1748, 1051, 1338, -1573, -724, 1856, -1204, 332, 1573, -946, -1204, 1416, 652, -1670, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, -805, 222, 1051, -632, -805, 946, 435, -1116, 554, -153, -724, 435, 554, -652, -300, 769, -283, 78, 369, -222, -283, 332, 153, -392, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, -1420, 1116, 769, -1970, 1420, 392, -1856, 1670, 1338, -1051, -724, 1856, -1338, -369, 1748, -1573, -1204, 946, 652, -1670, 1204, 332, -1573, 1416, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, -805, 632, 435, -1116, 805, 222, -1051, 946, 554, -435, -300, 769, -554, -153, 724, -652, -283, 222, 153, -392, 283, 78, -369, 332, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, -1420, 1670, -769, -392, 1420, -1970, 1856, -1116, 1338, -1573, 724, 369, -1338, 1856, -1748, 1051, -1204, 1416, -652, -332, 1204, -1670, 1573, -946, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, -805, 946, -435, -222, 805, -1116, 1051, -632, 554, -652, 300, 153, -554, 769, -724, 435, -283, 332, -153, -78, 283, -392, 369, -222, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, -1420, 1970, -1856, 1670, -1420, 1116, -769, 392, 1338, -1856, 1748, -1573, 1338, -1051, 724, -369, -1204, 1670, -1573, 1416, -1204, 946, -652, 332, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, -805, 1116, -1051, 946, -805, 632, -435, 222, 554, -769, 724, -652, 554, -435, 300, -153, -283, 392, -369, 332, -283, 222, -153, 78, }; // precalculated int values for 8x8 FDCT, multplied by 8192 const int icos_fdct_8x8[ 4096 ] = { 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 805, 805, 805, 805, 805, 805, 805, 805, 283, 283, 283, 283, 283, 283, 283, 283, -283, -283, -283, -283, -283, -283, -283, -283, -805, -805, -805, -805, -805, -805, -805, -805, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1420, -1420, -1420, -1420, -1420, -1420, -1420, -1420, 1970, 1670, 1116, 392, -392, -1116, -1670, -1970, 1670, 1416, 946, 332, -332, -946, -1416, -1670, 1116, 946, 632, 222, -222, -632, -946, -1116, 392, 332, 222, 78, -78, -222, -332, -392, -392, -332, -222, -78, 78, 222, 332, 392, -1116, -946, -632, -222, 222, 632, 946, 1116, -1670, -1416, -946, -332, 332, 946, 1416, 1670, -1970, -1670, -1116, -392, 392, 1116, 1670, 1970, 1856, 769, -769, -1856, -1856, -769, 769, 1856, 1573, 652, -652, -1573, -1573, -652, 652, 1573, 1051, 435, -435, -1051, -1051, -435, 435, 1051, 369, 153, -153, -369, -369, -153, 153, 369, -369, -153, 153, 369, 369, 153, -153, -369, -1051, -435, 435, 1051, 1051, 435, -435, -1051, -1573, -652, 652, 1573, 1573, 652, -652, -1573, -1856, -769, 769, 1856, 1856, 769, -769, -1856, 1670, -392, -1970, -1116, 1116, 1970, 392, -1670, 1416, -332, -1670, -946, 946, 1670, 332, -1416, 946, -222, -1116, -632, 632, 1116, 222, -946, 332, -78, -392, -222, 222, 392, 78, -332, -332, 78, 392, 222, -222, -392, -78, 332, -946, 222, 1116, 632, -632, -1116, -222, 946, -1416, 332, 1670, 946, -946, -1670, -332, 1416, -1670, 392, 1970, 1116, -1116, -1970, -392, 1670, 1420, -1420, -1420, 1420, 1420, -1420, -1420, 1420, 1204, -1204, -1204, 1204, 1204, -1204, -1204, 1204, 805, -805, -805, 805, 805, -805, -805, 805, 283, -283, -283, 283, 283, -283, -283, 283, -283, 283, 283, -283, -283, 283, 283, -283, -805, 805, 805, -805, -805, 805, 805, -805, -1204, 1204, 1204, -1204, -1204, 1204, 1204, -1204, -1420, 1420, 1420, -1420, -1420, 1420, 1420, -1420, 1116, -1970, 392, 1670, -1670, -392, 1970, -1116, 946, -1670, 332, 1416, -1416, -332, 1670, -946, 632, -1116, 222, 946, -946, -222, 1116, -632, 222, -392, 78, 332, -332, -78, 392, -222, -222, 392, -78, -332, 332, 78, -392, 222, -632, 1116, -222, -946, 946, 222, -1116, 632, -946, 1670, -332, -1416, 1416, 332, -1670, 946, -1116, 1970, -392, -1670, 1670, 392, -1970, 1116, 769, -1856, 1856, -769, -769, 1856, -1856, 769, 652, -1573, 1573, -652, -652, 1573, -1573, 652, 435, -1051, 1051, -435, -435, 1051, -1051, 435, 153, -369, 369, -153, -153, 369, -369, 153, -153, 369, -369, 153, 153, -369, 369, -153, -435, 1051, -1051, 435, 435, -1051, 1051, -435, -652, 1573, -1573, 652, 652, -1573, 1573, -652, -769, 1856, -1856, 769, 769, -1856, 1856, -769, 392, -1116, 1670, -1970, 1970, -1670, 1116, -392, 332, -946, 1416, -1670, 1670, -1416, 946, -332, 222, -632, 946, -1116, 1116, -946, 632, -222, 78, -222, 332, -392, 392, -332, 222, -78, -78, 222, -332, 392, -392, 332, -222, 78, -222, 632, -946, 1116, -1116, 946, -632, 222, -332, 946, -1416, 1670, -1670, 1416, -946, 332, -392, 1116, -1670, 1970, -1970, 1670, -1116, 392, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 554, 554, 554, 554, 554, 554, 554, 554, -554, -554, -554, -554, -554, -554, -554, -554, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -554, -554, -554, -554, -554, -554, -554, -554, 554, 554, 554, 554, 554, 554, 554, 554, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1856, 1573, 1051, 369, -369, -1051, -1573, -1856, 769, 652, 435, 153, -153, -435, -652, -769, -769, -652, -435, -153, 153, 435, 652, 769, -1856, -1573, -1051, -369, 369, 1051, 1573, 1856, -1856, -1573, -1051, -369, 369, 1051, 1573, 1856, -769, -652, -435, -153, 153, 435, 652, 769, 769, 652, 435, 153, -153, -435, -652, -769, 1856, 1573, 1051, 369, -369, -1051, -1573, -1856, 1748, 724, -724, -1748, -1748, -724, 724, 1748, 724, 300, -300, -724, -724, -300, 300, 724, -724, -300, 300, 724, 724, 300, -300, -724, -1748, -724, 724, 1748, 1748, 724, -724, -1748, -1748, -724, 724, 1748, 1748, 724, -724, -1748, -724, -300, 300, 724, 724, 300, -300, -724, 724, 300, -300, -724, -724, -300, 300, 724, 1748, 724, -724, -1748, -1748, -724, 724, 1748, 1573, -369, -1856, -1051, 1051, 1856, 369, -1573, 652, -153, -769, -435, 435, 769, 153, -652, -652, 153, 769, 435, -435, -769, -153, 652, -1573, 369, 1856, 1051, -1051, -1856, -369, 1573, -1573, 369, 1856, 1051, -1051, -1856, -369, 1573, -652, 153, 769, 435, -435, -769, -153, 652, 652, -153, -769, -435, 435, 769, 153, -652, 1573, -369, -1856, -1051, 1051, 1856, 369, -1573, 1338, -1338, -1338, 1338, 1338, -1338, -1338, 1338, 554, -554, -554, 554, 554, -554, -554, 554, -554, 554, 554, -554, -554, 554, 554, -554, -1338, 1338, 1338, -1338, -1338, 1338, 1338, -1338, -1338, 1338, 1338, -1338, -1338, 1338, 1338, -1338, -554, 554, 554, -554, -554, 554, 554, -554, 554, -554, -554, 554, 554, -554, -554, 554, 1338, -1338, -1338, 1338, 1338, -1338, -1338, 1338, 1051, -1856, 369, 1573, -1573, -369, 1856, -1051, 435, -769, 153, 652, -652, -153, 769, -435, -435, 769, -153, -652, 652, 153, -769, 435, -1051, 1856, -369, -1573, 1573, 369, -1856, 1051, -1051, 1856, -369, -1573, 1573, 369, -1856, 1051, -435, 769, -153, -652, 652, 153, -769, 435, 435, -769, 153, 652, -652, -153, 769, -435, 1051, -1856, 369, 1573, -1573, -369, 1856, -1051, 724, -1748, 1748, -724, -724, 1748, -1748, 724, 300, -724, 724, -300, -300, 724, -724, 300, -300, 724, -724, 300, 300, -724, 724, -300, -724, 1748, -1748, 724, 724, -1748, 1748, -724, -724, 1748, -1748, 724, 724, -1748, 1748, -724, -300, 724, -724, 300, 300, -724, 724, -300, 300, -724, 724, -300, -300, 724, -724, 300, 724, -1748, 1748, -724, -724, 1748, -1748, 724, 369, -1051, 1573, -1856, 1856, -1573, 1051, -369, 153, -435, 652, -769, 769, -652, 435, -153, -153, 435, -652, 769, -769, 652, -435, 153, -369, 1051, -1573, 1856, -1856, 1573, -1051, 369, -369, 1051, -1573, 1856, -1856, 1573, -1051, 369, -153, 435, -652, 769, -769, 652, -435, 153, 153, -435, 652, -769, 769, -652, 435, -153, 369, -1051, 1573, -1856, 1856, -1573, 1051, -369, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, -283, -283, -283, -283, -283, -283, -283, -283, -1420, -1420, -1420, -1420, -1420, -1420, -1420, -1420, -805, -805, -805, -805, -805, -805, -805, -805, 805, 805, 805, 805, 805, 805, 805, 805, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 283, 283, 283, 283, 283, 283, 283, 283, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, 1670, 1416, 946, 332, -332, -946, -1416, -1670, -392, -332, -222, -78, 78, 222, 332, 392, -1970, -1670, -1116, -392, 392, 1116, 1670, 1970, -1116, -946, -632, -222, 222, 632, 946, 1116, 1116, 946, 632, 222, -222, -632, -946, -1116, 1970, 1670, 1116, 392, -392, -1116, -1670, -1970, 392, 332, 222, 78, -78, -222, -332, -392, -1670, -1416, -946, -332, 332, 946, 1416, 1670, 1573, 652, -652, -1573, -1573, -652, 652, 1573, -369, -153, 153, 369, 369, 153, -153, -369, -1856, -769, 769, 1856, 1856, 769, -769, -1856, -1051, -435, 435, 1051, 1051, 435, -435, -1051, 1051, 435, -435, -1051, -1051, -435, 435, 1051, 1856, 769, -769, -1856, -1856, -769, 769, 1856, 369, 153, -153, -369, -369, -153, 153, 369, -1573, -652, 652, 1573, 1573, 652, -652, -1573, 1416, -332, -1670, -946, 946, 1670, 332, -1416, -332, 78, 392, 222, -222, -392, -78, 332, -1670, 392, 1970, 1116, -1116, -1970, -392, 1670, -946, 222, 1116, 632, -632, -1116, -222, 946, 946, -222, -1116, -632, 632, 1116, 222, -946, 1670, -392, -1970, -1116, 1116, 1970, 392, -1670, 332, -78, -392, -222, 222, 392, 78, -332, -1416, 332, 1670, 946, -946, -1670, -332, 1416, 1204, -1204, -1204, 1204, 1204, -1204, -1204, 1204, -283, 283, 283, -283, -283, 283, 283, -283, -1420, 1420, 1420, -1420, -1420, 1420, 1420, -1420, -805, 805, 805, -805, -805, 805, 805, -805, 805, -805, -805, 805, 805, -805, -805, 805, 1420, -1420, -1420, 1420, 1420, -1420, -1420, 1420, 283, -283, -283, 283, 283, -283, -283, 283, -1204, 1204, 1204, -1204, -1204, 1204, 1204, -1204, 946, -1670, 332, 1416, -1416, -332, 1670, -946, -222, 392, -78, -332, 332, 78, -392, 222, -1116, 1970, -392, -1670, 1670, 392, -1970, 1116, -632, 1116, -222, -946, 946, 222, -1116, 632, 632, -1116, 222, 946, -946, -222, 1116, -632, 1116, -1970, 392, 1670, -1670, -392, 1970, -1116, 222, -392, 78, 332, -332, -78, 392, -222, -946, 1670, -332, -1416, 1416, 332, -1670, 946, 652, -1573, 1573, -652, -652, 1573, -1573, 652, -153, 369, -369, 153, 153, -369, 369, -153, -769, 1856, -1856, 769, 769, -1856, 1856, -769, -435, 1051, -1051, 435, 435, -1051, 1051, -435, 435, -1051, 1051, -435, -435, 1051, -1051, 435, 769, -1856, 1856, -769, -769, 1856, -1856, 769, 153, -369, 369, -153, -153, 369, -369, 153, -652, 1573, -1573, 652, 652, -1573, 1573, -652, 332, -946, 1416, -1670, 1670, -1416, 946, -332, -78, 222, -332, 392, -392, 332, -222, 78, -392, 1116, -1670, 1970, -1970, 1670, -1116, 392, -222, 632, -946, 1116, -1116, 946, -632, 222, 222, -632, 946, -1116, 1116, -946, 632, -222, 392, -1116, 1670, -1970, 1970, -1670, 1116, -392, 78, -222, 332, -392, 392, -332, 222, -78, -332, 946, -1416, 1670, -1670, 1416, -946, 332, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, -1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1420, 1204, 805, 283, -283, -805, -1204, -1420, -1420, -1204, -805, -283, 283, 805, 1204, 1420, -1420, -1204, -805, -283, 283, 805, 1204, 1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, -1420, -1204, -805, -283, 283, 805, 1204, 1420, -1420, -1204, -805, -283, 283, 805, 1204, 1420, 1420, 1204, 805, 283, -283, -805, -1204, -1420, 1338, 554, -554, -1338, -1338, -554, 554, 1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1338, 554, -554, -1338, 1338, 554, -554, -1338, -1338, -554, 554, 1338, 1204, -283, -1420, -805, 805, 1420, 283, -1204, -1204, 283, 1420, 805, -805, -1420, -283, 1204, -1204, 283, 1420, 805, -805, -1420, -283, 1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, -1204, 283, 1420, 805, -805, -1420, -283, 1204, -1204, 283, 1420, 805, -805, -1420, -283, 1204, 1204, -283, -1420, -805, 805, 1420, 283, -1204, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 1024, -1024, 1024, -1024, -1024, 1024, 1024, -1024, -1024, 1024, 805, -1420, 283, 1204, -1204, -283, 1420, -805, -805, 1420, -283, -1204, 1204, 283, -1420, 805, -805, 1420, -283, -1204, 1204, 283, -1420, 805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, -805, 1420, -283, -1204, 1204, 283, -1420, 805, -805, 1420, -283, -1204, 1204, 283, -1420, 805, 805, -1420, 283, 1204, -1204, -283, 1420, -805, 554, -1338, 1338, -554, -554, 1338, -1338, 554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 554, -1338, 1338, -554, 554, -1338, 1338, -554, -554, 1338, -1338, 554, 283, -805, 1204, -1420, 1420, -1204, 805, -283, -283, 805, -1204, 1420, -1420, 1204, -805, 283, -283, 805, -1204, 1420, -1420, 1204, -805, 283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, -283, 805, -1204, 1420, -1420, 1204, -805, 283, -283, 805, -1204, 1420, -1420, 1204, -805, 283, 283, -805, 1204, -1420, 1420, -1204, 805, -283, 805, 805, 805, 805, 805, 805, 805, 805, -1420, -1420, -1420, -1420, -1420, -1420, -1420, -1420, 283, 283, 283, 283, 283, 283, 283, 283, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -283, -283, -283, -283, -283, -283, -283, -283, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, -805, -805, -805, -805, -805, -805, -805, -805, 1116, 946, 632, 222, -222, -632, -946, -1116, -1970, -1670, -1116, -392, 392, 1116, 1670, 1970, 392, 332, 222, 78, -78, -222, -332, -392, 1670, 1416, 946, 332, -332, -946, -1416, -1670, -1670, -1416, -946, -332, 332, 946, 1416, 1670, -392, -332, -222, -78, 78, 222, 332, 392, 1970, 1670, 1116, 392, -392, -1116, -1670, -1970, -1116, -946, -632, -222, 222, 632, 946, 1116, 1051, 435, -435, -1051, -1051, -435, 435, 1051, -1856, -769, 769, 1856, 1856, 769, -769, -1856, 369, 153, -153, -369, -369, -153, 153, 369, 1573, 652, -652, -1573, -1573, -652, 652, 1573, -1573, -652, 652, 1573, 1573, 652, -652, -1573, -369, -153, 153, 369, 369, 153, -153, -369, 1856, 769, -769, -1856, -1856, -769, 769, 1856, -1051, -435, 435, 1051, 1051, 435, -435, -1051, 946, -222, -1116, -632, 632, 1116, 222, -946, -1670, 392, 1970, 1116, -1116, -1970, -392, 1670, 332, -78, -392, -222, 222, 392, 78, -332, 1416, -332, -1670, -946, 946, 1670, 332, -1416, -1416, 332, 1670, 946, -946, -1670, -332, 1416, -332, 78, 392, 222, -222, -392, -78, 332, 1670, -392, -1970, -1116, 1116, 1970, 392, -1670, -946, 222, 1116, 632, -632, -1116, -222, 946, 805, -805, -805, 805, 805, -805, -805, 805, -1420, 1420, 1420, -1420, -1420, 1420, 1420, -1420, 283, -283, -283, 283, 283, -283, -283, 283, 1204, -1204, -1204, 1204, 1204, -1204, -1204, 1204, -1204, 1204, 1204, -1204, -1204, 1204, 1204, -1204, -283, 283, 283, -283, -283, 283, 283, -283, 1420, -1420, -1420, 1420, 1420, -1420, -1420, 1420, -805, 805, 805, -805, -805, 805, 805, -805, 632, -1116, 222, 946, -946, -222, 1116, -632, -1116, 1970, -392, -1670, 1670, 392, -1970, 1116, 222, -392, 78, 332, -332, -78, 392, -222, 946, -1670, 332, 1416, -1416, -332, 1670, -946, -946, 1670, -332, -1416, 1416, 332, -1670, 946, -222, 392, -78, -332, 332, 78, -392, 222, 1116, -1970, 392, 1670, -1670, -392, 1970, -1116, -632, 1116, -222, -946, 946, 222, -1116, 632, 435, -1051, 1051, -435, -435, 1051, -1051, 435, -769, 1856, -1856, 769, 769, -1856, 1856, -769, 153, -369, 369, -153, -153, 369, -369, 153, 652, -1573, 1573, -652, -652, 1573, -1573, 652, -652, 1573, -1573, 652, 652, -1573, 1573, -652, -153, 369, -369, 153, 153, -369, 369, -153, 769, -1856, 1856, -769, -769, 1856, -1856, 769, -435, 1051, -1051, 435, 435, -1051, 1051, -435, 222, -632, 946, -1116, 1116, -946, 632, -222, -392, 1116, -1670, 1970, -1970, 1670, -1116, 392, 78, -222, 332, -392, 392, -332, 222, -78, 332, -946, 1416, -1670, 1670, -1416, 946, -332, -332, 946, -1416, 1670, -1670, 1416, -946, 332, -78, 222, -332, 392, -392, 332, -222, 78, 392, -1116, 1670, -1970, 1970, -1670, 1116, -392, -222, 632, -946, 1116, -1116, 946, -632, 222, 554, 554, 554, 554, 554, 554, 554, 554, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, -1338, 554, 554, 554, 554, 554, 554, 554, 554, 769, 652, 435, 153, -153, -435, -652, -769, -1856, -1573, -1051, -369, 369, 1051, 1573, 1856, 1856, 1573, 1051, 369, -369, -1051, -1573, -1856, -769, -652, -435, -153, 153, 435, 652, 769, -769, -652, -435, -153, 153, 435, 652, 769, 1856, 1573, 1051, 369, -369, -1051, -1573, -1856, -1856, -1573, -1051, -369, 369, 1051, 1573, 1856, 769, 652, 435, 153, -153, -435, -652, -769, 724, 300, -300, -724, -724, -300, 300, 724, -1748, -724, 724, 1748, 1748, 724, -724, -1748, 1748, 724, -724, -1748, -1748, -724, 724, 1748, -724, -300, 300, 724, 724, 300, -300, -724, -724, -300, 300, 724, 724, 300, -300, -724, 1748, 724, -724, -1748, -1748, -724, 724, 1748, -1748, -724, 724, 1748, 1748, 724, -724, -1748, 724, 300, -300, -724, -724, -300, 300, 724, 652, -153, -769, -435, 435, 769, 153, -652, -1573, 369, 1856, 1051, -1051, -1856, -369, 1573, 1573, -369, -1856, -1051, 1051, 1856, 369, -1573, -652, 153, 769, 435, -435, -769, -153, 652, -652, 153, 769, 435, -435, -769, -153, 652, 1573, -369, -1856, -1051, 1051, 1856, 369, -1573, -1573, 369, 1856, 1051, -1051, -1856, -369, 1573, 652, -153, -769, -435, 435, 769, 153, -652, 554, -554, -554, 554, 554, -554, -554, 554, -1338, 1338, 1338, -1338, -1338, 1338, 1338, -1338, 1338, -1338, -1338, 1338, 1338, -1338, -1338, 1338, -554, 554, 554, -554, -554, 554, 554, -554, -554, 554, 554, -554, -554, 554, 554, -554, 1338, -1338, -1338, 1338, 1338, -1338, -1338, 1338, -1338, 1338, 1338, -1338, -1338, 1338, 1338, -1338, 554, -554, -554, 554, 554, -554, -554, 554, 435, -769, 153, 652, -652, -153, 769, -435, -1051, 1856, -369, -1573, 1573, 369, -1856, 1051, 1051, -1856, 369, 1573, -1573, -369, 1856, -1051, -435, 769, -153, -652, 652, 153, -769, 435, -435, 769, -153, -652, 652, 153, -769, 435, 1051, -1856, 369, 1573, -1573, -369, 1856, -1051, -1051, 1856, -369, -1573, 1573, 369, -1856, 1051, 435, -769, 153, 652, -652, -153, 769, -435, 300, -724, 724, -300, -300, 724, -724, 300, -724, 1748, -1748, 724, 724, -1748, 1748, -724, 724, -1748, 1748, -724, -724, 1748, -1748, 724, -300, 724, -724, 300, 300, -724, 724, -300, -300, 724, -724, 300, 300, -724, 724, -300, 724, -1748, 1748, -724, -724, 1748, -1748, 724, -724, 1748, -1748, 724, 724, -1748, 1748, -724, 300, -724, 724, -300, -300, 724, -724, 300, 153, -435, 652, -769, 769, -652, 435, -153, -369, 1051, -1573, 1856, -1856, 1573, -1051, 369, 369, -1051, 1573, -1856, 1856, -1573, 1051, -369, -153, 435, -652, 769, -769, 652, -435, 153, -153, 435, -652, 769, -769, 652, -435, 153, 369, -1051, 1573, -1856, 1856, -1573, 1051, -369, -369, 1051, -1573, 1856, -1856, 1573, -1051, 369, 153, -435, 652, -769, 769, -652, 435, -153, 283, 283, 283, 283, 283, 283, 283, 283, -805, -805, -805, -805, -805, -805, -805, -805, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, -1420, -1420, -1420, -1420, -1420, -1420, -1420, -1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, 805, 805, 805, 805, 805, 805, 805, 805, -283, -283, -283, -283, -283, -283, -283, -283, 392, 332, 222, 78, -78, -222, -332, -392, -1116, -946, -632, -222, 222, 632, 946, 1116, 1670, 1416, 946, 332, -332, -946, -1416, -1670, -1970, -1670, -1116, -392, 392, 1116, 1670, 1970, 1970, 1670, 1116, 392, -392, -1116, -1670, -1970, -1670, -1416, -946, -332, 332, 946, 1416, 1670, 1116, 946, 632, 222, -222, -632, -946, -1116, -392, -332, -222, -78, 78, 222, 332, 392, 369, 153, -153, -369, -369, -153, 153, 369, -1051, -435, 435, 1051, 1051, 435, -435, -1051, 1573, 652, -652, -1573, -1573, -652, 652, 1573, -1856, -769, 769, 1856, 1856, 769, -769, -1856, 1856, 769, -769, -1856, -1856, -769, 769, 1856, -1573, -652, 652, 1573, 1573, 652, -652, -1573, 1051, 435, -435, -1051, -1051, -435, 435, 1051, -369, -153, 153, 369, 369, 153, -153, -369, 332, -78, -392, -222, 222, 392, 78, -332, -946, 222, 1116, 632, -632, -1116, -222, 946, 1416, -332, -1670, -946, 946, 1670, 332, -1416, -1670, 392, 1970, 1116, -1116, -1970, -392, 1670, 1670, -392, -1970, -1116, 1116, 1970, 392, -1670, -1416, 332, 1670, 946, -946, -1670, -332, 1416, 946, -222, -1116, -632, 632, 1116, 222, -946, -332, 78, 392, 222, -222, -392, -78, 332, 283, -283, -283, 283, 283, -283, -283, 283, -805, 805, 805, -805, -805, 805, 805, -805, 1204, -1204, -1204, 1204, 1204, -1204, -1204, 1204, -1420, 1420, 1420, -1420, -1420, 1420, 1420, -1420, 1420, -1420, -1420, 1420, 1420, -1420, -1420, 1420, -1204, 1204, 1204, -1204, -1204, 1204, 1204, -1204, 805, -805, -805, 805, 805, -805, -805, 805, -283, 283, 283, -283, -283, 283, 283, -283, 222, -392, 78, 332, -332, -78, 392, -222, -632, 1116, -222, -946, 946, 222, -1116, 632, 946, -1670, 332, 1416, -1416, -332, 1670, -946, -1116, 1970, -392, -1670, 1670, 392, -1970, 1116, 1116, -1970, 392, 1670, -1670, -392, 1970, -1116, -946, 1670, -332, -1416, 1416, 332, -1670, 946, 632, -1116, 222, 946, -946, -222, 1116, -632, -222, 392, -78, -332, 332, 78, -392, 222, 153, -369, 369, -153, -153, 369, -369, 153, -435, 1051, -1051, 435, 435, -1051, 1051, -435, 652, -1573, 1573, -652, -652, 1573, -1573, 652, -769, 1856, -1856, 769, 769, -1856, 1856, -769, 769, -1856, 1856, -769, -769, 1856, -1856, 769, -652, 1573, -1573, 652, 652, -1573, 1573, -652, 435, -1051, 1051, -435, -435, 1051, -1051, 435, -153, 369, -369, 153, 153, -369, 369, -153, 78, -222, 332, -392, 392, -332, 222, -78, -222, 632, -946, 1116, -1116, 946, -632, 222, 332, -946, 1416, -1670, 1670, -1416, 946, -332, -392, 1116, -1670, 1970, -1970, 1670, -1116, 392, 392, -1116, 1670, -1970, 1970, -1670, 1116, -392, -332, 946, -1416, 1670, -1670, 1416, -946, 332, 222, -632, 946, -1116, 1116, -946, 632, -222, -78, 222, -332, 392, -392, 332, -222, 78, }; // precalculated int base values for 8x8 DCT, multplied by 8192 const int icos_base_8x8[ 64 ] = { 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 11363, 9633, 6436, 2260, -2260, -6436, -9633, -11363, 10703, 4433, -4433, -10703, -10703, -4433, 4433, 10703, 9633, -2260, -11363, -6436, 6436, 11363, 2260, -9633, 8192, -8192, -8192, 8192, 8192, -8192, -8192, 8192, 6436, -11363, 2260, 9633, -9633, -2260, 11363, -6436, 4433, -10703, 10703, -4433, -4433, 10703, -10703, 4433, 2260, -6436, 9633, -11363, 11363, -9633, 6436, -2260, }; // precalculated int values for 1x8 IDCT, multplied by 8192 const int icos_idct_1x8[ 64 ] = { 1024, 1420, 1338, 1204, 1024, 805, 554, 283, 1024, 1204, 554, -283, -1024, -1420, -1338, -805, 1024, 805, -554, -1420, -1024, 283, 1338, 1204, 1024, 283, -1338, -805, 1024, 1204, -554, -1420, 1024, -283, -1338, 805, 1024, -1204, -554, 1420, 1024, -805, -554, 1420, -1024, -283, 1338, -1204, 1024, -1204, 554, 283, -1024, 1420, -1338, 805, 1024, -1420, 1338, -1204, 1024, -805, 554, -283, }; // precalculated int values for 1x8 FDCT, multplied by 8192 const int icos_fdct_1x8[ 64 ] = { 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 11363, 9633, 6436, 2260, -2260, -6436, -9633, -11363, 10703, 4433, -4433, -10703, -10703, -4433, 4433, 10703, 9633, -2260, -11363, -6436, 6436, 11363, 2260, -9633, 8192, -8192, -8192, 8192, 8192, -8192, -8192, 8192, 6436, -11363, 2260, 9633, -9633, -2260, 11363, -6436, 4433, -10703, 10703, -4433, -4433, 10703, -10703, 4433, 2260, -6436, 9633, -11363, 11363, -9633, 6436, -2260, }; // dct functions follow, you need to rescale the results using DCT_RESCALE /* ----------------------------------------------- inverse 8x8 DCT transform ----------------------------------------------- */ inline int idct_2d_fst_8x8( signed short* F, int ix, int iy ) { int idct; int ixy; int i; // calculate start index ixy = ( ( iy * 8 ) + ix ) * 64; // begin transform idct = 0; for ( i = 0; i < 64; i++ ) idct += F[ i ] * icos_idct_8x8[ ixy++ ]; return idct; } /* ----------------------------------------------- forward 8x8 DCT transform ----------------------------------------------- */ inline int fdct_2d_fst_8x8( unsigned char* f, int iu, int iv ) { int fdct; int iuv; int i; // calculate start index iuv = ( ( iv * 8 ) + iu ) * 64; // begin transform fdct = 0; for ( i = 0; i < 64; i++ ) fdct += f[ i ] * icos_fdct_8x8[ iuv++ ]; return fdct; } /* ----------------------------------------------- inverse 1D-8 DCT transform ----------------------------------------------- */ inline int idct_1d_fst_8( signed short* F, int ix ) { int idct; int i; // calculate start index ix *= 8; // begin transform idct = 0; for ( i = 0; i < 8; i++ ) idct += F[ i ] * icos_idct_1x8[ ix++ ]; return idct; } /* ----------------------------------------------- forward 1D-8 DCT transform ----------------------------------------------- */ inline int fdct_1d_fst_8( unsigned char* f, int iu ) { int fdct; int i; // calculate start index iu *= 8; // begin transform fdct = 0; for ( i = 0; i < 8; i++ ) fdct += f[ i ] * icos_fdct_1x8[ iu++ ]; return fdct; }