| 5794 | |
| 5795 | // DCT & quantization core |
| 5796 | function fDCTQuant(data, fdtbl) |
| 5797 | { |
| 5798 | var d0, d1, d2, d3, d4, d5, d6, d7; |
| 5799 | /* Pass 1: process rows. */ |
| 5800 | var dataOff=0; |
| 5801 | var i; |
| 5802 | var I8 = 8; |
| 5803 | var I64 = 64; |
| 5804 | for (i=0; i<I8; ++i) |
| 5805 | { |
| 5806 | d0 = data[dataOff]; |
| 5807 | d1 = data[dataOff+1]; |
| 5808 | d2 = data[dataOff+2]; |
| 5809 | d3 = data[dataOff+3]; |
| 5810 | d4 = data[dataOff+4]; |
| 5811 | d5 = data[dataOff+5]; |
| 5812 | d6 = data[dataOff+6]; |
| 5813 | d7 = data[dataOff+7]; |
| 5814 | |
| 5815 | var tmp0 = d0 + d7; |
| 5816 | var tmp7 = d0 - d7; |
| 5817 | var tmp1 = d1 + d6; |
| 5818 | var tmp6 = d1 - d6; |
| 5819 | var tmp2 = d2 + d5; |
| 5820 | var tmp5 = d2 - d5; |
| 5821 | var tmp3 = d3 + d4; |
| 5822 | var tmp4 = d3 - d4; |
| 5823 | |
| 5824 | /* Even part */ |
| 5825 | var tmp10 = tmp0 + tmp3; /* phase 2 */ |
| 5826 | var tmp13 = tmp0 - tmp3; |
| 5827 | var tmp11 = tmp1 + tmp2; |
| 5828 | var tmp12 = tmp1 - tmp2; |
| 5829 | |
| 5830 | data[dataOff] = tmp10 + tmp11; /* phase 3 */ |
| 5831 | data[dataOff+4] = tmp10 - tmp11; |
| 5832 | |
| 5833 | var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ |
| 5834 | data[dataOff+2] = tmp13 + z1; /* phase 5 */ |
| 5835 | data[dataOff+6] = tmp13 - z1; |
| 5836 | |
| 5837 | /* Odd part */ |
| 5838 | tmp10 = tmp4 + tmp5; /* phase 2 */ |
| 5839 | tmp11 = tmp5 + tmp6; |
| 5840 | tmp12 = tmp6 + tmp7; |
| 5841 | |
| 5842 | /* The rotator is modified from fig 4-8 to avoid extra negations. */ |
| 5843 | var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ |
| 5844 | var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ |
| 5845 | var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ |
| 5846 | var z3 = tmp11 * 0.707106781; /* c4 */ |
| 5847 | |
| 5848 | var z11 = tmp7 + z3; /* phase 5 */ |
| 5849 | var z13 = tmp7 - z3; |
| 5850 | |
| 5851 | data[dataOff+5] = z13 + z2; /* phase 6 */ |
| 5852 | data[dataOff+3] = z13 - z2; |
| 5853 | data[dataOff+1] = z11 + z4; |