2 * Copyright (c) 2001-2002, David Janssens
3 * Copyright (c) 2002-2003, Yannick Verschueren
4 * Copyright (c) 2002-2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
29 #define VERSION "0.0.8"
33 #define LIBJ2K_API __declspec(dllexport)
35 #define LIBJ2K_API __declspec(dllimport)
44 #define J2K_MAXRLVLS 33 /* Number of maximum resolution level authorized */
45 #define J2K_MAXBANDS (3*J2K_MAXRLVLS+1) /* Number of maximum sub-band linked to number of resolution level */
47 #define J2K_CP_CSTY_PRT 0x01
48 #define J2K_CP_CSTY_SOP 0x02
49 #define J2K_CP_CSTY_EPH 0x04
50 #define J2K_CCP_CSTY_PRT 0x01
51 #define J2K_CCP_CBLKSTY_LAZY 0x01
52 #define J2K_CCP_CBLKSTY_RESET 0x02
53 #define J2K_CCP_CBLKSTY_TERMALL 0x04
54 #define J2K_CCP_CBLKSTY_VSC 0x08
55 #define J2K_CCP_CBLKSTY_PTERM 0x10
56 #define J2K_CCP_CBLKSTY_SEGSYM 0x20
57 #define J2K_CCP_QNTSTY_NOQNT 0
58 #define J2K_CCP_QNTSTY_SIQNT 1
59 #define J2K_CCP_QNTSTY_SEQNT 2
62 int reduce_on; /* option reduce is used if reduce = 1 */
63 int reduce_value; /* if option reduce is used -> original dimension divided by 2^value */
67 int dx, dy; /* XRsiz, YRsiz */
68 int w, h; /* width and height of data */
69 int x0, y0; /* offset of the component compare to the whole image */
70 int prec; /* precision */
71 int bpp; /* deapth of image in bits */
72 int sgnd; /* signed */
73 int resno_decoded; /* number of decoded resolution */
74 int factor; /* number of division by 2 of the out image compare to the original size of image */
75 int *data; /* image-component data */
79 int x0, y0; /* XOsiz, YOsiz */
80 int x1, y1; /* Xsiz, Ysiz */
81 int numcomps; /* number of components */
82 int index_on; /* 0 = no index || 1 = index */
83 j2k_comp_t *comps; /* image-components */
87 int expn; /* exponent */
88 int mant; /* mantissa */
92 int csty; /* coding style */
93 int numresolutions; /* number of resolutions */
94 int cblkw; /* width of code-blocks */
95 int cblkh; /* height of code-blocks */
96 int cblksty; /* code-block coding style */
97 int qmfbid; /* discrete wavelet transform identifier */
98 int qntsty; /* quantisation style */
99 j2k_stepsize_t stepsizes[J2K_MAXBANDS]; /* stepsizes used for quantisation */
100 int numgbits; /* number of guard bits */
101 int roishift; /* Region Of Interest shift */
102 int prcw[J2K_MAXRLVLS]; /* Precinct width */
103 int prch[J2K_MAXRLVLS]; /* Precinct height */
108 int layno1, resno1, compno1;
115 int first; /* 1 : first part-tile of a tile */
116 int csty; /* coding style */
117 int prg; /* progression order */
118 int numlayers; /* number of layers */
119 int mct; /* multi-component transform identifier */
120 int rates[100]; /* rates of layers */
121 int numpocs; /* number of progression order changes */
122 int POC; /* Precise if a POC marker has been used O:NO, 1:YES */
123 j2k_poc_t pocs[32]; /* progression order changes */
124 unsigned char *ppt_data; /* packet header store there for futur use in t2_decode_packet */
125 int ppt; /* If ppt == 1 --> there was a PPT marker for the present tile */
126 int ppt_store; /* Use in case of multiple marker PPT (number of info already store) */
127 float distoratio[100]; /* add fixed_quality */
128 j2k_tccp_t *tccps; /* tile-component coding parameters */
132 int image_type; /* 0: PNM, PGM, PPM 1: PGX */
133 int disto_alloc; /* Allocation by rate/distortion */
134 int fixed_alloc; /* Allocation by fixed layer */
135 int fixed_quality; /* add fixed_quality */
136 int reduce_on; /* option reduce is used if reduce = 1 */
137 int reduce_value; /* if option reduce is used -> original dimension divided by 2^value */
138 int tx0, ty0; /* XTOsiz, YTOsiz */
139 int tdx, tdy; /* XTsiz, YTsiz */
140 char *comment; /* comment for coding */
141 int tw, th; /* number of tiles in width and heigth */
142 int *tileno; /* ID number of the tiles present in the codestream */
143 int tileno_size; /* size of the vector tileno */
144 unsigned char *ppm_data; /* packet header store there for futur use in t2_decode_packet */
145 int ppm; /* If ppm == 1 --> there was a PPM marker for the present tile */
146 int ppm_store; /* Use in case of multiple marker PPM (number of info already store) */
147 int ppm_previous; /* Use in case of multiple marker PPM (case on non-finished previous info) */
148 j2k_tcp_t *tcps; /* tile coding parameters */
149 int *matrice; /* Fixed layer */
153 int start_pos, end_pos; /* start and end position */
154 double disto; /* ADD for Marcela */
155 } info_packet; /* Index struct */
158 double *thresh; /* value of thresh for each layer by tile cfr. Marcela */
159 int num_tile; /* Number of Tile */
160 int start_pos; /* Start position */
161 int end_header; /* End position of the header */
162 int end_pos; /* End position */
163 int pw[33], ph[33]; /* precinct number for each resolution level */
164 int pdx[33], pdy[33]; /* precinct size (in power of 2), in X and Y for each resolution level */
165 info_packet *packet; /* information concerning packets inside tile */
166 int nbpix; /* add fixed_quality */
167 double distotile; /* add fixed_quality */
168 } info_tile; /* index struct */
172 double D_max; /* ADD for Marcela */
173 int num; /* numero of packet */
174 int index_write; /* writing the packet inthe index with t2_encode_packets */
175 int Im_w, Im_h; /* Image width and Height */
176 int Prog; /* progression order */
177 int Tile_x, Tile_y; /* Number of Tile in X and Y */
179 int Comp; /* Component numbers */
180 int Layer; /* number of layer */
181 int Decomposition; /* number of decomposition */
182 //int pw, ph; /* nombre precinct in X and Y */
183 //int pdx, pdy; /* size of precinct in X and Y */
184 int Main_head_end; /* Main header position */
185 int codestream_size; /* codestream's size */
186 info_tile *tile; /* information concerning tiles inside image */
187 } info_image; /* index struct */
190 * Encode an image into a JPEG-2000 codestream
192 * cp: coding parameters
193 * dest: destination buffer
194 * len: length of destination buffer
195 * index : index file name
197 LIBJ2K_API int j2k_encode(j2k_image_t * i, j2k_cp_t * cp, char *outfile,
198 int len, char *index);
200 /* LIBJ2K_API int j2k_encode(j2k_image_t *i, j2k_cp_t *cp,unsigned char *dest, int len); */
202 * Decode an image from a JPEG-2000 codestream
204 * len: length of source buffer
206 * cp: coding parameters that were used to encode the image
208 LIBJ2K_API int j2k_decode(unsigned char *src, int len, j2k_image_t ** img,
209 j2k_cp_t ** cp, j2k_option_t option);
213 * Decode an image form a JPT-stream (JPEG 2000, JPIP)
215 * len: length of source buffer
217 * cp: coding parameters that were used to encode the image
220 int j2k_decode_jpt_stream(unsigned char *src, int len, j2k_image_t ** img,