diff options
author | Sascha Haeberling <haeberling@google.com> | 2013-08-14 11:20:34 -0700 |
---|---|---|
committer | Sascha Haeberling <haeberling@google.com> | 2013-08-14 11:20:34 -0700 |
commit | 8bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96 (patch) | |
tree | 3382b4b8b52be577c3d0525df0e7da8178673d1c /jni/feature_mos/src/mosaic/Delaunay.h | |
parent | a34e8c7d439d17355df51e5e536bdbbd1744cc74 (diff) | |
download | android_packages_apps_Snap-8bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96.tar.gz android_packages_apps_Snap-8bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96.tar.bz2 android_packages_apps_Snap-8bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96.zip |
Copy over libjni_mosaic from Camera. We need to support the SRI pano
mode for Carlsbad.
Change-Id: Id14e64d8248236e8170c12cfca2cbf2ca952e993
Diffstat (limited to 'jni/feature_mos/src/mosaic/Delaunay.h')
-rw-r--r-- | jni/feature_mos/src/mosaic/Delaunay.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/jni/feature_mos/src/mosaic/Delaunay.h b/jni/feature_mos/src/mosaic/Delaunay.h new file mode 100644 index 000000000..7a450b5e4 --- /dev/null +++ b/jni/feature_mos/src/mosaic/Delaunay.h @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Delaunay.h +// $Id: Delaunay.h,v 1.9 2011/06/17 13:35:48 mbansal Exp $ + +#ifndef DELAUNAY_H +#define DELAUNAY_H +#include <stdio.h> +#include <math.h> +#include "CSite.h" +#include "EdgePointerUtil.h" + +#ifndef TRUE +#define TRUE 1==1 +#define FALSE 0==1 +#endif + +//****************************************************************************** +// Reference for Quad-edge data structure: +// +// Leonidas Guibas and Jorge Stolfi, "Primitives for the manipulation of general +// subdivisions and the computations of Voronoi diagrams", +// ACM Transactions on Graphics 4, 74-123 (1985). +// +//****************************************************************************** + +// +// Common data structures +// + +typedef short SitePointer; +typedef short TrianglePointer; + +class CDelaunay +{ +private: + CSite *sa; + EdgePointer oneBndryEdge; + EdgePointer *next; + SitePointer *org; + struct EDGE_INFO *ei; + SitePointer *sp; + SEdgeVector *ev; + + SitePointer sp1; + EdgePointer nextEdge; + EdgePointer availEdge; + +private: + void build(int lo, int hi, EdgePointer *le, EdgePointer *re, int rows); + void buildTriangulation(int size); + + EdgePointer allocEdge(); + void freeEdge(EdgePointer e); + + EdgePointer makeEdge(SitePointer origin, SitePointer destination); + void deleteEdge(EdgePointer e); + + void splice(EdgePointer, EdgePointer); + EdgePointer consolidateEdges(); + void deleteAllEdges(); + + void spsortx(SitePointer *, int, int); + void spsorty(SitePointer *, int, int); + + int cmpev(int i, int j); + int xcmpsp(int i, int j); + int ycmpsp(int i, int j); + + void swapsp(int i, int j); + void swapev(int i, int j); + + void copysp(int i, int j); + void copyev(int i, int j); + + void rcssort(int lowelt, int highelt, int temp, + int (CDelaunay::*comparison)(int,int), + void (CDelaunay::*swap)(int,int), + void (CDelaunay::*copy)(int,int)); + + void doMerge(EdgePointer *ldo, EdgePointer ldi, EdgePointer rdi, EdgePointer *rdo); + EdgePointer connectLeft(EdgePointer a, EdgePointer b); + EdgePointer connectRight(EdgePointer a, EdgePointer b); + int ccw(SitePointer a, SitePointer b, SitePointer c); + int incircle(SitePointer a, SitePointer b, SitePointer c, SitePointer d); + int constructList(EdgePointer e, int width, int height); + +public: + CDelaunay(); + ~CDelaunay(); + + CSite *allocMemory(int nsite); + void freeMemory(); + int triangulate(SEdgeVector **edge, int nsite, int width, int height); + void linkNeighbors(SEdgeVector *edge, int nedge, int nsite); +}; + +#define onext(a) next[a] +#define oprev(a) rot(onext(rot(a))) +#define lnext(a) rot(onext(rotinv(a))) +#define lprev(a) sym(onext(a)) +#define rnext(a) rotinv(onext(rot(a))) +#define rprev(a) onext(sym(a)) +#define dnext(a) sym(onext(sym(a))) +#define dprev(a) rotinv(onext(rotinv(a))) + +#define orig(a) org[a] +#define dest(a) orig(sym(a)) +#define left(a) orig(rotinv(a)) +#define right(a) orig(rot(a)) + +#endif |