1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
/*
* Copyright (c) 2001-2002, David Janssens
* Copyright (c) 2003, Yannick Verschueren
* Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#define VERSION "0.0.8"
#ifdef WIN32
#ifdef LIBJ2K_EXPORTS
#define LIBJ2K_API __declspec(dllexport)
#else
#define LIBJ2K_API __declspec(dllimport)
#endif
#else
#define LIBJ2K_API
#endif
#ifndef __J2K_H
#define __J2K_H
#define J2K_MAXRLVLS 33
#define J2K_MAXBANDS (3*J2K_MAXRLVLS+1)
#define J2K_CP_CSTY_PRT 0x01
#define J2K_CP_CSTY_SOP 0x02
#define J2K_CP_CSTY_EPH 0x04
#define J2K_CCP_CSTY_PRT 0x01
#define J2K_CCP_CBLKSTY_LAZY 0x01
#define J2K_CCP_CBLKSTY_RESET 0x02
#define J2K_CCP_CBLKSTY_TERMALL 0x04
#define J2K_CCP_CBLKSTY_VSC 0x08
#define J2K_CCP_CBLKSTY_PTERM 0x10
#define J2K_CCP_CBLKSTY_SEGSYM 0x20
#define J2K_CCP_QNTSTY_NOQNT 0
#define J2K_CCP_QNTSTY_SIQNT 1
#define J2K_CCP_QNTSTY_SEQNT 2
typedef struct
{
int dx, dy; // XRsiz, YRsiz
int prec; // precision
int bpp; // deapth of image in bits
int sgnd; // signed
int *data; // image-component data
} j2k_comp_t;
typedef struct {
int x0, y0; // XOsiz, YOsiz
int x1, y1; // Xsiz, Ysiz
int numcomps; // number of components
int index_on; // 0 = no index || 1 = index
//int PPT;
j2k_comp_t *comps; // image-components
} j2k_image_t;
typedef struct {
int expn; // exponent
int mant; // mantissa
} j2k_stepsize_t;
typedef struct {
int csty; // coding style
int numresolutions; // number of resolutions
int cblkw; // width of code-blocks
int cblkh; // height of code-blocks
int cblksty; // code-block coding style
int qmfbid; // discrete wavelet transform identifier
int qntsty; // quantisation style
j2k_stepsize_t stepsizes[J2K_MAXBANDS]; // stepsizes used for quantisation
int numgbits; // number of guard bits
int roishift; // Region Of Interest shift
int prcw[J2K_MAXRLVLS]; // Precinct width
int prch[J2K_MAXRLVLS]; // Precinct height
} j2k_tccp_t;
typedef struct {
int resno0, compno0;
int layno1, resno1, compno1;
int prg;
int tile;
char progorder[4];
} j2k_poc_t;
typedef struct {
int csty; // coding style
int prg; // progression order
int numlayers; // number of layers
int mct; // multi-component transform identifier
int rates[100]; // rates of layers
int numpocs; // number of progression order changes
j2k_poc_t pocs[32]; // progression order changes
j2k_tccp_t *tccps; // tile-component coding parameters
} j2k_tcp_t;
typedef struct {
int tx0, ty0; // XTOsiz, YTOsiz
int tdx, tdy; // XTsiz, YTsiz
int tw, th;
j2k_tcp_t *tcps; // tile coding parameters
} j2k_cp_t;
typedef struct {
int len;
int len_header;
int offset;
} info_layer_t;
typedef struct {
info_layer_t *layer;
} info_prec_t;
typedef struct {
info_prec_t *prec;
} info_reso_t;
typedef struct {
info_reso_t *reso;
} info_compo_t;
typedef struct {
int num_tile; // Number of Tile
int start_pos; // Start position
int end_header; // End position of the header
int end_pos; // End position
int pw, ph; // number of precinct by tile
int num_packet; // number of packet in the tile
info_compo_t *compo; // component [packet]
} info_tile_t; // index struct
typedef struct {
int type; // type of marker [SIZ, QCD, POC, PPM, CRG] appearing only once
int start_pos; // Start position of the marker
int len; // Length of the marker
} info_marker_t; // index struct
typedef struct{
info_marker_t *COD;
int num_COD;
info_marker_t *COC;
int num_COC;
info_marker_t *RGN;
int num_RGN;
info_marker_t *QCC;
int num_QCC;
info_marker_t *TLM;
int num_TLM;
info_marker_t *PLM;
int num_PLM;
info_marker_t *PPM;
int num_PPM;
info_marker_t *COM;
int num_COM;
} info_marker_mul_t; // index struct
typedef struct {
int index_on;
int num; // numero of packet
int index_write; // writing the packet inthe index with t2_encode_packets
int Im_w, Im_h; // Image width and Height
int Prog; // progression order
int Tile_x, Tile_y; // Number of Tile in X and Y
int tw, th;
int Comp; // Component numbers
int Layer; // number of layer
int Decomposition; // number of decomposition
int pw, ph; // nombre precinct in X and Y
int pdx, pdy; // size of precinct in X and Y
int Main_head_end; // Main header position
int codestream_size; // codestream's size
info_tile_t *tile; // information concerning tiles inside image
info_marker_t *marker; // information concerning markers inside image [only one apparition]
info_marker_mul_t marker_mul; // information concerning markers inside image [multiple apparition]
int num_marker; // number of marker
int num_packet_max; // MAximum number of packet
} info_image_t; // index struct
/*
* Encode an image into a JPEG-2000 codestream
* i: image to encode
* cp: coding parameters
* dest: destination buffer
* len: length of destination buffer
* index : index file name
*/
LIBJ2K_API int j2k_encode(j2k_image_t *i, j2k_cp_t *cp,char *outfile, int len,char *index);
//LIBJ2K_API int j2k_encode(j2k_image_t *i, j2k_cp_t *cp,unsigned char *dest, int len);
/*
* Decode an image from a JPEG-2000 codestream
* src: source buffer
* len: length of source buffer
* i: decode image
* cp: coding parameters that were used to encode the image
*/
LIBJ2K_API int j2k_decode(unsigned char *src, int len, j2k_image_t **i, j2k_cp_t **cp);
#endif
|