/* * Copyright (c) 2001-2002, David Janssens * Copyright (c) 2003-2004, Yannick Verschueren * Copyright (c) 2003-2004, 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 version; int x0, y0; /* XOsiz, YOsiz */ int x1, y1; /* Xsiz, Ysiz */ int numcomps; /* number of components */ int index_on; /* 0 = no index || 1 = index */ 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 */ int POC; /* Precise if a POC marker has been used O:NO, 1:YES */ j2k_poc_t pocs[32]; /* progression order changes */ unsigned char *ppt_data; /* packet header store there for futur use in t2_decode_packet */ int ppt; /* If ppt == 1 --> there was a PPT marker for the present tile */ int ppt_store; /* Use in case of multiple marker PPT (number of info already store) */ 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; unsigned char *ppm_data; /* packet header store there for futur use in t2_decode_packet */ int ppm; /* If ppm == 1 --> there was a PPM marker for the present tile */ int ppm_store; /* Use in case of multiple marker PPM (number of info already store) */ int ppm_previous; /* Use in case of multiple marker PPM (case on non-finished previous info) */ j2k_tcp_t *tcps; /* tile coding parameters */ } j2k_cp_t; /* Packet information : Layer level */ typedef struct { int len; /* Length of the body of the packet */ int len_header; /* Length of the header of the packet */ int offset; /* Offset of the body of the packet */ int offset_header; /* Offset of the header of the packet */ } info_layer_t; /* Access to packet information : precinct level */ typedef struct { info_layer_t *layer; } info_prec_t; /* Access to packet information : resolution level */ typedef struct { info_prec_t *prec; } info_reso_t; /* Access to packet information : component level */ typedef struct { info_reso_t *reso; } info_compo_t; /* Information about the marker */ typedef struct { int type; /* type of marker [SIZ, QCD, POC, PPM, CRG, COD] appearing only once */ int start_pos; /* Start position of the marker */ int len; /* Length of the marker */ } info_marker_t; /* Multiple marker in tile header */ typedef struct{ info_marker_t *COC; /* COC markers */ int num_COC; /* Number of COC marker */ int CzCOC; /* Current size of the vector COC */ info_marker_t *RGN; /* RGN markers */ int num_RGN; /* Number of RGN marker */ int CzRGN; /* Current size of the vector RGN */ info_marker_t *QCC; /* QCC markers */ int num_QCC; /* Number of QCC marker */ int CzQCC; /* Current size of the vector QCC */ info_marker_t *PLT; /* PLT markers */ int num_PLT; /* Number of PLT marker */ int CzPLT; /* Current size of the vector PLT */ info_marker_t *PPT; /* PPT markers */ int num_PPT; /* Number of PPT marker */ int CzPPT; /* Current size of the vector PPT */ info_marker_t *COM; /* COM markers */ int num_COM; /* Number of COM marker */ int CzCOM; /* Current size of the vector COC */ } info_marker_mul_tile_t; /* Information about each tile_part for a particulary tile */ typedef struct{ int start_pos; /* Start position of the tile_part */ int length; /* Length of the tile_part header + body */ int length_header; /* Length of the header */ int end_pos; /* End position of the tile part */ int end_header; /* End position of the tile part header */ int num_reso_AUX; /* Number of resolution level completed */ } info_tile_part_t; /* Information about each tile */ typedef struct { int num_tile; /* Number of Tile */ int pw, ph; /* number of precinct by tile */ int num_packet; /* number of packet in the tile */ info_compo_t *compo; /* component [packet] */ info_marker_t *marker; /* information concerning markers inside image [only one apparition] */ info_marker_mul_tile_t marker_mul; /* information concerning markers inside image [multiple apparition] */ int num_marker; /* number of marker */ int numparts; /* number of tile_part for this tile */ info_tile_part_t *tile_parts; /* Information about each tile_part */ int Cztile_parts; /* Current size of the tile_parts vector */ } info_tile_t; /* index struct */ /* Multiple marker in main header */ typedef struct{ info_marker_t *COC; /* COC markers */ int num_COC; /* Number of COC marker */ int CzCOC; /* Current size of the vector COC */ info_marker_t *RGN; /* RGN markers */ int num_RGN; /* Number of RGN marker */ int CzRGN; /* Current size of the vector RGN */ info_marker_t *QCC; /* QCC markers */ int num_QCC; /* Number of QCC marker */ int CzQCC; /* Current size of the vector QCC */ info_marker_t *TLM; /* TLM markers */ int num_TLM; /* Number of TLM marker */ int CzTLM; /* Current size of the vector TLM */ info_marker_t *PLM; /* PLM markers */ int num_PLM; /* Number of PLM marker */ int CzPLM; /* Current size of the vector PLM */ info_marker_t *PPM; /* PPM markers */ int num_PPM; /* Number of PPM marker */ int CzPPM; /* Current size of the vector PPM */ info_marker_t *COM; /* COM markers */ int num_COM; /* Number of COM marker */ int CzCOM; /* Current size of the vector COM */ } info_marker_mul_t; /* index struct */ /* Information about image */ typedef struct { int Im_w, Im_h; /* Image width and Height */ int Tile_x, Tile_y; /* Number of Tile in X and Y */ int tw, th; int pw, ph; /* nombre precinct in X and Y */ int pdx, pdy; /* size of precinct in X and Y */ int Prog; /* progression order */ int Comp; /* Component numbers */ int Layer; /* number of layer */ int Decomposition; /* number of decomposition */ int Main_head_end; /* Main header position */ int codestream_size; /* codestream's size */ 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 */ int num_max_tile_parts; /* Maximum number of tile-part */ info_tile_t *tile; /* information concerning tiles inside image */ } info_image_t; /* index struct */ #endif