diff options
Diffstat (limited to 'indexer_JPIP/j2k.h')
| -rw-r--r-- | indexer_JPIP/j2k.h | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/indexer_JPIP/j2k.h b/indexer_JPIP/j2k.h new file mode 100644 index 00000000..e899fae3 --- /dev/null +++ b/indexer_JPIP/j2k.h @@ -0,0 +1,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 |
