Main MRPT website > C++ reference for MRPT 1.9.9
jfdctflt.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2017, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #define JPEG_INTERNALS
11 #include "jinclude.h"
12 #include "mrpt_jpeglib.h"
13 #include "jdct.h" /* Private declarations for DCT subsystem */
14 
15 #ifdef DCT_FLOAT_SUPPORTED
16 
17 /*
18  * This module is specialized to the case DCTSIZE = 8.
19  */
20 
21 #if DCTSIZE != 8
22 Sorry, this code only copes with 8x8 DCTs./* deliberate syntax err */
23 #endif
24 
25  /*
26  * Perform the forward DCT on one block of samples.
27  */
28 
29  GLOBAL(void) jpeg_fdct_float(FAST_FLOAT* data)
30 {
31  FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
32  FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
33  FAST_FLOAT z1, z2, z3, z4, z5, z11, z13;
34  FAST_FLOAT* dataptr;
35  int ctr;
36 
37  /* Pass 1: process rows. */
38 
39  dataptr = data;
40  for (ctr = DCTSIZE - 1; ctr >= 0; ctr--)
41  {
42  tmp0 = dataptr[0] + dataptr[7];
43  tmp7 = dataptr[0] - dataptr[7];
44  tmp1 = dataptr[1] + dataptr[6];
45  tmp6 = dataptr[1] - dataptr[6];
46  tmp2 = dataptr[2] + dataptr[5];
47  tmp5 = dataptr[2] - dataptr[5];
48  tmp3 = dataptr[3] + dataptr[4];
49  tmp4 = dataptr[3] - dataptr[4];
50 
51  /* Even part */
52 
53  tmp10 = tmp0 + tmp3; /* phase 2 */
54  tmp13 = tmp0 - tmp3;
55  tmp11 = tmp1 + tmp2;
56  tmp12 = tmp1 - tmp2;
57 
58  dataptr[0] = tmp10 + tmp11; /* phase 3 */
59  dataptr[4] = tmp10 - tmp11;
60 
61  z1 = (tmp12 + tmp13) * ((FAST_FLOAT)0.707106781); /* c4 */
62  dataptr[2] = tmp13 + z1; /* phase 5 */
63  dataptr[6] = tmp13 - z1;
64 
65  /* Odd part */
66 
67  tmp10 = tmp4 + tmp5; /* phase 2 */
68  tmp11 = tmp5 + tmp6;
69  tmp12 = tmp6 + tmp7;
70 
71  /* The rotator is modified from fig 4-8 to avoid extra negations. */
72  z5 = (tmp10 - tmp12) * ((FAST_FLOAT)0.382683433); /* c6 */
73  z2 = ((FAST_FLOAT)0.541196100) * tmp10 + z5; /* c2-c6 */
74  z4 = ((FAST_FLOAT)1.306562965) * tmp12 + z5; /* c2+c6 */
75  z3 = tmp11 * ((FAST_FLOAT)0.707106781); /* c4 */
76 
77  z11 = tmp7 + z3; /* phase 5 */
78  z13 = tmp7 - z3;
79 
80  dataptr[5] = z13 + z2; /* phase 6 */
81  dataptr[3] = z13 - z2;
82  dataptr[1] = z11 + z4;
83  dataptr[7] = z11 - z4;
84 
85  dataptr += DCTSIZE; /* advance pointer to next row */
86  }
87 
88  /* Pass 2: process columns. */
89 
90  dataptr = data;
91  for (ctr = DCTSIZE - 1; ctr >= 0; ctr--)
92  {
93  tmp0 = dataptr[DCTSIZE * 0] + dataptr[DCTSIZE * 7];
94  tmp7 = dataptr[DCTSIZE * 0] - dataptr[DCTSIZE * 7];
95  tmp1 = dataptr[DCTSIZE * 1] + dataptr[DCTSIZE * 6];
96  tmp6 = dataptr[DCTSIZE * 1] - dataptr[DCTSIZE * 6];
97  tmp2 = dataptr[DCTSIZE * 2] + dataptr[DCTSIZE * 5];
98  tmp5 = dataptr[DCTSIZE * 2] - dataptr[DCTSIZE * 5];
99  tmp3 = dataptr[DCTSIZE * 3] + dataptr[DCTSIZE * 4];
100  tmp4 = dataptr[DCTSIZE * 3] - dataptr[DCTSIZE * 4];
101 
102  /* Even part */
103 
104  tmp10 = tmp0 + tmp3; /* phase 2 */
105  tmp13 = tmp0 - tmp3;
106  tmp11 = tmp1 + tmp2;
107  tmp12 = tmp1 - tmp2;
108 
109  dataptr[DCTSIZE * 0] = tmp10 + tmp11; /* phase 3 */
110  dataptr[DCTSIZE * 4] = tmp10 - tmp11;
111 
112  z1 = (tmp12 + tmp13) * ((FAST_FLOAT)0.707106781); /* c4 */
113  dataptr[DCTSIZE * 2] = tmp13 + z1; /* phase 5 */
114  dataptr[DCTSIZE * 6] = tmp13 - z1;
115 
116  /* Odd part */
117 
118  tmp10 = tmp4 + tmp5; /* phase 2 */
119  tmp11 = tmp5 + tmp6;
120  tmp12 = tmp6 + tmp7;
121 
122  /* The rotator is modified from fig 4-8 to avoid extra negations. */
123  z5 = (tmp10 - tmp12) * ((FAST_FLOAT)0.382683433); /* c6 */
124  z2 = ((FAST_FLOAT)0.541196100) * tmp10 + z5; /* c2-c6 */
125  z4 = ((FAST_FLOAT)1.306562965) * tmp12 + z5; /* c2+c6 */
126  z3 = tmp11 * ((FAST_FLOAT)0.707106781); /* c4 */
127 
128  z11 = tmp7 + z3; /* phase 5 */
129  z13 = tmp7 - z3;
130 
131  dataptr[DCTSIZE * 5] = z13 + z2; /* phase 6 */
132  dataptr[DCTSIZE * 3] = z13 - z2;
133  dataptr[DCTSIZE * 1] = z11 + z4;
134  dataptr[DCTSIZE * 7] = z11 - z4;
135 
136  dataptr++; /* advance pointer to next column */
137  }
138 }
139 
140 #endif /* DCT_FLOAT_SUPPORTED */
FAST_FLOAT tmp12
Definition: jidctflt.cpp:40
#define DCTSIZE
Definition: mrpt_jpeglib.h:36
INT32 z2
Definition: jidctint.cpp:130
FAST_FLOAT tmp13
Definition: jidctflt.cpp:40
INT32 z3
Definition: jidctint.cpp:130
INT32 z4
Definition: jidctint.cpp:130
FAST_FLOAT z5
Definition: jidctflt.cpp:41
Definition: inftrees.h:28
FAST_FLOAT tmp10
Definition: jidctflt.cpp:40
int ctr
Definition: jidctflt.cpp:47
FAST_FLOAT tmp11
Definition: jidctflt.cpp:40
INT32 z1
Definition: jidctint.cpp:130
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: glext.h:3546
FAST_FLOAT z13
Definition: jidctflt.cpp:41
GLOBAL(void) jpeg_fdct_float(FAST_FLOAT *data)
Definition: jfdctflt.cpp:29
FAST_FLOAT z11
Definition: jidctflt.cpp:41



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: ae4571287 Thu Nov 23 00:06:53 2017 +0100 at dom oct 27 23:51:55 CET 2019