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 40void 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 60void 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 103void 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 148void 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 184void 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 230int32 bpi_DCR_confidence( struct bbs_Context* cpA, 231 const struct bpi_DCR* ptrA ) 232{ 233 return ptrA->confidenceE; 234} 235 236/* ------------------------------------------------------------------------- */ 237 238/* ========================================================================= */ 239