Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

jfdctint.c File Reference

#include "jinclude.h"
#include "jpeglib.h"
#include "jdct.h"

Go to the source code of this file.


Defines

#define JPEG_INTERNALS
#define CONST_BITS   13
#define PASS1_BITS   2
#define FIX_0_298631336   ((INT32) 2446)
#define FIX_0_390180644   ((INT32) 3196)
#define FIX_0_541196100   ((INT32) 4433)
#define FIX_0_765366865   ((INT32) 6270)
#define FIX_0_899976223   ((INT32) 7373)
#define FIX_1_175875602   ((INT32) 9633)
#define FIX_1_501321110   ((INT32) 12299)
#define FIX_1_847759065   ((INT32) 15137)
#define FIX_1_961570560   ((INT32) 16069)
#define FIX_2_053119869   ((INT32) 16819)
#define FIX_2_562915447   ((INT32) 20995)
#define FIX_3_072711026   ((INT32) 25172)
#define MULTIPLY(var, const)   MULTIPLY16C16(var,const)

Functions

 jpeg_fdct_islow (DCTELEM *data)

Define Documentation

#define CONST_BITS   13
 

Definition at line 78 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_0_298631336   ((INT32) 2446)
 

Definition at line 93 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_0_390180644   ((INT32) 3196)
 

Definition at line 94 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_0_541196100   ((INT32) 4433)
 

Definition at line 95 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_0_765366865   ((INT32) 6270)
 

Definition at line 96 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_0_899976223   ((INT32) 7373)
 

Definition at line 97 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_1_175875602   ((INT32) 9633)
 

Definition at line 98 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_1_501321110   ((INT32) 12299)
 

Definition at line 99 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_1_847759065   ((INT32) 15137)
 

Definition at line 100 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_1_961570560   ((INT32) 16069)
 

Definition at line 101 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_2_053119869   ((INT32) 16819)
 

Definition at line 102 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_2_562915447   ((INT32) 20995)
 

Definition at line 103 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define FIX_3_072711026   ((INT32) 25172)
 

Definition at line 104 of file jfdctint.c.

Referenced by jpeg_fdct_islow().

#define JPEG_INTERNALS
 

Definition at line 26 of file jfdctint.c.

#define MULTIPLY var,
const       MULTIPLY16C16(var,const)
 

Definition at line 129 of file jfdctint.c.

#define PASS1_BITS   2
 

Definition at line 79 of file jfdctint.c.

Referenced by jpeg_fdct_islow().


Function Documentation

jpeg_fdct_islow DCTELEM   data
 

Definition at line 140 of file jfdctint.c.

References CONST_BITS, dataptr, DESCALE, FIX_0_298631336, FIX_0_390180644, FIX_0_541196100, FIX_0_765366865, FIX_0_899976223, FIX_1_175875602, FIX_1_501321110, FIX_1_847759065, FIX_1_961570560, FIX_2_053119869, FIX_2_562915447, FIX_3_072711026, INT32, MULTIPLY, PASS1_BITS, and z1.

Referenced by jinit_forward_dct().

00141 {
00142   INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
00143   INT32 tmp10, tmp11, tmp12, tmp13;
00144   INT32 z1, z2, z3, z4, z5;
00145   DCTELEM *dataptr;
00146   int ctr;
00147   SHIFT_TEMPS
00148 
00149   /* Pass 1: process rows. */
00150   /* Note results are scaled up by sqrt(8) compared to a true DCT; */
00151   /* furthermore, we scale the results by 2**PASS1_BITS. */
00152 
00153   dataptr = data;
00154   for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
00155     tmp0 = dataptr[0] + dataptr[7];
00156     tmp7 = dataptr[0] - dataptr[7];
00157     tmp1 = dataptr[1] + dataptr[6];
00158     tmp6 = dataptr[1] - dataptr[6];
00159     tmp2 = dataptr[2] + dataptr[5];
00160     tmp5 = dataptr[2] - dataptr[5];
00161     tmp3 = dataptr[3] + dataptr[4];
00162     tmp4 = dataptr[3] - dataptr[4];
00163     
00164     /* Even part per LL&M figure 1 --- note that published figure is faulty;
00165      * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
00166      */
00167     
00168     tmp10 = tmp0 + tmp3;
00169     tmp13 = tmp0 - tmp3;
00170     tmp11 = tmp1 + tmp2;
00171     tmp12 = tmp1 - tmp2;
00172     
00173     dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS);
00174     dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
00175     
00176     z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
00177     dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
00178                                    CONST_BITS-PASS1_BITS);
00179     dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
00180                                    CONST_BITS-PASS1_BITS);
00181     
00182     /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
00183      * cK represents cos(K*pi/16).
00184      * i0..i3 in the paper are tmp4..tmp7 here.
00185      */
00186     
00187     z1 = tmp4 + tmp7;
00188     z2 = tmp5 + tmp6;
00189     z3 = tmp4 + tmp6;
00190     z4 = tmp5 + tmp7;
00191     z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
00192     
00193     tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
00194     tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
00195     tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
00196     tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
00197     z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
00198     z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
00199     z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
00200     z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
00201     
00202     z3 += z5;
00203     z4 += z5;
00204     
00205     dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS);
00206     dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS);
00207     dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS);
00208     dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS);
00209     
00210     dataptr += DCTSIZE;         /* advance pointer to next row */
00211   }
00212 
00213   /* Pass 2: process columns.
00214    * We remove the PASS1_BITS scaling, but leave the results scaled up
00215    * by an overall factor of 8.
00216    */
00217 
00218   dataptr = data;
00219   for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
00220     tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
00221     tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
00222     tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
00223     tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
00224     tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
00225     tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
00226     tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
00227     tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
00228     
00229     /* Even part per LL&M figure 1 --- note that published figure is faulty;
00230      * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
00231      */
00232     
00233     tmp10 = tmp0 + tmp3;
00234     tmp13 = tmp0 - tmp3;
00235     tmp11 = tmp1 + tmp2;
00236     tmp12 = tmp1 - tmp2;
00237     
00238     dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
00239     dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
00240     
00241     z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
00242     dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
00243                                            CONST_BITS+PASS1_BITS);
00244     dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
00245                                            CONST_BITS+PASS1_BITS);
00246     
00247     /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
00248      * cK represents cos(K*pi/16).
00249      * i0..i3 in the paper are tmp4..tmp7 here.
00250      */
00251     
00252     z1 = tmp4 + tmp7;
00253     z2 = tmp5 + tmp6;
00254     z3 = tmp4 + tmp6;
00255     z4 = tmp5 + tmp7;
00256     z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
00257     
00258     tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
00259     tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
00260     tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
00261     tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
00262     z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
00263     z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
00264     z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
00265     z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
00266     
00267     z3 += z5;
00268     z4 += z5;
00269     
00270     dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3,
00271                                            CONST_BITS+PASS1_BITS);
00272     dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4,
00273                                            CONST_BITS+PASS1_BITS);
00274     dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3,
00275                                            CONST_BITS+PASS1_BITS);
00276     dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4,
00277                                            CONST_BITS+PASS1_BITS);
00278     
00279     dataptr++;                  /* advance pointer to next column */
00280   }
00281 }
 

Powered by Plone

This site conforms to the following standards: