Bug fixed by Sylvain Munaut. Change in the reading of the POC marker. Since COD/COC...
[openjpeg.git] / libopenjpeg / openjpeg.h
index 1e823e0a7f6cec26e8a083ac9be72056b4ea8111..d866cc6d513c1160dd4273b5d6ed77bc2c5aeec9 100644 (file)
@@ -1,9 +1,11 @@
  /*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herv Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2006-2007, Parvatha Elangovan
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,7 +32,7 @@
 #ifndef OPENJPEG_H
 #define OPENJPEG_H
 
-#define OPENJPEG_VERSION "1.1.0"
+#define OPENJPEG_VERSION "1.1.1"
 
 /* 
 ==========================================================
@@ -89,15 +91,12 @@ braindamage below.
 ==========================================================
 */
 
-#ifndef MAX_PATH
-#define MAX_PATH 260   /**< Maximum allowed size for filenames */
-#endif /* MAX_PATH */
+#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */
 
 #define J2K_MAXRLVLS 33                                        /**< Number of maximum resolution level authorized */
 #define J2K_MAXBANDS (3*J2K_MAXRLVLS-2)        /**< Number of maximum sub-band linked to number of resolution level */
 
 /* UniPG>> */
-#ifdef USE_JPWL
 #define JPWL_MAX_NO_TILESPECS  16 /**< Maximum number of tile parts expected by JPWL: increase at your will */
 #define JPWL_MAX_NO_PACKSPECS  16 /**< Maximum number of packet parts expected by JPWL: increase at your will */
 #define JPWL_MAX_NO_MARKERS    512 /**< Maximum number of JPWL markers: increase at your will */
@@ -105,7 +104,6 @@ braindamage below.
 #define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */
 #define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */
 #define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */
-#endif /* USE_JPWL */
 /* <<UniPG */
 
 /* 
@@ -113,8 +111,28 @@ braindamage below.
    enum definitions
 ==========================================================
 */
+/** 
+Rsiz Capabilities
+*/
+typedef enum RSIZ_CAPABILITIES {
+       STD_RSIZ = 0,           /** Standard JPEG2000 profile*/
+       CINEMA2K = 3,           /** Profile name for a 2K image*/
+       CINEMA4K = 4            /** Profile name for a 4K image*/
+} OPJ_RSIZ_CAPABILITIES;
 
