updated XCode project file
[openjpeg.git] / libopenjpeg / tgt.c
index 26c33af859bd9a21f3f969a30c9c2d7066356b0c..a5dbcd3cef4fdc4f44da14ebe236c2d552aa1d11 100644 (file)
@@ -1,5 +1,10 @@
 /*
- * Copyright (c) 2001-2002, David Janssens
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "tgt.h"
-#include "bio.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-/* <summary> */
-/* Reset tag-tree. */
-/* </summary> */
-void tgt_reset(tgt_tree_t * tree)
-{
-    int i;
-    /* new */
-    if (!tree || tree == NULL)
-       return;
-
-    for (i = 0; i < tree->numnodes; i++) {
-       tree->nodes[i].value = 999;
-       tree->nodes[i].low = 0;
-       tree->nodes[i].known = 0;
-    }
-}
-
-/* <summary> */
-/* Create tag-tree. */
-/* </summary> */
-tgt_tree_t *tgt_create(int numleafsh, int numleafsv)
-{
-    int nplh[32];
-    int nplv[32];
-    tgt_node_t *node;
-    tgt_node_t *parentnode;
-    tgt_node_t *parentnode0;
-    tgt_tree_t *tree;
-    int i, j, k;
-    int numlvls;
-    int n;
-
-    tree = (tgt_tree_t *) malloc(sizeof(tgt_tree_t));
-    tree->numleafsh = numleafsh;
-    tree->numleafsv = numleafsv;
-
-    numlvls = 0;
-    nplh[0] = numleafsh;
-    nplv[0] = numleafsv;
-    tree->numnodes = 0;
-    do {
-       n = nplh[numlvls] * nplv[numlvls];
-       nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
-       nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
-       tree->numnodes += n;
-       ++numlvls;
-    } while (n > 1);
-
-    /* ADD */
-    if (tree->numnodes == 0) {
-       free(tree);
-       return NULL;
-    }
-
-    tree->nodes =
-       (tgt_node_t *) malloc(tree->numnodes * sizeof(tgt_node_t));
+#include "opj_includes.h"
+
+/* 
+==========================================================
+   Tag-tree coder interface
+==========================================================
+*/
+
+opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv) {
+       int nplh[32];
+       int nplv[32];
+       opj_tgt_node_t *node = NULL;
+       opj_tgt_node_t *parentnode = NULL;
+       opj_tgt_node_t *parentnode0 = NULL;
+       opj_tgt_tree_t *tree = NULL;
+       int i, j, k;
+       int numlvls;
+       int n;
+
+       tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t));
+       if(!tree) return NULL;
+       tree->numleafsh = numleafsh;
+       tree->numleafsv = numleafsv;
+
+       numlvls = 0;
+       nplh[0] = numleafsh;
+       nplv[0] = numleafsv;
+       tree->numnodes = 0;
+       do {
+               n = nplh[numlvls] * nplv[numlvls];
+               nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
+               nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
+               tree->numnodes += n;
+               ++numlvls;
+       } while (n > 1);
+       
+       /* ADD */
+       if (tree->numnodes == 0) {
+               opj_free(tree);
+               return NULL;
+       }
 
-    node = tree->nodes;
-    parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv];
-    parentnode0 = parentnode;
+       tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes, sizeof(opj_tgt_node_t));
+       if(!tree->nodes) {
+               opj_free(tree);
+               return NULL;
+       }
 
-    for (i = 0; i < numlvls - 1; ++i) {
-       for (j = 0; j < nplv[i]; ++j) {
-           k = nplh[i];
-           while (--k >= 0) {
-               node->parent = parentnode;
-               ++node;
-               if (--k >= 0) {
-                   node->parent = parentnode;
-                   ++node;
+       node = tree->nodes;
+       parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv];
+       parentnode0 = parentnode;
+       
+       for (i = 0; i < numlvls - 1; ++i) {
+               for (j = 0; j < nplv[i]; ++j) {
+                       k = nplh[i];
+                       while (--k >= 0) {
+                               node->parent = parentnode;
+                               ++node;
+                               if (--k >= 0) {
+                                       node->parent = parentnode;
+                                       ++node;
+                               }
+                               ++parentnode;
+                       }
+                       if ((j & 1) || j == nplv[i] - 1) {
+                               parentnode0 = parentnode;
+                       } else {
+                               parentnode = parentnode0;
+                               parentnode0 += nplh[i];
+                       }
                }
-               ++parentnode;
-           }
-           if ((j & 1) || j == nplv[i] - 1) {
-               parentnode0 = parentnode;
-           } else {
-               parentnode = parentnode0;
-               parentnode0 += nplh[i];
-           }
        }
-    }
-    node->parent = 0;
-
-    tgt_reset(tree);
-
-    return tree;
-}
-
-/* <summary> */
-/* Destroy tag-tree. */
-/* </summary> */
-void tgt_destroy(tgt_tree_t * t)
-{
-    free(t->nodes);
-    free(t);
+       node->parent = 0;
+       
+       tgt_reset(tree);
+       
+       return tree;
 }
 
