[trunk] Speed-up opj_int_fix_mul by removing unneeded operation
[openjpeg.git] / src / lib / openjp2 / tcd.h
index ed98f7ead5d26db177a9ae65fff964c232e962e7..9bef0fe7d9c3e11fe795b80bc37682f21ad6c44b 100644 (file)
@@ -1,10 +1,18 @@
 /*
- * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2007, Professor Benoit Macq
+ * The copyright in this software is being made available under the 2-clauses 
+ * BSD License, included below. This software may be subject to other third 
+ * party and contributor rights, including patent rights, and no such rights
+ * are granted under this license.
+ *
+ * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -79,25 +87,27 @@ typedef struct opj_tcd_layer {
 FIXME DOC
 */
 typedef struct opj_tcd_cblk_enc {
-       OPJ_BYTE* data;                                 /* Data */
-       opj_tcd_layer_t* layers;                /* layer information */
-       opj_tcd_pass_t* passes;         /* information about the passes */
-       OPJ_INT32 x0, y0, x1, y1;               /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
+       OPJ_BYTE* data;               /* Data */
+       opj_tcd_layer_t* layers;      /* layer information */
+       opj_tcd_pass_t* passes;       /* information about the passes */
+       OPJ_INT32 x0, y0, x1, y1;     /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
        OPJ_UINT32 numbps;
        OPJ_UINT32 numlenbits;
-       OPJ_UINT32 numpasses;                   /* number of pass already done for the code-blocks */
-       OPJ_UINT32 numpassesinlayers;   /* number of passes in the layer */
-       OPJ_UINT32 totalpasses;                 /* total number of passes */
+       OPJ_UINT32 data_size;         /* Size of allocated data buffer */
+       OPJ_UINT32 numpasses;         /* number of pass already done for the code-blocks */
+       OPJ_UINT32 numpassesinlayers; /* number of passes in the layer */
+       OPJ_UINT32 totalpasses;       /* total number of passes */
 } opj_tcd_cblk_enc_t;
 
 
 typedef struct opj_tcd_cblk_dec {
        OPJ_BYTE * data;                                /* Data */
        opj_tcd_seg_t* segs;                    /* segments information */
-       OPJ_INT32 x0, y0, x1, y1;               /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
+       OPJ_INT32 x0, y0, x1, y1;               /* position of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
        OPJ_UINT32 numbps;
        OPJ_UINT32 numlenbits;
-       OPJ_UINT32 len;                                 /* length */
+       OPJ_UINT32 data_max_size;               /* Size of allocated data buffer */
+       OPJ_UINT32 data_current_size;   /* Size of used data buffer */
        OPJ_UINT32 numnewpasses;                /* number of pass added to the code-blocks */
        OPJ_UINT32 numsegs;                             /* number of segments */
        OPJ_UINT32 real_num_segs;
@@ -113,6 +123,7 @@ typedef struct opj_tcd_precinct {
        union{                                                  /* code-blocks information */
                opj_tcd_cblk_enc_t* enc;
                opj_tcd_cblk_dec_t* dec;
+               void*               blocks;
        } cblks;
        OPJ_UINT32 block_size;                  /* size taken by cblks (in bytes) */
        opj_tgt_tree_t *incltree;           /* inclusion tree */
@@ -146,14 +157,16 @@ FIXME DOC
 */
 typedef struct opj_tcd_tilecomp
 {
-       OPJ_INT32 x0, y0, x1, y1;                               /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
-       OPJ_UINT32 numresolutions;                              /* number of resolutions level */
-       OPJ_UINT32 minimum_num_resolutions;             /* number of resolutions level to decode (at max)*/
-       opj_tcd_resolution_t *resolutions;      /* resolutions information */
-       OPJ_UINT32 resolutions_size;                    /* size of data for resolutions (in bytes) */
-       OPJ_INT32 *data;                                                /* data of the component */
-       OPJ_UINT32 data_size;                                   /* size of the data of the component */
-       OPJ_INT32 numpix;                                               /* add fixed_quality */
+       OPJ_INT32 x0, y0, x1, y1;           /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
+       OPJ_UINT32 numresolutions;          /* number of resolutions level */
+       OPJ_UINT32 minimum_num_resolutions; /* number of resolutions level to decode (at max)*/
+       opj_tcd_resolution_t *resolutions;  /* resolutions information */
+       OPJ_UINT32 resolutions_size;        /* size of data for resolutions (in bytes) */
+       OPJ_INT32 *data;                    /* data of the component */
+       OPJ_BOOL  ownsData;                 /* if true, then need to free after usage, otherwise do not free */
+       OPJ_UINT32 data_size_needed;        /* we may either need to allocate this amount of data, or re-use image data and ignore this value */
+       OPJ_UINT32 data_size;               /* size of the data of the component */
+       OPJ_INT32 numpix;                   /* add fixed_quality */
 } opj_tcd_tilecomp_t;
 
 
@@ -223,7 +236,7 @@ Create a new TCD handle
 @param p_is_decoder FIXME DOC
 @return Returns a new TCD handle if successful returns NULL otherwise
 */
-opj_tcd_t* opj_tcd_create(opj_bool p_is_decoder);
+opj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder);
 
 /**
 Destroy a previously created TCD handle
@@ -239,7 +252,7 @@ void opj_tcd_destroy(opj_tcd_t *tcd);
  *
  * @return true if the encoding values could be set (false otherwise).
 */
-opj_bool opj_tcd_init( opj_tcd_t *p_tcd,
+OPJ_BOOL opj_tcd_init( opj_tcd_t *p_tcd,
                                                opj_image_t * p_image,
                                                opj_cp_t * p_cp );
 
@@ -252,7 +265,7 @@ opj_bool opj_tcd_init(      opj_tcd_t *p_tcd,
  *
  * @return     true if the remaining data is sufficient.
  */
-opj_bool opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no);
+OPJ_BOOL opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no);
 
 void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final);
 
