17f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* 27f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 37f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 47f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * you may not use this file except in compliance with the License. 67f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * You may obtain a copy of the License at 77f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 87f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * See the License for the specific language governing permissions and 147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * limitations under the License. 157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */ 167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */ 187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Functions.h" 207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Math.h" 217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BitFeatureEm/LocalScanner.h" 227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ 287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** allocates arays */ 347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_alloc( struct bbs_Context* cpA, 357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA, 367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemTbl* mtpA ) 377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemTbl memTblL = *mtpA; 397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); 407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemSeg* sspL = bbs_MemTbl_sharedSegPtr( cpA, &memTblL, 0 ); 417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* filter patch dimension */ 437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 proL = ptrA->maxRadiusE; 447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 pwoL = ( proL << 1 ) + 1; 457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* output image size (bit image) */ 477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 woL = ptrA->maxImageWidthE; 487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 hoL = ptrA->maxImageHeightE; 497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->minScaleExpE > 0 ) 517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* allocate working image */ 537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt8Arr_create( cpA, &ptrA->workImageBufferE, ( woL >> 1 ) * ( hoL >> 1 ), espL ); 547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt8Arr_fill( cpA, &ptrA->workImageBufferE, 0 ); 557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* allocate bit image */ 587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_create( cpA, &ptrA->bitImageE, woL, ( hoL >> 5 ) + ( ( ( hoL & 0x1F ) != 0 ) ? 1 : 0 ), espL ); 597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_setAllPixels( cpA, &ptrA->bitImageE, 0, 0 ); 607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* allocate patch buffer */ 627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt32Arr_create( cpA, &ptrA->patchBufferE, ptrA->bitImageE.widthE, espL ); 637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt32Arr_fill( cpA, &ptrA->patchBufferE, 0 ); 647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* allocate table */ 667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_create( cpA, &ptrA->satE, woL + pwoL, pwoL + 1, sspL ); 677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** downscales original image by factor 2 */ 727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_downscale0( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 w0L = ptrA->origWidthE; 757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 h0L = ptrA->origHeightE; 767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 w1L = ( w0L - ptrA->xOffE ) >> 1; 787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 h1L = ( h0L - ptrA->yOffE ) >> 1; 797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint8* iArrL = ptrA->origImagePtrE + ptrA->xOffE + ptrA->yOffE * w0L; 817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint8* oArrL = ptrA->workImageBufferE.arrPtrE; 827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 iL, jL; 847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 kL = 0; 857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt8Arr_size( cpA, &ptrA->workImageBufferE, w1L * h1L ); 877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workImagePtrE = ptrA->workImageBufferE.arrPtrE; 887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workWidthE = w1L; 897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workHeightE = h1L; 907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( jL = 0; jL < h1L; jL++ ) 927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < w1L; iL++ ) 947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 idxL = jL * 2 * w0L + iL * 2; 967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project oArrL[ kL++ ] = ( ( uint32 )iArrL[ idxL ] + 977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project iArrL[ idxL + 1 ] + 987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project iArrL[ idxL + w0L ] + 997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project iArrL[ idxL + w0L + 1 ] + 2 ) >> 2; 1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** downscales work image by factor 2 */ 1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_downscale1( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 w0L = ptrA->workWidthE; 1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 h0L = ptrA->workHeightE; 1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 w1L = w0L >> 1; 1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 h1L = h0L >> 1; 1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint8* arrL = ptrA->workImageBufferE.arrPtrE; 1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 iL, jL; 1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 kL = 0; 1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( jL = 0; jL < h1L; jL++ ) 1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < w1L; iL++ ) 1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 idxL = jL * 2 * w0L + iL * 2; 1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project arrL[ kL++ ] = ( ( uint32 )arrL[ idxL ] + 1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project arrL[ idxL + 1 ] + 1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project arrL[ idxL + w0L ] + 1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project arrL[ idxL + w0L + 1 ] + 2 ) >> 2; 1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workWidthE = w1L; 1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workHeightE = h1L; 1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** downscales by factor 2 */ 1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_downscale( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->scaleExpE > 0 ) bbf_LocalScanner_downscale0( cpA, ptrA ); 1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 1; iL < ptrA->scaleExpE; iL++ ) bbf_LocalScanner_downscale1( cpA, ptrA ); 1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** computes bit image */ 1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_createBitImage( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_DEF_fNameL( "void bbf_LocalScanner_createBitImage( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA )" ) 1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL, jL; 1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 proL = ptrA->bitParamE.outerRadiusE; 1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 priL = ptrA->bitParamE.innerRadiusE; 1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 pwoL = ( proL << 1 ) + 1; 1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 pwiL = ( priL << 1 ) + 1; 1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* areas of inner and outer rectangles */ 1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 poAreaL = pwoL * pwoL; 1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 piAreaL = pwiL * pwiL; 1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 wL, hL; /* input image size */ 1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 wsL, hsL; 1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* satL; 1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 satSizeL; 1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 swi1L = 0; /* writing index */ 1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 swi2L = 0; /* writing index */ 1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sriL = 0; /* reading index */ 1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 siL[ 8 ]; 1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 bitMaskL; 1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* bitRowL; 1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( proL <= priL ) 1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERROR1( "%s:\n outer radius <= inner radius", fNameL ); 1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return; 1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* input image size */ 1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project wL = ptrA->workWidthE; 1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project hL = ptrA->workHeightE; 1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( wL <= pwoL || hL <= pwoL ) 1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERROR1( "%s:\n image is too small", fNameL ); 1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return; 1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->currentWidthE = wL; 1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->currentHeightE = hL; 1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* reset scan region */ 1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workScanRegionE = bts_Int16Rect_create( 0, 0, ptrA->currentWidthE, ptrA->currentHeightE ); 1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* initialize bit image */ 2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_size( cpA, &ptrA->bitImageE, wL, ( hL >> 5 ) + ( ( ( hL & 0x1F ) != 0 ) ? 1 : 0 ) ); 2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_setAllPixels( cpA, &ptrA->bitImageE, 0, 0 ); 2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bitMaskL = 1; 2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bitRowL = ( uint32* )ptrA->bitImageE.arrE.arrPtrE; 2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* width of table */ 2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project wsL = wL + pwoL; 2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* height of table */ 2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project hsL = pwoL + 1; 2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_size( cpA, &ptrA->satE, wsL, hsL ); 2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project satL = ( uint32* )ptrA->satE.arrE.arrPtrE; 2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project satSizeL = ptrA->satE.arrE.sizeE; 2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* compute table and bit image */ 2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = wsL * ( proL + 1 ); iL > 0; iL-- ) satL[ swi1L++ ] = 0; 2197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project swi2L = swi1L - wsL; 2207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( jL = 0; jL < hL + proL; jL++ ) 2227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( jL < hL ) /* rescale area */ 2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint8* arr0L = &ptrA->workImagePtrE[ jL * wL ]; 2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 hSumL = 0; 2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL <= proL; iL++ ) satL[ swi1L++ ] = 0; 2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project swi2L += iL; 2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < wL; iL++ ) satL[ swi1L++ ] = ( hSumL += arr0L[ iL ] ) + satL[ swi2L++ ]; 2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < proL; iL++ ) satL[ swi1L++ ] = hSumL + satL[ swi2L++ ]; 2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else /* image is processed - fill in 0s */ 2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < wsL; iL++ ) satL[ swi1L++ ] = satL[ swi2L++ ]; 2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project swi1L = ( swi1L < satSizeL ) ? swi1L : 0; 2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project swi2L = ( swi2L < satSizeL ) ? swi2L : 0; 2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* fill line in bit image */ 2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( jL >= proL ) 2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint32* rSatL = satL; 2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* table coordinate indices for outer rectangle */ 2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 0 ] = sriL; 2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 1 ] = siL[ 0 ] + pwoL; 2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 2 ] = siL[ 0 ] + pwoL * wsL; 2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 2 ] -= ( siL[ 2 ] >= satSizeL ) ? satSizeL : 0; 2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 3 ] = siL[ 2 ] + pwoL; 2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* table coordinate indices for inner rectangle */ 2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 4 ] = siL[ 0 ] + ( proL - priL ) * wsL + ( proL - priL ); 2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 4 ] -= ( siL[ 4 ] >= satSizeL ) ? satSizeL : 0; 2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 5 ] = siL[ 4 ] + pwiL; 2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 6 ] = siL[ 4 ] + pwiL * wsL; 2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 6 ] -= ( siL[ 6 ] >= satSizeL ) ? satSizeL : 0; 2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project siL[ 7 ] = siL[ 6 ] + pwiL; 2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sriL += wsL; 2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( sriL == satSizeL ) sriL = 0; 2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < wL; iL++ ) 2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 oAvgL = ( rSatL[ siL[ 0 ] ] - rSatL[ siL[ 1 ] ] - rSatL[ siL[ 2 ] ] + rSatL[ siL[ 3 ] ] ) * piAreaL; 2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iAvgL = ( rSatL[ siL[ 4 ] ] - rSatL[ siL[ 5 ] ] - rSatL[ siL[ 6 ] ] + rSatL[ siL[ 7 ] ] ) * poAreaL; 2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bitRowL[ iL ] |= ( iAvgL > oAvgL ) ? bitMaskL : 0; 2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project rSatL++; 2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( bitMaskL <<= 1 ) == 0 ) 2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bitRowL += wL; 2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bitMaskL = 1; 2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* -------------------------------------------------------------------------- */ 2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** inilialize patch buffer */ 2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_initPatchBuffer( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 ybL = ptrA->workScanRegionE.y1E >> 5; 2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yoL = ptrA->workScanRegionE.y1E & 0x1F; 2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xbL = ptrA->workScanRegionE.x1E; 2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 wsrWidthL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E; 2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt32Arr_size( cpA, &ptrA->patchBufferE, ptrA->bitImageE.widthE ); 2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( yoL == 0 ) 2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_memcpy32( ptrA->patchBufferE.arrPtrE + xbL, 2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->bitImageE.arrE.arrPtrE + ybL * ptrA->bitImageE.widthE + xbL, 2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project wsrWidthL ); 2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else if( ybL == ( int32 )ptrA->bitImageE.heightE - 1 ) 2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* dstL = ptrA->patchBufferE.arrPtrE + xbL; 2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + ybL * ptrA->bitImageE.widthE + xbL; 3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < wsrWidthL; iL++ ) dstL[ iL ] = srcL[ iL ] >> yoL; 3027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 3047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* dstL = ptrA->patchBufferE.arrPtrE + xbL; 3067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint32* src0L = ptrA->bitImageE.arrE.arrPtrE + ybL * ptrA->bitImageE.widthE + xbL; 3077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint32* src1L = src0L + ptrA->bitImageE.widthE; 3087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 3097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 slL = 32 - yoL; 3107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < wsrWidthL; iL++ ) dstL[ iL ] = ( src0L[ iL ] >> yoL ) | ( src1L[ iL ] << slL ); 3117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* sets work scan region from original scan region according to scale exponent */ 3177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_setWorkScanRegion( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 3187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xMinL = ptrA->origScanRegionE.x1E >> ptrA->scaleExpE; 3207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yMinL = ptrA->origScanRegionE.y1E >> ptrA->scaleExpE; 3217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xMaxL = ptrA->origScanRegionE.x2E >> ptrA->scaleExpE; 3227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yMaxL = ptrA->origScanRegionE.y2E >> ptrA->scaleExpE; 3237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workScanRegionE.x1E = ( xMinL < 0 ) ? 0 : xMinL; 3247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workScanRegionE.y1E = ( yMinL < 0 ) ? 0 : yMinL; 3257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workScanRegionE.x2E = ( xMaxL > ( int32 )ptrA->currentWidthE ) ? ptrA->currentWidthE : xMaxL; 3267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workScanRegionE.y2E = ( yMaxL > ( int32 )ptrA->currentHeightE ) ? ptrA->currentHeightE : yMaxL; 3277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 3327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 3337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor / destructor } ----------------------------------- */ 3347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 3357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 3367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_init( struct bbs_Context* cpA, 3407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA ) 3417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = 0; 3437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE = 0; 3447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xOffE = 0; 3457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yOffE = 0; 3467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->currentWidthE = 0; 3477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->currentHeightE = 0; 3487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workWidthE = 0; 3497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workHeightE = 0; 3507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workImagePtrE = NULL; 3517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origWidthE = 0; 3527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origHeightE = 0; 3537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origImagePtrE = NULL; 3547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_BitParam_init( cpA, &ptrA->bitParamE ); 3557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt8Arr_init( cpA, &ptrA->workImageBufferE ); 3567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_init( cpA, &ptrA->satE ); 3577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_init( cpA, &ptrA->bitImageE ); 3587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt32Arr_init( cpA, &ptrA->patchBufferE ); 3597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Int16Rect_init( cpA, &ptrA->origScanRegionE ); 3607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Int16Rect_init( cpA, &ptrA->workScanRegionE ); 3617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->patchWidthE = 0; 3637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->patchHeightE = 0; 3647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->scaleExpE = 0; 3657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxImageWidthE = 0; 3667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxImageHeightE = 0; 3677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->minScaleExpE = 0; 3687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxRadiusE = 0; 3697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_exit( struct bbs_Context* cpA, 3747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA ) 3757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = 0; 3777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE = 0; 3787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xOffE = 0; 3797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yOffE = 0; 3807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->currentWidthE = 0; 3817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->currentHeightE = 0; 3827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workWidthE = 0; 3837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workHeightE = 0; 3847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workImagePtrE = NULL; 3857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origWidthE = 0; 3867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origHeightE = 0; 3877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origImagePtrE = NULL; 3887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_BitParam_exit( cpA, &ptrA->bitParamE ); 3897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt8Arr_exit( cpA, &ptrA->workImageBufferE ); 3907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_exit( cpA, &ptrA->satE ); 3917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bim_UInt32Image_exit( cpA, &ptrA->bitImageE ); 3927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_UInt32Arr_exit( cpA, &ptrA->patchBufferE ); 3937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Int16Rect_exit( cpA, &ptrA->origScanRegionE ); 3947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Int16Rect_exit( cpA, &ptrA->workScanRegionE ); 3957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->patchWidthE = 0; 3977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->patchHeightE = 0; 3987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->scaleExpE = 0; 3997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxImageWidthE = 0; 4007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxImageHeightE = 0; 4017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->minScaleExpE = 0; 4027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxRadiusE = 0; 4037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 4087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 4097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */ 4107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 4117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 4127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_copy( struct bbs_Context* cpA, 4167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA, 4177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_LocalScanner* srcPtrA ) 4187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERROR0( "bbf_LocalScanner_copy:\n Function is not available" ); 4207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbf_LocalScanner_equal( struct bbs_Context* cpA, 4257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_LocalScanner* ptrA, 4267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_LocalScanner* srcPtrA ) 4277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERROR0( "bbf_LocalScanner_equal:\n Function is not available" ); 4297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return FALSE; 4307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 4357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 4367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */ 4377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 4387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 4397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_LocalScanner_positions( const struct bbf_LocalScanner* ptrA ) 4437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; 4457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 hL = ptrA->workScanRegionE.y2E - ptrA->workScanRegionE.y1E - ptrA->patchHeightE; 4467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return ( ( wL < 0 ) ? 0 : wL ) * ( ( hL < 0 ) ? 0 : hL ); 4477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_LocalScanner_scanIndex( const struct bbf_LocalScanner* ptrA ) 4527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; 4547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return ( ptrA->yE - ptrA->workScanRegionE.y1E ) * wL + ( ptrA->xE - ptrA->workScanRegionE.x1E ); 4557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_pos( const struct bbf_LocalScanner* ptrA, int32* xPtrA, int32* yPtrA ) 4607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *xPtrA = ( ( ptrA->xE << ptrA->scaleExpE ) + ptrA->xOffE ) << 16; 4627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *yPtrA = ( ( ptrA->yE << ptrA->scaleExpE ) + ptrA->yOffE ) << 16; 4637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_idxPos( const struct bbf_LocalScanner* ptrA, uint32 scanIndexA, int32* xPtrA, int32* yPtrA ) 4687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; 4707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL = ( scanIndexA % wL ) + ptrA->workScanRegionE.x1E; 4717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yL = ( scanIndexA / wL ) + ptrA->workScanRegionE.y1E; 4727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *xPtrA = ( ( xL << ptrA->scaleExpE ) + ptrA->xOffE ) << 16; 4737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *yPtrA = ( ( yL << ptrA->scaleExpE ) + ptrA->yOffE ) << 16; 4747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 4797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 4807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */ 4817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 4827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 4837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_create( struct bbs_Context* cpA, 4877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA, 4887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 patchWidthA, 4897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 patchHeightA, 4907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 scaleExpA, 4917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxImageWidthA, 4927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxImageHeightA, 4937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 minScaleExpA, 4947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxRadiusA, 4957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemTbl* mtpA ) 4967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->patchWidthE = patchWidthA; 4987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->patchHeightE = patchHeightA; 4997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->scaleExpE = scaleExpA; 5007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxImageWidthE = maxImageWidthA; 5017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxImageHeightE = maxImageHeightA; 5027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->minScaleExpE = minScaleExpA; 5037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->maxRadiusE = maxRadiusA; 5047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_alloc( cpA, ptrA, mtpA ); 5057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 5067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 5087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_bitParam( struct bbs_Context* cpA, 5107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA, 5117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_BitParam* bitParamPtrA ) 5127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 5137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( !bbf_BitParam_equal( cpA, &ptrA->bitParamE, bitParamPtrA ) ) 5147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 5157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_BitParam_copy( cpA, &ptrA->bitParamE, bitParamPtrA ); 5167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_createBitImage( cpA, ptrA ); 5177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 5187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_resetScan( cpA, ptrA ); 5207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 5217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 5237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_origScanRegion( struct bbs_Context* cpA, 5257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA, 5267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Int16Rect* scanRegionPtrA ) 5277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 5287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origScanRegionE = *scanRegionPtrA; 5297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_setWorkScanRegion( cpA, ptrA ); 5307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_resetScan( cpA, ptrA ); 5317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 5327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 5347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 5367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 5377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ I/O } -------------------------------------------------------- */ 5387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 5397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 5407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 5427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_LocalScanner_memSize( struct bbs_Context* cpA, 5447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_LocalScanner* ptrA ) 5457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 5467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 memSizeL = bbs_SIZEOF16( uint32 ) + 5477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_SIZEOF16( uint32 ); /* version */ 5487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memSizeL += bbs_SIZEOF16( ptrA->patchWidthE ); 5507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memSizeL += bbs_SIZEOF16( ptrA->patchHeightE ); 5517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memSizeL += bbs_SIZEOF16( ptrA->scaleExpE ); 5527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memSizeL += bbs_SIZEOF16( ptrA->maxImageWidthE ); 5537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memSizeL += bbs_SIZEOF16( ptrA->maxImageHeightE ); 5547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memSizeL += bbs_SIZEOF16( ptrA->minScaleExpE ); 5557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memSizeL += bbs_SIZEOF16( ptrA->maxRadiusE ); 5567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return memSizeL; 5587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 5597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 5617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_LocalScanner_memWrite( struct bbs_Context* cpA, 5637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_LocalScanner* ptrA, 5647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16* memPtrA ) 5657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 5667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 memSizeL = bbf_LocalScanner_memSize( cpA, ptrA ); 5677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); 5687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWriteUInt32( bbf_LOCAL_SCANNER_VERSION, memPtrA ); 5697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA ); 5717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA ); 5727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &ptrA->scaleExpE, memPtrA ); 5737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &ptrA->maxImageWidthE, memPtrA ); 5747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &ptrA->maxImageHeightE, memPtrA ); 5757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &ptrA->minScaleExpE, memPtrA ); 5767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &ptrA->maxRadiusE, memPtrA ); 5777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return memSizeL; 5787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 5797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 5817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_LocalScanner_memRead( struct bbs_Context* cpA, 5837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA, 5847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint16* memPtrA, 5857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemTbl* mtpA ) 5867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 5877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 memSizeL, versionL; 5887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( bbs_Context_error( cpA ) ) return 0; 5907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &memSizeL, memPtrA ); 5917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_LOCAL_SCANNER_VERSION, memPtrA ); 5927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 5937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA ); 5947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA ); 5957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &ptrA->scaleExpE, memPtrA ); 5967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &ptrA->maxImageWidthE, memPtrA ); 5977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &ptrA->maxImageHeightE, memPtrA ); 5987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &ptrA->minScaleExpE, memPtrA ); 5997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &ptrA->maxRadiusE, memPtrA ); 6007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( memSizeL != bbf_LocalScanner_memSize( cpA, ptrA ) ) 6027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 6037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_LocalScanner_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" 6047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project "size mismatch" ); 6057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return 0; 6067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 6077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( bbs_Context_error( cpA ) ) return 0; 6097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* allocate arrays */ 6117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_alloc( cpA, ptrA, mtpA ); 6127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( bbs_Context_error( cpA ) ) return 0; 6147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return memSizeL; 6167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 6177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 6197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 6217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 6227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */ 6237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 6247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 6257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 6277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_resetScan( struct bbs_Context* cpA, 6297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA ) 6307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 6317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = ptrA->workScanRegionE.x1E; 6327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE = ptrA->workScanRegionE.y1E; 6337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_initPatchBuffer( cpA, ptrA ); 6347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 6357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 6377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_assign( struct bbs_Context* cpA, 6397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_LocalScanner* ptrA, 6407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint8* imagePtrA, 6417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 imageWidthA, 6427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 imageHeightA, 6437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_BitParam* paramPtrA ) 6447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 6457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->scaleExpE == 0 ) 6467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 6477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workImagePtrE = imagePtrA; 6487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workWidthE = imageWidthA; 6497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->workHeightE = imageHeightA; 6507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 6517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 6527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 6537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origImagePtrE = imagePtrA; 6547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origWidthE = imageWidthA; 6557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origHeightE = imageHeightA; 6567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 6577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->bitParamE = *paramPtrA; 6597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xOffE = 0; 6607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yOffE = 0; 6617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->origScanRegionE = bts_Int16Rect_create( 0, 0, imageWidthA, imageHeightA ); 6627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_downscale( cpA, ptrA ); 6637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_createBitImage( cpA, ptrA ); 6647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_resetScan( cpA, ptrA ); 6657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 6667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 6687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectconst uint32* bbf_LocalScanner_getPatch( const struct bbf_LocalScanner* ptrA ) 6707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 6717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return ptrA->patchBufferE.arrPtrE + ptrA->xE; 6727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 6737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 6757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbf_LocalScanner_next( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 6777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 6787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( ptrA->xE + 1 ) < ptrA->workScanRegionE.x2E - ( int32 )ptrA->patchWidthE ) 6797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 6807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE++; 6817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 6827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 6837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( ptrA->yE + 1 ) >= ptrA->workScanRegionE.y2E - ( int32 )ptrA->patchHeightE ) return FALSE; 6857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = ptrA->workScanRegionE.x1E; 6877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE++; 6887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 6907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 offL = ( ptrA->yE & 0x1F ); 6917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 rowL = ( ptrA->yE >> 5 ) + ( offL > 0 ? 1 : 0 ); 6927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 widthL = ptrA->bitImageE.widthE; 6947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E; 6957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* dstL = ( uint32* )ptrA->patchBufferE.arrPtrE + ptrA->xE; 6967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 6977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 6987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( rowL < ptrA->bitImageE.heightE ) 6997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + rowL * widthL + ptrA->xE; 7017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( offL > 0 ) 7027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 shlL = 32 - offL; 7047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( dstL[ iL ] >> 1 ) | ( srcL[ iL ] << shlL ); 7057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 7077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_memcpy32( dstL, srcL, sizeL ); 7097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 7127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] >>= 1; 7147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 7187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 7197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 7217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_goToXY( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, int32 xA, int32 yA ) 7237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 7247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_DEF_fNameL( "void bbf_LocalScanner_goToXY( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, int32 xA, int32 yA )" ) 7257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( xA < ptrA->workScanRegionE.x1E || xA >= ptrA->workScanRegionE.x2E - ( int32 )ptrA->patchWidthE ) 7267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERROR1( "%s:\nxA out of range", fNameL ); 7287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return; 7297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = xA; 7317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->yE == yA ) return; 7327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( yA < ptrA->workScanRegionE.y1E || yA >= ptrA->workScanRegionE.y2E - ( int32 )ptrA->patchHeightE ) 7337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERROR1( "%s:\nyA out of range", fNameL ); 7357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return; 7367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE = yA; 7387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 offL = ( ptrA->yE & 0x1F ); 7417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 rowL = ( ptrA->yE >> 5 ) + ( offL > 0 ? 1 : 0 ); 7427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E; 7447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 imgWidthL = ptrA->bitImageE.widthE; 7457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 imgOffsL = ptrA->workScanRegionE.x1E; 7467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* dstL = ptrA->patchBufferE.arrPtrE + imgOffsL; 7477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 7487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( rowL < ptrA->bitImageE.heightE ) 7507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( offL > 0 ) 7527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* src1L = ptrA->bitImageE.arrE.arrPtrE + rowL * imgWidthL + imgOffsL; 7547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* src0L = src1L - imgWidthL; 7557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 shlL = 32 - offL; 7567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( src0L[ iL ] >> offL ) | ( src1L[ iL ] << shlL ); 7577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 7597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_memcpy32( dstL, ptrA->bitImageE.arrE.arrPtrE + rowL * imgWidthL + imgOffsL, sizeL ); 7617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 7647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + ( rowL - 1 ) * imgWidthL + imgOffsL; 7667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = srcL[ iL ] >> offL; 7677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 7707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 7727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_LocalScanner_goToIndex( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, uint32 scanIndexA ) 7747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 7757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; 7767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_goToXY( cpA, ptrA, 7777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ( scanIndexA % wL ) + ptrA->workScanRegionE.x1E, 7787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ( scanIndexA / wL ) + ptrA->workScanRegionE.y1E ); 7797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 7807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 7827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbf_LocalScanner_nextOffset( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) 7847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 7857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 maxL = ( 1 << ptrA->scaleExpE ); 7867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->yOffE == maxL ) return FALSE; 7877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xOffE++; 7897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->xOffE == maxL ) 7917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 7927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xOffE = 0; 7937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yOffE++; 7947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->yOffE == maxL ) return FALSE; 7957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 7967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 7977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_downscale( cpA, ptrA ); 7987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_createBitImage( cpA, ptrA ); 7997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_setWorkScanRegion( cpA, ptrA ); 8007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbf_LocalScanner_resetScan( cpA, ptrA ); 8017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 8027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 8037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 8047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 8057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 8067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 8077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 808