summaryrefslogtreecommitdiff
path: root/libopenjpeg3d/tcd.h
diff options
context:
space:
mode:
Diffstat (limited to 'libopenjpeg3d/tcd.h')
-rwxr-xr-xlibopenjpeg3d/tcd.h334
1 files changed, 334 insertions, 0 deletions
diff --git a/libopenjpeg3d/tcd.h b/libopenjpeg3d/tcd.h
new file mode 100755
index 00000000..52504d10
--- /dev/null
+++ b/libopenjpeg3d/tcd.h
@@ -0,0 +1,334 @@
+/*
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
+ * 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.
+ */
+#ifndef __TCD_H
+#define __TCD_H
+/**
+@file tcd.h
+@brief Implementation of a tile coder/decoder (TCD)
+
+The functions in TCD.C have for goal to encode or decode each tile independently from
+each other. The functions in TCD.C are used by some function in JP3D.C.
+*/
+
+/** @defgroup TCD TCD - Implementation of a tile coder/decoder */
+/*@{*/
+
+/**
+Tile coder/decoder: segment instance
+*/
+typedef struct opj_tcd_seg {
+/** Number of passes in the segment */
+ int numpasses;
+/** Length of information */
+ int len;
+/** Data */
+ unsigned char *data;
+/** Number of passes posible for the segment */
+ int maxpasses;
+/** Number of passes added to the segment */
+ int numnewpasses;
+/** New length after inclusion of segments */
+ int newlen;
+} opj_tcd_seg_t;
+
+/**
+Tile coder/decoder: pass instance
+*/
+typedef struct opj_tcd_pass {
+/** Rate obtained in the pass*/
+ int rate;
+/** Distorsion obtained in the pass*/
+ double distortiondec;
+ int term;
+/** Length of information */
+ int len;
+} opj_tcd_pass_t;
+
+/**
+Tile coder/decoder: layer instance
+*/
+typedef struct opj_tcd_layer {
+/** Number of passes in the layer */
+ int numpasses;
+/** Length of information */
+ int len;
+/** Distortion within layer */
+ double disto; /* add for index (Cfr. Marcela) */
+ unsigned char *data; /* data */
+} opj_tcd_layer_t;
+
+/**
+Tile coder/decoder: codeblock instance
+*/
+typedef struct opj_tcd_cblk {
+/** Dimension of the code-blocks : left upper corner (x0, y0, z0) */
+ int x0, y0, z0;
+/** Dimension of the code-blocks : right low corner (x1,y1,z1) */
+ int x1, y1, z1;
+/** Number of bits per simbol in codeblock */
+ int numbps;
+ int numlenbits;
+ int len; /* length */
+/** Number of pass already done for the code-blocks */
+ int numpasses;
+/** number of pass added to the code-blocks */
+ int numnewpasses;
+/** Number of segments */
+ int numsegs;
+/** Segments informations */
+ opj_tcd_seg_t segs[100];
+/** Number of passes in the layer */
+ int numpassesinlayers;
+/** Layer information */
+ opj_tcd_layer_t layers[100];
+/** Total number of passes */
+ int totalpasses;
+/** Information about the passes */
+ opj_tcd_pass_t passes[100];
+/* Data */
+ unsigned char data[524288];
+ //unsigned char *data;
+} opj_tcd_cblk_t;
+
+/**
+Tile coder/decoder: precint instance
+*/
+typedef struct opj_tcd_precinct {
+/** Dimension of the precint : left upper corner (x0, y0, z0) */
+ int x0, y0, z0;
+/** Dimension of the precint : right low corner (x1,y1,z1) */
+ int x1, y1, z1;
+/** Number of codeblocks in precinct in width and heigth and length*/
+ int cblkno[3];
+/** Information about the codeblocks */
+ opj_tcd_cblk_t *cblks;
+/** Inclusion tree */
+ opj_tgt_tree_t *incltree;
+/** Missing MSBs tree */
+ opj_tgt_tree_t *imsbtree;
+} opj_tcd_precinct_t;
+
+/**
+Tile coder/decoder: subband instance
+*/
+typedef struct opj_tcd_band {
+/** Dimension of the subband : left upper corner (x0, y0, z0) */
+ int x0, y0, z0;
+/** Dimension of the subband : right low corner (x1,y1,z1) */
+ int x1, y1, z1;
+/** Information about the precints */
+ opj_tcd_precinct_t *precincts; /* precinct information */
+/** Number of bits per symbol in band */
+ int numbps;
+/** Quantization stepsize associated */
+ float stepsize;
+/** Band orientation (O->LLL,...,7->HHH) */
+ int bandno;
+} opj_tcd_band_t;
+
+/**
+Tile coder/decoder: resolution instance
+*/
+typedef struct opj_tcd_resolution {
+/** Dimension of the resolution level : left upper corner (x0, y0, z0) */
+ int x0, y0, z0;
+/** Dimension of the resolution level : right low corner (x1,y1,z1) */
+ int x1, y1, z1;
+/** Number of precints in each dimension for the resolution level */
+ int prctno[3];
+/** Number of subbands for the resolution level */
+ int numbands;
+/** Subband information */
+ opj_tcd_band_t *bands;
+} opj_tcd_resolution_t;
+
+/**
+Tile coder/decoder: component instance
+*/
+typedef struct opj_tcd_tilecomp {
+/** Dimension of the component : left upper corner (x0, y0, z0) */
+ int x0, y0, z0;
+/** Dimension of the component : right low corner (x1,y1,z1) */
+ int x1, y1, z1;
+/** Number of resolutions level if DWT transform*/
+ int numresolution[3];
+/** Resolution information */
+ opj_tcd_resolution_t *resolutions;
+/** Data of the component */
+ int *data;
+/** Fixed_quality related */
+ int nbpix;
+/** Number of bits per voxel in component */
+ int bpp;
+} opj_tcd_tilecomp_t;
+
+/**
+Tile coder/decoder: tile instance
+*/
+typedef struct opj_tcd_tile {
+/** Dimension of the tile : left upper corner (x0, y0, z0) */
+ int x0, y0, z0;
+/** Dimension of the tile : right low corner (x1,y1,z1) */
+ int x1, y1, z1;
+/** Number of components in tile */
+ int numcomps;
+/** Components information */
+ opj_tcd_tilecomp_t *comps;
+/** Fixed_quality related : no of bytes of data*/
+ int nbpix;
+/** Fixed_quality related : distortion achieved in tile */
+ double distotile;
+/** Fixed_quality related : distortion achieved in each layer */
+ double distolayer[100];
+} opj_tcd_tile_t;
+
+/**
+Tile coder/decoder: volume instance
+*/
+typedef struct opj_tcd_volume {
+/** Number of tiles in width and heigth and length */
+ int tw, th, tl;
+/** Tiles information */
+ opj_tcd_tile_t *tiles;
+} opj_tcd_volume_t;
+
+/**
+Tile coder/decoder
+*/
+typedef struct opj_tcd {
+/** Codec context */
+ opj_common_ptr cinfo;
+/** Volume information */
+ opj_volume_t *volume;
+/** Coding parameters */
+ opj_cp_t *cp;
+/** Coding/decoding parameters common to all tiles */
+ opj_tcp_t *tcp;
+/** Info on each volume tile */
+ opj_tcd_volume_t *tcd_volume;
+/** Pointer to the current encoded/decoded tile */
+ opj_tcd_tile_t *tcd_tile;
+/** Current encoded/decoded tile */
+ int tcd_tileno;
+
+ /**@name working variables */
+ /*@{*/
+ opj_tcd_tile_t *tile;
+ opj_tcd_tilecomp_t *tilec;
+ opj_tcd_resolution_t *res;
+ opj_tcd_band_t *band;
+ opj_tcd_precinct_t *prc;
+ opj_tcd_cblk_t *cblk;
+ /*@}*/
+} opj_tcd_t;
+
+/** @name Funciones generales */
+/*@{*/
+/* ----------------------------------------------------------------------- */
+
+/**
+Dump the content of a tcd structure
+*/
+void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_volume_t *img);
+/**
+Create a new TCD handle
+@param cinfo Codec context info
+@return Returns a new TCD handle if successful returns NULL otherwise
+*/
+opj_tcd_t* tcd_create(opj_common_ptr cinfo);
+/**
+Destroy a previously created TCD handle
+@param tcd TCD handle to destroy
+*/
+void tcd_destroy(opj_tcd_t *tcd);
+/**
+Initialize the tile coder (allocate the memory)
+@param tcd TCD handle
+@param volume Raw volume
+@param cp Coding parameters
+@param curtileno Number that identifies the tile that will be encoded
+*/
+void tcd_malloc_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno);
+/**
+Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode)(for 3D-DWT)
+@param tcd TCD handle
+@param volume Raw volume
+@param cp Coding parameters
+@param curtileno Number that identifies the tile that will be encoded
+*/
+void tcd_init_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno);
+/**
+Free the memory allocated for encoding
+@param tcd TCD handle
+*/
+void tcd_free_encode(opj_tcd_t *tcd);
+/**
+Initialize the tile decoder
+@param tcd TCD handle
+@param volume Raw volume
+@param cp Coding parameters
+*/
+void tcd_malloc_decode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp);
+
+void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final);
+void tcd_rateallocate_fixed(opj_tcd_t *tcd);
+void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final);
+bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_volume_info_t * volume_info);
+/**
+Encode a tile from the raw volume into a buffer
+@param tcd TCD handle
+@param tileno Number that identifies one of the tiles to be encoded
+@param dest Destination buffer
+@param len Length of destination buffer
+@param volume_info Creation of index file
+@return
+*/
+int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_volume_info_t * volume_info);
+/**
+Decode a tile from a buffer into a raw volume
+@param tcd TCD handle
+@param src Source buffer
+@param len Length of source buffer
+@param tileno Number that identifies one of the tiles to be decoded
+*/
+bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno);
+/**
+Free the memory allocated for decoding
+@param tcd TCD handle
+*/
+void tcd_free_decode(opj_tcd_t *tcd);
+
+/* ----------------------------------------------------------------------- */
+/*@}*/
+
+/*@}*/
+
+#endif /* __TCD_H */