[trunk] JP3D: completely redo the opj_tgt_create function. Take as input the initial...
authorMathieu Malaterre <mathieu.malaterre@gmail.com>
Tue, 11 Dec 2012 14:09:24 +0000 (14:09 +0000)
committerMathieu Malaterre <mathieu.malaterre@gmail.com>
Tue, 11 Dec 2012 14:09:24 +0000 (14:09 +0000)
src/lib/openjp3d/tgt.c

index 77a751a602baccebc4011eb06036c59819ba4802..c86cfe6dc5f21ca73934506baa055fa33a380561 100755 (executable)
@@ -68,6 +68,7 @@ opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz) {
        opj_tgt_node_t *node = NULL;\r
        opj_tgt_node_t *parentnode = NULL;\r
        opj_tgt_node_t *parentnode0 = NULL;\r
+       opj_tgt_node_t *parentnode1 = NULL;\r
        opj_tgt_tree_t *tree = NULL;\r
        int i, j, k, p, p0;\r
        int numlvls;\r
@@ -108,38 +109,32 @@ opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz) {
        node = tree->nodes;\r
        parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv * tree->numleafsz];\r
        parentnode0 = parentnode;\r
-               \r
-       p = tree->numleafsh * tree->numleafsv * tree->numleafsz;\r
-       p0 = p;\r
-       n = 0;\r
+       parentnode1 = parentnode;\r
        /*fprintf(stdout,"\nH %d V %d Z %d numlvls %d nodes %d\n",tree->numleafsh,tree->numleafsv,tree->numleafsz,numlvls,tree->numnodes);*/\r
        for (i = 0; i < numlvls - 1; ++i) {\r
-               for (j = 0; j < nplv[i]; ++j) {\r
-                       k = nplh[i]*nplz[i];\r
-                       while (--k >= 0) {\r
-                               node->parent = parentnode;              /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/\r
-                               ++node; ++n;            \r
-                               if (--k >= 0 && n < p) {\r
-                                       node->parent = parentnode;      /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/\r
-                                       ++node; ++n;    \r
-                               }\r
-                               if (nplz[i] != 1){ /*2D operation vs 3D operation*/\r
-                                       if (--k >= 0 && n < p) {\r
+               for (z = 0; z < nplz[i]; ++z) {\r
+                       for (j = 0; j < nplv[i]; ++j) {\r
+                               k = nplh[i];\r
+                               while(--k >= 0) {\r
+                                       node->parent = parentnode;              /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/\r
+                                       ++node;\r
+                                       if(--k >= 0) {\r
                                                node->parent = parentnode;      /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/\r
-                                               ++node; ++n;\r
-                                       }\r
-                                       if (--k >= 0 && n < p) {\r
-                                               node->parent = parentnode;      /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/\r
-                                               ++node; ++n;\r
+                                               ++node;\r
                                        }\r
+                                       ++parentnode;\r
+                               }\r
+                               if((j & 1) || j == nplv[i] - 1) {\r
+                                       parentnode0 = parentnode;\r
+                               } else {\r
+                                       parentnode = parentnode0;\r
                                }\r
-                               ++parentnode; ++p;\r
                        }\r
-                       if ((j & 1) || j == nplv[i] - 1) {\r
-                               parentnode0 = parentnode;                       p0 = p;         /*fprintf(stdout,"parent = node[%d] \n",p);*/\r
+                       if ((z & 1) || z == nplz[i] - 1) {\r
+                               parentnode1 = parentnode;\r
                        } else {\r
-                               parentnode = parentnode0;                       p = p0;         /*fprintf(stdout,"parent = node[%d] \n",p);*/\r
-                               parentnode0 += nplh[i]*nplz[i];         p0 += nplh[i]*nplz[i];\r
+                               parentnode0 = parentnode1;\r
+                               parentnode = parentnode1;\r
                        }\r
                }\r
        }\r