-/* <summary> */
-/* Set the value of a leaf of the tag-tree. */
-/* </summary> */
-void tgt_setvalue(tgt_tree_t * tree, int leafno, int value)
-{
-    tgt_node_t *node;
-    node = &tree->nodes[leafno];
-    while (node && node->value > value) {
-       node->value = value;
-       node = node->parent;
-    }
+void tgt_destroy(opj_tgt_tree_t *tree) {
+       opj_free(tree->nodes);
+       opj_free(tree);
 }
 
-/* <summary> */
-/* Encode the value of a leaf of the tag-tree. */
-/* </summary> */
-void tgt_encode(tgt_tree_t * tree, int leafno, int threshold)
-{
-    tgt_node_t *stk[31];
-    tgt_node_t **stkptr;
-    tgt_node_t *node;
-    int low;
+void tgt_reset(opj_tgt_tree_t *tree) {
+       int i;
 
-    stkptr = stk;
-    node = &tree->nodes[leafno];
-    while (node->parent) {
-       *stkptr++ = node;
-       node = node->parent;
-    }
+       if (NULL == tree)
+               return;
+       
+       for (i = 0; i < tree->numnodes; i++) {
+               tree->nodes[i].value = 999;
+               tree->nodes[i].low = 0;
+               tree->nodes[i].known = 0;
+       }
+}
 
-    low = 0;
-    for (;;) {
-       if (low > node->low) {
-           node->low = low;
-       } else {
-           low = node->low;
+void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value) {
+       opj_tgt_node_t *node;
+       node = &tree->nodes[leafno];
+       while (node && node->value > value) {
+               node->value = value;
+               node = node->parent;
        }
+}
 
-       while (low < threshold) {
-           if (low >= node->value) {
-               if (!node->known) {
-                   bio_write(1, 1);
-                   node->known = 1;
+void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) {
+       opj_tgt_node_t *stk[31];
+       opj_tgt_node_t **stkptr;
+       opj_tgt_node_t *node;
+       int low;
+
+       stkptr = stk;
+       node = &tree->nodes[leafno];
+       while (node->parent) {
+               *stkptr++ = node;
+               node = node->parent;
+       }
+       
+       low = 0;
+       for (;;) {
+               if (low > node->low) {
+                       node->low = low;
+               } else {
+                       low = node->low;
                }
-               break;
-           }
-           bio_write(0, 1);
-           ++low;
+               
+               while (low < threshold) {
+                       if (low >= node->value) {
+                               if (!node->known) {
+                                       bio_write(bio, 1, 1);
+                                       node->known = 1;
+                               }
+                               break;
+                       }
+                       bio_write(bio, 0, 1);
+                       ++low;
+               }
+               
+               node->low = low;
+               if (stkptr == stk)
+                       break;
+               node = *--stkptr;
        }
-
-       node->low = low;
-       if (stkptr == stk)
-           break;
-       node = *--stkptr;
-    }
-
 }
 
-/* <summary> */
-/* Decode the value of a leaf of the tag-tree. */
-/* </summary> */
-int tgt_decode(tgt_tree_t * tree, int leafno, int threshold)
-{
-    tgt_node_t *stk[31];
-    tgt_node_t **stkptr;
-    tgt_node_t *node;
-    int low;
-
-    stkptr = stk;
-    node = &tree->nodes[leafno];
-    while (node->parent) {
-       *stkptr++ = node;
-       node = node->parent;
-    }
-
-    low = 0;
-    for (;;) {
-       if (low > node->low) {
-           node->low = low;
-       } else {
-           low = node->low;
+int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) {
+       opj_tgt_node_t *stk[31];
+       opj_tgt_node_t **stkptr;
+       opj_tgt_node_t *node;
+       int low;
+
+       stkptr = stk;
+       node = &tree->nodes[leafno];
+       while (node->parent) {
+               *stkptr++ = node;
+               node = node->parent;
        }
-       while (low < threshold && low < node->value) {
-           if (bio_read(1)) {
-               node->value = low;
-           } else {
-               ++low;
-           }
-       }
-       node->low = low;
-       if (stkptr == stk) {
-           break;
+       
+       low = 0;
+       for (;;) {
+               if (low > node->low) {
+                       node->low = low;
+               } else {
+                       low = node->low;
+               }
+               while (low < threshold && low < node->value) {
+                       if (bio_read(bio, 1)) {
+                               node->value = low;
+                       } else {
+                               ++low;
+                       }
+               }
+               node->low = low;
+               if (stkptr == stk) {
+                       break;
+               }
+               node = *--stkptr;
        }
-       node = *--stkptr;
-    }
-
-    return (node->value < threshold) ? 1 : 0;
+       
+       return (node->value < threshold) ? 1 : 0;
 }