| OLD | NEW |
| 1 /* | 1 /* |
| 2 * The copyright in this software is being made available under the 2-clauses | 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 | 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 | 4 * party and contributor rights, including patent rights, and no such rights |
| 5 * are granted under this license. | 5 * are granted under this license. |
| 6 * | 6 * |
| 7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium | 7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium |
| 8 * Copyright (c) 2002-2014, Professor Benoit Macq | 8 * Copyright (c) 2002-2014, Professor Benoit Macq |
| 9 * Copyright (c) 2001-2003, David Janssens | 9 * Copyright (c) 2001-2003, David Janssens |
| 10 * Copyright (c) 2002-2003, Yannick Verschueren | 10 * Copyright (c) 2002-2003, Yannick Verschueren |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 */ | 38 */ |
| 39 | 39 |
| 40 #include "opj_includes.h" | 40 #include "opj_includes.h" |
| 41 | 41 |
| 42 /* | 42 /* |
| 43 ========================================================== | 43 ========================================================== |
| 44 Tag-tree coder interface | 44 Tag-tree coder interface |
| 45 ========================================================== | 45 ========================================================== |
| 46 */ | 46 */ |
| 47 | 47 |
| 48 opj_tgt_tree_t *opj_tgt_create(OPJ_UINT32 numleafsh, OPJ_UINT32 numleafsv) { | 48 opj_tgt_tree_t *opj_tgt_create(OPJ_UINT32 numleafsh, OPJ_UINT32 numleafsv, opj_e
vent_mgr_t *manager) { |
| 49 OPJ_INT32 nplh[32]; | 49 OPJ_INT32 nplh[32]; |
| 50 OPJ_INT32 nplv[32]; | 50 OPJ_INT32 nplv[32]; |
| 51 opj_tgt_node_t *node = 00; | 51 opj_tgt_node_t *node = 00; |
| 52 opj_tgt_node_t *l_parent_node = 00; | 52 opj_tgt_node_t *l_parent_node = 00; |
| 53 opj_tgt_node_t *l_parent_node0 = 00; | 53 opj_tgt_node_t *l_parent_node0 = 00; |
| 54 opj_tgt_tree_t *tree = 00; | 54 opj_tgt_tree_t *tree = 00; |
| 55 OPJ_UINT32 i; | 55 OPJ_UINT32 i; |
| 56 OPJ_INT32 j,k; | 56 OPJ_INT32 j,k; |
| 57 OPJ_UINT32 numlvls; | 57 OPJ_UINT32 numlvls; |
| 58 OPJ_UINT32 n; | 58 OPJ_UINT32 n; |
| 59 | 59 |
| 60 tree = (opj_tgt_tree_t *) opj_calloc(1,sizeof(opj_tgt_tree_t)); | 60 tree = (opj_tgt_tree_t *) opj_calloc(1,sizeof(opj_tgt_tree_t)); |
| 61 if(!tree) { | 61 if(!tree) { |
| 62 fprintf(stderr, "ERROR in tgt_create while allocating tree\n"); | 62 opj_event_msg(manager, EVT_ERROR, "Not enough memory to create T
ag-tree\n"); |
| 63 return 00; | 63 return 00; |
| 64 } | 64 } |
| 65 | 65 |
| 66 tree->numleafsh = numleafsh; | 66 tree->numleafsh = numleafsh; |
| 67 tree->numleafsv = numleafsv; | 67 tree->numleafsv = numleafsv; |
| 68 | 68 |
| 69 numlvls = 0; | 69 numlvls = 0; |
| 70 nplh[0] = (OPJ_INT32)numleafsh; | 70 nplh[0] = (OPJ_INT32)numleafsh; |
| 71 nplv[0] = (OPJ_INT32)numleafsv; | 71 nplv[0] = (OPJ_INT32)numleafsv; |
| 72 tree->numnodes = 0; | 72 tree->numnodes = 0; |
| 73 do { | 73 do { |
| 74 n = (OPJ_UINT32)(nplh[numlvls] * nplv[numlvls]); | 74 n = (OPJ_UINT32)(nplh[numlvls] * nplv[numlvls]); |
| 75 nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2; | 75 nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2; |
| 76 nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2; | 76 nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2; |
| 77 tree->numnodes += n; | 77 tree->numnodes += n; |
| 78 ++numlvls; | 78 ++numlvls; |
| 79 } while (n > 1); | 79 } while (n > 1); |
| 80 | 80 |
| 81 /* ADD */ | 81 /* ADD */ |
| 82 if (tree->numnodes == 0) { | 82 if (tree->numnodes == 0) { |
| 83 opj_free(tree); | 83 opj_free(tree); |
| 84 fprintf(stderr, "WARNING in tgt_create tree->numnodes == 0, no t
ree created.\n"); | 84 opj_event_msg(manager, EVT_WARNING, "tgt_create tree->numnodes =
= 0, no tree created.\n"); |
| 85 return 00; | 85 return 00; |
| 86 } | 86 } |
| 87 | 87 |
| 88 tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes, sizeof(opj_tg
t_node_t)); | 88 tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes, sizeof(opj_tg
t_node_t)); |
| 89 if(!tree->nodes) { | 89 if(!tree->nodes) { |
| 90 fprintf(stderr, "ERROR in tgt_create while allocating node of th
e tree\n"); | 90 opj_event_msg(manager, EVT_ERROR, "Not enough memory to create T
ag-tree nodes\n"); |
| 91 opj_free(tree); | 91 opj_free(tree); |
| 92 return 00; | 92 return 00; |
| 93 } | 93 } |
| 94 tree->nodes_size = tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node_t); | 94 tree->nodes_size = tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node_t); |
| 95 | 95 |
| 96 node = tree->nodes; | 96 node = tree->nodes; |
| 97 l_parent_node = &tree->nodes[tree->numleafsh * tree->numleafsv]; | 97 l_parent_node = &tree->nodes[tree->numleafsh * tree->numleafsv]; |
| 98 l_parent_node0 = l_parent_node; | 98 l_parent_node0 = l_parent_node; |
| 99 | 99 |
| 100 for (i = 0; i < numlvls - 1; ++i) { | 100 for (i = 0; i < numlvls - 1; ++i) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 123 } | 123 } |
| 124 | 124 |
| 125 /** | 125 /** |
| 126 * Reinitialises a tag-tree from an existing one. | 126 * Reinitialises a tag-tree from an existing one. |
| 127 * | 127 * |
| 128 * @param p_tree the tree to reinitialize. | 128 * @param p_tree the tree to reinitialize. |
| 129 * @param p_num_leafs_h the width of the array of leafs of the t
ree | 129 * @param p_num_leafs_h the width of the array of leafs of the t
ree |
| 130 * @param p_num_leafs_v the height of the array of leafs of the
tree | 130 * @param p_num_leafs_v the height of the array of leafs of the
tree |
| 131 * @return a new tag-tree if successful, NULL otherwise | 131 * @return a new tag-tree if successful, NULL otherwise |
| 132 */ | 132 */ |
| 133 opj_tgt_tree_t *opj_tgt_init(opj_tgt_tree_t * p_tree,OPJ_UINT32 p_num_leafs_h, O
PJ_UINT32 p_num_leafs_v) | 133 opj_tgt_tree_t *opj_tgt_init(opj_tgt_tree_t * p_tree,OPJ_UINT32 p_num_leafs_h, O
PJ_UINT32 p_num_leafs_v, opj_event_mgr_t *p_manager) |
| 134 { | 134 { |
| 135 OPJ_INT32 l_nplh[32]; | 135 OPJ_INT32 l_nplh[32]; |
| 136 OPJ_INT32 l_nplv[32]; | 136 OPJ_INT32 l_nplv[32]; |
| 137 opj_tgt_node_t *l_node = 00; | 137 opj_tgt_node_t *l_node = 00; |
| 138 opj_tgt_node_t *l_parent_node = 00; | 138 opj_tgt_node_t *l_parent_node = 00; |
| 139 opj_tgt_node_t *l_parent_node0 = 00; | 139 opj_tgt_node_t *l_parent_node0 = 00; |
| 140 OPJ_UINT32 i; | 140 OPJ_UINT32 i; |
| 141 OPJ_INT32 j,k; | 141 OPJ_INT32 j,k; |
| 142 OPJ_UINT32 l_num_levels; | 142 OPJ_UINT32 l_num_levels; |
| 143 OPJ_UINT32 n; | 143 OPJ_UINT32 n; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 168 /* ADD */ | 168 /* ADD */ |
| 169 if (p_tree->numnodes == 0) { | 169 if (p_tree->numnodes == 0) { |
| 170 opj_tgt_destroy(p_tree); | 170 opj_tgt_destroy(p_tree); |
| 171 return 00; | 171 return 00; |
| 172 } | 172 } |
| 173 l_node_size = p_tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node
_t); | 173 l_node_size = p_tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node
_t); |
| 174 | 174 |
| 175 if (l_node_size > p_tree->nodes_size) { | 175 if (l_node_size > p_tree->nodes_size) { |
| 176 opj_tgt_node_t* new_nodes = (opj_tgt_node_t*) opj_reallo
c(p_tree->nodes, l_node_size); | 176 opj_tgt_node_t* new_nodes = (opj_tgt_node_t*) opj_reallo
c(p_tree->nodes, l_node_size); |
| 177 if (! new_nodes) { | 177 if (! new_nodes) { |
| 178 fprintf(stderr, "ERROR Not enough memory to rein
itialize the tag tree\n"); | 178 opj_event_msg(p_manager, EVT_ERROR, "Not enough
memory to reinitialize the tag tree\n"); |
| 179 opj_tgt_destroy(p_tree); | 179 opj_tgt_destroy(p_tree); |
| 180 return 00; | 180 return 00; |
| 181 } | 181 } |
| 182 p_tree->nodes = new_nodes; | 182 p_tree->nodes = new_nodes; |
| 183 memset(((char *) p_tree->nodes) + p_tree->nodes_size, 0
, l_node_size - p_tree->nodes_size); | 183 memset(((char *) p_tree->nodes) + p_tree->nodes_size, 0
, l_node_size - p_tree->nodes_size); |
| 184 p_tree->nodes_size = l_node_size; | 184 p_tree->nodes_size = l_node_size; |
| 185 } | 185 } |
| 186 l_node = p_tree->nodes; | 186 l_node = p_tree->nodes; |
| 187 l_parent_node = &p_tree->nodes[p_tree->numleafsh * p_tree->numle
afsv]; | 187 l_parent_node = &p_tree->nodes[p_tree->numleafsh * p_tree->numle
afsv]; |
| 188 l_parent_node0 = l_parent_node; | 188 l_parent_node0 = l_parent_node; |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 } | 326 } |
| 327 node->low = low; | 327 node->low = low; |
| 328 if (stkptr == stk) { | 328 if (stkptr == stk) { |
| 329 break; | 329 break; |
| 330 } | 330 } |
| 331 node = *--stkptr; | 331 node = *--stkptr; |
| 332 } | 332 } |
| 333 | 333 |
| 334 return (node->value < threshold) ? 1 : 0; | 334 return (node->value < threshold) ? 1 : 0; |
| 335 } | 335 } |
| OLD | NEW |