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#ifndef bbf_SCANNER_EM_H
187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bbf_SCANNER_EM_H
197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Context.h"
237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Basic.h"
247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/UInt32Arr.h"
257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Int32Arr.h"
267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Int16Arr.h"
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/MemTbl.h"
287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/UInt16Arr.h"
297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_ImageEm/UInt32Image.h"
307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BitFeatureEm/Feature.h"
327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BitFeatureEm/BitParam.h"
337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- related objects  --------------------------------------------------- */
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- typedefs ----------------------------------------------------------- */
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- constants ---------------------------------------------------------- */
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* data format version number */
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bbf_SCANNER_VERSION 100
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- object definition -------------------------------------------------- */
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** scans an image and provides patches as needed */
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbf_Scanner
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* ---- private data --------------------------------------------------- */
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** downscale exponent */
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 scaleExpE;
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** current scale (12.20) */
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 scaleE;
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** current scan x-coordinate */
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 xE;
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** current scan y-coordinate */
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 yE;
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** effective maximum scale (12.20) */
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 effMaxScaleE;
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** width of scaled image */
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 currentWidthE;
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** height of scaled image */
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 currentHeightE;
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** width of work image */
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 workWidthE;
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** height of work image */
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 workHeightE;
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** parameter for bit generation */
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbf_BitParam bitParamE;
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** work image (two pixels per uint16)*/
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_UInt16Arr workImageE;
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** summed-area table (ring buffer) */
847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bim_UInt32Image satE;
857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** bit image */
877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bim_UInt32Image bitImageE;
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** patch buffer */
907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_UInt32Arr patchBufferE;
917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** image line buffer */
937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_UInt16Arr lineBufE;
947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** index position buffer */
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_UInt32Arr idxArrE;
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** activity buffer */
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_Int32Arr actArrE;
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** composite output buffer */
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_Int32Arr outArrE;
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* internal positions detected */
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 intCountE;
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* output positions detected */
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 outCountE;
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** Face positions buffer size (approx.: max faces * 20...60)
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	 *  This variable is not part of I/O and must be set before calling memRead
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	 *  Default value: 1024 -> about 100...200 faces/image detectable
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	 *
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	 *  The Scanner allocates internally bufferSizeE * 10 bytes of exclusive memory
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	 */
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 bufferSizeE;
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* ---- public data ---------------------------------------------------- */
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** maximum image width */
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxImageWidthE;
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** maximum image height */
1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxImageHeightE;
1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** maximum filter radius */
1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxRadiusE;
1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** patch width */
1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 patchWidthE;
1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** patch height */
1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 patchHeightE;
1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** minimum scale (12.20) */
1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 minScaleE;
1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** maximum scale (12.20) (0: unlimited) */
1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxScaleE;
1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** scale step factor (1.32) (leading bit is always one and therfore ignored) */
1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 scaleStepE;
1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** x-border in pixels */
1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 borderWidthE;
1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** y-border in pixels */
1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 borderHeightE;
1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project};
1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- associated objects ------------------------------------------------- */
1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- external functions ------------------------------------------------- */
1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor/destructor } ------------------------------------- */
1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** initializes bbf_Scanner  */
1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_init( struct bbs_Context* cpA,
1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					   struct bbf_Scanner* ptrA );
1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** resets bbf_Scanner  */
1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_exit( struct bbs_Context* cpA,
1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					   struct bbf_Scanner* ptrA );
1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */
1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** copy operator */
1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_copy( struct bbs_Context* cpA,
1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					   struct bbf_Scanner* ptrA,
1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					   const struct bbf_Scanner* srcPtrA );
1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** equal operator */
1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbf_Scanner_equal( struct bbs_Context* cpA,
1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					    const struct bbf_Scanner* ptrA,
1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					    const struct bbf_Scanner* srcPtrA );
1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */
1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** scan positions at current scale */
1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_Scanner_positions( const struct bbf_Scanner* ptrA );
1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** current scan index */
1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_Scanner_scanIndex( const struct bbf_Scanner* ptrA );
1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** returns current uls position relative to original image; x,y: 16.16; scale: 12.20 */
1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_pos( const struct bbf_Scanner* ptrA,
1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					  int32* xPtrA, int32* yPtrA, uint32* scalePtrA );
1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** returns uls position relative to original image at index position; x,y: 16.16; scale: 12.20 */
1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_idxPos( const struct bbf_Scanner* ptrA, uint32 scanIndexA,
1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					     int32* xPtrA, int32* yPtrA, uint32* scalePtrA );
1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */
1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** creates & initializes object */
1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_create( struct bbs_Context* cpA,
2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 struct bbf_Scanner* ptrA,
2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 flag maximizeSharedMemoryA,
2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 maxImageWidthA,
2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					 	 uint32 maxImageHeightA,
2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 maxRadiusA,
2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 patchWidthA,
2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 patchHeightA,
2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 minScaleA,
2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 maxScaleA,
2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 scaleStepA,
2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 borderWidthA,
2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 borderHeightA,
2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 bufferSizeA,
2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 struct bbs_MemTbl* mtpA );
2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** parameter for bit generation + recomputing bit image */
2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_bitParam( struct bbs_Context* cpA,
2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   struct bbf_Scanner* ptrA,
2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   const struct bbf_BitParam* bitParamPtrA );
2197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ memory I/O } ------------------------------------------------- */
2217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** word size (16-bit) object needs when written to memory */
2237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_Scanner_memSize( struct bbs_Context* cpA,
2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					        const struct bbf_Scanner* ptrA );
2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** writes object to memory; returns number of words (16-bit) written */
2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_Scanner_memWrite( struct bbs_Context* cpA,
2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							 const struct bbf_Scanner* ptrA, uint16* memPtrA );
2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** reads object from memory; returns number of words (16-bit) read */
2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_Scanner_memRead( struct bbs_Context* cpA,
2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							struct bbf_Scanner* ptrA,
2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							const uint16* memPtrA,
2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							struct bbs_MemTbl* mtpA );
2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */
2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** resets scan position at current scale level */
2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_resetScan( struct bbs_Context* cpA, struct bbf_Scanner* ptrA );
2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** Assigns image; sets initial bit parameters; resets processor.
2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  If roiPtrA is NULL, the whole image is considered for processsing
2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  otherwise *roiPtrA specifies a section of the original image to which
2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  procesing is limited. All coordinates refer to that section and must
2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  eventually be corrected externally.
2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  The roi rectangle must not include pixels outside of the original image
2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  (checked -> error). The rectangle may be of uneven width.
2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_assign( struct bbs_Context* cpA, struct bbf_Scanner* ptrA,
2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					     const void* imagePtrA,
2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 imageWidthA,
2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 uint32 imageHeightA,
2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 const struct bts_Int16Rect* roiPtrA,
2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 const struct bbf_BitParam* paramPtrA );
2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** goes to next scale position */
2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbf_Scanner_nextScale( struct bbs_Context* cpA, struct bbf_Scanner* ptrA );
2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** returns pointer to patch data */
2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectconst uint32* bbf_Scanner_getPatch( const struct bbf_Scanner* ptrA );
2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** goes to next scan position */
2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbf_Scanner_next( struct bbs_Context* cpA, struct bbf_Scanner* ptrA );
2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** goes to scan position */
2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_goToXY( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, int32 xA, int32 yA );
2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** goes to scan index position */
2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_goToIndex( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, uint32 scanIndexA );
2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** goes to scan position from image uls position (error if scales do not match); x,y: 16.16; scale: 12.20 */
2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_goToUls( struct bbs_Context* cpA, struct bbf_Scanner* ptrA,
2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  int32 xA, int32 yA, uint32 scaleA );
2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** The functions below offer positions management of temporary positions needed by the detector object */
2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** resets internal positions */
2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_resetIntPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA );
2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** reset output positions */
2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_resetOutPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) ;
2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* add internal position */
2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_addIntPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, uint32 idxA,	int32 actA );
2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* add external position */
2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_Scanner_addOutPos( struct bbs_Context* cpA,
2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							struct bbf_Scanner* ptrA,
2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							int32 xA,
2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							int32 yA,
2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							uint32 scaleA,
2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							int32 actA );
2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* removes internal overlaps */
2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_Scanner_removeIntOverlaps( struct bbs_Context* cpA,
2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								      struct bbf_Scanner* ptrA,
2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project									  uint32 overlapThrA );
2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** removes output overlaps */
3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_Scanner_removeOutOverlaps( struct bbs_Context* cpA,
3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							          struct bbf_Scanner* ptrA,
3027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project									  uint32 overlapThrA );
3037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif /* bbf_SCANNER_EM_H */
3057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
306