src/3rdparty/libjpeg/jfdctflt.c
changeset 30 5dc02b23752f
parent 0 1918ee327afb
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
     1 /*
     1 /*
     2  * jfdctflt.c
     2  * jfdctflt.c
     3  *
     3  *
     4  * Copyright (C) 1994-1996, Thomas G. Lane.
     4  * Copyright (C) 1994-1996, Thomas G. Lane.
       
     5  * Modified 2003-2009 by Guido Vollbeding.
     5  * This file is part of the Independent JPEG Group's software.
     6  * This file is part of the Independent JPEG Group's software.
     6  * For conditions of distribution and use, see the accompanying README file.
     7  * For conditions of distribution and use, see the accompanying README file.
     7  *
     8  *
     8  * This file contains a floating-point implementation of the
     9  * This file contains a floating-point implementation of the
     9  * forward DCT (Discrete Cosine Transform).
    10  * forward DCT (Discrete Cosine Transform).
    54 /*
    55 /*
    55  * Perform the forward DCT on one block of samples.
    56  * Perform the forward DCT on one block of samples.
    56  */
    57  */
    57 
    58 
    58 GLOBAL(void)
    59 GLOBAL(void)
    59 jpeg_fdct_float (FAST_FLOAT * data)
    60 jpeg_fdct_float (FAST_FLOAT * data, JSAMPARRAY sample_data, JDIMENSION start_col)
    60 {
    61 {
    61   FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
    62   FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
    62   FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
    63   FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
    63   FAST_FLOAT z1, z2, z3, z4, z5, z11, z13;
    64   FAST_FLOAT z1, z2, z3, z4, z5, z11, z13;
    64   FAST_FLOAT *dataptr;
    65   FAST_FLOAT *dataptr;
       
    66   JSAMPROW elemptr;
    65   int ctr;
    67   int ctr;
    66 
    68 
    67   /* Pass 1: process rows. */
    69   /* Pass 1: process rows. */
    68 
    70 
    69   dataptr = data;
    71   dataptr = data;
    70   for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
    72   for (ctr = 0; ctr < DCTSIZE; ctr++) {
    71     tmp0 = dataptr[0] + dataptr[7];
    73     elemptr = sample_data[ctr] + start_col;
    72     tmp7 = dataptr[0] - dataptr[7];
    74 
    73     tmp1 = dataptr[1] + dataptr[6];
    75     /* Load data into workspace */
    74     tmp6 = dataptr[1] - dataptr[6];
    76     tmp0 = (FAST_FLOAT) (GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]));
    75     tmp2 = dataptr[2] + dataptr[5];
    77     tmp7 = (FAST_FLOAT) (GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]));
    76     tmp5 = dataptr[2] - dataptr[5];
    78     tmp1 = (FAST_FLOAT) (GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]));
    77     tmp3 = dataptr[3] + dataptr[4];
    79     tmp6 = (FAST_FLOAT) (GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]));
    78     tmp4 = dataptr[3] - dataptr[4];
    80     tmp2 = (FAST_FLOAT) (GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]));
    79     
    81     tmp5 = (FAST_FLOAT) (GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]));
       
    82     tmp3 = (FAST_FLOAT) (GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]));
       
    83     tmp4 = (FAST_FLOAT) (GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]));
       
    84 
    80     /* Even part */
    85     /* Even part */
    81     
    86 
    82     tmp10 = tmp0 + tmp3;	/* phase 2 */
    87     tmp10 = tmp0 + tmp3;	/* phase 2 */
    83     tmp13 = tmp0 - tmp3;
    88     tmp13 = tmp0 - tmp3;
    84     tmp11 = tmp1 + tmp2;
    89     tmp11 = tmp1 + tmp2;
    85     tmp12 = tmp1 - tmp2;
    90     tmp12 = tmp1 - tmp2;
    86     
    91 
    87     dataptr[0] = tmp10 + tmp11; /* phase 3 */
    92     /* Apply unsigned->signed conversion */
       
    93     dataptr[0] = tmp10 + tmp11 - 8 * CENTERJSAMPLE; /* phase 3 */
    88     dataptr[4] = tmp10 - tmp11;
    94     dataptr[4] = tmp10 - tmp11;
    89     
    95 
    90     z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
    96     z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
    91     dataptr[2] = tmp13 + z1;	/* phase 5 */
    97     dataptr[2] = tmp13 + z1;	/* phase 5 */
    92     dataptr[6] = tmp13 - z1;
    98     dataptr[6] = tmp13 - z1;
    93     
    99 
    94     /* Odd part */
   100     /* Odd part */
    95 
   101 
    96     tmp10 = tmp4 + tmp5;	/* phase 2 */
   102     tmp10 = tmp4 + tmp5;	/* phase 2 */
    97     tmp11 = tmp5 + tmp6;
   103     tmp11 = tmp5 + tmp6;
    98     tmp12 = tmp6 + tmp7;
   104     tmp12 = tmp6 + tmp7;
   124     tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
   130     tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
   125     tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
   131     tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
   126     tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
   132     tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
   127     tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
   133     tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
   128     tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
   134     tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
   129     
   135 
   130     /* Even part */
   136     /* Even part */
   131     
   137 
   132     tmp10 = tmp0 + tmp3;	/* phase 2 */
   138     tmp10 = tmp0 + tmp3;	/* phase 2 */
   133     tmp13 = tmp0 - tmp3;
   139     tmp13 = tmp0 - tmp3;
   134     tmp11 = tmp1 + tmp2;
   140     tmp11 = tmp1 + tmp2;
   135     tmp12 = tmp1 - tmp2;
   141     tmp12 = tmp1 - tmp2;
   136     
   142 
   137     dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
   143     dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
   138     dataptr[DCTSIZE*4] = tmp10 - tmp11;
   144     dataptr[DCTSIZE*4] = tmp10 - tmp11;
   139     
   145 
   140     z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
   146     z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
   141     dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
   147     dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
   142     dataptr[DCTSIZE*6] = tmp13 - z1;
   148     dataptr[DCTSIZE*6] = tmp13 - z1;
   143     
   149 
   144     /* Odd part */
   150     /* Odd part */
   145 
   151 
   146     tmp10 = tmp4 + tmp5;	/* phase 2 */
   152     tmp10 = tmp4 + tmp5;	/* phase 2 */
   147     tmp11 = tmp5 + tmp6;
   153     tmp11 = tmp5 + tmp6;
   148     tmp12 = tmp6 + tmp7;
   154     tmp12 = tmp6 + tmp7;