Doxygen Source Code Documentation
jfdctflt.c File Reference
#include "jinclude.h"#include "jpeglib.h"#include "jdct.h"Go to the source code of this file.
Defines | |
| #define | JPEG_INTERNALS |
Functions | |
| jpeg_fdct_float (FAST_FLOAT *data) | |
Define Documentation
|
|
Definition at line 37 of file jfdctflt.c. |
Function Documentation
|
|
Definition at line 59 of file jfdctflt.c. Referenced by jinit_forward_dct().
00060 {
00061 FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
00062 FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
00063 FAST_FLOAT z1, z2, z3, z4, z5, z11, z13;
00064 FAST_FLOAT *dataptr;
00065 int ctr;
00066
00067 /* Pass 1: process rows. */
00068
00069 dataptr = data;
00070 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
00071 tmp0 = dataptr[0] + dataptr[7];
00072 tmp7 = dataptr[0] - dataptr[7];
00073 tmp1 = dataptr[1] + dataptr[6];
00074 tmp6 = dataptr[1] - dataptr[6];
00075 tmp2 = dataptr[2] + dataptr[5];
00076 tmp5 = dataptr[2] - dataptr[5];
00077 tmp3 = dataptr[3] + dataptr[4];
00078 tmp4 = dataptr[3] - dataptr[4];
00079
00080 /* Even part */
00081
00082 tmp10 = tmp0 + tmp3; /* phase 2 */
00083 tmp13 = tmp0 - tmp3;
00084 tmp11 = tmp1 + tmp2;
00085 tmp12 = tmp1 - tmp2;
00086
00087 dataptr[0] = tmp10 + tmp11; /* phase 3 */
00088 dataptr[4] = tmp10 - tmp11;
00089
00090 z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
00091 dataptr[2] = tmp13 + z1; /* phase 5 */
00092 dataptr[6] = tmp13 - z1;
00093
00094 /* Odd part */
00095
00096 tmp10 = tmp4 + tmp5; /* phase 2 */
00097 tmp11 = tmp5 + tmp6;
00098 tmp12 = tmp6 + tmp7;
00099
00100 /* The rotator is modified from fig 4-8 to avoid extra negations. */
00101 z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */
00102 z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
00103 z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
00104 z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */
00105
00106 z11 = tmp7 + z3; /* phase 5 */
00107 z13 = tmp7 - z3;
00108
00109 dataptr[5] = z13 + z2; /* phase 6 */
00110 dataptr[3] = z13 - z2;
00111 dataptr[1] = z11 + z4;
00112 dataptr[7] = z11 - z4;
00113
00114 dataptr += DCTSIZE; /* advance pointer to next row */
00115 }
00116
00117 /* Pass 2: process columns. */
00118
00119 dataptr = data;
00120 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
00121 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
00122 tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
00123 tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
00124 tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
00125 tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
00126 tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
00127 tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
00128 tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
00129
00130 /* Even part */
00131
00132 tmp10 = tmp0 + tmp3; /* phase 2 */
00133 tmp13 = tmp0 - tmp3;
00134 tmp11 = tmp1 + tmp2;
00135 tmp12 = tmp1 - tmp2;
00136
00137 dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
00138 dataptr[DCTSIZE*4] = tmp10 - tmp11;
00139
00140 z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
00141 dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
00142 dataptr[DCTSIZE*6] = tmp13 - z1;
00143
00144 /* Odd part */
00145
00146 tmp10 = tmp4 + tmp5; /* phase 2 */
00147 tmp11 = tmp5 + tmp6;
00148 tmp12 = tmp6 + tmp7;
00149
00150 /* The rotator is modified from fig 4-8 to avoid extra negations. */
00151 z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */
00152 z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
00153 z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
00154 z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */
00155
00156 z11 = tmp7 + z3; /* phase 5 */
00157 z13 = tmp7 - z3;
00158
00159 dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
00160 dataptr[DCTSIZE*3] = z13 - z2;
00161 dataptr[DCTSIZE*1] = z11 + z4;
00162 dataptr[DCTSIZE*7] = z11 - z4;
00163
00164 dataptr++; /* advance pointer to next column */
00165 }
00166 }
|