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 bpi_FACE_FINDER_EM_H 18 #define bpi_FACE_FINDER_EM_H 19 20 /* ---- includes ----------------------------------------------------------- */ 21 22 #include "b_BasicEm/Context.h" 23 #include "b_BasicEm/Basic.h" 24 #include "b_BasicEm/MemTbl.h" 25 #include "b_TensorEm/Flt16Vec.h" 26 #include "b_TensorEm/IdCluster2D.h" 27 #include "b_APIEm/DCR.h" 28 29 /* ---- related objects --------------------------------------------------- */ 30 31 /* ---- typedefs ----------------------------------------------------------- */ 32 33 /** Object Type */ 34 enum bpi_FaceFinderType 35 { 36 bpi_FF_UNDEFINED = 0, 37 bpi_FF_BF_FACE_FINDER /* bitfeature based faceFinder */ 38 }; 39 40 /* ---- constants ---------------------------------------------------------- */ 41 42 /* ---- object definition -------------------------------------------------- */ 43 44 /** base object for face finder modules (occurs as first element in all face finder objects) */ 45 struct bpi_FaceFinder 46 { 47 /* ---- private data --------------------------------------------------- */ 48 49 /* ---- public data ---------------------------------------------------- */ 50 51 /** object type */ 52 uint32 typeE; 53 54 /* ---- virtual functions ---------------------------------------------- */ 55 56 /** initializes some parameters prior to reading */ 57 void ( *vpSetParamsE )( struct bbs_Context* cpA, 58 struct bpi_FaceFinder* ptrA, 59 uint32 maxImageWidthA, 60 uint32 maxImageHeightA ); 61 62 /** sets detection range */ 63 void ( *vpSetRangeE )( struct bbs_Context* cpA, 64 struct bpi_FaceFinder* ptrA, 65 uint32 minEyeDistanceA, 66 uint32 maxEyeDistanceA ); 67 68 /** single face processing function; returns confidence (8.24) */ 69 int32 ( *vpProcessE )( struct bbs_Context* cpA, 70 const struct bpi_FaceFinder* ptrA, 71 struct bpi_DCR* dcrPtrA ); 72 73 /** multiple face processing function; returns number of faces detected */ 74 int32 ( *vpPutDcrE )( struct bbs_Context* cpA, 75 const struct bpi_FaceFinder* ptrA, 76 struct bpi_DCR* dcrPtrA ); 77 78 /** retrieves indexed face from face finder after calling PutDCR */ 79 void ( *vpGetDcrE )( struct bbs_Context* cpA, 80 const struct bpi_FaceFinder* ptrA, 81 uint32 indexA, 82 struct bpi_DCR* dcrPtrA ); 83 84 }; 85 86 /* ---- associated objects ------------------------------------------------- */ 87 88 /* ---- external functions ------------------------------------------------- */ 89 90 /* ---- \ghd{ constructor/destructor } ------------------------------------- */ 91 92 /** initializes bpi_FaceFinder */ 93 void bpi_FaceFinder_init( struct bbs_Context* cpA, 94 struct bpi_FaceFinder* ptrA ); 95 96 /** resets bpi_FaceFinder */ 97 void bpi_FaceFinder_exit( struct bbs_Context* cpA, 98 struct bpi_FaceFinder* ptrA ); 99 100 /* ---- \ghd{ operators } -------------------------------------------------- */ 101 102 /** copy operator */ 103 void bpi_FaceFinder_copy( struct bbs_Context* cpA, 104 struct bpi_FaceFinder* ptrA, 105 const struct bpi_FaceFinder* srcPtrA ); 106 107 /** equal operator */ 108 flag bpi_FaceFinder_equal( struct bbs_Context* cpA, 109 const struct bpi_FaceFinder* ptrA, 110 const struct bpi_FaceFinder* srcPtrA ); 111 112 /* ---- \ghd{ query functions } -------------------------------------------- */ 113 114 /* ---- \ghd{ modify functions } ------------------------------------------- */ 115 116 /* ---- \ghd{ memory I/O } ------------------------------------------------- */ 117 118 /** word size (16-bit) object needs when written to memory */ 119 uint32 bpi_FaceFinder_memSize( struct bbs_Context* cpA, 120 const struct bpi_FaceFinder* ptrA ); 121 122 /** writes object to memory; returns number of words (16-bit) written */ 123 uint32 bpi_FaceFinder_memWrite( struct bbs_Context* cpA, 124 const struct bpi_FaceFinder* ptrA, uint16* memPtrA ); 125 126 /** reads object from memory; returns number of words (16-bit) read */ 127 uint32 bpi_FaceFinder_memRead( struct bbs_Context* cpA, 128 struct bpi_FaceFinder* ptrA, const uint16* memPtrA ); 129 130 /* ---- \ghd{ exec functions } --------------------------------------------- */ 131 132 /** virtual init function */ 133 void bpi_faceFinderInit( struct bbs_Context* cpA, 134 struct bpi_FaceFinder* ptrA, 135 enum bpi_FaceFinderType typeA ); 136 137 /** virtual exit function */ 138 void bpi_faceFinderExit( struct bbs_Context* cpA, 139 struct bpi_FaceFinder* ptrA ); 140 141 /** virtual mem size function */ 142 uint32 bpi_faceFinderMemSize( struct bbs_Context* cpA, 143 const struct bpi_FaceFinder* ptrA ); 144 145 /** virtual mem write function */ 146 uint32 bpi_faceFinderMemWrite( struct bbs_Context* cpA, 147 const struct bpi_FaceFinder* ptrA, 148 uint16* memPtrA ); 149 150 /** virtual mem read function */ 151 uint32 bpi_faceFinderMemRead( struct bbs_Context* cpA, 152 struct bpi_FaceFinder* ptrA, 153 const uint16* memPtrA, 154 struct bbs_MemTbl* mtpA ); 155 156 /** virtual sizeof operator for 16bit units */ 157 uint32 bpi_faceFinderSizeOf16( struct bbs_Context* cpA, 158 enum bpi_FaceFinderType typeA ); 159 160 #endif /* bpi_FACE_FINDER_EM_H */ 161 162