isbn 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. data/.gitignore +4 -0
  2. data/README +9 -0
  3. data/Rakefile +13 -0
  4. data/VERSION +1 -0
  5. data/isbn.gemspec +329 -0
  6. data/lib/isbn.rb +90 -0
  7. data/src/gocr-0.48/.cvsignore +6 -0
  8. data/src/gocr-0.48/AUTHORS +7 -0
  9. data/src/gocr-0.48/BUGS +55 -0
  10. data/src/gocr-0.48/CREDITS +17 -0
  11. data/src/gocr-0.48/HISTORY +243 -0
  12. data/src/gocr-0.48/INSTALL +83 -0
  13. data/src/gocr-0.48/Makefile +193 -0
  14. data/src/gocr-0.48/Makefile.in +193 -0
  15. data/src/gocr-0.48/README +165 -0
  16. data/src/gocr-0.48/READMEde.txt +80 -0
  17. data/src/gocr-0.48/REMARK.txt +18 -0
  18. data/src/gocr-0.48/REVIEW +538 -0
  19. data/src/gocr-0.48/TODO +65 -0
  20. data/src/gocr-0.48/bin/.cvsignore +2 -0
  21. data/src/gocr-0.48/bin/create_db +38 -0
  22. data/src/gocr-0.48/bin/gocr.tcl +527 -0
  23. data/src/gocr-0.48/bin/gocr_chk.sh +44 -0
  24. data/src/gocr-0.48/configure +4689 -0
  25. data/src/gocr-0.48/configure.in +71 -0
  26. data/src/gocr-0.48/doc/.#Makefile.1.6 +39 -0
  27. data/src/gocr-0.48/doc/.cvsignore +2 -0
  28. data/src/gocr-0.48/doc/Makefile +39 -0
  29. data/src/gocr-0.48/doc/Makefile.in +39 -0
  30. data/src/gocr-0.48/doc/example.dtd +53 -0
  31. data/src/gocr-0.48/doc/example.xml +21 -0
  32. data/src/gocr-0.48/doc/examples.txt +67 -0
  33. data/src/gocr-0.48/doc/gocr.html +578 -0
  34. data/src/gocr-0.48/doc/unicode.txt +57 -0
  35. data/src/gocr-0.48/examples/.#Makefile.1.22 +166 -0
  36. data/src/gocr-0.48/examples/4x6.png +0 -0
  37. data/src/gocr-0.48/examples/4x6.txt +2 -0
  38. data/src/gocr-0.48/examples/5x7.png +0 -0
  39. data/src/gocr-0.48/examples/5x7.png.txt +2 -0
  40. data/src/gocr-0.48/examples/5x8.png +0 -0
  41. data/src/gocr-0.48/examples/5x8.png.txt +2 -0
  42. data/src/gocr-0.48/examples/Makefile +166 -0
  43. data/src/gocr-0.48/examples/color.fig +20 -0
  44. data/src/gocr-0.48/examples/ex.fig +16 -0
  45. data/src/gocr-0.48/examples/font.tex +22 -0
  46. data/src/gocr-0.48/examples/font1.tex +46 -0
  47. data/src/gocr-0.48/examples/font2.fig +27 -0
  48. data/src/gocr-0.48/examples/font_nw.tex +24 -0
  49. data/src/gocr-0.48/examples/handwrt1.jpg +0 -0
  50. data/src/gocr-0.48/examples/handwrt1.txt +10 -0
  51. data/src/gocr-0.48/examples/inverse.fig +20 -0
  52. data/src/gocr-0.48/examples/matrix.jpg +0 -0
  53. data/src/gocr-0.48/examples/ocr-a-subset.png +0 -0
  54. data/src/gocr-0.48/examples/ocr-a-subset.png.txt +4 -0
  55. data/src/gocr-0.48/examples/ocr-a.png +0 -0
  56. data/src/gocr-0.48/examples/ocr-a.txt +6 -0
  57. data/src/gocr-0.48/examples/ocr-b.png +0 -0
  58. data/src/gocr-0.48/examples/ocr-b.png.txt +4 -0
  59. data/src/gocr-0.48/examples/polish.tex +28 -0
  60. data/src/gocr-0.48/examples/rotate45.fig +14 -0
  61. data/src/gocr-0.48/examples/score +36 -0
  62. data/src/gocr-0.48/examples/text.tex +28 -0
  63. data/src/gocr-0.48/gocr.spec +143 -0
  64. data/src/gocr-0.48/gpl.html +537 -0
  65. data/src/gocr-0.48/include/.cvsignore +2 -0
  66. data/src/gocr-0.48/include/config.h +36 -0
  67. data/src/gocr-0.48/include/config.h.in +36 -0
  68. data/src/gocr-0.48/include/version.h +2 -0
  69. data/src/gocr-0.48/install-sh +3 -0
  70. data/src/gocr-0.48/make.bat +57 -0
  71. data/src/gocr-0.48/man/.cvsignore +2 -0
  72. data/src/gocr-0.48/man/Makefile +29 -0
  73. data/src/gocr-0.48/man/Makefile.in +29 -0
  74. data/src/gocr-0.48/man/man1/gocr.1 +166 -0
  75. data/src/gocr-0.48/src/.cvsignore +4 -0
  76. data/src/gocr-0.48/src/Makefile +132 -0
  77. data/src/gocr-0.48/src/Makefile.in +132 -0
  78. data/src/gocr-0.48/src/amiga.h +31 -0
  79. data/src/gocr-0.48/src/barcode.c +846 -0
  80. data/src/gocr-0.48/src/barcode.c.orig +593 -0
  81. data/src/gocr-0.48/src/barcode.h +11 -0
  82. data/src/gocr-0.48/src/box.c +372 -0
  83. data/src/gocr-0.48/src/database.c +462 -0
  84. data/src/gocr-0.48/src/detect.c +943 -0
  85. data/src/gocr-0.48/src/gocr.c +373 -0
  86. data/src/gocr-0.48/src/gocr.h +288 -0
  87. data/src/gocr-0.48/src/jconv.c +168 -0
  88. data/src/gocr-0.48/src/job.c +84 -0
  89. data/src/gocr-0.48/src/lines.c +350 -0
  90. data/src/gocr-0.48/src/list.c +334 -0
  91. data/src/gocr-0.48/src/list.h +90 -0
  92. data/src/gocr-0.48/src/ocr0.c +6756 -0
  93. data/src/gocr-0.48/src/ocr0.h +63 -0
  94. data/src/gocr-0.48/src/ocr0n.c +1475 -0
  95. data/src/gocr-0.48/src/ocr1.c +85 -0
  96. data/src/gocr-0.48/src/ocr1.h +3 -0
  97. data/src/gocr-0.48/src/otsu.c +289 -0
  98. data/src/gocr-0.48/src/otsu.h +23 -0
  99. data/src/gocr-0.48/src/output.c +289 -0
  100. data/src/gocr-0.48/src/output.h +37 -0
  101. data/src/gocr-0.48/src/pcx.c +153 -0
  102. data/src/gocr-0.48/src/pcx.h +9 -0
  103. data/src/gocr-0.48/src/pgm2asc.c +2893 -0
  104. data/src/gocr-0.48/src/pgm2asc.h +105 -0
  105. data/src/gocr-0.48/src/pixel.c +537 -0
  106. data/src/gocr-0.48/src/pnm.c +533 -0
  107. data/src/gocr-0.48/src/pnm.h +35 -0
  108. data/src/gocr-0.48/src/progress.c +87 -0
  109. data/src/gocr-0.48/src/progress.h +42 -0
  110. data/src/gocr-0.48/src/remove.c +703 -0
  111. data/src/gocr-0.48/src/tga.c +87 -0
  112. data/src/gocr-0.48/src/tga.h +6 -0
  113. data/src/gocr-0.48/src/unicode.c +1314 -0
  114. data/src/gocr-0.48/src/unicode.h +1257 -0
  115. data/src/jpeg-7/Makefile.am +133 -0
  116. data/src/jpeg-7/Makefile.in +1089 -0
  117. data/src/jpeg-7/README +322 -0
  118. data/src/jpeg-7/aclocal.m4 +8990 -0
  119. data/src/jpeg-7/ansi2knr.1 +36 -0
  120. data/src/jpeg-7/ansi2knr.c +739 -0
  121. data/src/jpeg-7/cderror.h +132 -0
  122. data/src/jpeg-7/cdjpeg.c +181 -0
  123. data/src/jpeg-7/cdjpeg.h +187 -0
  124. data/src/jpeg-7/change.log +270 -0
  125. data/src/jpeg-7/cjpeg.1 +325 -0
  126. data/src/jpeg-7/cjpeg.c +616 -0
  127. data/src/jpeg-7/ckconfig.c +402 -0
  128. data/src/jpeg-7/coderules.txt +118 -0
  129. data/src/jpeg-7/config.guess +1561 -0
  130. data/src/jpeg-7/config.sub +1686 -0
  131. data/src/jpeg-7/configure +17139 -0
  132. data/src/jpeg-7/configure.ac +317 -0
  133. data/src/jpeg-7/depcomp +630 -0
  134. data/src/jpeg-7/djpeg.1 +251 -0
  135. data/src/jpeg-7/djpeg.c +617 -0
  136. data/src/jpeg-7/example.c +433 -0
  137. data/src/jpeg-7/filelist.txt +215 -0
  138. data/src/jpeg-7/install-sh +520 -0
  139. data/src/jpeg-7/install.txt +1097 -0
  140. data/src/jpeg-7/jaricom.c +148 -0
  141. data/src/jpeg-7/jcapimin.c +282 -0
  142. data/src/jpeg-7/jcapistd.c +161 -0
  143. data/src/jpeg-7/jcarith.c +921 -0
  144. data/src/jpeg-7/jccoefct.c +453 -0
  145. data/src/jpeg-7/jccolor.c +459 -0
  146. data/src/jpeg-7/jcdctmgr.c +482 -0
  147. data/src/jpeg-7/jchuff.c +1612 -0
  148. data/src/jpeg-7/jcinit.c +65 -0
  149. data/src/jpeg-7/jcmainct.c +293 -0
  150. data/src/jpeg-7/jcmarker.c +667 -0
  151. data/src/jpeg-7/jcmaster.c +770 -0
  152. data/src/jpeg-7/jcomapi.c +106 -0
  153. data/src/jpeg-7/jconfig.bcc +48 -0
  154. data/src/jpeg-7/jconfig.cfg +45 -0
  155. data/src/jpeg-7/jconfig.dj +38 -0
  156. data/src/jpeg-7/jconfig.mac +43 -0
  157. data/src/jpeg-7/jconfig.manx +43 -0
  158. data/src/jpeg-7/jconfig.mc6 +52 -0
  159. data/src/jpeg-7/jconfig.sas +43 -0
  160. data/src/jpeg-7/jconfig.st +42 -0
  161. data/src/jpeg-7/jconfig.txt +155 -0
  162. data/src/jpeg-7/jconfig.vc +45 -0
  163. data/src/jpeg-7/jconfig.vms +37 -0
  164. data/src/jpeg-7/jconfig.wat +38 -0
  165. data/src/jpeg-7/jcparam.c +632 -0
  166. data/src/jpeg-7/jcprepct.c +358 -0
  167. data/src/jpeg-7/jcsample.c +545 -0
  168. data/src/jpeg-7/jctrans.c +381 -0
  169. data/src/jpeg-7/jdapimin.c +396 -0
  170. data/src/jpeg-7/jdapistd.c +275 -0
  171. data/src/jpeg-7/jdarith.c +762 -0
  172. data/src/jpeg-7/jdatadst.c +151 -0
  173. data/src/jpeg-7/jdatasrc.c +212 -0
  174. data/src/jpeg-7/jdcoefct.c +736 -0
  175. data/src/jpeg-7/jdcolor.c +396 -0
  176. data/src/jpeg-7/jdct.h +393 -0
  177. data/src/jpeg-7/jddctmgr.c +382 -0
  178. data/src/jpeg-7/jdhuff.c +1309 -0
  179. data/src/jpeg-7/jdinput.c +384 -0
  180. data/src/jpeg-7/jdmainct.c +512 -0
  181. data/src/jpeg-7/jdmarker.c +1360 -0
  182. data/src/jpeg-7/jdmaster.c +663 -0
  183. data/src/jpeg-7/jdmerge.c +400 -0
  184. data/src/jpeg-7/jdpostct.c +290 -0
  185. data/src/jpeg-7/jdsample.c +361 -0
  186. data/src/jpeg-7/jdtrans.c +136 -0
  187. data/src/jpeg-7/jerror.c +252 -0
  188. data/src/jpeg-7/jerror.h +304 -0
  189. data/src/jpeg-7/jfdctflt.c +174 -0
  190. data/src/jpeg-7/jfdctfst.c +230 -0
  191. data/src/jpeg-7/jfdctint.c +4348 -0
  192. data/src/jpeg-7/jidctflt.c +242 -0
  193. data/src/jpeg-7/jidctfst.c +368 -0
  194. data/src/jpeg-7/jidctint.c +5137 -0
  195. data/src/jpeg-7/jinclude.h +91 -0
  196. data/src/jpeg-7/jmemansi.c +167 -0
  197. data/src/jpeg-7/jmemdos.c +638 -0
  198. data/src/jpeg-7/jmemdosa.asm +379 -0
  199. data/src/jpeg-7/jmemmac.c +289 -0
  200. data/src/jpeg-7/jmemmgr.c +1118 -0
  201. data/src/jpeg-7/jmemname.c +276 -0
  202. data/src/jpeg-7/jmemnobs.c +109 -0
  203. data/src/jpeg-7/jmemsys.h +198 -0
  204. data/src/jpeg-7/jmorecfg.h +369 -0
  205. data/src/jpeg-7/jpegint.h +395 -0
  206. data/src/jpeg-7/jpeglib.h +1135 -0
  207. data/src/jpeg-7/jpegtran.1 +272 -0
  208. data/src/jpeg-7/jpegtran.c +546 -0
  209. data/src/jpeg-7/jquant1.c +856 -0
  210. data/src/jpeg-7/jquant2.c +1310 -0
  211. data/src/jpeg-7/jutils.c +179 -0
  212. data/src/jpeg-7/jversion.h +14 -0
  213. data/src/jpeg-7/libjpeg.map +4 -0
  214. data/src/jpeg-7/libjpeg.txt +3067 -0
  215. data/src/jpeg-7/ltmain.sh +8406 -0
  216. data/src/jpeg-7/makcjpeg.st +36 -0
  217. data/src/jpeg-7/makdjpeg.st +36 -0
  218. data/src/jpeg-7/makeadsw.vc6 +77 -0
  219. data/src/jpeg-7/makeasln.vc9 +33 -0
  220. data/src/jpeg-7/makecdep.vc6 +82 -0
  221. data/src/jpeg-7/makecdsp.vc6 +130 -0
  222. data/src/jpeg-7/makecmak.vc6 +159 -0
  223. data/src/jpeg-7/makecvcp.vc9 +186 -0
  224. data/src/jpeg-7/makeddep.vc6 +82 -0
  225. data/src/jpeg-7/makeddsp.vc6 +130 -0
  226. data/src/jpeg-7/makedmak.vc6 +159 -0
  227. data/src/jpeg-7/makedvcp.vc9 +186 -0
  228. data/src/jpeg-7/makefile.ansi +220 -0
  229. data/src/jpeg-7/makefile.bcc +291 -0
  230. data/src/jpeg-7/makefile.dj +226 -0
  231. data/src/jpeg-7/makefile.manx +220 -0
  232. data/src/jpeg-7/makefile.mc6 +255 -0
  233. data/src/jpeg-7/makefile.mms +224 -0
  234. data/src/jpeg-7/makefile.sas +258 -0
  235. data/src/jpeg-7/makefile.unix +234 -0
  236. data/src/jpeg-7/makefile.vc +217 -0
  237. data/src/jpeg-7/makefile.vms +142 -0
  238. data/src/jpeg-7/makefile.wat +239 -0
  239. data/src/jpeg-7/makejdep.vc6 +423 -0
  240. data/src/jpeg-7/makejdsp.vc6 +285 -0
  241. data/src/jpeg-7/makejdsw.vc6 +29 -0
  242. data/src/jpeg-7/makejmak.vc6 +425 -0
  243. data/src/jpeg-7/makejsln.vc9 +17 -0
  244. data/src/jpeg-7/makejvcp.vc9 +328 -0
  245. data/src/jpeg-7/makeproj.mac +213 -0
  246. data/src/jpeg-7/makerdep.vc6 +6 -0
  247. data/src/jpeg-7/makerdsp.vc6 +78 -0
  248. data/src/jpeg-7/makermak.vc6 +110 -0
  249. data/src/jpeg-7/makervcp.vc9 +133 -0
  250. data/src/jpeg-7/maketdep.vc6 +43 -0
  251. data/src/jpeg-7/maketdsp.vc6 +122 -0
  252. data/src/jpeg-7/maketmak.vc6 +131 -0
  253. data/src/jpeg-7/maketvcp.vc9 +178 -0
  254. data/src/jpeg-7/makewdep.vc6 +6 -0
  255. data/src/jpeg-7/makewdsp.vc6 +78 -0
  256. data/src/jpeg-7/makewmak.vc6 +110 -0
  257. data/src/jpeg-7/makewvcp.vc9 +133 -0
  258. data/src/jpeg-7/makljpeg.st +68 -0
  259. data/src/jpeg-7/maktjpeg.st +30 -0
  260. data/src/jpeg-7/makvms.opt +4 -0
  261. data/src/jpeg-7/missing +376 -0
  262. data/src/jpeg-7/rdbmp.c +439 -0
  263. data/src/jpeg-7/rdcolmap.c +253 -0
  264. data/src/jpeg-7/rdgif.c +38 -0
  265. data/src/jpeg-7/rdjpgcom.1 +63 -0
  266. data/src/jpeg-7/rdjpgcom.c +515 -0
  267. data/src/jpeg-7/rdppm.c +459 -0
  268. data/src/jpeg-7/rdrle.c +387 -0
  269. data/src/jpeg-7/rdswitch.c +365 -0
  270. data/src/jpeg-7/rdtarga.c +500 -0
  271. data/src/jpeg-7/structure.txt +945 -0
  272. data/src/jpeg-7/testimg.bmp +0 -0
  273. data/src/jpeg-7/testimg.jpg +0 -0
  274. data/src/jpeg-7/testimg.ppm +4 -0
  275. data/src/jpeg-7/testimgp.jpg +0 -0
  276. data/src/jpeg-7/testorig.jpg +0 -0
  277. data/src/jpeg-7/testprog.jpg +0 -0
  278. data/src/jpeg-7/transupp.c +1533 -0
  279. data/src/jpeg-7/transupp.h +205 -0
  280. data/src/jpeg-7/usage.txt +605 -0
  281. data/src/jpeg-7/wizard.txt +211 -0
  282. data/src/jpeg-7/wrbmp.c +442 -0
  283. data/src/jpeg-7/wrgif.c +399 -0
  284. data/src/jpeg-7/wrjpgcom.1 +103 -0
  285. data/src/jpeg-7/wrjpgcom.c +583 -0
  286. data/src/jpeg-7/wrppm.c +269 -0
  287. data/src/jpeg-7/wrrle.c +305 -0
  288. data/src/jpeg-7/wrtarga.c +253 -0
  289. data/test/isbn_test.rb +7 -0
  290. data/test/test_helper.rb +7 -0
  291. metadata +345 -0
