Home | History | Annotate | Download | only in libopenjpeg20
      1 /*
      2  * The copyright in this software is being made available under the 2-clauses
      3  * BSD License, included below. This software may be subject to other third
      4  * party and contributor rights, including patent rights, and no such rights
      5  * are granted under this license.
      6  *
      7  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
      8  * Copyright (c) 2002-2014, Professor Benoit Macq
      9  * Copyright (c) 2001-2003, David Janssens
     10  * Copyright (c) 2002-2003, Yannick Verschueren
     11  * Copyright (c) 2003-2007, Francois-Olivier Devaux
     12  * Copyright (c) 2003-2014, Antonin Descampe
     13  * Copyright (c) 2005, Herve Drolon, FreeImage Team
     14  * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes (at) c-s.fr>
     15  * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France
     16  * Copyright (c) 2012, CS Systemes d'Information, France
     17  * All rights reserved.
     18  *
     19  * Redistribution and use in source and binary forms, with or without
     20  * modification, are permitted provided that the following conditions
     21  * are met:
     22  * 1. Redistributions of source code must retain the above copyright
     23  *    notice, this list of conditions and the following disclaimer.
     24  * 2. Redistributions in binary form must reproduce the above copyright
     25  *    notice, this list of conditions and the following disclaimer in the
     26  *    documentation and/or other materials provided with the distribution.
     27  *
     28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
     29  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     31  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     32  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     33  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     34  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     35  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     36  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     37  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     38  * POSSIBILITY OF SUCH DAMAGE.
     39  */
     40 
     41 #ifndef __TGT_H
     42 #define __TGT_H
     43 /**
     44 @file tgt.h
     45 @brief Implementation of a tag-tree coder (TGT)
     46 
     47 The functions in TGT.C have for goal to realize a tag-tree coder. The functions in TGT.C
     48 are used by some function in T2.C.
     49 */
     50 
     51 /** @defgroup TGT TGT - Implementation of a tag-tree coder */
     52 /*@{*/
     53 
     54 /**
     55 Tag node
     56 */
     57 typedef struct opj_tgt_node {
     58     struct opj_tgt_node *parent;
     59     OPJ_INT32 value;
     60     OPJ_INT32 low;
     61     OPJ_UINT32 known;
     62 } opj_tgt_node_t;
     63 
     64 /**
     65 Tag tree
     66 */
     67 typedef struct opj_tgt_tree
     68 {
     69 	OPJ_UINT32  numleafsh;
     70 	OPJ_UINT32  numleafsv;
     71 	OPJ_UINT32 numnodes;
     72 	opj_tgt_node_t *nodes;
     73 	OPJ_UINT32  nodes_size;		/* maximum size taken by nodes */
     74 } opj_tgt_tree_t;
     75 
     76 
     77 /** @name Exported functions */
     78 /*@{*/
     79 /* ----------------------------------------------------------------------- */
     80 /**
     81 Create a tag-tree
     82 @param numleafsh Width of the array of leafs of the tree
     83 @param numleafsv Height of the array of leafs of the tree
     84 @return Returns a new tag-tree if successful, returns NULL otherwise
     85 */
     86 opj_tgt_tree_t *opj_tgt_create(OPJ_UINT32 numleafsh, OPJ_UINT32 numleafsv, opj_event_mgr_t *manager);
     87 
     88 /**
     89  * Reinitialises a tag-tree from an exixting one.
     90  *
     91  * @param	p_tree				the tree to reinitialize.
     92  * @param	p_num_leafs_h		the width of the array of leafs of the tree
     93  * @param	p_num_leafs_v		the height of the array of leafs of the tree
     94  * @param p_manager       the event manager
     95  * @return	a new tag-tree if successful, NULL otherwise
     96 */
     97 opj_tgt_tree_t *opj_tgt_init(opj_tgt_tree_t * p_tree,
     98                              OPJ_UINT32  p_num_leafs_h,
     99                              OPJ_UINT32  p_num_leafs_v, opj_event_mgr_t *p_manager);
    100 /**
    101 Destroy a tag-tree, liberating memory
    102 @param tree Tag-tree to destroy
    103 */
    104 void opj_tgt_destroy(opj_tgt_tree_t *tree);
    105 /**
    106 Reset a tag-tree (set all leaves to 0)
    107 @param tree Tag-tree to reset
    108 */
    109 void opj_tgt_reset(opj_tgt_tree_t *tree);
    110 /**
    111 Set the value of a leaf of a tag-tree
    112 @param tree Tag-tree to modify
    113 @param leafno Number that identifies the leaf to modify
    114 @param value New value of the leaf
    115 */
    116 void opj_tgt_setvalue(opj_tgt_tree_t *tree,
    117                       OPJ_UINT32 leafno,
    118                       OPJ_INT32 value);
    119 /**
    120 Encode the value of a leaf of the tag-tree up to a given threshold
    121 @param bio Pointer to a BIO handle
    122 @param tree Tag-tree to modify
    123 @param leafno Number that identifies the leaf to encode
    124 @param threshold Threshold to use when encoding value of the leaf
    125 */
    126 void opj_tgt_encode(opj_bio_t *bio,
    127                     opj_tgt_tree_t *tree,
    128                     OPJ_UINT32 leafno,
    129                     OPJ_INT32 threshold);
    130 /**
    131 Decode the value of a leaf of the tag-tree up to a given threshold
    132 @param bio Pointer to a BIO handle
    133 @param tree Tag-tree to decode
    134 @param leafno Number that identifies the leaf to decode
    135 @param threshold Threshold to use when decoding value of the leaf
    136 @return Returns 1 if the node's value < threshold, returns 0 otherwise
    137 */
    138 OPJ_UINT32 opj_tgt_decode(opj_bio_t *bio,
    139                           opj_tgt_tree_t *tree,
    140                           OPJ_UINT32 leafno,
    141                           OPJ_INT32 threshold);
    142 /* ----------------------------------------------------------------------- */
    143 /*@}*/
    144 
    145 /*@}*/
    146 
    147 #endif /* __TGT_H */
    148