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 /* ---- includes ----------------------------------------------------------- */ 18 19 #include "b_APIEm/DCR.h" 20 #include "b_BasicEm/Functions.h" 21 22 /* ------------------------------------------------------------------------- */ 23 24 /* ========================================================================= */ 25 /* */ 26 /* ---- \ghd{ auxiliary functions } ---------------------------------------- */ 27 /* */ 28 /* ========================================================================= */ 29 30 /* ------------------------------------------------------------------------- */ 31 32 /* ========================================================================= */ 33 /* */ 34 /* ---- \ghd{ constructor / destructor } ----------------------------------- */ 35 /* */ 36 /* ========================================================================= */ 37 38 /* ------------------------------------------------------------------------- */ 39 40 void bpi_DCR_init( struct bbs_Context* cpA, 41 struct bpi_DCR* ptrA ) 42 { 43 ptrA->maxImageWidthE = 0; 44 ptrA->maxImageHeightE = 0; 45 ptrA->imageDataPtrE = NULL; 46 ptrA->imageWidthE = 0; 47 ptrA->imageHeightE = 0; 48 bts_Int16Vec2D_init( &ptrA->offsE ); 49 bts_IdCluster2D_init( cpA, &ptrA->mainClusterE ); 50 bts_IdCluster2D_init( cpA, &ptrA->sdkClusterE ); 51 ptrA->confidenceE = 0; 52 ptrA->approvedE = FALSE; 53 ptrA->idE = 0; 54 ptrA->roiRectE = bts_Int16Rect_create( 0, 0, 0, 0 ); 55 bbs_UInt16Arr_init( cpA, &ptrA->cueDataE ); 56 } 57 58 /* ------------------------------------------------------------------------- */ 59 60 void bpi_DCR_exit( struct bbs_Context* cpA, 61 struct bpi_DCR* ptrA ) 62 { 63 ptrA->maxImageWidthE = 0; 64 ptrA->maxImageHeightE = 0; 65 ptrA->imageDataPtrE = NULL; 66 ptrA->imageWidthE = 0; 67 ptrA->imageHeightE = 0; 68 bts_Int16Vec2D_exit( &ptrA->offsE ); 69 bts_IdCluster2D_exit( cpA, &ptrA->mainClusterE ); 70 bts_IdCluster2D_exit( cpA, &ptrA->sdkClusterE ); 71 ptrA->confidenceE = 0; 72 ptrA->approvedE = FALSE; 73 ptrA->idE = 0; 74 bbs_UInt16Arr_exit( cpA, &ptrA->cueDataE ); 75 } 76 77 /* ------------------------------------------------------------------------- */ 78 79 /* ========================================================================= */ 80 /* */ 81 /* ---- \ghd{ operators } -------------------------------------------------- */ 82 /* */ 83 /* ========================================================================= */ 84 85 /* ------------------------------------------------------------------------- */ 86 87 /* ========================================================================= */ 88 /* */ 89 /* ---- \ghd{ query functions } -------------------------------------------- */ 90 /* */ 91 /* ========================================================================= */ 92 93 /* ------------------------------------------------------------------------- */ 94 95 /* ========================================================================= */ 96 /* */ 97 /* ---- \ghd{ modify functions } ------------------------------------------- */ 98 /* */ 99 /* ========================================================================= */ 100 101 /* ------------------------------------------------------------------------- */ 102 103 void bpi_DCR_create( struct bbs_Context* cpA, 104 struct bpi_DCR* ptrA, 105 uint32 imageWidthA, 106 uint32 imageHeightA, 107 uint32 cueSizeA, 108 struct bbs_MemTbl* mtpA ) 109 { 110 struct bbs_MemTbl memTblL = *mtpA; 111 struct bbs_MemSeg* espL = 112 bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 113 bpi_DCR_MAX_CLUSTER_SIZE * bbs_SIZEOF16( struct bts_Int16Vec2D ) ); 114 if( bbs_Context_error( cpA ) ) return; 115 116 bts_IdCluster2D_create( cpA, &ptrA->mainClusterE, bpi_DCR_MAX_CLUSTER_SIZE, espL ); 117 bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); 118 if( bbs_Context_error( cpA ) ) return; 119 bts_IdCluster2D_create( cpA, &ptrA->sdkClusterE, bpi_DCR_MAX_SDK_CLUSTER_SIZE, espL ); 120 bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); 121 if( bbs_Context_error( cpA ) ) return; 122 if( bbs_Context_error( cpA ) ) return; 123 bbs_UInt16Arr_create( cpA, &ptrA->cueDataE, cueSizeA, espL ); 124 bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); 125 126 ptrA->maxImageWidthE = imageWidthA; 127 ptrA->maxImageHeightE = imageHeightA; 128 } 129 130 /* ------------------------------------------------------------------------- */ 131 132 /* ========================================================================= */ 133 /* */ 134 /* ---- \ghd{ I/O } -------------------------------------------------------- */ 135 /* */ 136 /* ========================================================================= */ 137 138 /* ------------------------------------------------------------------------- */ 139 140 /* ========================================================================= */ 141 /* */ 142 /* ---- \ghd{ exec functions } --------------------------------------------- */ 143 /* */ 144 /* ========================================================================= */ 145 146 /* ------------------------------------------------------------------------- */ 147 148 void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, 149 struct bpi_DCR* ptrA, 150 const void* bufferPtrA, 151 uint32 widthA, 152 uint32 heightA ) 153 { 154 bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" ) 155 156 if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE ) 157 { 158 bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).", 159 fNameL, 160 widthA, heightA, 161 ptrA->maxImageWidthE, ptrA->maxImageHeightE ); 162 return; 163 } 164 165 if( ( widthA & 1 ) != 0 ) 166 { 167 bbs_ERROR1( "%s:\nWidth of image must be even.\n", fNameL ); 168 return; 169 } 170 171 ptrA->imageDataPtrE = ( void* )bufferPtrA; 172 ptrA->imageWidthE = widthA; 173 ptrA->imageHeightE = heightA; 174 175 /* reset some data */ 176 ptrA->roiRectE = bts_Int16Rect_create( 0, 0, widthA, heightA ); 177 bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); 178 bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); 179 bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); 180 } 181 182 /* ------------------------------------------------------------------------- */ 183 184 void bpi_DCR_assignGrayByteImageROI( struct bbs_Context* cpA, 185 struct bpi_DCR* ptrA, 186 const void* bufferPtrA, 187 uint32 widthA, 188 uint32 heightA, 189 const struct bts_Int16Rect* pRectA ) 190 { 191 bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImageROI( struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" ) 192 193 if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE ) 194 { 195 bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).", 196 fNameL, 197 widthA, heightA, 198 ptrA->maxImageWidthE, ptrA->maxImageHeightE ); 199 return; 200 } 201 202 if( ( widthA & 1 ) != 0 ) 203 { 204 bbs_ERROR1( "%s:\nWidth of image must be even.\n", 205 fNameL ); 206 return; 207 } 208 209 if( pRectA->x2E < pRectA->x1E || pRectA->y2E < pRectA->y1E || 210 pRectA->x1E < 0 || pRectA->y1E < 0 || 211 pRectA->x2E > ( int32 )widthA || pRectA->y2E > ( int32 )heightA ) 212 { 213 bbs_ERROR1( "%s:\nInvalid ROI rectangle.\n", fNameL ); 214 return; 215 } 216 217 ptrA->imageDataPtrE = ( void* )bufferPtrA; 218 ptrA->imageWidthE = widthA; 219 ptrA->imageHeightE = heightA; 220 221 /* reset some data */ 222 ptrA->roiRectE = *pRectA; 223 bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); 224 bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); 225 bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); 226 } 227 228 /* ------------------------------------------------------------------------- */ 229 230 int32 bpi_DCR_confidence( struct bbs_Context* cpA, 231 const struct bpi_DCR* ptrA ) 232 { 233 return ptrA->confidenceE; 234 } 235 236 /* ------------------------------------------------------------------------- */ 237 238 /* ========================================================================= */ 239