-/** Progression order */
+/** 
+Digital cinema operation mode 
+*/
+typedef enum CINEMA_MODE {
+       OFF = 0,                                        /** Not Digital Cinema*/
+       CINEMA2K_24 = 1,        /** 2K Digital Cinema at 24 fps*/
+       CINEMA2K_48 = 2,        /** 2K Digital Cinema at 48 fps*/
+       CINEMA4K_24 = 3         /** 4K Digital Cinema at 24 fps*/
+}OPJ_CINEMA_MODE;
+
+/** 
+Progression order 
+*/
 typedef enum PROG_ORDER {
        PROG_UNKNOWN = -1,      /**< place-holder */
        LRCP = 0,               /**< layer-resolution-component-precinct order */
@@ -144,6 +162,15 @@ typedef enum CODEC_FORMAT {
        CODEC_JP2 = 2           /**< JPEG-2000 file format : read/write */
 } OPJ_CODEC_FORMAT;
 
+/** 
+Limit decoding to certain portions of the codestream. 
+*/
+typedef enum LIMIT_DECODING {
+       NO_LIMITATION = 0,                                /**< No limitation for the decoding. The entire codestream will de decoded */
+       LIMIT_TO_MAIN_HEADER = 1,               /**< The decoding is limited to the Main Header */
+       DECODE_ALL_BUT_PACKETS = 2      /**< Decode everything except the JPEG 2000 packets */
+} OPJ_LIMIT_DECODING;
+
 /* 
 ==========================================================
    event manager typedef definitions
@@ -186,11 +213,28 @@ typedef struct opj_event_mgr {
 Progression order changes
 */
 typedef struct opj_poc {
-  int resno0, compno0;
-  int layno1, resno1, compno1;
-  OPJ_PROG_ORDER prg;
-  int tile;
-  char progorder[4];
+       /** Resolution num start, Component num start, given by POC */
+       int resno0, compno0;
+       /** Layer num end,Resolution num end, Component num end, given by POC */
+       int layno1, resno1, compno1;
+       /** Layer num start,Precinct num start, Precinct num end */
+       int layno0, precno0, precno1;
+       /** Progression order enum*/
+       OPJ_PROG_ORDER prg1,prg;
+       /** Progression order string*/
+       char progorder[5];
+       /** Tile number */
+       int tile;
+       /** Start and end values for Tile width and height*/
+       int tx0,tx1,ty0,ty1;
+       /** Start value, initialised in pi_initialise_encode*/
+       int layS, resS, compS, prcS;
+       /** End value, initialised in pi_initialise_encode */
+       int layE, resE, compE, prcE;
+       /** Start and end values of Tile width and height, initialised in pi_initialise_encode*/
+       int txS,txE,tyS,tyE,dx,dy;
+       /** Temporary values for Tile parts, initialised in pi_create_encode */
+       int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t;
 } opj_poc_t;
 
 /**
@@ -255,13 +299,13 @@ typedef struct opj_cparameters {
        /**@name command line encoder parameters (not used inside the library) */
        /*@{*/
        /** input file name */
-       char infile[MAX_PATH];
+       char infile[OPJ_PATH_LEN];
        /** output file name */
-       char outfile[MAX_PATH];
+       char outfile[OPJ_PATH_LEN];
        /** creation of an index file, default to 0 (false) */
        int index_on;
        /** index file name */
-       char index[MAX_PATH];
+       char index[OPJ_PATH_LEN];
        /** subimage encoding: origin image offset in x direction */
        int image_offset_x0;
        /** subimage encoding: origin image offset in y direction */
@@ -270,14 +314,13 @@ typedef struct opj_cparameters {
        int subsampling_dx;
        /** subsampling value for dy */
        int subsampling_dy;
-       /** input file format 0: PGX, 1: PxM, 2: BMP */
+       /** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/
        int decod_format;
        /** output file format 0: J2K, 1: JP2, 2: JPT */
        int cod_format;
        /*@}*/
 
 /* UniPG>> */
-#ifdef USE_JPWL
        /**@name JPWL encoding parameters */
        /*@{*/
        /** enables writing of EPC in MH, thus activating JPWL */
@@ -307,9 +350,20 @@ typedef struct opj_cparameters {
        /** sensitivity methods for TPHs (-1=no,0-7) */
        int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS];
        /*@}*/
-#endif /* USE_JPWL */
 /* <<UniPG */
 
+       /** Digital Cinema compliance 0-not compliant, 1-compliant*/
+       OPJ_CINEMA_MODE cp_cinema;
+       /** Maximum rate for each component. If == 0, component size limitation is not considered */
+       int max_comp_size;
+       /** Profile name*/
+       OPJ_RSIZ_CAPABILITIES cp_rsiz;
+       /** Tile part generation*/
+       char tp_on;
+       /** Flag for Tile part generation*/
+       char tp_flag;
+       /** MCT (multiple component transform) */
+       char tcp_mct;
 } opj_cparameters_t;
 
 /**
@@ -335,9 +389,9 @@ typedef struct opj_dparameters {
        /**@name command line encoder parameters (not used inside the library) */
        /*@{*/
        /** input file name */
-       char infile[MAX_PATH];
+       char infile[OPJ_PATH_LEN];
        /** output file name */
-       char outfile[MAX_PATH];
+       char outfile[OPJ_PATH_LEN];
        /** input file format 0: J2K, 1: JP2, 2: JPT */
        int decod_format;
        /** output file format 0: PGX, 1: PxM, 2: BMP */
@@ -345,18 +399,25 @@ typedef struct opj_dparameters {
        /*@}*/
 
 /* UniPG>> */
-#ifdef USE_JPWL
        /**@name JPWL decoding parameters */
        /*@{*/
        /** activates the JPWL correction capabilities */
        bool jpwl_correct;
        /** expected number of components */
-       bool jpwl_exp_comps;
+       int jpwl_exp_comps;
        /** maximum number of tiles */
-       bool jpwl_max_tiles;
+       int jpwl_max_tiles;
        /*@}*/
-#endif /* USE_JPWL */
 /* <<UniPG */
+
+       /** 
+       Specify whether the decoding should be done on the entire codestream, or be limited to the main header
+       Limiting the decoding to the main header makes it possible to extract the characteristics of the codestream
+       if == NO_LIMITATION, the entire codestream is decoded; 
+       if == LIMIT_TO_MAIN_HEADER, only the main header is decoded; 
+       */
+       OPJ_LIMIT_DECODING cp_limit_decoding;
+
 } opj_dparameters_t;
 
 /** Common fields between JPEG-2000 compression and decompression master structs. */
@@ -367,7 +428,8 @@ typedef struct opj_dparameters {
        bool is_decompressor;           /**< So common code can tell which is which */\
        OPJ_CODEC_FORMAT codec_format;  /**< selected codec */\
        void *j2k_handle;                       /**< pointer to the J2K codec */\
-       void *jp2_handle                        /**< pointer to the JP2 codec */
+       void *jp2_handle;                       /**< pointer to the JP2 codec */\
+       void *mj2_handle                        /**< pointer to the MJ2 codec */
        
 /* Routines that are to be used by both halves of the library are declared
  * to receive a pointer to this structure.  There are no actual instances of