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