Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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