Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
jfdctflt.c
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 #define JPEG_INTERNALS
00038 #include "jinclude.h"
00039 #include "jpeglib.h"
00040 #include "jdct.h"               
00041 
00042 #ifdef DCT_FLOAT_SUPPORTED
00043 
00044 
00045 
00046 
00047 
00048 
00049 #if DCTSIZE != 8
00050   Sorry, this code only copes with 8x8 DCTs. 
00051 #endif
00052 
00053 
00054 
00055 
00056 
00057 
00058 GLOBAL(void)
00059 jpeg_fdct_float (FAST_FLOAT * data)
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   
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     
00081     
00082     tmp10 = tmp0 + tmp3;        
00083     tmp13 = tmp0 - tmp3;
00084     tmp11 = tmp1 + tmp2;
00085     tmp12 = tmp1 - tmp2;
00086     
00087     dataptr[0] = tmp10 + tmp11; 
00088     dataptr[4] = tmp10 - tmp11;
00089     
00090     z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); 
00091     dataptr[2] = tmp13 + z1;    
00092     dataptr[6] = tmp13 - z1;
00093     
00094     
00095 
00096     tmp10 = tmp4 + tmp5;        
00097     tmp11 = tmp5 + tmp6;
00098     tmp12 = tmp6 + tmp7;
00099 
00100     
00101     z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); 
00102     z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; 
00103     z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; 
00104     z3 = tmp11 * ((FAST_FLOAT) 0.707106781); 
00105 
00106     z11 = tmp7 + z3;            
00107     z13 = tmp7 - z3;
00108 
00109     dataptr[5] = z13 + z2;      
00110     dataptr[3] = z13 - z2;
00111     dataptr[1] = z11 + z4;
00112     dataptr[7] = z11 - z4;
00113 
00114     dataptr += DCTSIZE;         
00115   }
00116 
00117   
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     
00131     
00132     tmp10 = tmp0 + tmp3;        
00133     tmp13 = tmp0 - tmp3;
00134     tmp11 = tmp1 + tmp2;
00135     tmp12 = tmp1 - tmp2;
00136     
00137     dataptr[DCTSIZE*0] = tmp10 + tmp11; 
00138     dataptr[DCTSIZE*4] = tmp10 - tmp11;
00139     
00140     z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); 
00141     dataptr[DCTSIZE*2] = tmp13 + z1; 
00142     dataptr[DCTSIZE*6] = tmp13 - z1;
00143     
00144     
00145 
00146     tmp10 = tmp4 + tmp5;        
00147     tmp11 = tmp5 + tmp6;
00148     tmp12 = tmp6 + tmp7;
00149 
00150     
00151     z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); 
00152     z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; 
00153     z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; 
00154     z3 = tmp11 * ((FAST_FLOAT) 0.707106781); 
00155 
00156     z11 = tmp7 + z3;            
00157     z13 = tmp7 - z3;
00158 
00159     dataptr[DCTSIZE*5] = z13 + z2; 
00160     dataptr[DCTSIZE*3] = z13 - z2;
00161     dataptr[DCTSIZE*1] = z11 + z4;
00162     dataptr[DCTSIZE*7] = z11 - z4;
00163 
00164     dataptr++;                  
00165   }
00166 }
00167 
00168 #endif