1*3ac0a46fSAndroid Build Coastguard Worker /*
2*3ac0a46fSAndroid Build Coastguard Worker * The copyright in this software is being made available under the 2-clauses
3*3ac0a46fSAndroid Build Coastguard Worker * BSD License, included below. This software may be subject to other third
4*3ac0a46fSAndroid Build Coastguard Worker * party and contributor rights, including patent rights, and no such rights
5*3ac0a46fSAndroid Build Coastguard Worker * are granted under this license.
6*3ac0a46fSAndroid Build Coastguard Worker *
7*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2005, Herve Drolon, FreeImage Team
8*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
9*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2012, CS Systemes d'Information, France
10*3ac0a46fSAndroid Build Coastguard Worker * All rights reserved.
11*3ac0a46fSAndroid Build Coastguard Worker *
12*3ac0a46fSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
13*3ac0a46fSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions
14*3ac0a46fSAndroid Build Coastguard Worker * are met:
15*3ac0a46fSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright
16*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer.
17*3ac0a46fSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright
18*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the
19*3ac0a46fSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution.
20*3ac0a46fSAndroid Build Coastguard Worker *
21*3ac0a46fSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
22*3ac0a46fSAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23*3ac0a46fSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24*3ac0a46fSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25*3ac0a46fSAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26*3ac0a46fSAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27*3ac0a46fSAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28*3ac0a46fSAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29*3ac0a46fSAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30*3ac0a46fSAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31*3ac0a46fSAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE.
32*3ac0a46fSAndroid Build Coastguard Worker */
33*3ac0a46fSAndroid Build Coastguard Worker #ifndef OPJ_INCLUDES_H
34*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_INCLUDES_H
35*3ac0a46fSAndroid Build Coastguard Worker
36*3ac0a46fSAndroid Build Coastguard Worker /*
37*3ac0a46fSAndroid Build Coastguard Worker * This must be included before any system headers,
38*3ac0a46fSAndroid Build Coastguard Worker * since they can react to macro defined there
39*3ac0a46fSAndroid Build Coastguard Worker */
40*3ac0a46fSAndroid Build Coastguard Worker #include "opj_config_private.h"
41*3ac0a46fSAndroid Build Coastguard Worker
42*3ac0a46fSAndroid Build Coastguard Worker /*
43*3ac0a46fSAndroid Build Coastguard Worker ==========================================================
44*3ac0a46fSAndroid Build Coastguard Worker Standard includes used by the library
45*3ac0a46fSAndroid Build Coastguard Worker ==========================================================
46*3ac0a46fSAndroid Build Coastguard Worker */
47*3ac0a46fSAndroid Build Coastguard Worker #include <memory.h>
48*3ac0a46fSAndroid Build Coastguard Worker #include <stdlib.h>
49*3ac0a46fSAndroid Build Coastguard Worker #include <string.h>
50*3ac0a46fSAndroid Build Coastguard Worker #include <math.h>
51*3ac0a46fSAndroid Build Coastguard Worker #include <float.h>
52*3ac0a46fSAndroid Build Coastguard Worker #include <time.h>
53*3ac0a46fSAndroid Build Coastguard Worker #include <stdio.h>
54*3ac0a46fSAndroid Build Coastguard Worker #include <stdarg.h>
55*3ac0a46fSAndroid Build Coastguard Worker #include <ctype.h>
56*3ac0a46fSAndroid Build Coastguard Worker #include <assert.h>
57*3ac0a46fSAndroid Build Coastguard Worker #include <limits.h>
58*3ac0a46fSAndroid Build Coastguard Worker
59*3ac0a46fSAndroid Build Coastguard Worker /*
60*3ac0a46fSAndroid Build Coastguard Worker Use fseeko() and ftello() if they are available since they use
61*3ac0a46fSAndroid Build Coastguard Worker 'off_t' rather than 'long'. It is wrong to use fseeko() and
62*3ac0a46fSAndroid Build Coastguard Worker ftello() only on systems with special LFS support since some systems
63*3ac0a46fSAndroid Build Coastguard Worker (e.g. FreeBSD) support a 64-bit off_t by default.
64*3ac0a46fSAndroid Build Coastguard Worker */
65*3ac0a46fSAndroid Build Coastguard Worker #if defined(OPJ_HAVE_FSEEKO) && !defined(fseek)
66*3ac0a46fSAndroid Build Coastguard Worker # define fseek fseeko
67*3ac0a46fSAndroid Build Coastguard Worker # define ftell ftello
68*3ac0a46fSAndroid Build Coastguard Worker #endif
69*3ac0a46fSAndroid Build Coastguard Worker
70*3ac0a46fSAndroid Build Coastguard Worker
71*3ac0a46fSAndroid Build Coastguard Worker #if defined(WIN32) && !defined(Windows95) && !defined(__BORLANDC__) && \
72*3ac0a46fSAndroid Build Coastguard Worker !(defined(_MSC_VER) && _MSC_VER < 1400) && \
73*3ac0a46fSAndroid Build Coastguard Worker !(defined(__MINGW32__) && __MSVCRT_VERSION__ < 0x800)
74*3ac0a46fSAndroid Build Coastguard Worker /*
75*3ac0a46fSAndroid Build Coastguard Worker Windows '95 and Borland C do not support _lseeki64
76*3ac0a46fSAndroid Build Coastguard Worker Visual Studio does not support _fseeki64 and _ftelli64 until the 2005 release.
77*3ac0a46fSAndroid Build Coastguard Worker Without these interfaces, files over 2GB in size are not supported for Windows.
78*3ac0a46fSAndroid Build Coastguard Worker */
79*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_FSEEK(stream,offset,whence) _fseeki64(stream,/* __int64 */ offset,whence)
80*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_FSTAT(fildes,stat_buff) _fstati64(fildes,/* struct _stati64 */ stat_buff)
81*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_FTELL(stream) /* __int64 */ _ftelli64(stream)
82*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_STAT_STRUCT_T struct _stati64
83*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_STAT(path,stat_buff) _stati64(path,/* struct _stati64 */ stat_buff)
84*3ac0a46fSAndroid Build Coastguard Worker #else
85*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_FSEEK(stream,offset,whence) fseek(stream,offset,whence)
86*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_FSTAT(fildes,stat_buff) fstat(fildes,stat_buff)
87*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_FTELL(stream) ftell(stream)
88*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_STAT_STRUCT_T struct stat
89*3ac0a46fSAndroid Build Coastguard Worker # define OPJ_STAT(path,stat_buff) stat(path,stat_buff)
90*3ac0a46fSAndroid Build Coastguard Worker #endif
91*3ac0a46fSAndroid Build Coastguard Worker
92*3ac0a46fSAndroid Build Coastguard Worker
93*3ac0a46fSAndroid Build Coastguard Worker /*
94*3ac0a46fSAndroid Build Coastguard Worker ==========================================================
95*3ac0a46fSAndroid Build Coastguard Worker OpenJPEG interface
96*3ac0a46fSAndroid Build Coastguard Worker ==========================================================
97*3ac0a46fSAndroid Build Coastguard Worker */
98*3ac0a46fSAndroid Build Coastguard Worker #include "openjpeg.h"
99*3ac0a46fSAndroid Build Coastguard Worker
100*3ac0a46fSAndroid Build Coastguard Worker /*
101*3ac0a46fSAndroid Build Coastguard Worker ==========================================================
102*3ac0a46fSAndroid Build Coastguard Worker OpenJPEG modules
103*3ac0a46fSAndroid Build Coastguard Worker ==========================================================
104*3ac0a46fSAndroid Build Coastguard Worker */
105*3ac0a46fSAndroid Build Coastguard Worker
106*3ac0a46fSAndroid Build Coastguard Worker /* Are restricted pointers available? (C99) */
107*3ac0a46fSAndroid Build Coastguard Worker #if (__STDC_VERSION__ >= 199901L)
108*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_RESTRICT restrict
109*3ac0a46fSAndroid Build Coastguard Worker #else
110*3ac0a46fSAndroid Build Coastguard Worker /* Not a C99 compiler */
111*3ac0a46fSAndroid Build Coastguard Worker #if defined(__GNUC__)
112*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_RESTRICT __restrict__
113*3ac0a46fSAndroid Build Coastguard Worker
114*3ac0a46fSAndroid Build Coastguard Worker /*
115*3ac0a46fSAndroid Build Coastguard Worker vc14 (2015) outputs wrong results.
116*3ac0a46fSAndroid Build Coastguard Worker Need to check OPJ_RESTRICT usage (or a bug in vc14)
117*3ac0a46fSAndroid Build Coastguard Worker #elif defined(_MSC_VER) && (_MSC_VER >= 1400)
118*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_RESTRICT __restrict
119*3ac0a46fSAndroid Build Coastguard Worker */
120*3ac0a46fSAndroid Build Coastguard Worker #else
121*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_RESTRICT /* restrict */
122*3ac0a46fSAndroid Build Coastguard Worker #endif
123*3ac0a46fSAndroid Build Coastguard Worker #endif
124*3ac0a46fSAndroid Build Coastguard Worker
125*3ac0a46fSAndroid Build Coastguard Worker #ifdef __has_attribute
126*3ac0a46fSAndroid Build Coastguard Worker #if __has_attribute(no_sanitize)
127*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_NOSANITIZE(kind) __attribute__((no_sanitize(kind)))
128*3ac0a46fSAndroid Build Coastguard Worker #endif
129*3ac0a46fSAndroid Build Coastguard Worker #endif
130*3ac0a46fSAndroid Build Coastguard Worker #ifndef OPJ_NOSANITIZE
131*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_NOSANITIZE(kind)
132*3ac0a46fSAndroid Build Coastguard Worker #endif
133*3ac0a46fSAndroid Build Coastguard Worker
134*3ac0a46fSAndroid Build Coastguard Worker
135*3ac0a46fSAndroid Build Coastguard Worker /* MSVC before 2013 and Borland C do not have lrintf */
136*3ac0a46fSAndroid Build Coastguard Worker #if defined(_MSC_VER)
137*3ac0a46fSAndroid Build Coastguard Worker #include <intrin.h>
opj_lrintf(float f)138*3ac0a46fSAndroid Build Coastguard Worker static INLINE long opj_lrintf(float f)
139*3ac0a46fSAndroid Build Coastguard Worker {
140*3ac0a46fSAndroid Build Coastguard Worker #ifdef _M_X64
141*3ac0a46fSAndroid Build Coastguard Worker return _mm_cvt_ss2si(_mm_load_ss(&f));
142*3ac0a46fSAndroid Build Coastguard Worker
143*3ac0a46fSAndroid Build Coastguard Worker /* commented out line breaks many tests */
144*3ac0a46fSAndroid Build Coastguard Worker /* return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f)); */
145*3ac0a46fSAndroid Build Coastguard Worker #elif defined(_M_IX86)
146*3ac0a46fSAndroid Build Coastguard Worker int i;
147*3ac0a46fSAndroid Build Coastguard Worker _asm{
148*3ac0a46fSAndroid Build Coastguard Worker fld f
149*3ac0a46fSAndroid Build Coastguard Worker fistp i
150*3ac0a46fSAndroid Build Coastguard Worker };
151*3ac0a46fSAndroid Build Coastguard Worker
152*3ac0a46fSAndroid Build Coastguard Worker return i;
153*3ac0a46fSAndroid Build Coastguard Worker #else
154*3ac0a46fSAndroid Build Coastguard Worker return (long)((f>0.0f) ? (f + 0.5f) : (f - 0.5f));
155*3ac0a46fSAndroid Build Coastguard Worker #endif
156*3ac0a46fSAndroid Build Coastguard Worker }
157*3ac0a46fSAndroid Build Coastguard Worker #elif defined(__BORLANDC__)
opj_lrintf(float f)158*3ac0a46fSAndroid Build Coastguard Worker static INLINE long opj_lrintf(float f)
159*3ac0a46fSAndroid Build Coastguard Worker {
160*3ac0a46fSAndroid Build Coastguard Worker #ifdef _M_X64
161*3ac0a46fSAndroid Build Coastguard Worker return (long)((f > 0.0f) ? (f + 0.5f) : (f - 0.5f));
162*3ac0a46fSAndroid Build Coastguard Worker #else
163*3ac0a46fSAndroid Build Coastguard Worker int i;
164*3ac0a46fSAndroid Build Coastguard Worker
165*3ac0a46fSAndroid Build Coastguard Worker _asm {
166*3ac0a46fSAndroid Build Coastguard Worker fld f
167*3ac0a46fSAndroid Build Coastguard Worker fistp i
168*3ac0a46fSAndroid Build Coastguard Worker };
169*3ac0a46fSAndroid Build Coastguard Worker
170*3ac0a46fSAndroid Build Coastguard Worker return i;
171*3ac0a46fSAndroid Build Coastguard Worker #endif
172*3ac0a46fSAndroid Build Coastguard Worker }
173*3ac0a46fSAndroid Build Coastguard Worker #else
opj_lrintf(float f)174*3ac0a46fSAndroid Build Coastguard Worker static INLINE long opj_lrintf(float f)
175*3ac0a46fSAndroid Build Coastguard Worker {
176*3ac0a46fSAndroid Build Coastguard Worker return lrintf(f);
177*3ac0a46fSAndroid Build Coastguard Worker }
178*3ac0a46fSAndroid Build Coastguard Worker #endif
179*3ac0a46fSAndroid Build Coastguard Worker
180*3ac0a46fSAndroid Build Coastguard Worker #if defined(_MSC_VER) && (_MSC_VER < 1400)
181*3ac0a46fSAndroid Build Coastguard Worker #define vsnprintf _vsnprintf
182*3ac0a46fSAndroid Build Coastguard Worker #endif
183*3ac0a46fSAndroid Build Coastguard Worker
184*3ac0a46fSAndroid Build Coastguard Worker /* MSVC x86 is really bad at doing int64 = int32 * int32 on its own. Use intrinsic. */
185*3ac0a46fSAndroid Build Coastguard Worker #if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__INTEL_COMPILER) && defined(_M_IX86)
186*3ac0a46fSAndroid Build Coastguard Worker # include <intrin.h>
187*3ac0a46fSAndroid Build Coastguard Worker # pragma intrinsic(__emul)
188*3ac0a46fSAndroid Build Coastguard Worker #endif
189*3ac0a46fSAndroid Build Coastguard Worker
190*3ac0a46fSAndroid Build Coastguard Worker /* Apparently Visual Studio doesn't define __SSE__ / __SSE2__ macros */
191*3ac0a46fSAndroid Build Coastguard Worker #if defined(_M_X64)
192*3ac0a46fSAndroid Build Coastguard Worker /* Intel 64bit support SSE and SSE2 */
193*3ac0a46fSAndroid Build Coastguard Worker # ifndef __SSE__
194*3ac0a46fSAndroid Build Coastguard Worker # define __SSE__ 1
195*3ac0a46fSAndroid Build Coastguard Worker # endif
196*3ac0a46fSAndroid Build Coastguard Worker # ifndef __SSE2__
197*3ac0a46fSAndroid Build Coastguard Worker # define __SSE2__ 1
198*3ac0a46fSAndroid Build Coastguard Worker # endif
199*3ac0a46fSAndroid Build Coastguard Worker #endif
200*3ac0a46fSAndroid Build Coastguard Worker
201*3ac0a46fSAndroid Build Coastguard Worker /* For x86, test the value of the _M_IX86_FP macro. */
202*3ac0a46fSAndroid Build Coastguard Worker /* See https://msdn.microsoft.com/en-us/library/b0084kay.aspx */
203*3ac0a46fSAndroid Build Coastguard Worker #if defined(_M_IX86_FP)
204*3ac0a46fSAndroid Build Coastguard Worker # if _M_IX86_FP >= 1
205*3ac0a46fSAndroid Build Coastguard Worker # ifndef __SSE__
206*3ac0a46fSAndroid Build Coastguard Worker # define __SSE__ 1
207*3ac0a46fSAndroid Build Coastguard Worker # endif
208*3ac0a46fSAndroid Build Coastguard Worker # endif
209*3ac0a46fSAndroid Build Coastguard Worker # if _M_IX86_FP >= 2
210*3ac0a46fSAndroid Build Coastguard Worker # ifndef __SSE2__
211*3ac0a46fSAndroid Build Coastguard Worker # define __SSE2__ 1
212*3ac0a46fSAndroid Build Coastguard Worker # endif
213*3ac0a46fSAndroid Build Coastguard Worker # endif
214*3ac0a46fSAndroid Build Coastguard Worker #endif
215*3ac0a46fSAndroid Build Coastguard Worker
216*3ac0a46fSAndroid Build Coastguard Worker /* Type to use for bit-fields in internal headers */
217*3ac0a46fSAndroid Build Coastguard Worker typedef unsigned int OPJ_BITFIELD;
218*3ac0a46fSAndroid Build Coastguard Worker
219*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_UNUSED(x) (void)x
220*3ac0a46fSAndroid Build Coastguard Worker
221*3ac0a46fSAndroid Build Coastguard Worker #include "opj_inttypes.h"
222*3ac0a46fSAndroid Build Coastguard Worker #include "opj_malloc.h"
223*3ac0a46fSAndroid Build Coastguard Worker #include "event.h"
224*3ac0a46fSAndroid Build Coastguard Worker #include "function_list.h"
225*3ac0a46fSAndroid Build Coastguard Worker #include "bio.h"
226*3ac0a46fSAndroid Build Coastguard Worker #include "cio.h"
227*3ac0a46fSAndroid Build Coastguard Worker
228*3ac0a46fSAndroid Build Coastguard Worker #include "thread.h"
229*3ac0a46fSAndroid Build Coastguard Worker #include "tls_keys.h"
230*3ac0a46fSAndroid Build Coastguard Worker
231*3ac0a46fSAndroid Build Coastguard Worker #include "image.h"
232*3ac0a46fSAndroid Build Coastguard Worker #include "invert.h"
233*3ac0a46fSAndroid Build Coastguard Worker #include "j2k.h"
234*3ac0a46fSAndroid Build Coastguard Worker #include "jp2.h"
235*3ac0a46fSAndroid Build Coastguard Worker
236*3ac0a46fSAndroid Build Coastguard Worker #include "mqc.h"
237*3ac0a46fSAndroid Build Coastguard Worker #include "bio.h"
238*3ac0a46fSAndroid Build Coastguard Worker
239*3ac0a46fSAndroid Build Coastguard Worker #include "pi.h"
240*3ac0a46fSAndroid Build Coastguard Worker #include "tgt.h"
241*3ac0a46fSAndroid Build Coastguard Worker #include "tcd.h"
242*3ac0a46fSAndroid Build Coastguard Worker #include "t1.h"
243*3ac0a46fSAndroid Build Coastguard Worker #include "dwt.h"
244*3ac0a46fSAndroid Build Coastguard Worker #include "t2.h"
245*3ac0a46fSAndroid Build Coastguard Worker #include "mct.h"
246*3ac0a46fSAndroid Build Coastguard Worker #include "opj_intmath.h"
247*3ac0a46fSAndroid Build Coastguard Worker #include "sparse_array.h"
248*3ac0a46fSAndroid Build Coastguard Worker
249*3ac0a46fSAndroid Build Coastguard Worker #ifdef USE_JPIP
250*3ac0a46fSAndroid Build Coastguard Worker #include "cidx_manager.h"
251*3ac0a46fSAndroid Build Coastguard Worker #include "indexbox_manager.h"
252*3ac0a46fSAndroid Build Coastguard Worker #endif
253*3ac0a46fSAndroid Build Coastguard Worker
254*3ac0a46fSAndroid Build Coastguard Worker /* JPWL>> */
255*3ac0a46fSAndroid Build Coastguard Worker #ifdef USE_JPWL
256*3ac0a46fSAndroid Build Coastguard Worker #include "openjpwl/jpwl.h"
257*3ac0a46fSAndroid Build Coastguard Worker #endif /* USE_JPWL */
258*3ac0a46fSAndroid Build Coastguard Worker /* <<JPWL */
259*3ac0a46fSAndroid Build Coastguard Worker
260*3ac0a46fSAndroid Build Coastguard Worker /* V2 */
261*3ac0a46fSAndroid Build Coastguard Worker #include "opj_codec.h"
262*3ac0a46fSAndroid Build Coastguard Worker
263*3ac0a46fSAndroid Build Coastguard Worker
264*3ac0a46fSAndroid Build Coastguard Worker #endif /* OPJ_INCLUDES_H */
265