| 5830 | |
| 5831 | // DCT & quantization core |
| 5832 | function fDCTQuant(data, fdtbl) |
| 5833 | { |
| 5834 | var d0, d1, d2, d3, d4, d5, d6, d7; |
| 5835 | /* Pass 1: process rows. */ |
| 5836 | var dataOff=0; |
| 5837 | var i; |
| 5838 | var I8 = 8; |
| 5839 | var I64 = 64; |
| 5840 | for (i=0; i<I8; ++i) |
| 5841 | { |
| 5842 | d0 = data[dataOff]; |
| 5843 | d1 = data[dataOff+1]; |
| 5844 | d2 = data[dataOff+2]; |
| 5845 | d3 = data[dataOff+3]; |
| 5846 | d4 = data[dataOff+4]; |
| 5847 | d5 = data[dataOff+5]; |
| 5848 | d6 = data[dataOff+6]; |
| 5849 | d7 = data[dataOff+7]; |
| 5850 | |
| 5851 | var tmp0 = d0 + d7; |
| 5852 | var tmp7 = d0 - d7; |
| 5853 | var tmp1 = d1 + d6; |
| 5854 | var tmp6 = d1 - d6; |
| 5855 | var tmp2 = d2 + d5; |
| 5856 | var tmp5 = d2 - d5; |
| 5857 | var tmp3 = d3 + d4; |
| 5858 | var tmp4 = d3 - d4; |
| 5859 | |
| 5860 | /* Even part */ |
| 5861 | var tmp10 = tmp0 + tmp3; /* phase 2 */ |
| 5862 | var tmp13 = tmp0 - tmp3; |
| 5863 | var tmp11 = tmp1 + tmp2; |
| 5864 | var tmp12 = tmp1 - tmp2; |
| 5865 | |
| 5866 | data[dataOff] = tmp10 + tmp11; /* phase 3 */ |
| 5867 | data[dataOff+4] = tmp10 - tmp11; |
| 5868 | |
| 5869 | var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ |
| 5870 | data[dataOff+2] = tmp13 + z1; /* phase 5 */ |
| 5871 | data[dataOff+6] = tmp13 - z1; |
| 5872 | |
| 5873 | /* Odd part */ |
| 5874 | tmp10 = tmp4 + tmp5; /* phase 2 */ |
| 5875 | tmp11 = tmp5 + tmp6; |
| 5876 | tmp12 = tmp6 + tmp7; |
| 5877 | |
| 5878 | /* The rotator is modified from fig 4-8 to avoid extra negations. */ |
| 5879 | var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ |
| 5880 | var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ |
| 5881 | var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ |
| 5882 | var z3 = tmp11 * 0.707106781; /* c4 */ |
| 5883 | |
| 5884 | var z11 = tmp7 + z3; /* phase 5 */ |
| 5885 | var z13 = tmp7 - z3; |
| 5886 | |
| 5887 | data[dataOff+5] = z13 + z2; /* phase 6 */ |
| 5888 | data[dataOff+3] = z13 - z2; |
| 5889 | data[dataOff+1] = z11 + z4; |