# gdcm_j2k.h

Go to the documentation of this file.

    00001 /*
    00002  * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
    00003  * Copyright (c) 2002-2007, Professor Benoit Macq
    00004  * Copyright (c) 2001-2003, David Janssens
    00005  * Copyright (c) 2002-2003, Yannick Verschueren
    00006  * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
    00007  * Copyright (c) 2005, Herve Drolon, FreeImage Team
    00008  * Copyright (c) 2006-2007, Parvatha Elangovan
    00009  * All rights reserved.
    00010  *
    00011  * Redistribution and use in source and binary forms, with or without
    00012  * modification, are permitted provided that the following conditions
    00013  * are met:
    00014  * 1. Redistributions of source code must retain the above copyright
    00015  *    notice, this list of conditions and the following disclaimer.
    00016  * 2. Redistributions in binary form must reproduce the above copyright
    00017  *    notice, this list of conditions and the following disclaimer in the
    00018  *    documentation and/or other materials provided with the distribution.
    00019  *
    00020  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
    00021  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    00022  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    00023  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    00024  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    00025  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    00026  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    00027  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    00028  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    00029  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    00030  * POSSIBILITY OF SUCH DAMAGE.
    00031  */
    00032 #ifndef __J2K_H
    00033 #define __J2K_H
    00034
    00043
    00044 #define J2K_CP_CSTY_PRT 0x01
    00045 #define J2K_CP_CSTY_SOP 0x02
    00046 #define J2K_CP_CSTY_EPH 0x04
    00047 #define J2K_CCP_CSTY_PRT 0x01
    00048 #define J2K_CCP_CBLKSTY_LAZY 0x01
    00049 #define J2K_CCP_CBLKSTY_RESET 0x02
    00050 #define J2K_CCP_CBLKSTY_TERMALL 0x04
    00051 #define J2K_CCP_CBLKSTY_VSC 0x08
    00052 #define J2K_CCP_CBLKSTY_PTERM 0x10
    00053 #define J2K_CCP_CBLKSTY_SEGSYM 0x20
    00054 #define J2K_CCP_QNTSTY_NOQNT 0
    00055 #define J2K_CCP_QNTSTY_SIQNT 1
    00056 #define J2K_CCP_QNTSTY_SEQNT 2
    00057
    00058 /* ----------------------------------------------------------------------- */
    00059
    00060 #define J2K_MS_SOC 0xff4f
    00061 #define J2K_MS_SOT 0xff90
    00062 #define J2K_MS_SOD 0xff93
    00063 #define J2K_MS_EOC 0xffd9
    00064 #define J2K_MS_SIZ 0xff51
    00065 #define J2K_MS_COD 0xff52
    00066 #define J2K_MS_COC 0xff53
    00067 #define J2K_MS_RGN 0xff5e
    00068 #define J2K_MS_QCD 0xff5c
    00069 #define J2K_MS_QCC 0xff5d
    00070 #define J2K_MS_POC 0xff5f
    00071 #define J2K_MS_TLM 0xff55
    00072 #define J2K_MS_PLM 0xff57
    00073 #define J2K_MS_PLT 0xff58
    00074 #define J2K_MS_PPM 0xff60
    00075 #define J2K_MS_PPT 0xff61
    00076 #define J2K_MS_SOP 0xff91
    00077 #define J2K_MS_EPH 0xff92
    00078 #define J2K_MS_CRG 0xff63
    00079 #define J2K_MS_COM 0xff64
    00080 /* UniPG>> */
    00081 #ifdef USE_JPWL
    00082 #define J2K_MS_EPC 0xff68
    00083 #define J2K_MS_EPB 0xff66
    00084 #define J2K_MS_ESD 0xff67
    00085 #define J2K_MS_RED 0xff69
    00086 #endif /* USE_JPWL */
    00087 #ifdef USE_JPSEC
    00088 #define J2K_MS_SEC 0xff65
    00089 #define J2K_MS_INSEC 0xff94
    00090 #endif /* USE_JPSEC */
    00091 /* <<UniPG */
    00092
    00093
    00094 /* ----------------------------------------------------------------------- */
    00095
    00100 typedef enum J2K_STATUS {
    00101   J2K_STATE_MHSOC  = 0x0001,
    00102   J2K_STATE_MHSIZ  = 0x0002,
    00103   J2K_STATE_MH     = 0x0004,
    00104   J2K_STATE_TPHSOT = 0x0008,
    00105   J2K_STATE_TPH    = 0x0010,
    00106   J2K_STATE_MT     = 0x0020,
    00107   J2K_STATE_NEOC   = 0x0040,
    00108   J2K_STATE_ERR    = 0x0080
    00109 } J2K_STATUS;
    00110
    00111 /* ----------------------------------------------------------------------- */
    00112
    00116 typedef enum T2_MODE {
    00117   THRESH_CALC = 0,
    00118   FINAL_PASS = 1
    00119 }J2K_T2_MODE;
    00120
    00124 typedef struct opj_stepsize {
    00126   int expn;
    00128   int mant;
    00129 } opj_stepsize_t;
    00130
    00134 typedef struct opj_tccp {
    00136   int csty;
    00138   int numresolutions;
    00140   int cblkw;
    00142   int cblkh;
    00144   int cblksty;
    00146   int qmfbid;
    00148   int qntsty;
    00150   opj_stepsize_t stepsizes[J2K_MAXBANDS];
    00152   int numgbits;
    00154   int roishift;
    00156   int prcw[J2K_MAXRLVLS];
    00158   int prch[J2K_MAXRLVLS];
    00159 } opj_tccp_t;
    00160
    00166 typedef struct opj_tcp {
    00168   int first;
    00170   int csty;
    00172   OPJ_PROG_ORDER prg;
    00174   int numlayers;
    00176   int mct;
    00178   float rates[100];
    00180   int numpocs;
    00182   int POC;
    00184   opj_poc_t pocs[32];
    00186   unsigned char *ppt_data;
    00188   unsigned char *ppt_data_first;
    00190   int ppt;
    00192   int ppt_store;
    00194   int ppt_len;
    00196   float distoratio[100];
    00198   opj_tccp_t *tccps;
    00199 } opj_tcp_t;
    00200
    00204 typedef struct opj_cp {
    00206   OPJ_CINEMA_MODE cinema;
    00208   int max_comp_size;
    00210   int img_size;
    00212   OPJ_RSIZ_CAPABILITIES rsiz;
    00214   char tp_on;
    00216   char tp_flag;
    00218   int tp_pos;
    00220   int disto_alloc;
    00222   int fixed_alloc;
    00224   int fixed_quality;
    00226   int reduce;
    00228   int layer;
    00230   OPJ_LIMIT_DECODING limit_decoding;
    00232   int tx0;
    00234   int ty0;
    00236   int tdx;
    00238   int tdy;
    00240   char *comment;
    00242   int tw;
    00244   int th;
    00246   int *tileno;
    00248   int tileno_size;
    00250   unsigned char *ppm_data;
    00252   unsigned char *ppm_data_first;
    00254   int ppm;
    00256   int ppm_store;
    00258   int ppm_previous;
    00260   int ppm_len;
    00262   opj_tcp_t *tcps;
    00264   int *matrice;
    00265 /* UniPG>> */
    00266 #ifdef USE_JPWL
    00267
    00268   bool epc_on;
    00270   bool epb_on;
    00272   bool esd_on;
    00274   bool info_on;
    00276   bool red_on;
    00278   int hprot_MH;
    00280   int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
    00282   int hprot_TPH[JPWL_MAX_NO_TILESPECS];
    00284   int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
    00286   int pprot_packno[JPWL_MAX_NO_PACKSPECS];
    00288   int pprot[JPWL_MAX_NO_PACKSPECS];
    00290   int sens_size;
    00292   int sens_addr;
    00294   int sens_range;
    00296   int sens_MH;
    00298   int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
    00300   int sens_TPH[JPWL_MAX_NO_TILESPECS];
    00302   bool correct;
    00304   int exp_comps;
    00306   int max_tiles;
    00307 #endif /* USE_JPWL */
    00308 /* <<UniPG */
    00309 } opj_cp_t;
    00310
    00314 typedef struct opj_j2k {
    00316   opj_common_ptr cinfo;
    00317
    00319   int state;
    00321   int curtileno;
    00323   int tp_num;
    00325   int cur_tp_num;
    00327   int *cur_totnum_tp;
    00332   int tlm_start;
    00335   int totnum_tp;
    00340   unsigned char *eot;
    00345   int sot_start;
    00346   int sod_start;
    00351   int pos_correction;
    00353   unsigned char **tile_data;
    00355   int *tile_len;
    00360   opj_tcp_t *default_tcp;
    00362   opj_image_t *image;
    00364   opj_cp_t *cp;
    00366   opj_codestream_info_t *cstr_info;
    00368   opj_cio_t *cio;
    00369 } opj_j2k_t;
    00370
    00373 /* ----------------------------------------------------------------------- */
    00379 opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo);
    00384 void j2k_destroy_decompress(opj_j2k_t *j2k);
    00391 void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
    00399 opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
    00407 opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
    00413 opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo);
    00418 void j2k_destroy_compress(opj_j2k_t *j2k);
    00426 void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image);
    00430 char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order);
    00439 bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
    00440
    00441 /* ----------------------------------------------------------------------- */
    00445
    00446 #endif /* __J2K_H */