summaryrefslogtreecommitdiff
path: root/libopenjpeg/j2k.h
blob: 3ad9cb00f144c87f6017f4a1b88cb5e80ed6c79e (plain)
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
/*
 * Copyright (c) 2001-2002, David Janssens
 * Copyright (c) 2002-2003, Yannick Verschueren
 * Copyright (c) 2002-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 DAVID_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 image_type;								/* 0: PNM, PGM, PPM 1: PGX */
	int disto_alloc;							/* Allocation by rate/distortion */
	int fixed_alloc;							/* Allocation by fixed layer */
	int tx0, ty0;									/* XTOsiz, YTOsiz */
	int tdx, tdy;									/* XTsiz, YTsiz */
	char *comment;								/* comment for coding */
	int tw, th;
	j2k_tcp_t *tcps;							/* tile coding parameters */
} j2k_cp_t;

typedef struct {
	int start_pos, end_pos;				/* start and end position */
	double disto;
} info_packet;									/* Index struct */

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 */
	info_packet *packet;					/* information concerning packets inside tile */
} info_tile;										/* index struct */

typedef struct {
	int index_on;
	double D_max;									/* ADD for Marcela */
	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 *tile;							/* information concerning tiles inside image */
} info_image;										/* 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