@@ -0,0 +1,242 @@
1
+ /*
2
+ * jidctflt.c
3
+ *
4
+ * Copyright (C) 1994-1998, Thomas G. Lane.
5
+ * This file is part of the Independent JPEG Group's software.
6
+ * For conditions of distribution and use, see the accompanying README file.
7
+ *
8
+ * This file contains a floating-point implementation of the
9
+ * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine
10
+ * must also perform dequantization of the input coefficients.
11
+ *
12
+ * This implementation should be more accurate than either of the integer
13
+ * IDCT implementations. However, it may not give the same results on all
14
+ * machines because of differences in roundoff behavior. Speed will depend
15
+ * on the hardware's floating point capacity.
16
+ *
17
+ * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
18
+ * on each row (or vice versa, but it's more convenient to emit a row at
19
+ * a time). Direct algorithms are also available, but they are much more
20
+ * complex and seem not to be any faster when reduced to code.
21
+ *
22
+ * This implementation is based on Arai, Agui, and Nakajima's algorithm for
23
+ * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in
24
+ * Japanese, but the algorithm is described in the Pennebaker & Mitchell
25
+ * JPEG textbook (see REFERENCES section in file README). The following code
26
+ * is based directly on figure 4-8 in P&M.
27
+ * While an 8-point DCT cannot be done in less than 11 multiplies, it is
28
+ * possible to arrange the computation so that many of the multiplies are
29
+ * simple scalings of the final outputs. These multiplies can then be
30
+ * folded into the multiplications or divisions by the JPEG quantization
31
+ * table entries. The AA&N method leaves only 5 multiplies and 29 adds
32
+ * to be done in the DCT itself.
33
+ * The primary disadvantage of this method is that with a fixed-point
34
+ * implementation, accuracy is lost due to imprecise representation of the
35
+ * scaled quantization values. However, that problem does not arise if
36
+ * we use floating point arithmetic.
37
+ */
38
+
39
+ #define JPEG_INTERNALS
40
+ #include "jinclude.h"
41
+ #include "jpeglib.h"
42
+ #include "jdct.h" /* Private declarations for DCT subsystem */
43
+
44
+ #ifdef DCT_FLOAT_SUPPORTED
45
+
46
+
47
+ /*
48
+ * This module is specialized to the case DCTSIZE = 8.
49
+ */
50
+
51
+ #if DCTSIZE != 8
52
+ Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
53
+ #endif
54
+
55
+
56
+ /* Dequantize a coefficient by multiplying it by the multiplier-table
57
+ * entry; produce a float result.
58
+ */
59
+
60
+ #define DEQUANTIZE(coef,quantval) (((FAST_FLOAT) (coef)) * (quantval))
61
+
62
+
63
+ /*
64
+ * Perform dequantization and inverse DCT on one block of coefficients.
65
+ */
66
+
67
+ GLOBAL(void)
68
+ jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr,
69
+ JCOEFPTR coef_block,
70
+ JSAMPARRAY output_buf, JDIMENSION output_col)
71
+ {
72
+ FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
73
+ FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
74
+ FAST_FLOAT z5, z10, z11, z12, z13;
75
+ JCOEFPTR inptr;
76
+ FLOAT_MULT_TYPE * quantptr;
77
+ FAST_FLOAT * wsptr;
78
+ JSAMPROW outptr;
79
+ JSAMPLE *range_limit = IDCT_range_limit(cinfo);
80
+ int ctr;
81
+ FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */
82
+ SHIFT_TEMPS
83
+
84
+ /* Pass 1: process columns from input, store into work array. */
85
+
86
+ inptr = coef_block;
87
+ quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table;
88
+ wsptr = workspace;
89
+ for (ctr = DCTSIZE; ctr > 0; ctr--) {
90
+ /* Due to quantization, we will usually find that many of the input
91
+ * coefficients are zero, especially the AC terms. We can exploit this
92
+ * by short-circuiting the IDCT calculation for any column in which all
93
+ * the AC terms are zero. In that case each output is equal to the
94
+ * DC coefficient (with scale factor as needed).
95
+ * With typical images and quantization tables, half or more of the
96
+ * column DCT calculations can be simplified this way.
97
+ */
98
+
99
+ if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
100
+ inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
101
+ inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
102
+ inptr[DCTSIZE*7] == 0) {
103
+ /* AC terms all zero */
104
+ FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
105
+
106
+ wsptr[DCTSIZE*0] = dcval;
107
+ wsptr[DCTSIZE*1] = dcval;
108
+ wsptr[DCTSIZE*2] = dcval;
109
+ wsptr[DCTSIZE*3] = dcval;
110
+ wsptr[DCTSIZE*4] = dcval;
111
+ wsptr[DCTSIZE*5] = dcval;
112
+ wsptr[DCTSIZE*6] = dcval;
113
+ wsptr[DCTSIZE*7] = dcval;
114
+
115
+ inptr++; /* advance pointers to next column */
116
+ quantptr++;
117
+ wsptr++;
118
+ continue;
119
+ }
120
+
121
+ /* Even part */
122
+
123
+ tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
124
+ tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
125
+ tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
126
+ tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
127
+
128
+ tmp10 = tmp0 + tmp2; /* phase 3 */
129
+ tmp11 = tmp0 - tmp2;
130
+
131
+ tmp13 = tmp1 + tmp3; /* phases 5-3 */
132
+ tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */
133
+
134
+ tmp0 = tmp10 + tmp13; /* phase 2 */
135
+ tmp3 = tmp10 - tmp13;
136
+ tmp1 = tmp11 + tmp12;
137
+ tmp2 = tmp11 - tmp12;
138
+
139
+ /* Odd part */
140
+
141
+ tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
142
+ tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
143
+ tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
144
+ tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
145
+
146
+ z13 = tmp6 + tmp5; /* phase 6 */
147
+ z10 = tmp6 - tmp5;
148
+ z11 = tmp4 + tmp7;
149
+ z12 = tmp4 - tmp7;
150
+
151
+ tmp7 = z11 + z13; /* phase 5 */
152
+ tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */
153
+
154
+ z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */
155
+ tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */
156
+ tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */
157
+
158
+ tmp6 = tmp12 - tmp7; /* phase 2 */
159
+ tmp5 = tmp11 - tmp6;
160
+ tmp4 = tmp10 + tmp5;
161
+
162
+ wsptr[DCTSIZE*0] = tmp0 + tmp7;
163
+ wsptr[DCTSIZE*7] = tmp0 - tmp7;
164
+ wsptr[DCTSIZE*1] = tmp1 + tmp6;
165
+ wsptr[DCTSIZE*6] = tmp1 - tmp6;
166
+ wsptr[DCTSIZE*2] = tmp2 + tmp5;
167
+ wsptr[DCTSIZE*5] = tmp2 - tmp5;
168
+ wsptr[DCTSIZE*4] = tmp3 + tmp4;
169
+ wsptr[DCTSIZE*3] = tmp3 - tmp4;
170
+
171
+ inptr++; /* advance pointers to next column */
172
+ quantptr++;
173
+ wsptr++;
174
+ }
175
+
176
+ /* Pass 2: process rows from work array, store into output array. */
177
+ /* Note that we must descale the results by a factor of 8 == 2**3. */
178
+
179
+ wsptr = workspace;
180
+ for (ctr = 0; ctr < DCTSIZE; ctr++) {
181
+ outptr = output_buf[ctr] + output_col;
182
+ /* Rows of zeroes can be exploited in the same way as we did with columns.
183
+ * However, the column calculation has created many nonzero AC terms, so
184
+ * the simplification applies less often (typically 5% to 10% of the time).
185
+ * And testing floats for zero is relatively expensive, so we don't bother.
186
+ */
187
+
188
+ /* Even part */
189
+
190
+ tmp10 = wsptr[0] + wsptr[4];
191
+ tmp11 = wsptr[0] - wsptr[4];
192
+
193
+ tmp13 = wsptr[2] + wsptr[6];
194
+ tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13;
195
+
196
+ tmp0 = tmp10 + tmp13;
197
+ tmp3 = tmp10 - tmp13;
198
+ tmp1 = tmp11 + tmp12;
199
+ tmp2 = tmp11 - tmp12;
200
+
201
+ /* Odd part */
202
+
203
+ z13 = wsptr[5] + wsptr[3];
204
+ z10 = wsptr[5] - wsptr[3];
205
+ z11 = wsptr[1] + wsptr[7];
206
+ z12 = wsptr[1] - wsptr[7];
207
+
208
+ tmp7 = z11 + z13;
209
+ tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562);
210
+
211
+ z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */
212
+ tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */
213
+ tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */
214
+
215
+ tmp6 = tmp12 - tmp7;
216
+ tmp5 = tmp11 - tmp6;
217
+ tmp4 = tmp10 + tmp5;
218
+
219
+ /* Final output stage: scale down by a factor of 8 and range-limit */
220
+
221
+ outptr[0] = range_limit[(int) DESCALE((INT32) (tmp0 + tmp7), 3)
222
+ & RANGE_MASK];
223
+ outptr[7] = range_limit[(int) DESCALE((INT32) (tmp0 - tmp7), 3)
224
+ & RANGE_MASK];
225
+ outptr[1] = range_limit[(int) DESCALE((INT32) (tmp1 + tmp6), 3)
226
+ & RANGE_MASK];
227
+ outptr[6] = range_limit[(int) DESCALE((INT32) (tmp1 - tmp6), 3)
228
+ & RANGE_MASK];
229
+ outptr[2] = range_limit[(int) DESCALE((INT32) (tmp2 + tmp5), 3)
230
+ & RANGE_MASK];
231
+ outptr[5] = range_limit[(int) DESCALE((INT32) (tmp2 - tmp5), 3)
232
+ & RANGE_MASK];
233
+ outptr[4] = range_limit[(int) DESCALE((INT32) (tmp3 + tmp4), 3)
234
+ & RANGE_MASK];
235
+ outptr[3] = range_limit[(int) DESCALE((INT32) (tmp3 - tmp4), 3)
236
+ & RANGE_MASK];
237
+
238
+ wsptr += DCTSIZE; /* advance pointer to next row */
239
+ }
240
+ }
241
+
242
+ #endif /* DCT_FLOAT_SUPPORTED */
@@ -0,0 +1,368 @@
1
+ /*
2
+ * jidctfst.c
3
+ *
4
+ * Copyright (C) 1994-1998, Thomas G. Lane.
5
+ * This file is part of the Independent JPEG Group's software.
6
+ * For conditions of distribution and use, see the accompanying README file.
7
+ *
8
+ * This file contains a fast, not so accurate integer implementation of the
9
+ * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine
10
+ * must also perform dequantization of the input coefficients.
11
+ *
12
+ * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
13
+ * on each row (or vice versa, but it's more convenient to emit a row at
14
+ * a time). Direct algorithms are also available, but they are much more
15
+ * complex and seem not to be any faster when reduced to code.
16
+ *
17
+ * This implementation is based on Arai, Agui, and Nakajima's algorithm for
18
+ * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in
19
+ * Japanese, but the algorithm is described in the Pennebaker & Mitchell
20
+ * JPEG textbook (see REFERENCES section in file README). The following code
21
+ * is based directly on figure 4-8 in P&M.
22
+ * While an 8-point DCT cannot be done in less than 11 multiplies, it is
23
+ * possible to arrange the computation so that many of the multiplies are
24
+ * simple scalings of the final outputs. These multiplies can then be
25
+ * folded into the multiplications or divisions by the JPEG quantization
26
+ * table entries. The AA&N method leaves only 5 multiplies and 29 adds
27
+ * to be done in the DCT itself.
28
+ * The primary disadvantage of this method is that with fixed-point math,
29
+ * accuracy is lost due to imprecise representation of the scaled
30
+ * quantization values. The smaller the quantization table entry, the less
31
+ * precise the scaled value, so this implementation does worse with high-
32
+ * quality-setting files than with low-quality ones.
33
+ */
34
+
35
+ #define JPEG_INTERNALS
36
+ #include "jinclude.h"
37
+ #include "jpeglib.h"
38
+ #include "jdct.h" /* Private declarations for DCT subsystem */
39
+
40
+ #ifdef DCT_IFAST_SUPPORTED
41
+
42
+
43
+ /*
44
+ * This module is specialized to the case DCTSIZE = 8.
45
+ */
46
+
47
+ #if DCTSIZE != 8
48
+ Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
49
+ #endif
50
+
51
+
52
+ /* Scaling decisions are generally the same as in the LL&M algorithm;
53
+ * see jidctint.c for more details. However, we choose to descale
54
+ * (right shift) multiplication products as soon as they are formed,
55
+ * rather than carrying additional fractional bits into subsequent additions.
56
+ * This compromises accuracy slightly, but it lets us save a few shifts.
57
+ * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples)
58
+ * everywhere except in the multiplications proper; this saves a good deal
59
+ * of work on 16-bit-int machines.
60
+ *
61
+ * The dequantized coefficients are not integers because the AA&N scaling
62
+ * factors have been incorporated. We represent them scaled up by PASS1_BITS,
63
+ * so that the first and second IDCT rounds have the same input scaling.
64
+ * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to
65
+ * avoid a descaling shift; this compromises accuracy rather drastically
66
+ * for small quantization table entries, but it saves a lot of shifts.
67
+ * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway,
68
+ * so we use a much larger scaling factor to preserve accuracy.
69
+ *
70
+ * A final compromise is to represent the multiplicative constants to only
71
+ * 8 fractional bits, rather than 13. This saves some shifting work on some
72
+ * machines, and may also reduce the cost of multiplication (since there
73
+ * are fewer one-bits in the constants).
74
+ */
75
+
76
+ #if BITS_IN_JSAMPLE == 8
77
+ #define CONST_BITS 8
78
+ #define PASS1_BITS 2
79
+ #else
80
+ #define CONST_BITS 8
81
+ #define PASS1_BITS 1 /* lose a little precision to avoid overflow */
82
+ #endif
83
+
84
+ /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
85
+ * causing a lot of useless floating-point operations at run time.
86
+ * To get around this we use the following pre-calculated constants.
87
+ * If you change CONST_BITS you may want to add appropriate values.
88
+ * (With a reasonable C compiler, you can just rely on the FIX() macro...)
89
+ */
90
+
91
+ #if CONST_BITS == 8
92
+ #define FIX_1_082392200 ((INT32) 277) /* FIX(1.082392200) */
93
+ #define FIX_1_414213562 ((INT32) 362) /* FIX(1.414213562) */
94
+ #define FIX_1_847759065 ((INT32) 473) /* FIX(1.847759065) */
95
+ #define FIX_2_613125930 ((INT32) 669) /* FIX(2.613125930) */
96
+ #else
97
+ #define FIX_1_082392200 FIX(1.082392200)
98
+ #define FIX_1_414213562 FIX(1.414213562)
99
+ #define FIX_1_847759065 FIX(1.847759065)
100
+ #define FIX_2_613125930 FIX(2.613125930)
101
+ #endif
102
+
103
+
104
+ /* We can gain a little more speed, with a further compromise in accuracy,
105
+ * by omitting the addition in a descaling shift. This yields an incorrectly
106
+ * rounded result half the time...
107
+ */
108
+
109
+ #ifndef USE_ACCURATE_ROUNDING
110
+ #undef DESCALE
111
+ #define DESCALE(x,n) RIGHT_SHIFT(x, n)
112
+ #endif
113
+
114
+
115
+ /* Multiply a DCTELEM variable by an INT32 constant, and immediately
116
+ * descale to yield a DCTELEM result.
117
+ */
118
+
119
+ #define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS))
120
+
121
+
122
+ /* Dequantize a coefficient by multiplying it by the multiplier-table
123
+ * entry; produce a DCTELEM result. For 8-bit data a 16x16->16
124
+ * multiplication will do. For 12-bit data, the multiplier table is
125
+ * declared INT32, so a 32-bit multiply will be used.
126
+ */
127
+
128
+ #if BITS_IN_JSAMPLE == 8
129
+ #define DEQUANTIZE(coef,quantval) (((IFAST_MULT_TYPE) (coef)) * (quantval))
130
+ #else
131
+ #define DEQUANTIZE(coef,quantval) \
132
+ DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS)
133
+ #endif
134
+
135
+
136
+ /* Like DESCALE, but applies to a DCTELEM and produces an int.
137
+ * We assume that int right shift is unsigned if INT32 right shift is.
138
+ */
139
+
140
+ #ifdef RIGHT_SHIFT_IS_UNSIGNED
141
+ #define ISHIFT_TEMPS DCTELEM ishift_temp;
142
+ #if BITS_IN_JSAMPLE == 8
143
+ #define DCTELEMBITS 16 /* DCTELEM may be 16 or 32 bits */
144
+ #else
145
+ #define DCTELEMBITS 32 /* DCTELEM must be 32 bits */
146
+ #endif
147
+ #define IRIGHT_SHIFT(x,shft) \
148
+ ((ishift_temp = (x)) < 0 ? \
149
+ (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \
150
+ (ishift_temp >> (shft)))
151
+ #else
152
+ #define ISHIFT_TEMPS
153
+ #define IRIGHT_SHIFT(x,shft) ((x) >> (shft))
154
+ #endif
155
+
156
+ #ifdef USE_ACCURATE_ROUNDING
157
+ #define IDESCALE(x,n) ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n))
158
+ #else
159
+ #define IDESCALE(x,n) ((int) IRIGHT_SHIFT(x, n))
160
+ #endif
161
+
162
+
163
+ /*
164
+ * Perform dequantization and inverse DCT on one block of coefficients.
165
+ */
166
+
167
+ GLOBAL(void)
168
+ jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr,
169
+ JCOEFPTR coef_block,
170
+ JSAMPARRAY output_buf, JDIMENSION output_col)
171
+ {
172
+ DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
173
+ DCTELEM tmp10, tmp11, tmp12, tmp13;
174
+ DCTELEM z5, z10, z11, z12, z13;
175
+ JCOEFPTR inptr;
176
+ IFAST_MULT_TYPE * quantptr;
177
+ int * wsptr;
178
+ JSAMPROW outptr;
179
+ JSAMPLE *range_limit = IDCT_range_limit(cinfo);
180
+ int ctr;
181
+ int workspace[DCTSIZE2]; /* buffers data between passes */
182
+ SHIFT_TEMPS /* for DESCALE */
183
+ ISHIFT_TEMPS /* for IDESCALE */
184
+
185
+ /* Pass 1: process columns from input, store into work array. */
186
+
187
+ inptr = coef_block;
188
+ quantptr = (IFAST_MULT_TYPE *) compptr->dct_table;
189
+ wsptr = workspace;
190
+ for (ctr = DCTSIZE; ctr > 0; ctr--) {
191
+ /* Due to quantization, we will usually find that many of the input
192
+ * coefficients are zero, especially the AC terms. We can exploit this
193
+ * by short-circuiting the IDCT calculation for any column in which all
194
+ * the AC terms are zero. In that case each output is equal to the
195
+ * DC coefficient (with scale factor as needed).
196
+ * With typical images and quantization tables, half or more of the
197
+ * column DCT calculations can be simplified this way.
198
+ */
199
+
200
+ if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
201
+ inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
202
+ inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
203
+ inptr[DCTSIZE*7] == 0) {
204
+ /* AC terms all zero */
205
+ int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
206
+
207
+ wsptr[DCTSIZE*0] = dcval;
208
+ wsptr[DCTSIZE*1] = dcval;
209
+ wsptr[DCTSIZE*2] = dcval;
210
+ wsptr[DCTSIZE*3] = dcval;
211
+ wsptr[DCTSIZE*4] = dcval;
212
+ wsptr[DCTSIZE*5] = dcval;
213
+ wsptr[DCTSIZE*6] = dcval;
214
+ wsptr[DCTSIZE*7] = dcval;
215
+
216
+ inptr++; /* advance pointers to next column */
217
+ quantptr++;
218
+ wsptr++;
219
+ continue;
220
+ }
221
+
222
+ /* Even part */
223
+
224
+ tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
225
+ tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
226
+ tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
227
+ tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
228
+
229
+ tmp10 = tmp0 + tmp2; /* phase 3 */
230
+ tmp11 = tmp0 - tmp2;
231
+
232
+ tmp13 = tmp1 + tmp3; /* phases 5-3 */
233
+ tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */
234
+
235
+ tmp0 = tmp10 + tmp13; /* phase 2 */
236
+ tmp3 = tmp10 - tmp13;
237
+ tmp1 = tmp11 + tmp12;
238
+ tmp2 = tmp11 - tmp12;
239
+
240
+ /* Odd part */
241
+
242
+ tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
243
+ tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
244
+ tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
245
+ tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
246
+
247
+ z13 = tmp6 + tmp5; /* phase 6 */
248
+ z10 = tmp6 - tmp5;
249
+ z11 = tmp4 + tmp7;
250
+ z12 = tmp4 - tmp7;
251
+
252
+ tmp7 = z11 + z13; /* phase 5 */
253
+ tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
254
+
255
+ z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
256
+ tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
257
+ tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
258
+
259
+ tmp6 = tmp12 - tmp7; /* phase 2 */
260
+ tmp5 = tmp11 - tmp6;
261
+ tmp4 = tmp10 + tmp5;
262
+
263
+ wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7);
264
+ wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7);
265
+ wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6);
266
+ wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6);
267
+ wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5);
268
+ wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5);
269
+ wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4);
270
+ wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4);
271
+
272
+ inptr++; /* advance pointers to next column */
273
+ quantptr++;
274
+ wsptr++;
275
+ }
276
+
277
+ /* Pass 2: process rows from work array, store into output array. */
278
+ /* Note that we must descale the results by a factor of 8 == 2**3, */
279
+ /* and also undo the PASS1_BITS scaling. */
280
+
281
+ wsptr = workspace;
282
+ for (ctr = 0; ctr < DCTSIZE; ctr++) {
283
+ outptr = output_buf[ctr] + output_col;
284
+ /* Rows of zeroes can be exploited in the same way as we did with columns.
285
+ * However, the column calculation has created many nonzero AC terms, so
286
+ * the simplification applies less often (typically 5% to 10% of the time).
287
+ * On machines with very fast multiplication, it's possible that the
288
+ * test takes more time than it's worth. In that case this section
289
+ * may be commented out.
290
+ */
291
+
292
+ #ifndef NO_ZERO_ROW_TEST
293
+ if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 &&
294
+ wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
295
+ /* AC terms all zero */
296
+ JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3)
297
+ & RANGE_MASK];
298
+
299
+ outptr[0] = dcval;
300
+ outptr[1] = dcval;
301
+ outptr[2] = dcval;
302
+ outptr[3] = dcval;
303
+ outptr[4] = dcval;
304
+ outptr[5] = dcval;
305
+ outptr[6] = dcval;
306
+ outptr[7] = dcval;
307
+
308
+ wsptr += DCTSIZE; /* advance pointer to next row */
309
+ continue;
310
+ }
311
+ #endif
312
+
313
+ /* Even part */
314
+
315
+ tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]);
316
+ tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]);
317
+
318
+ tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]);
319
+ tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562)
320
+ - tmp13;
321
+
322
+ tmp0 = tmp10 + tmp13;
323
+ tmp3 = tmp10 - tmp13;
324
+ tmp1 = tmp11 + tmp12;
325
+ tmp2 = tmp11 - tmp12;
326
+
327
+ /* Odd part */
328
+
329
+ z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3];
330
+ z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3];
331
+ z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7];
332
+ z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7];
333
+
334
+ tmp7 = z11 + z13; /* phase 5 */
335
+ tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
336
+
337
+ z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
338
+ tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
339
+ tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
340
+
341
+ tmp6 = tmp12 - tmp7; /* phase 2 */
342
+ tmp5 = tmp11 - tmp6;
343
+ tmp4 = tmp10 + tmp5;
344
+
345
+ /* Final output stage: scale down by a factor of 8 and range-limit */
346
+
347
+ outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3)
348
+ & RANGE_MASK];
349
+ outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3)
350
+ & RANGE_MASK];
351
+ outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3)
352
+ & RANGE_MASK];
353
+ outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3)
354
+ & RANGE_MASK];
355
+ outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3)
356
+ & RANGE_MASK];
357
+ outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3)
358
+ & RANGE_MASK];
359
+ outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3)
360
+ & RANGE_MASK];
361
+ outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3)
362
+ & RANGE_MASK];
363
+
364
+ wsptr += DCTSIZE; /* advance pointer to next row */
365
+ }
366
+ }
367
+
368
+ #endif /* DCT_IFAST_SUPPORTED */