@@ -263,7 +276,7 @@ void opj_tcd_makelayer(     opj_tcd_t *tcd,
                                                OPJ_FLOAT64 thresh,
                                                OPJ_UINT32 final);
 
-opj_bool opj_tcd_rateallocate( opj_tcd_t *tcd,
+OPJ_BOOL opj_tcd_rateallocate( opj_tcd_t *tcd,
                                                                OPJ_BYTE *dest,
                                                                OPJ_UINT32 * p_data_written,
                                                                OPJ_UINT32 len,
@@ -284,7 +297,7 @@ OPJ_UINT32 opj_tcd_get_decoded_tile_size (opj_tcd_t *p_tcd );
  * @param      p_cstr_info             Codestream information structure
  * @return  true if the coding is successfull.
 */
-opj_bool opj_tcd_encode_tile(   opj_tcd_t *p_tcd,
+OPJ_BOOL opj_tcd_encode_tile(   opj_tcd_t *p_tcd,
                                                            OPJ_UINT32 p_tile_no,
                                                            OPJ_BYTE *p_dest,
                                                            OPJ_UINT32 * p_data_written,
@@ -300,7 +313,7 @@ Decode a tile from a buffer into a raw image
 @param tileno Number that identifies one of the tiles to be decoded
 @param cstr_info  FIXME DOC
 */
-opj_bool opj_tcd_decode_tile(   opj_tcd_t *tcd,
+OPJ_BOOL opj_tcd_decode_tile(   opj_tcd_t *tcd,
                                                            OPJ_BYTE *src,
                                                            OPJ_UINT32 len,
                                                            OPJ_UINT32 tileno,
@@ -310,7 +323,7 @@ opj_bool opj_tcd_decode_tile(   opj_tcd_t *tcd,
 /**
  * Copies tile data from the system onto the given memory block.
  */
-opj_bool opj_tcd_update_tile_data (    opj_tcd_t *p_tcd,
+OPJ_BOOL opj_tcd_update_tile_data (    opj_tcd_t *p_tcd,
                                                                    OPJ_BYTE * p_dest,
                                                                    OPJ_UINT32 p_dest_length );
 
@@ -327,16 +340,23 @@ OPJ_UINT32 opj_tcd_get_encoded_tile_size ( opj_tcd_t *p_tcd );
  *
  * @return true if the encoding values could be set (false otherwise).
 */
-opj_bool opj_tcd_init_encode_tile (    opj_tcd_t *p_tcd,
+OPJ_BOOL opj_tcd_init_encode_tile (    opj_tcd_t *p_tcd,
                                                                    OPJ_UINT32 p_tile_no );
 
 /**
  * Copies tile data from the given memory block onto the system.
  */
-opj_bool opj_tcd_copy_tile_data (opj_tcd_t *p_tcd,
+OPJ_BOOL opj_tcd_copy_tile_data (opj_tcd_t *p_tcd,
                                  OPJ_BYTE * p_src,
                                  OPJ_UINT32 p_src_length );
 
+/**
+ * Allocates tile component data
+ *
+ *
+ */
+OPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec);
+
 /* ----------------------------------------------------------------------- */
 /*@}*/