1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The copyright in this software is being made available under the 2-clauses
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * BSD License, included below. This software may be subject to other third
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * party and contributor rights, including patent rights, and no such rights
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are granted under this license.
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2014, Professor Benoit Macq
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2001-2003, David Janssens
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2003, Yannick Verschueren
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2003-2007, Francois-Olivier Devaux
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2003-2014, Antonin Descampe
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2005, Herve Drolon, FreeImage Team
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2006-2007, Parvatha Elangovan
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s.fr>
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2010-2011, Kaori Hagihara
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2012, CS Systemes d'Information, France
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * All rights reserved.
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Redistribution and use in source and binary forms, with or without
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * modification, are permitted provided that the following conditions
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are met:
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 1. Redistributions of source code must retain the above copyright
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    notice, this list of conditions and the following disclaimer.
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 2. Redistributions in binary form must reproduce the above copyright
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    notice, this list of conditions and the following disclaimer in the
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    documentation and/or other materials provided with the distribution.
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * POSSIBILITY OF SUCH DAMAGE.
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef OPENJPEG_H
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPENJPEG_H
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   Compiler directives
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovThe inline keyword is supported by C99 but not by C90.
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovMost compilers implement their own version of this keyword ...
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef INLINE
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#if defined(_MSC_VER)
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		#define INLINE __forceinline
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#elif defined(__GNUC__)
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		#define INLINE __inline__
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#elif defined(__MWERKS__)
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		#define INLINE inline
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#else
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		/* add other compilers here ... */
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		#define INLINE
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#endif /* defined(<Compiler>) */
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* INLINE */
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* deprecated attribute */
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __GNUC__
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#define OPJ_DEPRECATED(func) func __attribute__ ((deprecated))
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#elif defined(_MSC_VER)
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#define OPJ_DEPRECATED(func) __declspec(deprecated) func
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#pragma message("WARNING: You need to implement DEPRECATED for this compiler")
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	#define OPJ_DEPRECATED(func) func
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if defined(OPJ_STATIC) || !defined(_WIN32)
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* http://gcc.gnu.org/wiki/Visibility */
81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	if __GNUC__ >= 4
82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		if defined(OPJ_STATIC) /* static library uses "hidden" */
83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#			define OPJ_API    __attribute__ ((visibility ("hidden")))
84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		else
85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#			define OPJ_API    __attribute__ ((visibility ("default")))
86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		endif
87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		define OPJ_LOCAL  __attribute__ ((visibility ("hidden")))
88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	else
89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		define OPJ_API
90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		define OPJ_LOCAL
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	endif
92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	define OPJ_CALLCONV
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	define OPJ_CALLCONV __stdcall
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovThe following ifdef block is the standard way of creating macros which make exporting
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovfrom a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovsymbol defined on the command line. this symbol should not be defined on any project
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovthat uses this DLL. This way any other project whose source files include this file see
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannOPJ_API functions as being imported from a DLL, whereas this DLL sees symbols
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovdefined with this macro as being exported.
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		define OPJ_API __declspec(dllexport)
105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	else
106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#		define OPJ_API __declspec(dllimport)
107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#	endif /* OPJ_EXPORTS */
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* !OPJ_STATIC || !_WIN32 */
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int OPJ_BOOL;
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_TRUE 1
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_FALSE 0
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef char          OPJ_CHAR;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef float         OPJ_FLOAT32;
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef double        OPJ_FLOAT64;
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef unsigned char OPJ_BYTE;
118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "opj_stdint.h"
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int8_t   OPJ_INT8;
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef uint8_t  OPJ_UINT8;
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int16_t  OPJ_INT16;
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef uint16_t OPJ_UINT16;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int32_t  OPJ_INT32;
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef uint32_t OPJ_UINT32;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int64_t  OPJ_INT64;
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef uint64_t OPJ_UINT64;
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int64_t  OPJ_OFF_T; /* 64-bit file offset type */
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <stdio.h>
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef size_t   OPJ_SIZE_T;
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Avoid compile-time warning because parameter is not used */
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_ARG_NOT_USED(x) (void)(x)
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   Useful constant definitions
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_MAXRLVLS 33					/**< Number of maximum resolution level authorized */
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_MAXBANDS (3*OPJ_J2K_MAXRLVLS-2)	/**< Number of maximum sub-band linked to number of resolution level */
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_DEFAULT_NB_SEGS				10
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_STREAM_CHUNK_SIZE			0x100000 /** 1 mega by default */
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_DEFAULT_HEADER_SIZE			1000
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_MCC_DEFAULT_NB_RECORDS		10
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_MCT_DEFAULT_NB_RECORDS		10
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_MAX_NO_TILESPECS	16 /**< Maximum number of tile parts expected by JPWL: increase at your will */
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_MAX_NO_PACKSPECS	16 /**< Maximum number of packet parts expected by JPWL: increase at your will */
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_MAX_NO_MARKERS	512 /**< Maximum number of JPWL markers: increase at your will */
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of bytes for composition of EPBs */
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * EXPERIMENTAL FOR THE MOMENT
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Supported options about file information used only in j2k_dump
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_IMG_INFO		1	/**< Basic image information provided to the user */
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_MH_INFO		2	/**< Codestream information based only on the main header */
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_TH_INFO		4	/**< Tile information based on the current tile header */
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_TCH_INFO	8	/**< Tile/Component information of all tiles */
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_MH_IND		16	/**< Codestream index based only on the main header */
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_J2K_TH_IND		32	/**< Tile index based on the current tile */
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*FIXME #define OPJ_J2K_CSTR_IND	48*/	/**<  */
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_JP2_INFO		128	/**< JP2 file information */
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_JP2_IND			256	/**< JP2 file index */
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/**
181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * JPEG 2000 Profiles, see Table A.10 from 15444-1 (updated in various AMD)
182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * These values help chosing the RSIZ value for the J2K codestream.
183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * The RSIZ value triggers various encoding options, as detailed in Table A.10.
184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * If OPJ_PROFILE_PART2 is chosen, it has to be combined with one or more extensions
185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * described hereunder.
186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov *   Example: rsiz = OPJ_PROFILE_PART2 | OPJ_EXTENSION_MCT;
187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * For broadcast profiles, the OPJ_PROFILE value has to be combined with the targeted
188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * mainlevel (3-0 LSB, value between 0 and 11):
189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov *   Example: rsiz = OPJ_PROFILE_BC_MULTI | 0x0005; (here mainlevel 5)
190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * For IMF profiles, the OPJ_PROFILE value has to be combined with the targeted mainlevel
191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * (3-0 LSB, value between 0 and 11) and sublevel (7-4 LSB, value between 0 and 9):
192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov *   Example: rsiz = OPJ_PROFILE_IMF_2K | 0x0040 | 0x0005; (here main 5 and sublevel 4)
193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * */
194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_NONE        0x0000 /** no profile, conform to 15444-1 */
195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_0           0x0001 /** Profile 0 as described in 15444-1,Table A.45 */
196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_1           0x0002 /** Profile 1 as described in 15444-1,Table A.45 */
197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_PART2       0x8000 /** At least 1 extension defined in 15444-2 (Part-2) */
198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_CINEMA_2K   0x0003 /** 2K cinema profile defined in 15444-1 AMD1 */
199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_CINEMA_4K   0x0004 /** 4K cinema profile defined in 15444-1 AMD1 */
200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_CINEMA_S2K  0x0005 /** Scalable 2K cinema profile defined in 15444-1 AMD2 */
201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_CINEMA_S4K  0x0006 /** Scalable 4K cinema profile defined in 15444-1 AMD2 */
202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_CINEMA_LTS  0x0007 /** Long term storage cinema profile defined in 15444-1 AMD2 */
203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_BC_SINGLE   0x0100 /** Single Tile Broadcast profile defined in 15444-1 AMD3 */
204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_BC_MULTI    0x0200 /** Multi Tile Broadcast profile defined in 15444-1 AMD3 */
205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_BC_MULTI_R  0x0300 /** Multi Tile Reversible Broadcast profile defined in 15444-1 AMD3 */
206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_IMF_2K      0x0400 /** 2K Single Tile Lossy IMF profile defined in 15444-1 AMD 8 */
207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_IMF_4K      0x0401 /** 4K Single Tile Lossy IMF profile defined in 15444-1 AMD 8 */
208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_IMF_8K      0x0402 /** 8K Single Tile Lossy IMF profile defined in 15444-1 AMD 8 */
209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_IMF_2K_R    0x0403 /** 2K Single/Multi Tile Reversible IMF profile defined in 15444-1 AMD 8 */
210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_IMF_4K_R    0x0800 /** 4K Single/Multi Tile Reversible IMF profile defined in 15444-1 AMD 8 */
211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_PROFILE_IMF_8K_R    0x0801  /** 8K Single/Multi Tile Reversible IMF profile defined in 15444-1 AMD 8 */
212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/**
214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * JPEG 2000 Part-2 extensions
215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * */
216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_EXTENSION_NONE      0x0000 /** No Part-2 extension */
217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_EXTENSION_MCT       0x0100  /** Custom MCT support */
218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/**
220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * JPEG 2000 profile macros
221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * */
222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_IS_CINEMA(v)     (((v) >= OPJ_PROFILE_CINEMA_2K)&&((v) <= OPJ_PROFILE_CINEMA_S4K))
223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_IS_STORAGE(v)    ((v) == OPJ_PROFILE_CINEMA_LTS)
224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_IS_BROADCAST(v)  (((v) >= OPJ_PROFILE_BC_SINGLE)&&((v) <= ((OPJ_PROFILE_BC_MULTI_R) | (0x000b))))
225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_IS_IMF(v)        (((v) >= OPJ_PROFILE_IMF_2K)&&((v) <= ((OPJ_PROFILE_IMF_8K_R) | (0x009b))))
226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_IS_PART2(v)      ((v) & OPJ_PROFILE_PART2)
227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/**
229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * JPEG 2000 codestream and component size limits in cinema profiles
230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * */
231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_CINEMA_24_CS     1302083   	/** Maximum codestream length for 24fps */
232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_CINEMA_48_CS     651041     /** Maximum codestream length for 48fps */
233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_CINEMA_24_COMP   1041666    /** Maximum size per color component for 2K & 4K @ 24fps */
234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define OPJ_CINEMA_48_COMP   520833		/** Maximum size per color component for 2K @ 48fps */
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   enum definitions
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/**
243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * DEPRECATED: use RSIZ, OPJ_PROFILE_* and OPJ_EXTENSION_* instead
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Rsiz Capabilities
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum RSIZ_CAPABILITIES {
247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_STD_RSIZ = 0,		/** Standard JPEG2000 profile*/
248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CINEMA2K = 3,		/** Profile name for a 2K image*/
249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CINEMA4K = 4,		/** Profile name for a 4K image*/
250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_MCT = 0x8100
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} OPJ_RSIZ_CAPABILITIES;
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/**
254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * DEPRECATED: use RSIZ, OPJ_PROFILE_* and OPJ_EXTENSION_* instead
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Digital cinema operation mode
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum CINEMA_MODE {
258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_OFF = 0,			/** Not Digital Cinema*/
259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CINEMA2K_24 = 1,	/** 2K Digital Cinema at 24 fps*/
260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CINEMA2K_48 = 2,	/** 2K Digital Cinema at 48 fps*/
261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CINEMA4K_24 = 3		/** 4K Digital Cinema at 24 fps*/
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}OPJ_CINEMA_MODE;
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Progression order
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum PROG_ORDER {
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_PROG_UNKNOWN = -1,	/**< place-holder */
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_LRCP = 0,			/**< layer-resolution-component-precinct order */
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_RLCP = 1,			/**< resolution-layer-component-precinct order */
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_RPCL = 2,			/**< resolution-precinct-component-layer order */
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_PCRL = 3,			/**< precinct-component-resolution-layer order */
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_CPRL = 4			/**< component-precinct-resolution-layer order */
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} OPJ_PROG_ORDER;
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Supported image color spaces
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum COLOR_SPACE {
280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CLRSPC_UNKNOWN = -1,	/**< not supported by the library */
281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CLRSPC_UNSPECIFIED = 0,	/**< not specified in the codestream */
282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CLRSPC_SRGB = 1,		/**< sRGB */
283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CLRSPC_GRAY = 2,		/**< grayscale */
284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CLRSPC_SYCC = 3,		/**< YUV */
285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CLRSPC_EYCC = 4,        /**< e-YCC */
286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CLRSPC_CMYK = 5         /**< CMYK */
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} OPJ_COLOR_SPACE;
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Supported codec
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum CODEC_FORMAT {
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_CODEC_UNKNOWN = -1,	/**< place-holder */
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_CODEC_J2K  = 0,		/**< JPEG-2000 codestream : read/write */
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_CODEC_JPT  = 1,		/**< JPT-stream (JPEG 2000, JPIP) : read only */
296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CODEC_JP2  = 2,		/**< JP2 file format : read/write */
297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CODEC_JPP  = 3,		/**< JPP-stream (JPEG 2000, JPIP) : to be coded */
298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CODEC_JPX  = 4		/**< JPX file format (JPEG 2000 Part-2) : to be coded */
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} OPJ_CODEC_FORMAT;
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   event manager typedef definitions
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Callback function prototype for events
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param msg               Event message
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param client_data       Client object where will be return the event message
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (*opj_msg_callback) (const char *msg, void *client_data);
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   codec typedef definitions
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Progression order changes
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_poc {
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Resolution num start, Component num start, given by POC */
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 resno0, compno0;
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Layer num end,Resolution num end, Component num end, given by POC */
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 layno1, resno1, compno1;
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Layer num start,Precinct num start, Precinct num end */
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 layno0, precno0, precno1;
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Progression order enum*/
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_PROG_ORDER prg1,prg;
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Progression order string*/
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_CHAR progorder[5];
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Tile number */
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tile;
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Start and end values for Tile width and height*/
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 tx0,tx1,ty0,ty1;
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Start value, initialised in pi_initialise_encode*/
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 layS, resS, compS, prcS;
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** End value, initialised in pi_initialise_encode */
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 layE, resE, compE, prcE;
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Start and end values of Tile width and height, initialised in pi_initialise_encode*/
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 txS,txE,tyS,tyE,dx,dy;
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Temporary values for Tile parts, initialised in pi_create_encode */
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t;
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_poc_t;
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Compression parameters
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_cparameters {
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BOOL tile_size_on;
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** XTOsiz */
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cp_tx0;
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** YTOsiz */
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cp_ty0;
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** XTsiz */
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cp_tdx;
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** YTsiz */
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cp_tdy;
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** allocation by rate/distortion */
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cp_disto_alloc;
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** allocation by fixed layer */
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cp_fixed_alloc;
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** add fixed_quality */
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cp_fixed_quality;
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** fixed layer */
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int *cp_matrice;
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** comment for coding */
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char *cp_comment;
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** csty : coding style */
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int csty;
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** progression order (default OPJ_LRCP) */
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_PROG_ORDER prog_order;
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** progression order changes */
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_poc_t POC[32];
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of progression order changes (POC), default to 0 */
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numpocs;
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of layers */
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tcp_numlayers;
384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    /** rates of layers - might be subsequently limited by the max_cs_size field */
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	float tcp_rates[100];
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** different psnr for successive layers */
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	float tcp_distoratio[100];
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of resolutions */
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int numresolution;
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** initial code block width, default to 64 */
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	int cblockw_init;
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** initial code block height, default to 64 */
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cblockh_init;
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** mode switch (cblk_style) */
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int mode;
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int irreversible;
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** region of interest: affected component in [0..3], -1 means no ROI */
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int roi_compno;
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** region of interest: upshift value */
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int roi_shift;
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/* number of precinct size specifications */
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int res_spec;
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** initial precinct width */
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int prcw_init[OPJ_J2K_MAXRLVLS];
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** initial precinct height */
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int prch_init[OPJ_J2K_MAXRLVLS];
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/**@name command line encoder parameters (not used inside the library) */
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@{*/
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** input file name */
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char infile[OPJ_PATH_LEN];
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** output file name */
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char outfile[OPJ_PATH_LEN];
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int index_on;
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char index[OPJ_PATH_LEN];
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** subimage encoding: origin image offset in x direction */
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int image_offset_x0;
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** subimage encoding: origin image offset in y direction */
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int image_offset_y0;
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** subsampling value for dx */
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int subsampling_dx;
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** subsampling value for dy */
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int subsampling_dy;
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int decod_format;
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** output file format 0: J2K, 1: JP2, 2: JPT */
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cod_format;
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@}*/
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/**@name JPWL encoding parameters */
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@{*/
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** enables writing of EPC in MH, thus activating JPWL */
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BOOL jpwl_epc_on;
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** error protection method for MH (0,1,16,32,37-128) */
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_hprot_MH;
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile number of header protection specification (>=0) */
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** error protection methods for TPHs (0,1,16,32,37-128) */
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS];
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile number of packet protection specification (>=0) */
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS];
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** packet number of packet protection specification (>=0) */
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS];
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** error protection methods for packets (0,1,16,32,37-128) */
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_pprot[JPWL_MAX_NO_PACKSPECS];
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** enables writing of ESD, (0=no/1/2 bytes) */
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_sens_size;
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** sensitivity addressing size (0=auto/2/4 bytes) */
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_sens_addr;
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** sensitivity range (0-3) */
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_sens_range;
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** sensitivity method for MH (-1=no,0-7) */
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_sens_MH;
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile number of sensitivity specification (>=0) */
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** sensitivity methods for TPHs (-1=no,0-7) */
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS];
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@}*/
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    /**
466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * DEPRECATED: use RSIZ, OPJ_PROFILE_* and MAX_COMP_SIZE instead
467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * Digital Cinema compliance 0-not compliant, 1-compliant
468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * */
469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_CINEMA_MODE cp_cinema;
470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    /**
471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * Maximum size (in bytes) for each component.
472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * If == 0, component size limitation is not considered
473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * */
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int max_comp_size;
475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    /**
476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * DEPRECATED: use RSIZ, OPJ_PROFILE_* and OPJ_EXTENSION_* instead
477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * Profile name
478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * */
479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_RSIZ_CAPABILITIES cp_rsiz;
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Tile part generation*/
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char tp_on;
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Flag for Tile part generation*/
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char tp_flag;
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** MCT (multiple component transform) */
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char tcp_mct;
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Enable JPIP indexing*/
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BOOL jpip_on;
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Naive implementation of MCT restricted to a single reversible array based
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        encoding without offset concerning all the components. */
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void * mct_data;
491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    /**
492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * Maximum size (in bytes) for the whole codestream.
493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * If == 0, codestream size limitation is not considered
494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * If it does not comply with tcp_rates, max_cs_size prevails
495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * and a warning is issued.
496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov     * */
497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int max_cs_size;
498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    /** RSIZ value
499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        To be used to combine OPJ_PROFILE_*, OPJ_EXTENSION_* and (sub)levels values. */
500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    OPJ_UINT16 rsiz;
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_cparameters_t;
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG	0x0001
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Decompression parameters
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_dparameters {
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/**
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Set the number of highest resolution levels to be discarded.
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	The image resolution is effectively divided by 2 to the power of the number of discarded levels.
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	The reduce factor is limited by the smallest total number of decomposition levels among tiles.
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if != 0, then original dimension divided by 2^(reduce);
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if == 0 or not used, image is decoded to the full resolution
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	*/
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cp_reduce;
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/**
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Set the maximum number of quality layers to decode.
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	If there are less quality layers than the specified number, all the quality layers are decoded.
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if != 0, then only the first "layer" layers are decoded;
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if == 0 or not used, all the quality layers are decoded
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	*/
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cp_layer;
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/**@name command line decoder parameters (not used inside the library) */
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@{*/
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** input file name */
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char infile[OPJ_PATH_LEN];
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** output file name */
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char outfile[OPJ_PATH_LEN];
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** input file format 0: J2K, 1: JP2, 2: JPT */
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int decod_format;
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** output file format 0: PGX, 1: PxM, 2: BMP */
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int cod_format;
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Decoding area left boundary */
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 DA_x0;
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Decoding area right boundary */
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 DA_x1;
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Decoding area up boundary */
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 DA_y0;
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Decoding area bottom boundary */
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 DA_y1;
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Verbose mode */
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BOOL m_verbose;
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile number ot the decoded tile*/
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tile_index;
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Nb of tile to decode */
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 nb_tile_to_decode;
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@}*/
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/**@name JPWL decoding parameters */
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@{*/
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** activates the JPWL correction capabilities */
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BOOL jpwl_correct;
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** expected number of components */
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_exp_comps;
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** maximum number of tiles */
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int jpwl_max_tiles;
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*@}*/
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	unsigned int flags;
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_dparameters_t;
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * JPEG2000 codec V2.
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void * opj_codec_t;
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   I/O stream typedef definitions
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Stream open flags.
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** The stream was opened for reading. */
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_STREAM_READ	OPJ_TRUE
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** The stream was opened for writing. */
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPJ_STREAM_WRITE OPJ_FALSE
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Callback function prototype for read function
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef OPJ_SIZE_T (* opj_stream_read_fn) (void * p_buffer, OPJ_SIZE_T p_nb_bytes, void * p_user_data) ;
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Callback function prototype for write function
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef OPJ_SIZE_T (* opj_stream_write_fn) (void * p_buffer, OPJ_SIZE_T p_nb_bytes, void * p_user_data) ;
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Callback function prototype for skip function
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef OPJ_OFF_T (* opj_stream_skip_fn) (OPJ_OFF_T p_nb_bytes, void * p_user_data) ;
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Callback function prototype for seek function
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef OPJ_BOOL (* opj_stream_seek_fn) (OPJ_OFF_T p_nb_bytes, void * p_user_data) ;
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Callback function prototype for free user data function
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* opj_stream_free_user_data_fn) (void * p_user_data) ;
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * JPEG2000 Stream.
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void * opj_stream_t;
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   image typedef definitions
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Defines a single image component
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_image_comp {
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 dx;
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 dy;
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** data width */
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 w;
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** data height */
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 h;
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** x component offset compared to the whole image */
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 x0;
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** y component offset compared to the whole image */
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 y0;
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precision */
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 prec;
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image depth in bits */
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 bpp;
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** signed (1) / unsigned (0) */
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 sgnd;
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of decoded resolution */
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 resno_decoded;
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of division by 2 of the out image compared to the original size of image */
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 factor;
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image component data */
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 *data;
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /** alpha channel */
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  OPJ_UINT16 alpha;
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_image_comp_t;
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Defines image data and characteristics
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_image {
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 x0;
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 y0;
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Xsiz: width of the reference grid */
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 x1;
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Ysiz: height of the reference grid */
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 y1;
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of components in the image */
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numcomps;
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** color space: sRGB, Greyscale or YUV */
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_COLOR_SPACE color_space;
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image components */
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_image_comp_t *comps;
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** 'restricted' ICC profile */
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BYTE *icc_profile_buf;
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** size of ICC profile */
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 icc_profile_len;
680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann	/** Whether to apply PCLR or not */
682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann	OPJ_BOOL pdfium_use_colorspace;
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_image_t;
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Component parameters structure used by the opj_image_create function
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_image_comptparm {
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 dx;
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 dy;
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** data width */
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 w;
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** data height */
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 h;
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** x component offset compared to the whole image */
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 x0;
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** y component offset compared to the whole image */
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 y0;
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precision */
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 prec;
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image depth in bits */
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 bpp;
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** signed (1) / unsigned (0) */
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 sgnd;
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_image_cmptparm_t;
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   Information on the JPEG 2000 codestream
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* QUITE EXPERIMENTAL FOR THE MOMENT */
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure : Information concerning a packet inside tile
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_packet_info {
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** packet start position (including SOP marker if it exists) */
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T start_pos;
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** end of packet header position (including EPH marker if it exists)*/
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T end_ph_pos;
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** packet end position */
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T end_pos;
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** packet distorsion */
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	double disto;
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_packet_info_t;
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Marker structure
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_marker_info {
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** marker type */
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	unsigned short int type;
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** position in codestream */
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T pos;
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** length, marker val included */
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int len;
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_marker_info_t;
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure : Information concerning tile-parts
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tp_info {
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** start position of tile part */
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tp_start_pos;
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** end position of tile part header */
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tp_end_header;
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** end position of tile part */
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tp_end_pos;
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** start packet of tile part */
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tp_start_pack;
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of packets of tile part */
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tp_numpacks;
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tp_info_t;
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure : information regarding tiles
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tile_info {
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** value of thresh for each layer by tile cfr. Marcela   */
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	double *thresh;
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of tile */
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tileno;
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** start position */
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int start_pos;
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** end position of the header */
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int end_header;
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** end position */
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int end_pos;
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precinct number for each resolution level (width) */
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int pw[33];
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precinct number for each resolution level (height) */
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int ph[33];
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precinct size (in power of 2), in X for each resolution level */
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int pdx[33];
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precinct size (in power of 2), in Y for each resolution level */
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int pdy[33];
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** information concerning packets inside tile */
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_packet_info_t *packet;
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** add fixed_quality */
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int numpix;
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** add fixed_quality */
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	double distotile;
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  	/** number of markers */
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int marknum;
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** list of markers */
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_marker_info_t *marker;
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** actual size of markers array */
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int maxmarknum;
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of tile parts */
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int num_tps;
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** information concerning tile parts */
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tp_info_t *tp;
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tile_info_t;
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure of the codestream
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_codestream_info {
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** maximum distortion reduction on the whole image (add for Marcela) */
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	double D_max;
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** packet number */
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int packno;
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** writing the packet in the index with t2_encode_packets */
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int index_write;
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image width */
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int image_w;
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image height */
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int image_h;
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** progression order */
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_PROG_ORDER prog;
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile size in x */
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tile_x;
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile size in y */
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tile_y;
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** */
824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tile_Ox;
825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** */
826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tile_Oy;
827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of tiles in X */
828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tw;
829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of tiles in Y */
830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int th;
831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** component numbers */
832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int numcomps;
833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of layer */
834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int numlayers;
835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of decomposition for each component */
836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int *numdecompos;
837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */
838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of markers */
839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int marknum;
840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** list of markers */
841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_marker_info_t *marker;
842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** actual size of markers array */
843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int maxmarknum;
844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */
845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** main header position */
846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int main_head_start;
847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** main header position */
848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int main_head_end;
849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** codestream's size */
850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int codestream_size;
851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** information regarding tiles inside image */
852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tile_info_t *tile;
853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_codestream_info_t;
854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <----------------------------------------------------------- */
856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* new output management of the codestream information and index */
857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Tile-component coding parameters information
860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tccp_info
862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** component index */
864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 compno;
865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** coding style */
866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 csty;
867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of resolutions */
868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numresolutions;
869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** code-blocks width */
870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cblkw;
871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** code-blocks height */
872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cblkh;
873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** code-block coding style */
874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cblksty;
875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** discrete wavelet transform identifier */
876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 qmfbid;
877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** quantisation style */
878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 qntsty;
879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** stepsizes used for quantization */
880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 stepsizes_mant[OPJ_J2K_MAXBANDS];
881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** stepsizes used for quantization */
882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 stepsizes_expn[OPJ_J2K_MAXBANDS];
883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of guard bits */
884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numgbits;
885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Region Of Interest shift */
886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 roishift;
887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precinct width */
888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 prcw[OPJ_J2K_MAXRLVLS];
889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** precinct height */
890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 prch[OPJ_J2K_MAXRLVLS];
891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_tccp_info_t;
893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Tile coding parameters information
896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tile_v2_info {
898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number (index) of tile */
900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int tileno;
901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** coding style */
902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 csty;
903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** progression order */
904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_PROG_ORDER prg;
905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of layers */
906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numlayers;
907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** multi-component transform identifier */
908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 mct;
909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** information concerning tile component parameters*/
911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tccp_info_t *tccp_info;
912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tile_info_v2_t;
914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Information structure about the codestream (FIXME should be expand and enhance)
917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_codestream_info_v2 {
919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/* Tile info */
920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile origin in x = XTOsiz */
921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tx0;
922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile origin in y = YTOsiz */
923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 ty0;
924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile size in x = XTsiz */
925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tdx;
926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile size in y = YTsiz */
927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tdy;
928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of tiles in X */
929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tw;
930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of tiles in Y */
931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 th;
932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of components*/
934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 nbcomps;
935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Default information regarding tiles inside image */
937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tile_info_v2_t m_default_tile_info;
938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** information regarding tiles inside image */
940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tile_info_v2_t *tile_info; /* FIXME not used for the moment */
941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_codestream_info_v2_t;
943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure about a tile part
947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tp_index {
949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** start position */
950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T start_pos;
951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** end position of the header */
952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T end_header;
953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** end position */
954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T end_pos;
955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tp_index_t;
957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure about a tile
960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tile_index {
962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tile index */
963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tileno;
964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of tile parts */
966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 nb_tps;
967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** current nb of tile part (allocated)*/
968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 current_nb_tps;
969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** current tile-part index */
970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 current_tpsno;
971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** information concerning tile parts */
972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tp_index_t *tp_index;
973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/* UniPG>> */ /* NOT USED FOR THE MOMENT IN THE V2 VERSION */
975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		/** number of markers */
976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		OPJ_UINT32 marknum;
977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		/** list of markers */
978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		opj_marker_info_t *marker;
979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		/** actual size of markers array */
980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		OPJ_UINT32 maxmarknum;
981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/* <<UniPG */
982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** packet number */
984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 nb_packet;
985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** information concerning packets inside tile */
986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_packet_info_t *packet_index;
987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tile_index_t;
989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure of the codestream (FIXME should be expand and enhance)
992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_codestream_index {
994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** main header start position (SOC position) */
995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T main_head_start;
996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** main header end position (first SOT position) */
997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_OFF_T main_head_end;
998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** codestream's size */
1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT64 codestream_size;
1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ /* NOT USED FOR THE MOMENT IN THE V2 VERSION */
1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** number of markers */
1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 marknum;
1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** list of markers */
1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_marker_info_t *marker;
1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** actual size of markers array */
1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 maxmarknum;
1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */
1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** */
1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 nb_of_tiles;
1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** */
1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tile_index_t *tile_index; /* FIXME not used for the moment */
1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}opj_codestream_index_t;
1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* -----------------------------------------------------------> */
1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   Metadata from the JP2file
1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Info structure of the JP2 file
1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * EXPERIMENTAL FOR THE MOMENT
1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_jp2_metadata {
1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** */
1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32	not_used;
1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_jp2_metadata_t;
1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Index structure of the JP2 file
1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * EXPERIMENTAL FOR THE MOMENT
1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_jp2_index {
1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** */
1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32	not_used;
1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_jp2_index_t;
1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __cplusplus
1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" {
1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   openjpeg version
1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Get the version of the openjpeg library*/
1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API const char * OPJ_CALLCONV opj_version(void);
1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   image functions definitions
1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Create an image
1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param numcmpts      number of components
1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param cmptparms     components parameters
1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param clrspc        image color space
1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return returns      a new image structure if successful, returns NULL otherwise
1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Deallocate any resources associated with an image
1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param image         image to be destroyed
1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image);
1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Creates an image without allocating memory for the image (used in the new version of the library).
1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	numcmpts    the number of components
1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	cmptparms   the components parameters
1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	clrspc      the image color space
1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	a new image structure if successful, NULL otherwise.
1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_image_t* OPJ_CALLCONV opj_image_tile_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   stream functions definitions
1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Creates an abstract stream. This function does nothing except allocating memory and initializing the abstract stream.
1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_is_input		if set to true then the stream will be an input stream, an output stream else.
1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	a stream object.
1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_default_create(OPJ_BOOL p_is_input);
1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Creates an abstract stream. This function does nothing except allocating memory and initializing the abstract stream.
1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_buffer_size  FIXME DOC
1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_is_input		if set to true then the stream will be an input stream, an output stream else.
1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	a stream object.
1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size, OPJ_BOOL p_is_input);
1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Destroys a stream created by opj_create_stream. This function does NOT close the abstract stream. If needed the user must
1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * close its own implementation of the stream.
1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_stream	the stream to destroy.
1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_stream_destroy(opj_stream_t* p_stream);
1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the given function to be used as a read function.
1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_stream	the stream to modify
1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_function	the function to use a read function.
1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_stream_set_read_function(opj_stream_t* p_stream, opj_stream_read_fn p_function);
1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the given function to be used as a write function.
1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_stream	the stream to modify
1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_function	the function to use a write function.
1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_stream_set_write_function(opj_stream_t* p_stream, opj_stream_write_fn p_function);
1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the given function to be used as a skip function.
1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_stream	the stream to modify
1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_function	the function to use a skip function.
1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_stream_set_skip_function(opj_stream_t* p_stream, opj_stream_skip_fn p_function);
1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the given function to be used as a seek function, the stream is then seekable.
1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_stream	the stream to modify
1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_function	the function to use a skip function.
1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_stream_set_seek_function(opj_stream_t* p_stream, opj_stream_seek_fn p_function);
1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the given data to be used as a user data for the stream.
1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_stream	the stream to modify
1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_data		the data to set.
1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param		p_function	the function to free p_data when opj_stream_destroy() is called.
1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovOPJ_API void OPJ_CALLCONV opj_stream_set_user_data (opj_stream_t* p_stream, void * p_data, opj_stream_free_user_data_fn p_function);
1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the length of the user data for the stream.
1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_stream    the stream to modify
1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param data_length length of the user_data.
1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_stream_set_user_data_length(opj_stream_t* p_stream, OPJ_UINT64 data_length);
1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Create a stream from a file identified with its filename with default parameters (helper function)
1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param fname             the filename of the file to stream
1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_is_read_stream  whether the stream is a read stream (true) or not (false)
1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovOPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream (const char *fname, OPJ_BOOL p_is_read_stream);
1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** Create a stream from a file identified with its filename with a specific buffer size
1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param fname             the filename of the file to stream
1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_buffer_size     size of the chunk used to stream
1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_is_read_stream  whether the stream is a read stream (true) or not (false)
1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovOPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream (const char *fname,
1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                     OPJ_SIZE_T p_buffer_size,
1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                     OPJ_BOOL p_is_read_stream);
1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   event manager functions definitions
1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Set the info handler use by openjpeg.
1194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec       the codec previously initialise
1195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_callback    the callback function which will be used
1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_user_data   client object where will be returned the message
1197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1198ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_info_handler(opj_codec_t * p_codec,
1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   opj_msg_callback p_callback,
1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   void * p_user_data);
1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Set the warning handler use by openjpeg.
1203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec       the codec previously initialise
1204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_callback    the callback function which will be used
1205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_user_data   client object where will be returned the message
1206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1207ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_warning_handler(opj_codec_t * p_codec,
1208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                      opj_msg_callback p_callback,
1209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                      void * p_user_data);
1210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Set the error handler use by openjpeg.
1212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec       the codec previously initialise
1213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_callback    the callback function which will be used
1214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_user_data   client object where will be returned the message
1215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1216ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec,
1217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                    opj_msg_callback p_callback,
1218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                    void * p_user_data);
1219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   codec functions definitions
1223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Creates a J2K/JP2 decompression structure
1228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param format 		Decoder to select
1229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return Returns a handle to a decompressor if successful, returns NULL otherwise
1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_codec_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format);
1233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Destroy a decompressor handle
1236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			decompressor handle to destroy
1238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1239ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_destroy_codec(opj_codec_t * p_codec);
1240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Read after the codestream if necessary
1243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the JPEG2000 codec to read.
1244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_stream		the JPEG2000 stream.
1245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1246ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_end_decompress (	opj_codec_t *p_codec,
1247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													opj_stream_t *p_stream);
1248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Set decoding parameters to default values
1252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param parameters Decompression parameters
1253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1254ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters);
1255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Setup the decoder with decompression parameters provided by the user and with the message handler
1258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * provided by the user.
1259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec 		decompressor handler
1261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param parameters 	decompression parameters
1262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return true			if the decoder is correctly set
1264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1265ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_dparameters_t *parameters );
1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Decodes an image header.
1270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_stream		the jpeg2000 stream.
1272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec to read.
1273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_image			the image structure initialized with the characteristics of encoded image.
1274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return true				if the main header of the codestream and the JP2 header is correctly read.
1276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1277ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_read_header (	opj_stream_t *p_stream,
1278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_codec_t *p_codec,
1279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_image_t **p_image);
1280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the given area to be decoded. This function should be called right after opj_read_header and before any tile header reading.
1283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_image         the decoded image previously setted by opj_read_header
1286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_start_x		the left position of the rectangle to decode (in image coordinates).
1287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_end_x			the right position of the rectangle to decode (in image coordinates).
1288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_start_y		the up position of the rectangle to decode (in image coordinates).
1289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_end_y			the bottom position of the rectangle to decode (in image coordinates).
1290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	true			if the area could be set.
1292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1293ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_decode_area(	opj_codec_t *p_codec,
1294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													opj_image_t* p_image,
1295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
1296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													OPJ_INT32 p_end_x, OPJ_INT32 p_end_y );
1297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Decode an image from a JPEG-2000 codestream
1300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_decompressor 	decompressor handle
1302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_stream			Input buffer stream
1303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_image 			the decoded image
1304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return 					true if success, otherwise false
1305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * */
1306ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_decode(   opj_codec_t *p_decompressor,
1307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            opj_stream_t *p_stream,
1308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            opj_image_t *p_image);
1309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Get the decoded tile from the codec
1312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_stream		input streamm
1315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_image			output image
1316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	tile_index		index of the tile which will be decode
1317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return					true if success, otherwise false
1319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1320ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_get_decoded_tile(	opj_codec_t *p_codec,
1321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													opj_stream_t *p_stream,
1322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													opj_image_t *p_image,
1323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													OPJ_UINT32 tile_index);
1324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Set the resolution factor of the decoded image
1327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	res_factor		resolution factor to set
1329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return					true if success, otherwise false
1331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1332ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec, OPJ_UINT32 res_factor);
1333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Writes a tile with the given data.
1336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec		        the jpeg2000 codec.
1338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_index		the index of the tile to write. At the moment, the tiles must be written from 0 to n-1 in sequence.
1339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_data				pointer to the data to write. Data is arranged in sequence, data_comp0, then data_comp1, then ... NO INTERLEAVING should be set.
1340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_data_size			this value os used to make sure the data being written is correct. The size must be equal to the sum for each component of
1341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *                              tile_width * tile_height * component_size. component_size can be 1,2 or 4 bytes, depending on the precision of the given component.
1342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_stream			the stream to write data to.
1343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	true if the data could be written.
1345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1346ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_write_tile (	opj_codec_t *p_codec,
1347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_UINT32 p_tile_index,
1348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_BYTE * p_data,
1349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_UINT32 p_data_size,
1350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_stream_t *p_stream );
1351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Reads a tile header. This function is compulsory and allows one to know the size of the tile that will be decoded.
1354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The user may need to refer to the image got by opj_read_header to understand the size being taken by the tile.
1355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_index	pointer to a value that will hold the index of the tile being decoded, in case of success.
1358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_data_size		pointer to a value that will hold the maximum size of the decoded data, in case of success. In case
1359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *							of truncated codestreams, the actual number of bytes decoded may be lower. The computation of the size is the same
1360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *							as depicted in opj_write_tile.
1361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_x0		pointer to a value that will hold the x0 pos of the tile (in the image).
1362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_y0		pointer to a value that will hold the y0 pos of the tile (in the image).
1363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_x1		pointer to a value that will hold the x1 pos of the tile (in the image).
1364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_y1		pointer to a value that will hold the y1 pos of the tile (in the image).
1365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_nb_comps		pointer to a value that will hold the number of components in the tile.
1366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_should_go_on	pointer to a boolean that will hold the fact that the decoding should go on. In case the
1367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *							codestream is over at the time of the call, the value will be set to false. The user should then stop
1368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *							the decoding.
1369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_stream		the stream to decode.
1370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	true			if the tile header could be decoded. In case the decoding should end, the returned value is still true.
1371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *							returning false may be the result of a shortage of memory or an internal error.
1372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1373ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_read_tile_header(	opj_codec_t *p_codec,
1374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_stream_t * p_stream,
1375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_UINT32 * p_tile_index,
1376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_UINT32 * p_data_size,
1377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0,
1378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1,
1379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_UINT32 * p_nb_comps,
1380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												OPJ_BOOL * p_should_go_on );
1381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Reads a tile data. This function is compulsory and allows one to decode tile data. opj_read_tile_header should be called before.
1384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The user may need to refer to the image got by opj_read_header to understand the size being taken by the tile.
1385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_index	the index of the tile being decoded, this should be the value set by opj_read_tile_header.
1388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_data			pointer to a memory block that will hold the decoded data.
1389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_data_size		size of p_data. p_data_size should be bigger or equal to the value set by opj_read_tile_header.
1390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_stream		the stream to decode.
1391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	true			if the data could be decoded.
1393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1394ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_decode_tile_data(	opj_codec_t *p_codec,
1395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													OPJ_UINT32 p_tile_index,
1396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													OPJ_BYTE * p_data,
1397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													OPJ_UINT32 p_data_size,
1398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													opj_stream_t *p_stream );
1399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* COMPRESSION FUNCTIONS*/
1401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Creates a J2K/JP2 compression structure
1404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param 	format 		Coder to select
1405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return 				Returns a handle to a compressor if successful, returns NULL otherwise
1406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1407ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_codec_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format);
1408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1410ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovSet encoding parameters to default values, that means :
1411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<ul>
1412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>Lossless
1413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>1 tile
1414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>Size of precinct : 2^15 x 2^15 (means 1 precinct)
1415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>Size of code-block : 64 x 64
1416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>Number of resolutions: 6
1417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No SOP marker in the codestream
1418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No EPH marker in the codestream
1419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No sub-sampling in x or y direction
1420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No mode switch activated
1421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>Progression order: LRCP
1422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No index file
1423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No ROI upshifted
1424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No offset of the origin of the image
1425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>No offset of the origin of the tiles
1426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov<li>Reversible DWT 5-3
1427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov</ul>
1428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param parameters Compression parameters
1429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1430ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters);
1431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Setup the encoder parameters using the current image and using user parameters.
1434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec 		Compressor handle
1435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param parameters 	Compression parameters
1436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param image 		Input filled image
1437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1438ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec,
1439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_cparameters_t *parameters,
1440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_image_t *image);
1441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Start to compress the current image.
1444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec 		Compressor handle
1445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param image 	    Input filled image
1446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_stream 		Input stgream
1447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1448ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_start_compress (	opj_codec_t *p_codec,
1449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													opj_image_t * p_image,
1450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													opj_stream_t *p_stream);
1451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * End to compress the current image.
1454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec 		Compressor handle
1455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_stream 		Input stgream
1456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1457ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec,
1458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												opj_stream_t *p_stream);
1459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Encode an image into a JPEG-2000 codestream
1462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_codec 		compressor handle
1463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_stream 		Output buffer stream
1464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return 				Returns true if successful, returns false otherwise
1466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1467ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_encode(opj_codec_t *p_codec,
1468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                         opj_stream_t *p_stream);
1469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   codec output functions definitions
1472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* EXPERIMENTAL FUNCTIONS FOR NOW, USED ONLY IN J2K_DUMP*/
1475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1477ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDestroy Codestream information after compression or decompression
1478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param cstr_info Codestream information structure
1479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1480ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_v2_t **cstr_info);
1481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Dump the codec information into the output stream
1485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	info_flag		type of information dump.
1488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	output_stream	output stream where dump the informations get from the codec.
1489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1491ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_dump_codec(	opj_codec_t *p_codec,
1492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov											OPJ_INT32 info_flag,
1493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov											FILE* output_stream);
1494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Get the codestream information from the codec
1497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return					a pointer to a codestream information structure.
1501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1503ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_codestream_info_v2_t* OPJ_CALLCONV opj_get_cstr_info(opj_codec_t *p_codec);
1504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Get the codestream index from the codec
1507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return					a pointer to a codestream index structure.
1511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1513ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_codestream_index_t * OPJ_CALLCONV opj_get_cstr_index(opj_codec_t *p_codec);
1514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1515ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API void OPJ_CALLCONV opj_destroy_cstr_index(opj_codestream_index_t **p_cstr_index);
1516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Get the JP2 file information from the codec FIXME
1520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return					a pointer to a JP2 metadata structure.
1524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1526ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_jp2_metadata_t* OPJ_CALLCONV opj_get_jp2_metadata(opj_codec_t *p_codec);
1527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Get the JP2 file index from the codec FIXME
1530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_codec			the jpeg2000 codec.
1532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return					a pointer to a JP2 index structure.
1534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1536ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API opj_jp2_index_t* OPJ_CALLCONV opj_get_jp2_index(opj_codec_t *p_codec);
1537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   MCT functions
1542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov==========================================================
1543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
1546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Sets the MCT matrix to use.
1547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	parameters		the parameters to change.
1549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	pEncodingMatrix	the encoding matrix.
1550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_dc_shift		the dc shift coefficients to use.
1551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	pNbComp			the number of components of the image.
1552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
1553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	true if the parameters could be set.
1554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
1555ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_MCT( opj_cparameters_t *parameters,
1556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		                               	   OPJ_FLOAT32 * pEncodingMatrix,
1557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		                               	   OPJ_INT32 * p_dc_shift,
1558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		                               	   OPJ_UINT32 pNbComp);
1559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __cplusplus
1563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
1565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* OPENJPEG_H */
1567