[trunk] WIP: add basis for a new output management of the codestream information...
[openjpeg.git] / libopenjpeg / j2k.h
index 0b8f30d6cbeecca7af88c13fef41012907fe3ea0..51907004bc416d15ccbe81dc920e3fa3b10b7be8 100644 (file)
@@ -78,7 +78,9 @@ The functions in J2K.C have for goal to read/write the several parts of the code
 #define J2K_MS_CRG 0xff63      /**< CRG marker value */
 #define J2K_MS_COM 0xff64      /**< COM marker value */
 
-#ifdef TODO_MS
+#define J2K_MS_UNK 0           /**< UNKNOWN marker value */
+
+#ifdef TODO_MS /* FIXME */
 #define J2K_MS_CBD 0xff78      /**< CBD marker value */
 #define J2K_MS_MCC 0xff75      /**< MCC marker value */
 #define J2K_MS_MCT 0xff74      /**< MCT marker value */
@@ -115,7 +117,9 @@ typedef enum J2K_STATUS {
        J2K_STATE_TPH    = 0x0010, /**< the decoding process is in a tile part header */
        J2K_STATE_MT     = 0x0020, /**< the EOC marker has just been read */
        J2K_STATE_NEOC   = 0x0040, /**< the decoding process must not expect a EOC marker because the codestream is truncated */
-       J2K_STATE_ERR    = 0x0080  /**< the decoding process has encountered an error */
+
+       J2K_STATE_EOC    = 0x0100,  /**< the decoding process has encountered the EOC marker */
+       J2K_STATE_ERR    = 0x8000 /**< the decoding process has encountered an error (FIXME warning V1 = 0x0080)*/
 } J2K_STATUS;
 
 /* ----------------------------------------------------------------------- */
@@ -523,14 +527,30 @@ typedef struct opj_cp_v2
        OPJ_UINT32 tw;
        /** number of tiles in heigth */
        OPJ_UINT32 th;
-       /** packet header storage original buffer */
-       OPJ_BYTE *ppm_buffer;
+
+
+
+
        /** packet header store there for futur use in t2_decode_packet */
        OPJ_BYTE *ppm_data;
        /** size of the ppm_data*/
        OPJ_UINT32 ppm_len;
+       /** size of the ppm_data*/
+       OPJ_UINT32 ppm_data_read;
+
+       OPJ_BYTE *ppm_data_current;
+
+       /** packet header storage original buffer */
+       OPJ_BYTE *ppm_buffer;
+       /** pointer remaining on the first byte of the first header if ppm is used */
+       OPJ_BYTE *ppm_data_first;
        /** Number of bytes actually stored inside the ppm_data */
        OPJ_UINT32 ppm_data_size;
+       /** use in case of multiple marker PPM (number of info already store) */
+       OPJ_INT32 ppm_store;
+       /** use in case of multiple marker PPM (case on non-finished previous info) */
+       OPJ_INT32 ppm_previous;
+
        /** tile coding parameters */
        opj_tcp_v2_t *tcps;
        union
@@ -544,15 +564,15 @@ typedef struct opj_cp_v2
 /* UniPG>> */
 #ifdef USE_JPWL
        /** enables writing of EPC in MH, thus activating JPWL */
-       bool epc_on;
+       opj_bool epc_on;
        /** enables writing of EPB, in case of activated JPWL */
-       bool epb_on;
+       opj_bool epb_on;
        /** enables writing of ESD, in case of activated JPWL */
-       bool esd_on;
+       opj_bool esd_on;
        /** enables writing of informative techniques of ESD, in case of activated JPWL */
-       bool info_on;
+       opj_bool info_on;
        /** enables writing of RED, in case of activated JPWL */
-       bool red_on;
+       opj_bool red_on;
        /** error protection method for MH (0,1,16,32,37-128) */
        int hprot_MH;
        /** tile number of header protection specification (>=0) */
@@ -578,7 +598,7 @@ typedef struct opj_cp_v2
        /** sensitivity methods for TPHs (-1,0-7) */
        int sens_TPH[JPWL_MAX_NO_TILESPECS];
        /** enables JPWL correction at the decoder */
-       bool correct;
+       opj_bool correct;
        /** expected number of components at the decoder */
        int exp_comps;
        /** maximum number of tiles at the decoder */
@@ -725,6 +745,10 @@ JPEG-2000 codestream reader/writer
 */
 typedef struct opj_j2k_v2
 {
+       /* J2K codestream is decoded*/
+       opj_bool m_is_decoder;
+
+       /* FIXME DOC*/
        union
        {
                opj_j2k_dec_t m_decoder;
@@ -736,7 +760,8 @@ typedef struct opj_j2k_v2
        OPJ_UINT32 m_current_tile_number;
 
        /** pointer to the encoded / decoded image */
-       opj_image_t *m_image;
+       //opj_image_t *m_image;
+       opj_image_header_t* m_image_header;
 
        /** Coding parameters */
        opj_cp_v2_t m_cp;
@@ -748,13 +773,13 @@ typedef struct opj_j2k_v2
        struct opj_procedure_list *     m_validation_list;
 
        /** helper used to write the index file */
-       opj_codestream_info_t *cstr_info;
+       opj_codestream_index_t *cstr_index;
 
        /** the current tile coder/decoder **/
        struct opj_tcd_v2 *     m_tcd;
        //opj_tcd_v2_t *        m_tcd;
 
-       OPJ_UINT32 m_is_decoder : 1;
+
 
 }
 opj_j2k_v2_t;
@@ -783,6 +808,9 @@ Decoding parameters are returned in j2k->cp.
 @param parameters decompression parameters
 */
 void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
+
+void j2k_setup_decoder_v2(opj_j2k_v2_t *j2k, opj_dparameters_t *parameters);
+
 /**
 Decode an image from a JPEG-2000 codestream
 @param j2k J2K decompressor handle
@@ -805,6 +833,14 @@ Creates a J2K compression structure
 @return Returns a handle to a J2K compressor if successful, returns NULL otherwise
 */
 opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo);
