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 */ 34enum 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) */ 45struct 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 */ 93void bpi_FaceFinder_init( struct bbs_Context* cpA, 94 struct bpi_FaceFinder* ptrA ); 95 96/** resets bpi_FaceFinder */ 97void bpi_FaceFinder_exit( struct bbs_Context* cpA, 98 struct bpi_FaceFinder* ptrA ); 99 100/* ---- \ghd{ operators } -------------------------------------------------- */ 101 102/** copy operator */ 103void bpi_FaceFinder_copy( struct bbs_Context* cpA, 104 struct bpi_FaceFinder* ptrA, 105 const struct bpi_FaceFinder* srcPtrA ); 106 107/** equal operator */ 108flag 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 */ 119uint32 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 */ 123uint32 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 */ 127uint32 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 */ 133void bpi_faceFinderInit( struct bbs_Context* cpA, 134 struct bpi_FaceFinder* ptrA, 135 enum bpi_FaceFinderType typeA ); 136 137/** virtual exit function */ 138void bpi_faceFinderExit( struct bbs_Context* cpA, 139 struct bpi_FaceFinder* ptrA ); 140 141/** virtual mem size function */ 142uint32 bpi_faceFinderMemSize( struct bbs_Context* cpA, 143 const struct bpi_FaceFinder* ptrA ); 144 145/** virtual mem write function */ 146uint32 bpi_faceFinderMemWrite( struct bbs_Context* cpA, 147 const struct bpi_FaceFinder* ptrA, 148 uint16* memPtrA ); 149 150/** virtual mem read function */ 151uint32 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 */ 157uint32 bpi_faceFinderSizeOf16( struct bbs_Context* cpA, 158 enum bpi_FaceFinderType typeA ); 159 160#endif /* bpi_FACE_FINDER_EM_H */ 161 162