1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef bts_CLUSTER2D_EM_H 18#define bts_CLUSTER2D_EM_H 19 20/* ---- includes ----------------------------------------------------------- */ 21 22#include "b_BasicEm/Context.h" 23#include "b_BasicEm/MemSeg.h" 24#include "b_TensorEm/Int16Vec2D.h" 25#include "b_TensorEm/Flt16Vec2D.h" 26#include "b_TensorEm/Int16Rect.h" 27#include "b_TensorEm/Flt16Alt2D.h" 28#include "b_TensorEm/Functions.h" 29 30/* ---- related objects --------------------------------------------------- */ 31 32struct bts_RBFMap2D; 33 34/* ---- typedefs ----------------------------------------------------------- */ 35 36/* data format version number */ 37#define bts_CLUSTER2D_VERSION 100 38 39/* ---- constants ---------------------------------------------------------- */ 40 41/* ---- object definition -------------------------------------------------- */ 42 43/** 2d vector array */ 44struct bts_Cluster2D 45{ 46 47 /* ---- private data --------------------------------------------------- */ 48 49 /* ---- public data ---------------------------------------------------- */ 50 51 /** pointer to exclusive memory segment used for allocation */ 52 struct bbs_MemSeg* mspE; 53 54 /** number of allocated vectors */ 55 uint32 allocatedSizeE; 56 57 /** number of vectors */ 58 uint32 sizeE; 59 60 /** format of vectors (bbpE always > 0) */ 61 int32 bbpE; 62 63 /** array of int16 vectors */ 64 struct bts_Int16Vec2D* vecArrE; 65 66}; 67 68/* ---- associated objects ------------------------------------------------- */ 69 70/* ---- external functions ------------------------------------------------- */ 71 72/* ---- \ghd{ constructor/destructor } ------------------------------------- */ 73 74/** initializes cluster */ 75void bts_Cluster2D_init( struct bbs_Context* cpA, 76 struct bts_Cluster2D* ptrA ); 77 78/** destroys cluster */ 79void bts_Cluster2D_exit( struct bbs_Context* cpA, 80 struct bts_Cluster2D* ptrA ); 81 82/* ---- \ghd{ operators } -------------------------------------------------- */ 83 84/** copies cluster */ 85void bts_Cluster2D_copy( struct bbs_Context* cpA, 86 struct bts_Cluster2D* ptrA, 87 const struct bts_Cluster2D* srcPtrA ); 88 89/** compares cluster */ 90flag bts_Cluster2D_equal( struct bbs_Context* cpA, 91 const struct bts_Cluster2D* ptrA, 92 const struct bts_Cluster2D* srcPtrA ); 93 94/* ---- \ghd{ query functions } -------------------------------------------- */ 95 96/** returns center of gravity */ 97struct bts_Flt16Vec2D bts_Cluster2D_center( struct bbs_Context* cpA, 98 const struct bts_Cluster2D* ptrA ); 99 100/** returns check sum (for debugging purpose) */ 101uint32 bts_Cluster2D_checkSum( struct bbs_Context* cpA, 102 const struct bts_Cluster2D* ptrA ); 103 104/** returns bounding box */ 105struct bts_Int16Rect bts_Cluster2D_boundingBox( struct bbs_Context* cpA, 106 const struct bts_Cluster2D* ptrA ); 107 108/** returns int32 x-coordinate with given bbp at indexed position */ 109int32 bts_Cluster2D_int32X( struct bbs_Context* cpA, 110 const struct bts_Cluster2D* ptrA, 111 uint32 indexA, int32 bbpA ); 112 113/** returns int32 y-coordinate with given bbp at indexed position */ 114int32 bts_Cluster2D_int32Y( struct bbs_Context* cpA, 115 const struct bts_Cluster2D* ptrA, 116 uint32 indexA, 117 int32 bbpA ); 118 119/* ---- \ghd{ modify functions } ------------------------------------------- */ 120 121/** allocates cluster */ 122void bts_Cluster2D_create( struct bbs_Context* cpA, 123 struct bts_Cluster2D* ptrA, 124 uint32 sizeA, 125 struct bbs_MemSeg* mspA ); 126 127/** resize cluster (sizeA must be smaller or equal to allocated size)*/ 128void bts_Cluster2D_size( struct bbs_Context* cpA, 129 struct bts_Cluster2D* ptrA, 130 uint32 sizeA ); 131 132/** transforms cluster according to alt (function does not change bbp of cluster) */ 133void bts_Cluster2D_transform( struct bbs_Context* cpA, 134 struct bts_Cluster2D* ptrA, 135 struct bts_Flt16Alt2D altA ); 136 137/** transforms cluster according to alt and set bbp of output cluster */ 138void bts_Cluster2D_transformBbp( struct bbs_Context* cpA, 139 struct bts_Cluster2D* ptrA, 140 struct bts_Flt16Alt2D altA, 141 uint32 dstBbpA ); 142 143/** transforms cluster with rbf map (function does not change bbp of cluster) */ 144void bts_Cluster2D_rbfTransform( struct bbs_Context* cpA, 145 struct bts_Cluster2D* ptrA, 146 const struct bts_RBFMap2D* rbfMapPtrA ); 147 148/** copies src cluster and simultaneously transforms vectors according to alt using dstBbpA as resulting cluster format */ 149void bts_Cluster2D_copyTransform( struct bbs_Context* cpA, 150 struct bts_Cluster2D* ptrA, 151 const struct bts_Cluster2D* srcPtrA, 152 struct bts_Flt16Alt2D altA, 153 uint32 dstBbpA ); 154 155/* ---- \ghd{ memory I/O } ------------------------------------------------- */ 156 157/** size in words (16-bit) object needs when written to memory */ 158uint32 bts_Cluster2D_memSize( struct bbs_Context* cpA, 159 const struct bts_Cluster2D* ptrA ); 160 161/** writes object to memory; returns number of words (16-bit) written */ 162uint32 bts_Cluster2D_memWrite( struct bbs_Context* cpA, 163 const struct bts_Cluster2D* ptrA, 164 uint16* memPtrA ); 165 166/** reads object from memory; returns number of words (16-bit) read */ 167uint32 bts_Cluster2D_memRead( struct bbs_Context* cpA, 168 struct bts_Cluster2D* ptrA, 169 const uint16* memPtrA, 170 struct bbs_MemSeg* mspA ); 171 172/* ---- \ghd{ exec functions } --------------------------------------------- */ 173 174/** Computes the best affine linear transformation from *srcPtrA to *dstPtrA. 175 * Constrains of trafo are given by altTypeA 176 */ 177struct bts_Flt16Alt2D bts_Cluster2D_alt( struct bbs_Context* cpA, 178 const struct bts_Cluster2D* srcPtrA, 179 const struct bts_Cluster2D* dstPtrA, 180 enum bts_AltType altTypeA ); 181 182#endif /* bts_CLUSTER2D_EM_H */ 183 184