+
+/**
+Creates a J2K compression structure
+@param cinfo Codec context info
+@return Returns a handle to a J2K compressor if successful, returns NULL otherwise
+*/
+opj_j2k_v2_t* j2k_create_compress_v2();
+
 /**
 Destroy a J2K compressor handle
 @param j2k J2K compressor handle to destroy
@@ -841,7 +877,7 @@ opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_code
  * Ends the decompression procedures and possibiliy add data to be read after the
  * codestream.
  */
-opj_bool j2k_end_decompress(opj_j2k_t *j2k, struct opj_stream_private *cio, struct opj_event_mgr * p_manager);
+opj_bool j2k_end_decompress(opj_j2k_v2_t *j2k, struct opj_stream_private *cio, struct opj_event_mgr * p_manager);
 
 /**
  * Reads a jpeg2000 codestream header structure.
@@ -852,18 +888,11 @@ opj_bool j2k_end_decompress(opj_j2k_t *j2k, struct opj_stream_private *cio, stru
  *
  * @return true if the box is valid.
  */
-opj_bool j2k_read_header(
-                                                               opj_j2k_v2_t *p_j2k,
-                                                               struct opj_image ** p_image,
-                                                               OPJ_INT32 * p_tile_x0,
-                                                               OPJ_INT32 * p_tile_y0,
-                                                               OPJ_UINT32 * p_tile_width,
-                                                               OPJ_UINT32 * p_tile_height,
-                                                               OPJ_UINT32 * p_nb_tiles_x,
-                                                               OPJ_UINT32 * p_nb_tiles_y,
-                                                               struct opj_stream_private *cio,
-                                                               struct opj_event_mgr * p_manager
-                                                       );
+opj_bool j2k_read_header(      struct opj_stream_private *p_stream,
+                                                       opj_j2k_v2_t* p_j2k,
+                                                       opj_image_header_t* p_img_header,
+                                                       struct opj_event_mgr* p_manager );
+
 
 /**
  * Destroys a jpeg2000 codec.
@@ -920,21 +949,67 @@ opj_bool j2k_read_tile_header (
  *
  * @return     true                    if the area could be set.
  */
-opj_bool j2k_set_decode_area(
-                       opj_j2k_v2_t *p_j2k,
-                       OPJ_INT32 p_start_x,
-                       OPJ_INT32 p_start_y,
-                       OPJ_INT32 p_end_x,
-                       OPJ_INT32 p_end_y,
-                       struct opj_event_mgr * p_manager
-                       );
+opj_bool j2k_set_decode_area(  opj_j2k_v2_t *p_j2k,
+                                                               OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
+                                                               OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
+                                                               struct opj_event_mgr * p_manager );
 
 /**
  * Creates a J2K decompression structure.
  *
  * @return a handle to a J2K decompressor if successful, NULL otherwise.
-*/
+ */
 opj_j2k_v2_t* j2k_create_decompress_v2();
 
 
+/**
+ * Dump some elements from the J2K decompression structure .
+ *
+ *@param p_j2k                         the jpeg2000 codec.
+ *@param flag                          flag to describe what elments are dump.
+ *@param out_stream                    output stream where dump the elements.
+ *
+*/
+void j2k_dump (opj_j2k_v2_t* p_j2k, OPJ_INT32 flag, FILE* out_stream);
+
+
+
+/**
+ * Dump an image header structure.
+ *
+ *@param img_header                    the image header to dump.
+ *@param dev_dump_flag         flag to describe if we are in the case of this function is use outside j2k_dump function
+ *@param out_stream                    output stream where dump the elements.
+ */
+void j2k_dump_image_header(opj_image_header_t* img_header, opj_bool dev_dump_flag, FILE* out_stream);
+
+/**
+ * Dump a component image header structure.
+ *
+ *@param comp_header           the component image header to dump.
+ *@param dev_dump_flag         flag to describe if we are in the case of this function is use outside j2k_dump function
+ *@param out_stream                    output stream where dump the elements.
+ */
+void j2k_dump_image_comp_header(opj_image_comp_header_t* comp_header, opj_bool dev_dump_flag, FILE* out_stream);
+
+/**
+ * Get the codestream info from a JPEG2000 codec.
+ *
+ *@param       p_j2k                           the component image header to dump.
+ *
+ *@return      the codestream information extract from the jpg2000 codec
+ */
+opj_codestream_info_v2_t* j2k_get_cstr_info(opj_j2k_v2_t* p_j2k);
+
+/**
+ * Get the codestream index from a JPEG2000 codec.
+ *
+ *@param       p_j2k                           the component image header to dump.
+ *
+ *@return      the codestream index extract from the jpg2000 codec
+ */
+opj_codestream_index_t* j2k_get_cstr_index(opj_j2k_v2_t* p_j2k);
+
+
+
 #endif /* __J2K_H */