annotate jfdctint.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 7dd2a45249a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
1 /*
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
2 * jfdctint.c
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
3 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
4 * This file is part of the Independent JPEG Group's software.
3669
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
5 *
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
6 * The authors make NO WARRANTY or representation, either express or implied,
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
7 * with respect to this software, its quality, accuracy, merchantability, or
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
8 * fitness for a particular purpose. This software is provided "AS IS", and
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
9 * you, its user, assume the entire risk as to its quality and accuracy.
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
10 *
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
11 * This software is copyright (C) 1991-1996, Thomas G. Lane.
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
12 * All Rights Reserved except as specified below.
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
13 *
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
14 * Permission is hereby granted to use, copy, modify, and distribute this
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
15 * software (or portions thereof) for any purpose, without fee, subject to
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
16 * these conditions:
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
17 * (1) If any part of the source code for this software is distributed, then
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
18 * this README file must be included, with this copyright and no-warranty
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
19 * notice unaltered; and any additions, deletions, or changes to the original
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
20 * files must be clearly indicated in accompanying documentation.
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
21 * (2) If only executable code is distributed, then the accompanying
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
22 * documentation must state that "this software is based in part on the work
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
23 * of the Independent JPEG Group".
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
24 * (3) Permission for use of this software is granted only if the user accepts
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
25 * full responsibility for any undesirable consequences; the authors accept
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
26 * NO LIABILITY for damages of any kind.
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
27 *
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
28 * These conditions apply to any software derived from or based on the IJG
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
29 * code, not just to the unmodified library. If you use our work, you ought
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
30 * to acknowledge us.
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
31 *
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
32 * Permission is NOT granted for the use of any IJG author's name or company
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
33 * name in advertising or publicity relating to this software or products
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
34 * derived from it. This software may be referred to only as "the Independent
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
35 * JPEG Group's software".
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
36 *
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
37 * We specifically permit and encourage the use of this software as the basis
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
38 * of commercial products, provided that all warranty or liability claims are
9b98e18a1b1c Add copyright notice from the Independent JPEG Group instead of referring
diego
parents: 2979
diff changeset
39 * assumed by the product vendor.
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
40 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
41 * This file contains a slow-but-accurate integer implementation of the
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
42 * forward DCT (Discrete Cosine Transform).
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
43 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
44 * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
45 * on each column. Direct algorithms are also available, but they are
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
46 * much more complex and seem not to be any faster when reduced to code.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
47 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
48 * This implementation is based on an algorithm described in
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
49 * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
50 * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
51 * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
52 * The primary algorithm described there uses 11 multiplies and 29 adds.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
53 * We use their alternate method with 12 multiplies and 32 adds.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
54 * The advantage of this method is that no data path contains more than one
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
55 * multiplication; this allows a very simple and accurate implementation in
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
56 * scaled fixed-point arithmetic, with a minimal number of shifts.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
57 */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
58
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
59 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 10446
diff changeset
60 * @file
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
61 * Independent JPEG Group's slow & accurate dct.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
62 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
63
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
64 #include <stdlib.h>
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
65 #include <stdio.h>
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 4283
diff changeset
66 #include "libavutil/common.h"
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
67 #include "dsputil.h"
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
68
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
69 #define DCTSIZE 8
637
de12d5b9c9ad higher accuracy
michaelni
parents: 625
diff changeset
70 #define BITS_IN_JSAMPLE 8
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
71 #define GLOBAL(x) x
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
72 #define RIGHT_SHIFT(x, n) ((x) >> (n))
637
de12d5b9c9ad higher accuracy
michaelni
parents: 625
diff changeset
73 #define MULTIPLY16C16(var,const) ((var)*(const))
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
74
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
75 #if 1 //def USE_ACCURATE_ROUNDING
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
76 #define DESCALE(x,n) RIGHT_SHIFT((x) + (1 << ((n) - 1)), n)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
77 #else
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
78 #define DESCALE(x,n) RIGHT_SHIFT(x, n)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
79 #endif
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
80
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
81
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
82 /*
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
83 * This module is specialized to the case DCTSIZE = 8.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
84 */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
85
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
86 #if DCTSIZE != 8
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
87 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
88 #endif
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
89
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
90
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
91 /*
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
92 * The poop on this scaling stuff is as follows:
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
93 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
94 * Each 1-D DCT step produces outputs which are a factor of sqrt(N)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
95 * larger than the true DCT outputs. The final outputs are therefore
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
96 * a factor of N larger than desired; since N=8 this can be cured by
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
97 * a simple right shift at the end of the algorithm. The advantage of
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
98 * this arrangement is that we save two multiplications per 1-D DCT,
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
99 * because the y0 and y4 outputs need not be divided by sqrt(N).
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
100 * In the IJG code, this factor of 8 is removed by the quantization step
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
101 * (in jcdctmgr.c), NOT in this module.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
102 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
103 * We have to do addition and subtraction of the integer inputs, which
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
104 * is no problem, and multiplication by fractional constants, which is
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
105 * a problem to do in integer arithmetic. We multiply all the constants
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
106 * by CONST_SCALE and convert them to integer constants (thus retaining
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
107 * CONST_BITS bits of precision in the constants). After doing a
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
108 * multiplication we have to divide the product by CONST_SCALE, with proper
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
109 * rounding, to produce the correct output. This division can be done
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
110 * cheaply as a right shift of CONST_BITS bits. We postpone shifting
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
111 * as long as possible so that partial sums can be added together with
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
112 * full fractional precision.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
113 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
114 * The outputs of the first pass are scaled up by PASS1_BITS bits so that
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
115 * they are represented to better-than-integral precision. These outputs
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
116 * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
117 * with the recommended scaling. (For 12-bit sample data, the intermediate
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 637
diff changeset
118 * array is int32_t anyway.)
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
119 *
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
120 * To avoid overflow of the 32-bit intermediate results in pass 2, we must
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
121 * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
122 * shows that the values given below are the most effective.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
123 */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
124
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
125 #if BITS_IN_JSAMPLE == 8
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
126 #define CONST_BITS 13
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
127 #define PASS1_BITS 4 /* set this to 2 if 16x16 multiplies are faster */
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
128 #else
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
129 #define CONST_BITS 13
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
130 #define PASS1_BITS 1 /* lose a little precision to avoid overflow */
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
131 #endif
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
132
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
133 /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
134 * causing a lot of useless floating-point operations at run time.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
135 * To get around this we use the following pre-calculated constants.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
136 * If you change CONST_BITS you may want to add appropriate values.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
137 * (With a reasonable C compiler, you can just rely on the FIX() macro...)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
138 */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
139
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
140 #if CONST_BITS == 13
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
141 #define FIX_0_298631336 ((int32_t) 2446) /* FIX(0.298631336) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
142 #define FIX_0_390180644 ((int32_t) 3196) /* FIX(0.390180644) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
143 #define FIX_0_541196100 ((int32_t) 4433) /* FIX(0.541196100) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
144 #define FIX_0_765366865 ((int32_t) 6270) /* FIX(0.765366865) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
145 #define FIX_0_899976223 ((int32_t) 7373) /* FIX(0.899976223) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
146 #define FIX_1_175875602 ((int32_t) 9633) /* FIX(1.175875602) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
147 #define FIX_1_501321110 ((int32_t) 12299) /* FIX(1.501321110) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
148 #define FIX_1_847759065 ((int32_t) 15137) /* FIX(1.847759065) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
149 #define FIX_1_961570560 ((int32_t) 16069) /* FIX(1.961570560) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
150 #define FIX_2_053119869 ((int32_t) 16819) /* FIX(2.053119869) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
151 #define FIX_2_562915447 ((int32_t) 20995) /* FIX(2.562915447) */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
152 #define FIX_3_072711026 ((int32_t) 25172) /* FIX(3.072711026) */
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
153 #else
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
154 #define FIX_0_298631336 FIX(0.298631336)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
155 #define FIX_0_390180644 FIX(0.390180644)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
156 #define FIX_0_541196100 FIX(0.541196100)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
157 #define FIX_0_765366865 FIX(0.765366865)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
158 #define FIX_0_899976223 FIX(0.899976223)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
159 #define FIX_1_175875602 FIX(1.175875602)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
160 #define FIX_1_501321110 FIX(1.501321110)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
161 #define FIX_1_847759065 FIX(1.847759065)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
162 #define FIX_1_961570560 FIX(1.961570560)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
163 #define FIX_2_053119869 FIX(2.053119869)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
164 #define FIX_2_562915447 FIX(2.562915447)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
165 #define FIX_3_072711026 FIX(3.072711026)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
166 #endif
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
167
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
168
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 637
diff changeset
169 /* Multiply an int32_t variable by an int32_t constant to yield an int32_t result.
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
170 * For 8-bit samples with the recommended scaling, all the variable
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
171 * and constant values involved are no more than 16 bits wide, so a
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
172 * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
173 * For 12-bit samples, a full 32-bit multiplication will be needed.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
174 */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
175
637
de12d5b9c9ad higher accuracy
michaelni
parents: 625
diff changeset
176 #if BITS_IN_JSAMPLE == 8 && CONST_BITS<=13 && PASS1_BITS<=2
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
177 #define MULTIPLY(var,const) MULTIPLY16C16(var,const)
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
178 #else
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
179 #define MULTIPLY(var,const) ((var) * (const))
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
180 #endif
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
181
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
182
4283
d6f83e2f8804 rename always_inline to av_always_inline and move to common.h
mru
parents: 3669
diff changeset
183 static av_always_inline void row_fdct(DCTELEM * data){
1589
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
184 int_fast32_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
185 int_fast32_t tmp10, tmp11, tmp12, tmp13;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
186 int_fast32_t z1, z2, z3, z4, z5;
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
187 DCTELEM *dataptr;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
188 int ctr;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
189
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
190 /* Pass 1: process rows. */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
191 /* Note results are scaled up by sqrt(8) compared to a true DCT; */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
192 /* furthermore, we scale the results by 2**PASS1_BITS. */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
193
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
194 dataptr = data;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
195 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
196 tmp0 = dataptr[0] + dataptr[7];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
197 tmp7 = dataptr[0] - dataptr[7];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
198 tmp1 = dataptr[1] + dataptr[6];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
199 tmp6 = dataptr[1] - dataptr[6];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
200 tmp2 = dataptr[2] + dataptr[5];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
201 tmp5 = dataptr[2] - dataptr[5];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
202 tmp3 = dataptr[3] + dataptr[4];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
203 tmp4 = dataptr[3] - dataptr[4];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
204
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
205 /* Even part per LL&M figure 1 --- note that published figure is faulty;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
206 * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
207 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
208
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
209 tmp10 = tmp0 + tmp3;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
210 tmp13 = tmp0 - tmp3;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
211 tmp11 = tmp1 + tmp2;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
212 tmp12 = tmp1 - tmp2;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
213
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
214 dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS);
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
215 dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
216
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
217 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
218 dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
219 CONST_BITS-PASS1_BITS);
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
220 dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
221 CONST_BITS-PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
222
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
223 /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
224 * cK represents cos(K*pi/16).
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
225 * i0..i3 in the paper are tmp4..tmp7 here.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
226 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
227
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
228 z1 = tmp4 + tmp7;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
229 z2 = tmp5 + tmp6;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
230 z3 = tmp4 + tmp6;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
231 z4 = tmp5 + tmp7;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
232 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
233
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
234 tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
235 tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
236 tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
237 tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
238 z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
239 z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
240 z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
241 z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
242
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
243 z3 += z5;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
244 z4 += z5;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
245
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
246 dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS);
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
247 dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS);
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
248 dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS);
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
249 dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
250
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
251 dataptr += DCTSIZE; /* advance pointer to next row */
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
252 }
1589
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
253 }
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
254
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
255 /*
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
256 * Perform the forward DCT on one block of samples.
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
257 */
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
258
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
259 GLOBAL(void)
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
260 ff_jpeg_fdct_islow (DCTELEM * data)
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
261 {
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
262 int_fast32_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
263 int_fast32_t tmp10, tmp11, tmp12, tmp13;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
264 int_fast32_t z1, z2, z3, z4, z5;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
265 DCTELEM *dataptr;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
266 int ctr;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
267
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
268 row_fdct(data);
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
269
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
270 /* Pass 2: process columns.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
271 * We remove the PASS1_BITS scaling, but leave the results scaled up
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
272 * by an overall factor of 8.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
273 */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
274
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
275 dataptr = data;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
276 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
277 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
278 tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
279 tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
280 tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
281 tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
282 tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
283 tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
284 tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
285
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
286 /* Even part per LL&M figure 1 --- note that published figure is faulty;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
287 * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
288 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
289
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
290 tmp10 = tmp0 + tmp3;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
291 tmp13 = tmp0 - tmp3;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
292 tmp11 = tmp1 + tmp2;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
293 tmp12 = tmp1 - tmp2;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
294
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
295 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
296 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
297
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
298 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
299 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
300 CONST_BITS+PASS1_BITS);
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
301 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
302 CONST_BITS+PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
303
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
304 /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
305 * cK represents cos(K*pi/16).
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
306 * i0..i3 in the paper are tmp4..tmp7 here.
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
307 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
308
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
309 z1 = tmp4 + tmp7;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
310 z2 = tmp5 + tmp6;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
311 z3 = tmp4 + tmp6;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
312 z4 = tmp5 + tmp7;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
313 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
314
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
315 tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
316 tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
317 tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
318 tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
319 z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
320 z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
321 z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
322 z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
323
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
324 z3 += z5;
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
325 z4 += z5;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
326
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
327 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
328 CONST_BITS+PASS1_BITS);
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
329 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
330 CONST_BITS+PASS1_BITS);
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
331 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
332 CONST_BITS+PASS1_BITS);
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
333 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
334 CONST_BITS+PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
335
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
336 dataptr++; /* advance pointer to next column */
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
337 }
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
diff changeset
338 }
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
339
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
340 /*
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
341 * The secret of DCT2-4-8 is really simple -- you do the usual 1-DCT
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
342 * on the rows and then, instead of doing even and odd, part on the colums
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
343 * you do even part two times.
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
344 */
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
345 GLOBAL(void)
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
346 ff_fdct248_islow (DCTELEM * data)
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
347 {
1589
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
348 int_fast32_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
349 int_fast32_t tmp10, tmp11, tmp12, tmp13;
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
350 int_fast32_t z1;
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
351 DCTELEM *dataptr;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
352 int ctr;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
353
1589
eb26d190cf5a move identical code into its own function
michael
parents: 1567
diff changeset
354 row_fdct(data);
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
355
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
356 /* Pass 2: process columns.
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
357 * We remove the PASS1_BITS scaling, but leave the results scaled up
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
358 * by an overall factor of 8.
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
359 */
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
360
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
361 dataptr = data;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
362 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
363 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*1];
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
364 tmp1 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*3];
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
365 tmp2 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*5];
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
366 tmp3 = dataptr[DCTSIZE*6] + dataptr[DCTSIZE*7];
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
367 tmp4 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*1];
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
368 tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*3];
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
369 tmp6 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*5];
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
370 tmp7 = dataptr[DCTSIZE*6] - dataptr[DCTSIZE*7];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
371
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
372 tmp10 = tmp0 + tmp3;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
373 tmp11 = tmp1 + tmp2;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
374 tmp12 = tmp1 - tmp2;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
375 tmp13 = tmp0 - tmp3;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
376
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
377 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
378 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
379
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
380 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
381 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
382 CONST_BITS+PASS1_BITS);
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
383 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
384 CONST_BITS+PASS1_BITS);
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
385
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
386 tmp10 = tmp4 + tmp7;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
387 tmp11 = tmp5 + tmp6;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
388 tmp12 = tmp5 - tmp6;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
389 tmp13 = tmp4 - tmp7;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
390
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
391 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
392 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
393
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
394 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
395 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
396 CONST_BITS+PASS1_BITS);
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
397 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
398 CONST_BITS+PASS1_BITS);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1589
diff changeset
399
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
400 dataptr++; /* advance pointer to next column */
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
401 }
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1106
diff changeset
402 }