/src/freeimage-svn/FreeImage/trunk/Source/LibOpenJPEG/opj_intmath.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium |
3 | | * Copyright (c) 2002-2007, Professor Benoit Macq |
4 | | * Copyright (c) 2001-2003, David Janssens |
5 | | * Copyright (c) 2002-2003, Yannick Verschueren |
6 | | * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe |
7 | | * Copyright (c) 2005, Herve Drolon, FreeImage Team |
8 | | * All rights reserved. |
9 | | * |
10 | | * Redistribution and use in source and binary forms, with or without |
11 | | * modification, are permitted provided that the following conditions |
12 | | * are met: |
13 | | * 1. Redistributions of source code must retain the above copyright |
14 | | * notice, this list of conditions and the following disclaimer. |
15 | | * 2. Redistributions in binary form must reproduce the above copyright |
16 | | * notice, this list of conditions and the following disclaimer in the |
17 | | * documentation and/or other materials provided with the distribution. |
18 | | * |
19 | | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' |
20 | | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
21 | | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
22 | | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
23 | | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
24 | | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
25 | | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
26 | | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
27 | | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
28 | | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
29 | | * POSSIBILITY OF SUCH DAMAGE. |
30 | | */ |
31 | | #ifndef __INT_H |
32 | | #define __INT_H |
33 | | /** |
34 | | @file opj_intmath.h |
35 | | @brief Implementation of operations on integers (INT) |
36 | | |
37 | | The functions in OPJ_INTMATH.H have for goal to realize operations on integers. |
38 | | */ |
39 | | |
40 | | /** @defgroup OPJ_INTMATH OPJ_INTMATH - Implementation of operations on integers */ |
41 | | /*@{*/ |
42 | | |
43 | | /** @name Exported functions (see also openjpeg.h) */ |
44 | | /*@{*/ |
45 | | /* ----------------------------------------------------------------------- */ |
46 | | /** |
47 | | Get the minimum of two integers |
48 | | @return Returns a if a < b else b |
49 | | */ |
50 | 0 | static INLINE OPJ_INT32 opj_int_min(OPJ_INT32 a, OPJ_INT32 b) { |
51 | 0 | return a < b ? a : b; |
52 | 0 | } Unexecuted instantiation: image.c:opj_int_min Unexecuted instantiation: openjpeg.c:opj_int_min Unexecuted instantiation: cio.c:opj_int_min Unexecuted instantiation: event.c:opj_int_min Unexecuted instantiation: j2k.c:opj_int_min Unexecuted instantiation: jp2.c:opj_int_min Unexecuted instantiation: mct.c:opj_int_min Unexecuted instantiation: pi.c:opj_int_min Unexecuted instantiation: tcd.c:opj_int_min Unexecuted instantiation: tgt.c:opj_int_min Unexecuted instantiation: bio.c:opj_int_min Unexecuted instantiation: dwt.c:opj_int_min Unexecuted instantiation: function_list.c:opj_int_min Unexecuted instantiation: invert.c:opj_int_min Unexecuted instantiation: t1.c:opj_int_min Unexecuted instantiation: t2.c:opj_int_min Unexecuted instantiation: mqc.c:opj_int_min Unexecuted instantiation: raw.c:opj_int_min |
53 | | |
54 | | /** |
55 | | Get the minimum of two integers |
56 | | @return Returns a if a < b else b |
57 | | */ |
58 | 0 | static INLINE OPJ_UINT32 opj_uint_min(OPJ_UINT32 a, OPJ_UINT32 b) { |
59 | 0 | return a < b ? a : b; |
60 | 0 | } Unexecuted instantiation: image.c:opj_uint_min Unexecuted instantiation: openjpeg.c:opj_uint_min Unexecuted instantiation: cio.c:opj_uint_min Unexecuted instantiation: event.c:opj_uint_min Unexecuted instantiation: j2k.c:opj_uint_min Unexecuted instantiation: jp2.c:opj_uint_min Unexecuted instantiation: mct.c:opj_uint_min Unexecuted instantiation: pi.c:opj_uint_min Unexecuted instantiation: tcd.c:opj_uint_min Unexecuted instantiation: tgt.c:opj_uint_min Unexecuted instantiation: bio.c:opj_uint_min Unexecuted instantiation: dwt.c:opj_uint_min Unexecuted instantiation: function_list.c:opj_uint_min Unexecuted instantiation: invert.c:opj_uint_min Unexecuted instantiation: t1.c:opj_uint_min Unexecuted instantiation: t2.c:opj_uint_min Unexecuted instantiation: mqc.c:opj_uint_min Unexecuted instantiation: raw.c:opj_uint_min |
61 | | |
62 | | /** |
63 | | Get the maximum of two integers |
64 | | @return Returns a if a > b else b |
65 | | */ |
66 | 0 | static INLINE OPJ_INT32 opj_int_max(OPJ_INT32 a, OPJ_INT32 b) { |
67 | 0 | return (a > b) ? a : b; |
68 | 0 | } Unexecuted instantiation: image.c:opj_int_max Unexecuted instantiation: openjpeg.c:opj_int_max Unexecuted instantiation: cio.c:opj_int_max Unexecuted instantiation: event.c:opj_int_max Unexecuted instantiation: j2k.c:opj_int_max Unexecuted instantiation: jp2.c:opj_int_max Unexecuted instantiation: mct.c:opj_int_max Unexecuted instantiation: pi.c:opj_int_max Unexecuted instantiation: tcd.c:opj_int_max Unexecuted instantiation: tgt.c:opj_int_max Unexecuted instantiation: bio.c:opj_int_max Unexecuted instantiation: dwt.c:opj_int_max Unexecuted instantiation: function_list.c:opj_int_max Unexecuted instantiation: invert.c:opj_int_max Unexecuted instantiation: t1.c:opj_int_max Unexecuted instantiation: t2.c:opj_int_max Unexecuted instantiation: mqc.c:opj_int_max Unexecuted instantiation: raw.c:opj_int_max |
69 | | |
70 | | /** |
71 | | Get the maximum of two integers |
72 | | @return Returns a if a > b else b |
73 | | */ |
74 | 0 | static INLINE OPJ_UINT32 opj_uint_max(OPJ_UINT32 a, OPJ_UINT32 b) { |
75 | 0 | return (a > b) ? a : b; |
76 | 0 | } Unexecuted instantiation: image.c:opj_uint_max Unexecuted instantiation: openjpeg.c:opj_uint_max Unexecuted instantiation: cio.c:opj_uint_max Unexecuted instantiation: event.c:opj_uint_max Unexecuted instantiation: j2k.c:opj_uint_max Unexecuted instantiation: jp2.c:opj_uint_max Unexecuted instantiation: mct.c:opj_uint_max Unexecuted instantiation: pi.c:opj_uint_max Unexecuted instantiation: tcd.c:opj_uint_max Unexecuted instantiation: tgt.c:opj_uint_max Unexecuted instantiation: bio.c:opj_uint_max Unexecuted instantiation: dwt.c:opj_uint_max Unexecuted instantiation: function_list.c:opj_uint_max Unexecuted instantiation: invert.c:opj_uint_max Unexecuted instantiation: t1.c:opj_uint_max Unexecuted instantiation: t2.c:opj_uint_max Unexecuted instantiation: mqc.c:opj_uint_max Unexecuted instantiation: raw.c:opj_uint_max |
77 | | |
78 | | /** |
79 | | Clamp an integer inside an interval |
80 | | @return |
81 | | <ul> |
82 | | <li>Returns a if (min < a < max) |
83 | | <li>Returns max if (a > max) |
84 | | <li>Returns min if (a < min) |
85 | | </ul> |
86 | | */ |
87 | 0 | static INLINE OPJ_INT32 opj_int_clamp(OPJ_INT32 a, OPJ_INT32 min, OPJ_INT32 max) { |
88 | 0 | if (a < min) |
89 | 0 | return min; |
90 | 0 | if (a > max) |
91 | 0 | return max; |
92 | 0 | return a; |
93 | 0 | } Unexecuted instantiation: image.c:opj_int_clamp Unexecuted instantiation: openjpeg.c:opj_int_clamp Unexecuted instantiation: cio.c:opj_int_clamp Unexecuted instantiation: event.c:opj_int_clamp Unexecuted instantiation: j2k.c:opj_int_clamp Unexecuted instantiation: jp2.c:opj_int_clamp Unexecuted instantiation: mct.c:opj_int_clamp Unexecuted instantiation: pi.c:opj_int_clamp Unexecuted instantiation: tcd.c:opj_int_clamp Unexecuted instantiation: tgt.c:opj_int_clamp Unexecuted instantiation: bio.c:opj_int_clamp Unexecuted instantiation: dwt.c:opj_int_clamp Unexecuted instantiation: function_list.c:opj_int_clamp Unexecuted instantiation: invert.c:opj_int_clamp Unexecuted instantiation: t1.c:opj_int_clamp Unexecuted instantiation: t2.c:opj_int_clamp Unexecuted instantiation: mqc.c:opj_int_clamp Unexecuted instantiation: raw.c:opj_int_clamp |
94 | | /** |
95 | | @return Get absolute value of integer |
96 | | */ |
97 | 0 | static INLINE OPJ_INT32 opj_int_abs(OPJ_INT32 a) { |
98 | 0 | return a < 0 ? -a : a; |
99 | 0 | } Unexecuted instantiation: image.c:opj_int_abs Unexecuted instantiation: openjpeg.c:opj_int_abs Unexecuted instantiation: cio.c:opj_int_abs Unexecuted instantiation: event.c:opj_int_abs Unexecuted instantiation: j2k.c:opj_int_abs Unexecuted instantiation: jp2.c:opj_int_abs Unexecuted instantiation: mct.c:opj_int_abs Unexecuted instantiation: pi.c:opj_int_abs Unexecuted instantiation: tcd.c:opj_int_abs Unexecuted instantiation: tgt.c:opj_int_abs Unexecuted instantiation: bio.c:opj_int_abs Unexecuted instantiation: dwt.c:opj_int_abs Unexecuted instantiation: function_list.c:opj_int_abs Unexecuted instantiation: invert.c:opj_int_abs Unexecuted instantiation: t1.c:opj_int_abs Unexecuted instantiation: t2.c:opj_int_abs Unexecuted instantiation: mqc.c:opj_int_abs Unexecuted instantiation: raw.c:opj_int_abs |
100 | | /** |
101 | | Divide an integer and round upwards |
102 | | @return Returns a divided by b |
103 | | */ |
104 | 0 | static INLINE OPJ_INT32 opj_int_ceildiv(OPJ_INT32 a, OPJ_INT32 b) { |
105 | 0 | assert(b); |
106 | 0 | return (a + b - 1) / b; |
107 | 0 | } Unexecuted instantiation: image.c:opj_int_ceildiv Unexecuted instantiation: openjpeg.c:opj_int_ceildiv Unexecuted instantiation: cio.c:opj_int_ceildiv Unexecuted instantiation: event.c:opj_int_ceildiv Unexecuted instantiation: j2k.c:opj_int_ceildiv Unexecuted instantiation: jp2.c:opj_int_ceildiv Unexecuted instantiation: mct.c:opj_int_ceildiv Unexecuted instantiation: pi.c:opj_int_ceildiv Unexecuted instantiation: tcd.c:opj_int_ceildiv Unexecuted instantiation: tgt.c:opj_int_ceildiv Unexecuted instantiation: bio.c:opj_int_ceildiv Unexecuted instantiation: dwt.c:opj_int_ceildiv Unexecuted instantiation: function_list.c:opj_int_ceildiv Unexecuted instantiation: invert.c:opj_int_ceildiv Unexecuted instantiation: t1.c:opj_int_ceildiv Unexecuted instantiation: t2.c:opj_int_ceildiv Unexecuted instantiation: mqc.c:opj_int_ceildiv Unexecuted instantiation: raw.c:opj_int_ceildiv |
108 | | |
109 | | /** |
110 | | Divide an integer and round upwards |
111 | | @return Returns a divided by b |
112 | | */ |
113 | 0 | static INLINE OPJ_UINT32 opj_uint_ceildiv(OPJ_UINT32 a, OPJ_UINT32 b) { |
114 | 0 | return (a + b - 1) / b; |
115 | 0 | } Unexecuted instantiation: image.c:opj_uint_ceildiv Unexecuted instantiation: openjpeg.c:opj_uint_ceildiv Unexecuted instantiation: cio.c:opj_uint_ceildiv Unexecuted instantiation: event.c:opj_uint_ceildiv Unexecuted instantiation: j2k.c:opj_uint_ceildiv Unexecuted instantiation: jp2.c:opj_uint_ceildiv Unexecuted instantiation: mct.c:opj_uint_ceildiv Unexecuted instantiation: pi.c:opj_uint_ceildiv Unexecuted instantiation: tcd.c:opj_uint_ceildiv Unexecuted instantiation: tgt.c:opj_uint_ceildiv Unexecuted instantiation: bio.c:opj_uint_ceildiv Unexecuted instantiation: dwt.c:opj_uint_ceildiv Unexecuted instantiation: function_list.c:opj_uint_ceildiv Unexecuted instantiation: invert.c:opj_uint_ceildiv Unexecuted instantiation: t1.c:opj_uint_ceildiv Unexecuted instantiation: t2.c:opj_uint_ceildiv Unexecuted instantiation: mqc.c:opj_uint_ceildiv Unexecuted instantiation: raw.c:opj_uint_ceildiv |
116 | | |
117 | | /** |
118 | | Divide an integer by a power of 2 and round upwards |
119 | | @return Returns a divided by 2^b |
120 | | */ |
121 | 0 | static INLINE OPJ_INT32 opj_int_ceildivpow2(OPJ_INT32 a, OPJ_INT32 b) { |
122 | 0 | return (OPJ_INT32)((a + (OPJ_INT64)(1 << b) - 1) >> b); |
123 | 0 | } Unexecuted instantiation: image.c:opj_int_ceildivpow2 Unexecuted instantiation: openjpeg.c:opj_int_ceildivpow2 Unexecuted instantiation: cio.c:opj_int_ceildivpow2 Unexecuted instantiation: event.c:opj_int_ceildivpow2 Unexecuted instantiation: j2k.c:opj_int_ceildivpow2 Unexecuted instantiation: jp2.c:opj_int_ceildivpow2 Unexecuted instantiation: mct.c:opj_int_ceildivpow2 Unexecuted instantiation: pi.c:opj_int_ceildivpow2 Unexecuted instantiation: tcd.c:opj_int_ceildivpow2 Unexecuted instantiation: tgt.c:opj_int_ceildivpow2 Unexecuted instantiation: bio.c:opj_int_ceildivpow2 Unexecuted instantiation: dwt.c:opj_int_ceildivpow2 Unexecuted instantiation: function_list.c:opj_int_ceildivpow2 Unexecuted instantiation: invert.c:opj_int_ceildivpow2 Unexecuted instantiation: t1.c:opj_int_ceildivpow2 Unexecuted instantiation: t2.c:opj_int_ceildivpow2 Unexecuted instantiation: mqc.c:opj_int_ceildivpow2 Unexecuted instantiation: raw.c:opj_int_ceildivpow2 |
124 | | /** |
125 | | Divide an integer by a power of 2 and round downwards |
126 | | @return Returns a divided by 2^b |
127 | | */ |
128 | 0 | static INLINE OPJ_INT32 opj_int_floordivpow2(OPJ_INT32 a, OPJ_INT32 b) { |
129 | 0 | return a >> b; |
130 | 0 | } Unexecuted instantiation: image.c:opj_int_floordivpow2 Unexecuted instantiation: openjpeg.c:opj_int_floordivpow2 Unexecuted instantiation: cio.c:opj_int_floordivpow2 Unexecuted instantiation: event.c:opj_int_floordivpow2 Unexecuted instantiation: j2k.c:opj_int_floordivpow2 Unexecuted instantiation: jp2.c:opj_int_floordivpow2 Unexecuted instantiation: mct.c:opj_int_floordivpow2 Unexecuted instantiation: pi.c:opj_int_floordivpow2 Unexecuted instantiation: tcd.c:opj_int_floordivpow2 Unexecuted instantiation: tgt.c:opj_int_floordivpow2 Unexecuted instantiation: bio.c:opj_int_floordivpow2 Unexecuted instantiation: dwt.c:opj_int_floordivpow2 Unexecuted instantiation: function_list.c:opj_int_floordivpow2 Unexecuted instantiation: invert.c:opj_int_floordivpow2 Unexecuted instantiation: t1.c:opj_int_floordivpow2 Unexecuted instantiation: t2.c:opj_int_floordivpow2 Unexecuted instantiation: mqc.c:opj_int_floordivpow2 Unexecuted instantiation: raw.c:opj_int_floordivpow2 |
131 | | /** |
132 | | Get logarithm of an integer and round downwards |
133 | | @return Returns log2(a) |
134 | | */ |
135 | 0 | static INLINE OPJ_INT32 opj_int_floorlog2(OPJ_INT32 a) { |
136 | 0 | OPJ_INT32 l; |
137 | 0 | for (l = 0; a > 1; l++) { |
138 | 0 | a >>= 1; |
139 | 0 | } |
140 | 0 | return l; |
141 | 0 | } Unexecuted instantiation: image.c:opj_int_floorlog2 Unexecuted instantiation: openjpeg.c:opj_int_floorlog2 Unexecuted instantiation: cio.c:opj_int_floorlog2 Unexecuted instantiation: event.c:opj_int_floorlog2 Unexecuted instantiation: j2k.c:opj_int_floorlog2 Unexecuted instantiation: jp2.c:opj_int_floorlog2 Unexecuted instantiation: mct.c:opj_int_floorlog2 Unexecuted instantiation: pi.c:opj_int_floorlog2 Unexecuted instantiation: tcd.c:opj_int_floorlog2 Unexecuted instantiation: tgt.c:opj_int_floorlog2 Unexecuted instantiation: bio.c:opj_int_floorlog2 Unexecuted instantiation: dwt.c:opj_int_floorlog2 Unexecuted instantiation: function_list.c:opj_int_floorlog2 Unexecuted instantiation: invert.c:opj_int_floorlog2 Unexecuted instantiation: t1.c:opj_int_floorlog2 Unexecuted instantiation: t2.c:opj_int_floorlog2 Unexecuted instantiation: mqc.c:opj_int_floorlog2 Unexecuted instantiation: raw.c:opj_int_floorlog2 |
142 | | /** |
143 | | Get logarithm of an integer and round downwards |
144 | | @return Returns log2(a) |
145 | | */ |
146 | 0 | static INLINE OPJ_UINT32 opj_uint_floorlog2(OPJ_UINT32 a) { |
147 | 0 | OPJ_UINT32 l; |
148 | 0 | for (l = 0; a > 1; ++l) |
149 | 0 | { |
150 | 0 | a >>= 1; |
151 | 0 | } |
152 | 0 | return l; |
153 | 0 | } Unexecuted instantiation: image.c:opj_uint_floorlog2 Unexecuted instantiation: openjpeg.c:opj_uint_floorlog2 Unexecuted instantiation: cio.c:opj_uint_floorlog2 Unexecuted instantiation: event.c:opj_uint_floorlog2 Unexecuted instantiation: j2k.c:opj_uint_floorlog2 Unexecuted instantiation: jp2.c:opj_uint_floorlog2 Unexecuted instantiation: mct.c:opj_uint_floorlog2 Unexecuted instantiation: pi.c:opj_uint_floorlog2 Unexecuted instantiation: tcd.c:opj_uint_floorlog2 Unexecuted instantiation: tgt.c:opj_uint_floorlog2 Unexecuted instantiation: bio.c:opj_uint_floorlog2 Unexecuted instantiation: dwt.c:opj_uint_floorlog2 Unexecuted instantiation: function_list.c:opj_uint_floorlog2 Unexecuted instantiation: invert.c:opj_uint_floorlog2 Unexecuted instantiation: t1.c:opj_uint_floorlog2 Unexecuted instantiation: t2.c:opj_uint_floorlog2 Unexecuted instantiation: mqc.c:opj_uint_floorlog2 Unexecuted instantiation: raw.c:opj_uint_floorlog2 |
154 | | |
155 | | /** |
156 | | Multiply two fixed-precision rational numbers. |
157 | | @param a |
158 | | @param b |
159 | | @return Returns a * b |
160 | | */ |
161 | 0 | static INLINE OPJ_INT32 opj_int_fix_mul(OPJ_INT32 a, OPJ_INT32 b) { |
162 | 0 | OPJ_INT64 temp = (OPJ_INT64) a * (OPJ_INT64) b ; |
163 | 0 | temp += temp & 4096; |
164 | 0 | return (OPJ_INT32) (temp >> 13) ; |
165 | 0 | } Unexecuted instantiation: image.c:opj_int_fix_mul Unexecuted instantiation: openjpeg.c:opj_int_fix_mul Unexecuted instantiation: cio.c:opj_int_fix_mul Unexecuted instantiation: event.c:opj_int_fix_mul Unexecuted instantiation: j2k.c:opj_int_fix_mul Unexecuted instantiation: jp2.c:opj_int_fix_mul Unexecuted instantiation: mct.c:opj_int_fix_mul Unexecuted instantiation: pi.c:opj_int_fix_mul Unexecuted instantiation: tcd.c:opj_int_fix_mul Unexecuted instantiation: tgt.c:opj_int_fix_mul Unexecuted instantiation: bio.c:opj_int_fix_mul Unexecuted instantiation: dwt.c:opj_int_fix_mul Unexecuted instantiation: function_list.c:opj_int_fix_mul Unexecuted instantiation: invert.c:opj_int_fix_mul Unexecuted instantiation: t1.c:opj_int_fix_mul Unexecuted instantiation: t2.c:opj_int_fix_mul Unexecuted instantiation: mqc.c:opj_int_fix_mul Unexecuted instantiation: raw.c:opj_int_fix_mul |
166 | | |
167 | | /* ----------------------------------------------------------------------- */ |
168 | | /*@}*/ |
169 | | |
170 | | /*@}*/ |
171 | | |
172 | | #endif |