Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2001-2003, David Janssens
  3.  * Copyright (c) 2002-2003, Yannick Verschueren
  4.  * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
  5.  * Copyright (c) 2005, HervĂ© Drolon, FreeImage Team
  6.  * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  7.  * All rights reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  *
  18.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  19.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  21.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  22.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  23.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  24.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  25.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  26.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  27.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  28.  * POSSIBILITY OF SUCH DAMAGE.
  29.  */
  30.  
  31. #ifndef __TGT_H
  32. #define __TGT_H
  33. /**
  34. @file tgt.h
  35. @brief Implementation of a tag-tree coder (TGT)
  36.  
  37. The functions in TGT.C have for goal to realize a tag-tree coder. The functions in TGT.C
  38. are used by some function in T2.C.
  39. */
  40.  
  41. /** @defgroup TGT TGT - Implementation of a tag-tree coder */
  42. /*@{*/
  43.  
  44. /**
  45. Tag node
  46. */
  47. typedef struct opj_tgt_node {
  48. /** Node parent reference */
  49.   struct opj_tgt_node *parent;
  50. /**  */
  51.   int value;
  52. /**  */
  53.   int low;
  54. /**  */
  55.   int known;
  56. } opj_tgt_node_t;
  57.  
  58. /**
  59. Tag tree
  60. */
  61. typedef struct opj_tgt_tree {
  62. /** Number of leaves from horizontal axis */
  63.   int numleafsh;
  64. /** Number of leaves from vertical axis */
  65.   int numleafsv;
  66. /** Number of leaves from axial axis */
  67.   int numleafsz;
  68. /** Number of nodes */
  69.   int numnodes;
  70. /** Reference to each node instance */
  71.   opj_tgt_node_t *nodes;
  72. } opj_tgt_tree_t;
  73.  
  74. /** @name Funciones generales */
  75. /*@{*/
  76. /* ----------------------------------------------------------------------- */
  77. /**
  78. Create a tag-tree
  79. @param numleafsh Width of the array of leafs of the tree
  80. @param numleafsv Height of the array of leafs of the tree
  81. @param numleafsz Depth of the array of leafs of the tree
  82. @return Returns a new tag-tree if successful, returns NULL otherwise
  83. */
  84. opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz);
  85. /**
  86. Destroy a tag-tree, liberating memory
  87. @param tree Tag-tree to destroy
  88. */
  89. void tgt_destroy(opj_tgt_tree_t *tree);
  90. /**
  91. Reset a tag-tree (set all leaves to 0)
  92. @param tree Tag-tree to reset
  93. */
  94. void tgt_reset(opj_tgt_tree_t *tree);
  95. /**
  96. Set the value of a leaf of a tag-tree
  97. @param tree Tag-tree to modify
  98. @param leafno Number that identifies the leaf to modify
  99. @param value New value of the leaf
  100. */
  101. void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value);
  102. /**
  103. Encode the value of a leaf of the tag-tree up to a given threshold
  104. @param bio Pointer to a BIO handle
  105. @param tree Tag-tree to modify
  106. @param leafno Number that identifies the leaf to encode
  107. @param threshold Threshold to use when encoding value of the leaf
  108. */
  109. void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold);
  110. /**
  111. Decode the value of a leaf of the tag-tree up to a given threshold
  112. @param bio Pointer to a BIO handle
  113. @param tree Tag-tree to decode
  114. @param leafno Number that identifies the leaf to decode
  115. @param threshold Threshold to use when decoding value of the leaf
  116. @return Returns 1 if the node's value < threshold, returns 0 otherwise
  117. */
  118. int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold);
  119.  
  120. /*@}*/
  121. /* ----------------------------------------------------------------------- */
  122. void tgt_tree_dump (FILE *fd, opj_tgt_tree_t * tree);
  123.  
  124. #endif /* __TGT_H */
  125.