diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:32 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:32 -0800 |
commit | dceec766d86853b64ead319bf97648d9fc8301e6 (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 | |
parent | 8791cd1b94783503dff8104cf0d325a255e107d0 (diff) | |
download | neven-dceec766d86853b64ead319bf97648d9fc8301e6.tar.gz |
auto import from //depot/cupcake/@135843
189 files changed, 0 insertions, 43539 deletions
diff --git a/Android.mk b/Android.mk deleted file mode 100644 index e223867..0000000 --- a/Android.mk +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (C) 2008 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES:= \ - FaceDetector_jni.cpp \ - Embedded/common/src/b_APIEm/DCR.c \ - Embedded/common/src/b_APIEm/BFFaceFinder.c \ - Embedded/common/src/b_APIEm/FaceFinder.c \ - Embedded/common/src/b_APIEm/FaceFinderRef.c \ - Embedded/common/src/b_APIEm/Functions.c \ - Embedded/common/src/b_BasicEm/APh.c \ - Embedded/common/src/b_BasicEm/APhArr.c \ - Embedded/common/src/b_BasicEm/Complex.c \ - Embedded/common/src/b_BasicEm/ComplexArr.c \ - Embedded/common/src/b_BasicEm/Context.c \ - Embedded/common/src/b_BasicEm/DynMemManager.c \ - Embedded/common/src/b_BasicEm/Functions.c \ - Embedded/common/src/b_BasicEm/Int16Arr.c \ - Embedded/common/src/b_BasicEm/Int32Arr.c \ - Embedded/common/src/b_BasicEm/Int8Arr.c \ - Embedded/common/src/b_BasicEm/Math.c.arm \ - Embedded/common/src/b_BasicEm/MemSeg.c \ - Embedded/common/src/b_BasicEm/MemTbl.c \ - Embedded/common/src/b_BasicEm/Memory.c \ - Embedded/common/src/b_BasicEm/Phase.c \ - Embedded/common/src/b_BasicEm/String.c \ - Embedded/common/src/b_BasicEm/UInt16Arr.c \ - Embedded/common/src/b_BasicEm/UInt32Arr.c \ - Embedded/common/src/b_BasicEm/UInt8Arr.c \ - Embedded/common/src/b_BitFeatureEm/BitParam.c \ - Embedded/common/src/b_BitFeatureEm/Feature.c \ - Embedded/common/src/b_BitFeatureEm/Functions.c \ - Embedded/common/src/b_BitFeatureEm/I04Dns2x2Ftr.c \ - Embedded/common/src/b_BitFeatureEm/I04Dns2x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/I04Tld2x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L01Dns2x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L01Tld1x1Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L01Tld2x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L04Dns2x2Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L04Dns2x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L04Dns3x3Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L04Tld2x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L06Dns3x3Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L06Dns4x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/L06DnsNx4x4Ftr.c \ - Embedded/common/src/b_BitFeatureEm/LocalScanDetector.c \ - Embedded/common/src/b_BitFeatureEm/LocalScanner.c \ - Embedded/common/src/b_BitFeatureEm/ScanDetector.c \ - Embedded/common/src/b_BitFeatureEm/Scanner.c \ - Embedded/common/src/b_BitFeatureEm/Sequence.c \ - Embedded/common/src/b_ImageEm/APhImage.c \ - Embedded/common/src/b_ImageEm/ComplexImage.c \ - Embedded/common/src/b_ImageEm/Flt16Image.c \ - Embedded/common/src/b_ImageEm/Functions.c \ - Embedded/common/src/b_ImageEm/HistoEq.c \ - Embedded/common/src/b_ImageEm/UInt16ByteImage.c \ - Embedded/common/src/b_ImageEm/UInt16BytePyrImage.c \ - Embedded/common/src/b_ImageEm/UInt8Image.c \ - Embedded/common/src/b_ImageEm/UInt32Image.c \ - Embedded/common/src/b_ImageEm/UInt8PyramidalImage.c \ - Embedded/common/src/b_TensorEm/Alt.c \ - Embedded/common/src/b_TensorEm/Cluster2D.c \ - Embedded/common/src/b_TensorEm/Cluster3D.c \ - Embedded/common/src/b_TensorEm/CompactAlt.c \ - Embedded/common/src/b_TensorEm/CompactMat.c \ - Embedded/common/src/b_TensorEm/Flt16Alt2D.c \ - Embedded/common/src/b_TensorEm/Flt16Alt3D.c \ - Embedded/common/src/b_TensorEm/Flt16Mat2D.c \ - Embedded/common/src/b_TensorEm/Flt16Mat3D.c \ - Embedded/common/src/b_TensorEm/Flt16Vec.c \ - Embedded/common/src/b_TensorEm/Flt16Vec2D.c \ - Embedded/common/src/b_TensorEm/Flt16Vec3D.c \ - Embedded/common/src/b_TensorEm/Functions.c \ - Embedded/common/src/b_TensorEm/IdCluster2D.c \ - Embedded/common/src/b_TensorEm/Int16Mat2D.c \ - Embedded/common/src/b_TensorEm/Int16Rect.c \ - Embedded/common/src/b_TensorEm/Int16Vec2D.c \ - Embedded/common/src/b_TensorEm/Int16Vec3D.c \ - Embedded/common/src/b_TensorEm/Int32Mat.c \ - Embedded/common/src/b_TensorEm/MapSequence.c \ - Embedded/common/src/b_TensorEm/Mat.c \ - Embedded/common/src/b_TensorEm/Normalizer.c \ - Embedded/common/src/b_TensorEm/RBFMap2D.c \ - Embedded/common/src/b_TensorEm/SubVecMap.c \ - Embedded/common/src/b_TensorEm/Uint32Rect.c \ - Embedded/common/src/b_TensorEm/VectorMap.c \ - FaceRecEm/common/src/b_FDSDK/DCR.c \ - FaceRecEm/common/src/b_FDSDK/FaceFinder.c \ - FaceRecEm/common/src/b_FDSDK/SDK.c -## - -LOCAL_CFLAGS += -Depl_LINUX - -LOCAL_C_INCLUDES += \ - external/neven/FaceRecEm/common/src/b_FDSDK \ - $(JNI_H_INCLUDE) \ - $(call include-path-for, corecg graphics) \ - $(LOCAL_PATH)/FaceRecEm/common/src \ - $(LOCAL_PATH)/Embedded/common/conf \ - $(LOCAL_PATH)/Embedded/common/src \ - $(LOCAL_PATH)/unix/src - -LOCAL_SHARED_LIBRARIES := \ - libandroid_runtime \ - libnativehelper \ - libutils \ - libcorecg \ - libsgl \ - libcutils - -LOCAL_MODULE:= libFFTEm - -ALL_PREBUILT += $(TARGET_OUT)/usr/share/bmd/RFFspeed_501.bmd -$(TARGET_OUT)/usr/share/bmd/RFFspeed_501.bmd : $(LOCAL_PATH)/Embedded/common/data/APIEm/Modules/RFFspeed_501.bmd | $(ACP) - $(transform-prebuilt-to-target) - -ALL_PREBUILT += $(TARGET_OUT)/usr/share/bmd/RFFstd_501.bmd -$(TARGET_OUT)/usr/share/bmd/RFFstd_501.bmd : $(LOCAL_PATH)/Embedded/common/data/APIEm/Modules/RFFstd_501.bmd | $(ACP) - $(transform-prebuilt-to-target) - - -include $(BUILD_SHARED_LIBRARY) diff --git a/Embedded/common/conf/b_BasicEm/LibConfig.h b/Embedded/common/conf/b_BasicEm/LibConfig.h deleted file mode 100644 index dfe8e12..0000000 --- a/Embedded/common/conf/b_BasicEm/LibConfig.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_LIB_CONFIG_H -#define bbs_LIB_CONFIG_H - -/* ----------------- library tags --------------------------- */ - -/* ----------------- other tags ----------------------------- */ - -#define bbs_MINIMIZE_FRQ_IMG - -#define bbs_USE_FRQ_IMG_SYMMETRY - -/*#define bbs_COMPACT_MESSAGE_HANDLING*/ - -#define bbs_ENABLE_BIT_FEATURE - -#endif /* bbs_LIB_CONFIG_H */ diff --git a/Embedded/common/data/APIEm/Modules/RFFprec_501.bmd b/Embedded/common/data/APIEm/Modules/RFFprec_501.bmd Binary files differdeleted file mode 100644 index 00f96a6..0000000 --- a/Embedded/common/data/APIEm/Modules/RFFprec_501.bmd +++ /dev/null diff --git a/Embedded/common/data/APIEm/Modules/RFFspeed_501.bmd b/Embedded/common/data/APIEm/Modules/RFFspeed_501.bmd Binary files differdeleted file mode 100644 index e7299a5..0000000 --- a/Embedded/common/data/APIEm/Modules/RFFspeed_501.bmd +++ /dev/null diff --git a/Embedded/common/data/APIEm/Modules/RFFstd_501.bmd b/Embedded/common/data/APIEm/Modules/RFFstd_501.bmd Binary files differdeleted file mode 100644 index 2187396..0000000 --- a/Embedded/common/data/APIEm/Modules/RFFstd_501.bmd +++ /dev/null diff --git a/Embedded/common/src/b_APIEm/BFFaceFinder.c b/Embedded/common/src/b_APIEm/BFFaceFinder.c deleted file mode 100644 index 180d376..0000000 --- a/Embedded/common/src/b_APIEm/BFFaceFinder.c +++ /dev/null @@ -1,499 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_APIEm/BFFaceFinder.h" -#include "b_APIEm/Functions.h" -#include "b_APIEm/DCR.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_init( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA ) -{ - bpi_FaceFinder_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bpi_FF_BF_FACE_FINDER; - ptrA->baseE.vpSetParamsE = bpi_BFFaceFinder_setParams; - ptrA->baseE.vpSetRangeE = bpi_BFFaceFinder_setRange; - ptrA->baseE.vpProcessE = bpi_BFFaceFinder_processDcr; - ptrA->baseE.vpPutDcrE = bpi_BFFaceFinder_putDcr; - ptrA->baseE.vpGetDcrE = bpi_BFFaceFinder_getDcr; - - ptrA->detectedFacesE = 0; - ptrA->availableFacesE = 0; - ptrA->faceDataBufferE = NULL; - bbf_ScanDetector_init( cpA, &ptrA->detectorE ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_exit( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA ) -{ - ptrA->detectedFacesE = 0; - ptrA->availableFacesE = 0; - ptrA->faceDataBufferE = NULL; - bbf_ScanDetector_exit( cpA, &ptrA->detectorE ); - - bpi_FaceFinder_exit( cpA, &ptrA->baseE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_copy( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - const struct bpi_BFFaceFinder* srcPtrA ) -{ - bpi_FaceFinder_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbf_ScanDetector_copy( cpA, &ptrA->detectorE, &srcPtrA->detectorE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bpi_BFFaceFinder_equal( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - const struct bpi_BFFaceFinder* srcPtrA ) -{ - if( !bpi_FaceFinder_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbf_ScanDetector_equal( cpA, &ptrA->detectorE, &srcPtrA->detectorE ) ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_BFFaceFinder_getMinEyeDistance( const struct bpi_BFFaceFinder* ptrA ) -{ - return ( ( ptrA->detectorE.refDistanceE >> 8 ) * ( ptrA->detectorE.minScaleE >> 12 ) ) >> 16; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_BFFaceFinder_getMaxEyeDistance( const struct bpi_BFFaceFinder* ptrA ) -{ - return ( ( ptrA->detectorE.refDistanceE >> 8 ) * ( ptrA->detectorE.maxScaleE >> 12 ) ) >> 16; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_setMinEyeDistance( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - uint32 distA ) -{ - ptrA->detectorE.minScaleE = ( ( distA << 16 ) / ( ptrA->detectorE.refDistanceE >> 8 ) ) << 12; - if( ptrA->detectorE.minScaleE < 0x100000 /* 1.0 */ ) ptrA->detectorE.minScaleE = 0x100000; -} - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_setMaxEyeDistance( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - uint32 distA ) -{ - if( distA > 0x0FFFF ) - { - ptrA->detectorE.maxScaleE = 0; /* unlimited */ - } - else - { - ptrA->detectorE.maxScaleE = ( ( distA << 16 ) / ( ptrA->detectorE.refDistanceE >> 8 ) ) << 12; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_BFFaceFinder_memSize( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder *ptrA ) -{ - uint32 memSizeL = 0; - memSizeL += bbs_SIZEOF16( uint32 ); - memSizeL += bbs_SIZEOF16( uint32 ); /* version */ - memSizeL += bpi_FaceFinder_memSize( cpA, &ptrA->baseE ); - memSizeL += bbf_ScanDetector_memSize( cpA, &ptrA->detectorE ); - memSizeL += bbs_SIZEOF16( uint16 ); /* csa */ - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_BFFaceFinder_memWrite( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bpi_BFFaceFinder_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bpi_BF_FACE_FINDER_VERSION, memPtrA ); - memPtrA += bpi_FaceFinder_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbf_ScanDetector_memWrite( cpA, &ptrA->detectorE, memPtrA ); - memPtrA += bpi_memWriteCsa16( memPtrA, memSizeL, 0xFFFF ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_BFFaceFinder_memRead( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bpi_BF_FACE_FINDER_VERSION, memPtrA ); - memPtrA += bpi_FaceFinder_memRead( cpA, &ptrA->baseE, memPtrA ); - if( bbs_Context_error( cpA ) ) return 0; - - memPtrA += bbf_ScanDetector_memRead( cpA, &ptrA->detectorE, memPtrA, mtpA ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bpi_memReadCsa16( memPtrA ); - -/* if( memSizeL != bpi_BFFaceFinder_memSize( cpA, ptrA ) ) - { - bbs_ERROR0( "uint32 bpi_BFFaceFinder_memRead( .... ):\n" - "Module file is corrupt or incorrect. Please check if the face finder module is still supported." ); - return 0; - } -*/ - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bpi_BFFaceFinder_process( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA, - struct bts_Int16Vec2D* offsPtrA, - struct bts_IdCluster2D* idClusterPtrA ) -{ - int32 xL = 0; /* 16.16 */ - int32 yL = 0; /* 16.16 */ - uint32 scaleL = 0; - int32 actL = 0; - int32* outArrL; - - struct bts_Flt16Alt2D altL; - struct bts_Flt16Vec2D centerL; - - struct bpi_BFFaceFinder* ptrL = ( struct bpi_BFFaceFinder* )ptrA; - - /* reset multi face imformation so they are not accidentally used */ - ptrL->detectedFacesE = 0; - ptrL->availableFacesE = 0; - ptrL->faceDataBufferE = NULL; - - bbf_ScanDetector_process( cpA, ( struct bbf_ScanDetector* )&ptrA->detectorE, imagePtrA, imageWidthA, imageHeightA, roiPtrA, &outArrL ); - - xL = outArrL[ 0 ]; /* 16.16 */ - yL = outArrL[ 1 ]; /* 16.16 */ - scaleL = outArrL[ 2 ]; /* 12.20 */ - actL = outArrL[ 3 ]; /* 4.28 */ - - if( bbs_Context_error( cpA ) ) return 0; - - offsPtrA->xE = xL >> 16; - offsPtrA->yE = yL >> 16; - xL -= ( ( int32 )offsPtrA->xE << 16 ); - yL -= ( ( int32 )offsPtrA->yE << 16 ); - - centerL = bts_Flt16Vec2D_create32( 0, 0, 0 ); - altL = bts_Flt16Alt2D_createScale( scaleL, 20, ¢erL ); - altL.vecE = bts_Flt16Vec2D_create32( xL, yL, 16 ); - - /* compute cluster */ - { - uint32 eyeDistL = ( ( ptrA->detectorE.refDistanceE >> 16 ) * scaleL ) >> 20; - uint32 logEyeDistL = bbs_intLog2( eyeDistL ); - int32 bbpL = 11 - logEyeDistL; - bbpL = bbpL < 0 ? 0 : bbpL; - bbpL = bbpL > 6 ? 6 : bbpL; - bts_IdCluster2D_copyTransform( cpA, idClusterPtrA, &ptrA->detectorE.refClusterE, altL, bbpL ); - } - - - return ( actL + 0x10000000 ) >> 5; /*output range 0...1 in 8.24*/ -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_BFFaceFinder_multiProcess( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA ) -{ - struct bpi_BFFaceFinder* ptrL = ( struct bpi_BFFaceFinder* )ptrA; - ptrL->detectedFacesE = bbf_ScanDetector_process( cpA, ( struct bbf_ScanDetector* )&ptrA->detectorE, imagePtrA, imageWidthA, imageHeightA, roiPtrA, &ptrL->faceDataBufferE ); - ptrL->availableFacesE = ptrA->detectedFacesE > 0 ? ptrA->detectedFacesE : 1; - if( bbs_Context_error( cpA ) ) return 0; - return ptrL->detectedFacesE; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_BFFaceFinder_getFace( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - uint32 indexA, - struct bts_Int16Vec2D* offsPtrA, - struct bts_IdCluster2D* idClusterPtrA ) -{ - bbs_DEF_fNameL( "bpi_BFFaceFinder_getFace" ) - int32 xL = 0; /* 16.16 */ - int32 yL = 0; /* 16.16 */ - uint32 scaleL = 0; - int32 actL = 0; - struct bts_Flt16Alt2D altL; - struct bts_Flt16Vec2D centerL; - - if( bbs_Context_error( cpA ) ) return 0; - - if( ptrA->availableFacesE == 0 || ptrA->faceDataBufferE == NULL ) - { - bbs_ERROR1( "%s:\nNo faces are availabe. This function was called before the face finder could detect multiple faces in an image", fNameL ); - return 0; - } - - if( indexA >= ptrA->availableFacesE ) - { - bbs_ERROR1( "%s:\nface index exceeds number of available faces", fNameL ); - return 0; - } - - xL = ptrA->faceDataBufferE[ indexA * 4 + 0 ]; /* 16.16 */ - yL = ptrA->faceDataBufferE[ indexA * 4 + 1 ]; /* 16.16 */ - scaleL = ptrA->faceDataBufferE[ indexA * 4 + 2 ]; /* 12.20 */ - actL = ptrA->faceDataBufferE[ indexA * 4 + 3 ]; /* 4.28 */ - - offsPtrA->xE = xL >> 16; - offsPtrA->yE = yL >> 16; - - xL -= ( ( int32 )offsPtrA->xE << 16 ); - yL -= ( ( int32 )offsPtrA->yE << 16 ); - - centerL = bts_Flt16Vec2D_create32( 0, 0, 0 ); - altL = bts_Flt16Alt2D_createScale( scaleL, 20, ¢erL ); - altL.vecE = bts_Flt16Vec2D_create32( xL, yL, 16 ); - - /* compute cluster */ - { - uint32 eyeDistL = ( ( ptrA->detectorE.refDistanceE >> 16 ) * scaleL ) >> 20; - uint32 logEyeDistL = bbs_intLog2( eyeDistL ); - int32 bbpL = 11 - logEyeDistL; - bbpL = bbpL < 0 ? 0 : bbpL; - bbpL = bbpL > 6 ? 6 : bbpL; - bts_IdCluster2D_copyTransform( cpA, idClusterPtrA, &ptrA->detectorE.refClusterE, altL, bbpL ); - } - - return ( actL + 0x10000000 ) >> 5; /*output range 0...1 in 8.24*/ -} - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_getFaceDCR( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - uint32 indexA, - struct bpi_DCR* dcrPtrA ) -{ - int32 confL = bpi_BFFaceFinder_getFace( cpA, ptrA, indexA, &dcrPtrA->offsE, &dcrPtrA->mainClusterE ); - bts_IdCluster2D_copy( cpA, &dcrPtrA->sdkClusterE, &dcrPtrA->mainClusterE ); - dcrPtrA->confidenceE = confL; - dcrPtrA->approvedE = confL > ( ( int32 )1 << 23 ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_setMaxImageSize( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA ) -{ - ptrA->detectorE.maxImageWidthE = maxImageWidthA; - ptrA->detectorE.maxImageHeightE = maxImageHeightA; -} - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_setParams( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA ) -{ - bbs_DEF_fNameL( "bpi_BFFaceFinder_setParams" ); - - if( bbs_Context_error( cpA ) ) return; - - if( ptrA->typeE != bpi_FF_BF_FACE_FINDER ) - { - bbs_ERROR1( "%s:\nObject type mismatch", fNameL ); - return; - } - bpi_BFFaceFinder_setMaxImageSize( cpA, ( struct bpi_BFFaceFinder* )ptrA, maxImageWidthA, maxImageHeightA ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_setRange( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - uint32 minEyeDistanceA, - uint32 maxEyeDistanceA ) -{ - bbs_DEF_fNameL( "bpi_BFFaceFinder_setParams" ); - - if( bbs_Context_error( cpA ) ) return; - - if( ptrA->typeE != bpi_FF_BF_FACE_FINDER ) - { - bbs_ERROR1( "%s:\nObject type mismatch", fNameL ); - return; - } - bpi_BFFaceFinder_setMinEyeDistance( cpA, ( struct bpi_BFFaceFinder* )ptrA, minEyeDistanceA ); - bpi_BFFaceFinder_setMaxEyeDistance( cpA, ( struct bpi_BFFaceFinder* )ptrA, maxEyeDistanceA ); -} - -/* ------------------------------------------------------------------------- */ - -int32 bpi_BFFaceFinder_processDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - struct bpi_DCR* dcrPtrA ) -{ - bbs_DEF_fNameL( "bpi_BFFaceFinder_processDcr" ); - - if( bbs_Context_error( cpA ) ) return 0; - - if( ptrA->typeE != bpi_FF_BF_FACE_FINDER ) - { - bbs_ERROR1( "%s:\nObject type mismatch", fNameL ); - return 0; - } - - return bpi_BFFaceFinder_process( cpA, - ( const struct bpi_BFFaceFinder* )ptrA, - dcrPtrA->imageDataPtrE, - dcrPtrA->imageWidthE, - dcrPtrA->imageHeightE, - &dcrPtrA->roiRectE, - &dcrPtrA->offsE, - &dcrPtrA->mainClusterE ); -} - -/* ------------------------------------------------------------------------- */ - -int32 bpi_BFFaceFinder_putDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - struct bpi_DCR* dcrPtrA ) -{ - bbs_DEF_fNameL( "bpi_BFFaceFinder_putDcr" ); - - if( bbs_Context_error( cpA ) ) return 0; - - if( ptrA->typeE != bpi_FF_BF_FACE_FINDER ) - { - bbs_ERROR1( "%s:\nObject type mismatch", fNameL ); - return 0; - } - - return bpi_BFFaceFinder_multiProcess( cpA, - ( const struct bpi_BFFaceFinder* )ptrA, - dcrPtrA->imageDataPtrE, - dcrPtrA->imageWidthE, - dcrPtrA->imageHeightE, - &dcrPtrA->roiRectE ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_BFFaceFinder_getDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - uint32 indexA, - struct bpi_DCR* dcrPtrA ) -{ - bbs_DEF_fNameL( "bpi_BFFaceFinder_getDcr" ); - - if( bbs_Context_error( cpA ) ) return; - - if( ptrA->typeE != bpi_FF_BF_FACE_FINDER ) - { - bbs_ERROR1( "%s:\nObject type mismatch", fNameL ); - return; - } - - bpi_BFFaceFinder_getFaceDCR( cpA, ( const struct bpi_BFFaceFinder* )ptrA, indexA, dcrPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_APIEm/BFFaceFinder.h b/Embedded/common/src/b_APIEm/BFFaceFinder.h deleted file mode 100644 index 3f1b438..0000000 --- a/Embedded/common/src/b_APIEm/BFFaceFinder.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bpi_BF_FACE_FINDER_EM_H -#define bpi_BF_FACE_FINDER_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_APIEm/FaceFinder.h" -#include "b_BitFeatureEm/ScanDetector.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bpi_DCR; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bpi_BF_FACE_FINDER_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** Face Finder using ractangle features */ -struct bpi_BFFaceFinder -{ - /* ---- private data --------------------------------------------------- */ - - /** base object */ - struct bpi_FaceFinder baseE; - - /* number of detected faces in last call of multiProcess in face data buffer */ - uint32 detectedFacesE; - - /* number of available faces in last call of multiProcess in face data buffer */ - uint32 availableFacesE; - - /* pointer to face data buffer */ - int32* faceDataBufferE; - - /* ---- public data ---------------------------------------------------- */ - - /* detector */ - struct bbf_ScanDetector detectorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes module */ -void bpi_BFFaceFinder_init( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA ); - -/** destroys module */ -void bpi_BFFaceFinder_exit( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copies module */ -void bpi_BFFaceFinder_copy( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - const struct bpi_BFFaceFinder* srcPtrA ); - -/** determines equality of parameters */ -flag bpi_BFFaceFinder_equal( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - const struct bpi_BFFaceFinder* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** minimum eye distance (pixel) */ -uint32 bpi_BFFaceFinder_getMinEyeDistance( const struct bpi_BFFaceFinder* ptrA ); - -/** maximum eye distance (pixel) */ -uint32 bpi_BFFaceFinder_getMaxEyeDistance( const struct bpi_BFFaceFinder* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** minimum eye distance (pixel) */ -void bpi_BFFaceFinder_setMinEyeDistance( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - uint32 distA ); - -/** maximum eye distance (pixel) */ -void bpi_BFFaceFinder_setMaxEyeDistance( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - uint32 distA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bpi_BFFaceFinder_memSize( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA ); - -/** writes object to memory; returns number of 16-bit words written */ -uint32 bpi_BFFaceFinder_memWrite( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of 16-bit words read - * Note: Before executing this function the maximum image dimensions must be specified - * through function bpi_BFFaceFinder_setMaxImageSize. This is to ensure proper allocation - * of internal memory. Otherwise this function will cause an exception. - */ -uint32 bpi_BFFaceFinder_memRead( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** processes image for single face detection; - * returns confidence ( 8.24 ) - * fills external id cluster with node positions and ids - * - * If roiPtrA is NULL, the whole image is considered for processsing - * otherwise *roiPtrA specifies a section of the original image to which - * processing is limited. All coordinates refer to that section and must - * eventually be adjusted externally. - * The roi rectangle must not include pixels outside of the original image - * (checked -> error). The rectangle may be of uneven width. - * - * offsPtrA points to an offset vector (whole pixels) that is to be added to - * cluster coordinates in order to obtain image coordinates - * - */ -int32 bpi_BFFaceFinder_process( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA, - struct bts_Int16Vec2D* offsPtrA, - struct bts_IdCluster2D* idClusterPtrA ); - -/** Processes integral image for multiple face detection; - * returns number of faces detected - * return pointer to faceBuffer (intermediate data format) - * call getFace() to retrieve face information from buffer. - * *faceDataBufferPtrA is set to the address of an internal buffer that is valid until the next image processing - * - * Positions are sorted by confidence (highest confidence first) - * - * When this function returns 0 (no face detected) faceDataBuffer - * still contains one valid entry retrievable by getFace() that - * represents the most likely position. The confidence is then below - * or equal 0.5. - * - * If roiPtrA is NULL, the whole image is considered for processsing - * otherwise *roiPtrA specifies a section of the original image to which - * processing is limited. All coordinates refer to that section and must - * eventually be adjusted externally. - * The roi rectangle must not include pixels outside of the original image - * (checked -> error). The rectangle may be of uneven width. - */ -uint32 bpi_BFFaceFinder_multiProcess( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA ); - -/** Extracts a single face from a face buffer that was previously filled with face data by function - * multiProcess(). - * returns confidence ( 8.24 ) - * Fills external id cluster with node positions and ids - * - * offsPtrA points to an offset vector (whole pixels) that is to be added to - * cluster coordinates in order to obtain image coordinates - */ -uint32 bpi_BFFaceFinder_getFace( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - uint32 indexA, - struct bts_Int16Vec2D* offsPtrA, - struct bts_IdCluster2D* idClusterPtrA ); - -/** Extracts a single face from a face buffer that was previously filled with face data by function - * multiProcess(). - * returns confidence ( 8.24 ) - * provides - * - id cluster with node positions and ids - * - confidence - */ -void bpi_BFFaceFinder_getFaceDCR( struct bbs_Context* cpA, - const struct bpi_BFFaceFinder* ptrA, - uint32 indexA, - struct bpi_DCR* dcrPtrA ); - -/** this function must be executed before calling _memRead */ -void bpi_BFFaceFinder_setMaxImageSize( struct bbs_Context* cpA, - struct bpi_BFFaceFinder* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA ); - -/** initializes some parameters prior to reading - * Overload of vpSetParams - * wraps function setMaxImageSize - */ -void bpi_BFFaceFinder_setParams( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA ); - -/** sets detection range - * Overload of vpSetParams - */ -void bpi_BFFaceFinder_setRange( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - uint32 minEyeDistanceA, - uint32 maxEyeDistanceA ); - -/** Single face processing function; returns confidence (8.24) - * Overload of vpProcess - * wraps function process - */ -int32 bpi_BFFaceFinder_processDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - struct bpi_DCR* dcrPtrA ); - -/** Multiple face processing function; returns number of faces detected - * Overload of vpPutDcr - * wraps function multiProcess - */ -int32 bpi_BFFaceFinder_putDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - struct bpi_DCR* dcrPtrA ); - -/** Retrieves indexed face from face finder after calling PutDCR - * Overload of vpGetDcr - * wraps function getFaceDCR - */ -void bpi_BFFaceFinder_getDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - uint32 indexA, - struct bpi_DCR* dcrPtrA ); - -#endif /* bpi_BF_FACE_FINDER_EM_H */ diff --git a/Embedded/common/src/b_APIEm/DCR.c b/Embedded/common/src/b_APIEm/DCR.c deleted file mode 100644 index c1fc1f6..0000000 --- a/Embedded/common/src/b_APIEm/DCR.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_APIEm/DCR.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_DCR_init( struct bbs_Context* cpA, - struct bpi_DCR* ptrA ) -{ - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - ptrA->imageDataPtrE = NULL; - ptrA->imageWidthE = 0; - ptrA->imageHeightE = 0; - bts_Int16Vec2D_init( &ptrA->offsE ); - bts_IdCluster2D_init( cpA, &ptrA->mainClusterE ); - bts_IdCluster2D_init( cpA, &ptrA->sdkClusterE ); - ptrA->confidenceE = 0; - ptrA->approvedE = FALSE; - ptrA->idE = 0; - ptrA->roiRectE = bts_Int16Rect_create( 0, 0, 0, 0 ); - bbs_UInt16Arr_init( cpA, &ptrA->cueDataE ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_DCR_exit( struct bbs_Context* cpA, - struct bpi_DCR* ptrA ) -{ - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - ptrA->imageDataPtrE = NULL; - ptrA->imageWidthE = 0; - ptrA->imageHeightE = 0; - bts_Int16Vec2D_exit( &ptrA->offsE ); - bts_IdCluster2D_exit( cpA, &ptrA->mainClusterE ); - bts_IdCluster2D_exit( cpA, &ptrA->sdkClusterE ); - ptrA->confidenceE = 0; - ptrA->approvedE = FALSE; - ptrA->idE = 0; - bbs_UInt16Arr_exit( cpA, &ptrA->cueDataE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_DCR_create( struct bbs_Context* cpA, - struct bpi_DCR* ptrA, - uint32 imageWidthA, - uint32 imageHeightA, - uint32 cueSizeA, - struct bbs_MemTbl* mtpA ) -{ - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = - bbs_MemTbl_fastestSegPtr( cpA, &memTblL, - bpi_DCR_MAX_CLUSTER_SIZE * bbs_SIZEOF16( struct bts_Int16Vec2D ) ); - if( bbs_Context_error( cpA ) ) return; - - bts_IdCluster2D_create( cpA, &ptrA->mainClusterE, bpi_DCR_MAX_CLUSTER_SIZE, espL ); - bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); - if( bbs_Context_error( cpA ) ) return; - bts_IdCluster2D_create( cpA, &ptrA->sdkClusterE, bpi_DCR_MAX_SDK_CLUSTER_SIZE, espL ); - bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); - if( bbs_Context_error( cpA ) ) return; - if( bbs_Context_error( cpA ) ) return; - bbs_UInt16Arr_create( cpA, &ptrA->cueDataE, cueSizeA, espL ); - bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); - - ptrA->maxImageWidthE = imageWidthA; - ptrA->maxImageHeightE = imageHeightA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, - struct bpi_DCR* ptrA, - const void* bufferPtrA, - uint32 widthA, - uint32 heightA ) -{ - bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" ) - - if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE ) - { - bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).", - fNameL, - widthA, heightA, - ptrA->maxImageWidthE, ptrA->maxImageHeightE ); - return; - } - - if( ( widthA & 1 ) != 0 ) - { - bbs_ERROR1( "%s:\nWidth of image must be even.\n", fNameL ); - return; - } - - ptrA->imageDataPtrE = ( void* )bufferPtrA; - ptrA->imageWidthE = widthA; - ptrA->imageHeightE = heightA; - - /* reset some data */ - ptrA->roiRectE = bts_Int16Rect_create( 0, 0, widthA, heightA ); - bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); - bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); - bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_DCR_assignGrayByteImageROI( struct bbs_Context* cpA, - struct bpi_DCR* ptrA, - const void* bufferPtrA, - uint32 widthA, - uint32 heightA, - const struct bts_Int16Rect* pRectA ) -{ - bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImageROI( struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" ) - - if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE ) - { - bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).", - fNameL, - widthA, heightA, - ptrA->maxImageWidthE, ptrA->maxImageHeightE ); - return; - } - - if( ( widthA & 1 ) != 0 ) - { - bbs_ERROR1( "%s:\nWidth of image must be even.\n", - fNameL ); - return; - } - - if( pRectA->x2E < pRectA->x1E || pRectA->y2E < pRectA->y1E || - pRectA->x1E < 0 || pRectA->y1E < 0 || - pRectA->x2E > ( int32 )widthA || pRectA->y2E > ( int32 )heightA ) - { - bbs_ERROR1( "%s:\nInvalid ROI rectangle.\n", fNameL ); - return; - } - - ptrA->imageDataPtrE = ( void* )bufferPtrA; - ptrA->imageWidthE = widthA; - ptrA->imageHeightE = heightA; - - /* reset some data */ - ptrA->roiRectE = *pRectA; - bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); - bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); - bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); -} - -/* ------------------------------------------------------------------------- */ - -int32 bpi_DCR_confidence( struct bbs_Context* cpA, - const struct bpi_DCR* ptrA ) -{ - return ptrA->confidenceE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_APIEm/DCR.h b/Embedded/common/src/b_APIEm/DCR.h deleted file mode 100644 index 64b2378..0000000 --- a/Embedded/common/src/b_APIEm/DCR.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bpi_DCR_EM_H -#define bpi_DCR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemTbl.h" -#include "b_ImageEm/UInt16ByteImage.h" -#include "b_ImageEm/UInt32Image.h" -#include "b_TensorEm/IdCluster2D.h" -#include "b_TensorEm/RBFMap2D.h" -#include "b_BitFeatureEm/Scanner.h" - - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** maximum size of dcr cluster */ -#define bpi_DCR_MAX_CLUSTER_SIZE 60 - -/** maximum size of dcr sdk cluster */ -#define bpi_DCR_MAX_SDK_CLUSTER_SIZE 24 - -/* ---- object definition -------------------------------------------------- */ - -/** data carrier */ -struct bpi_DCR -{ - /* ---- temporary data ------------------------------------------------- */ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** maximum allowed image width */ - uint32 maxImageWidthE; - - /** maximum allowed image height */ - uint32 maxImageHeightE; - - /** pointer to original image data */ - void* imageDataPtrE; - - /** width of original image */ - uint32 imageWidthE; - - /** height of original image */ - uint32 imageHeightE; - - /** offset refering to main and sdk clusters */ - struct bts_Int16Vec2D offsE; - - /** main cluster */ - struct bts_IdCluster2D mainClusterE; - - /** output cluster accessible by sdk users */ - struct bts_IdCluster2D sdkClusterE; - - /** confidence value ( 8.24 ) */ - int32 confidenceE; - - /** approval flag */ - flag approvedE; - - /** (image) id value */ - int32 idE; - - /** region of interest */ - struct bts_Int16Rect roiRectE; - - /** cue data */ - struct bbs_UInt16Arr cueDataE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes data carrier */ -void bpi_DCR_init( struct bbs_Context* cpA, - struct bpi_DCR* ptrA ); - -/** destroys data carrier */ -void bpi_DCR_exit( struct bbs_Context* cpA, - struct bpi_DCR* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** create a data carrier */ -void bpi_DCR_create( struct bbs_Context* cpA, - struct bpi_DCR* ptrA, - uint32 imageWidthA, - uint32 imageHeightA, - uint32 cueSizeA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** references external byte gray image through memory block referenced by bufferPtrA to be used as input image */ -void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, - struct bpi_DCR* ptrA, - const void* bufferPtrA, - uint32 widthA, - uint32 heightA ); - -/** assigns external byte gray image as input image and region of interest. - * - * bufferPtrA: pointer to memory block of imput image - * pRectA: rectangle describing region of interest - */ -void bpi_DCR_assignGrayByteImageROI( struct bbs_Context* cpA, - struct bpi_DCR* ptrA, - const void* bufferPtrA, - uint32 widthA, - uint32 heightA, - const struct bts_Int16Rect* pRectA ); - -/** returns confidence 8.24 fixed format */ -int32 bpi_DCR_confidence( struct bbs_Context* cpA, - const struct bpi_DCR* ptrA ); - -#endif /* bpi_DCR_EM_H */ diff --git a/Embedded/common/src/b_APIEm/FaceFinder.c b/Embedded/common/src/b_APIEm/FaceFinder.c deleted file mode 100644 index d12c04d..0000000 --- a/Embedded/common/src/b_APIEm/FaceFinder.c +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_APIEm/FaceFinder.h" -#include "b_APIEm/BFFaceFinder.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinder_init( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA ) -{ - ptrA->typeE = 0; - ptrA->vpSetParamsE = NULL; - ptrA->vpSetRangeE = NULL; - ptrA->vpProcessE = NULL; - ptrA->vpPutDcrE = NULL; - ptrA->vpGetDcrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinder_exit( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA ) -{ - ptrA->typeE = 0; - ptrA->vpSetParamsE = NULL; - ptrA->vpSetRangeE = NULL; - ptrA->vpProcessE = NULL; - ptrA->vpPutDcrE = NULL; - ptrA->vpGetDcrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinder_copy( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - const struct bpi_FaceFinder* srcPtrA ) -{ - ptrA->typeE = srcPtrA->typeE; - ptrA->vpSetParamsE = srcPtrA->vpSetParamsE; - ptrA->vpSetRangeE = srcPtrA->vpSetRangeE; - ptrA->vpProcessE = srcPtrA->vpProcessE; - ptrA->vpPutDcrE = srcPtrA->vpPutDcrE; - ptrA->vpGetDcrE = srcPtrA->vpGetDcrE; -} - -/* ------------------------------------------------------------------------- */ - -flag bpi_FaceFinder_equal( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - const struct bpi_FaceFinder* srcPtrA ) -{ - - if( ptrA->typeE != srcPtrA->typeE ) return FALSE; - if( ptrA->vpSetParamsE != srcPtrA->vpSetParamsE ) return FALSE; - if( ptrA->vpSetRangeE != srcPtrA->vpSetRangeE ) return FALSE; - if( ptrA->vpProcessE != srcPtrA->vpProcessE ) return FALSE; - if( ptrA->vpPutDcrE != srcPtrA->vpPutDcrE ) return FALSE; - if( ptrA->vpGetDcrE != srcPtrA->vpGetDcrE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_FaceFinder_memSize( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA ) -{ - uint32 memSizeL = 0; - memSizeL += bbs_SIZEOF16( ptrA->typeE ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_FaceFinder_memWrite( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bpi_FaceFinder_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &ptrA->typeE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_FaceFinder_memRead( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - const uint16* memPtrA ) -{ - bbs_DEF_fNameL( "uint32 bpi_FaceFinder_memRead( struct bbs_Context* cpA, struct bpi_FaceFinder* ptrA, const uint16* memPtrA )" ) - uint32 typeL; - - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &typeL, memPtrA ); - - if( typeL != ptrA->typeE ) - { - bbs_ERROR1( "%s:\nObject type mismatch! Attempt to read an incorrect object.", fNameL ); - return 0; - } - - return bpi_FaceFinder_memSize( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_faceFinderInit( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - enum bpi_FaceFinderType typeA ) -{ - switch( typeA ) - { - case bpi_FF_BF_FACE_FINDER: bpi_BFFaceFinder_init( cpA, ( struct bpi_BFFaceFinder* )ptrA ); return; - - default: bbs_ERROR0( "bpi_faceFinderInit: invalid type" ); - } -} - -/* ------------------------------------------------------------------------- */ - -void bpi_faceFinderExit( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA ) -{ - switch( ptrA->typeE ) - { - case bpi_FF_BF_FACE_FINDER: bpi_BFFaceFinder_exit( cpA, ( struct bpi_BFFaceFinder* )ptrA ); return; - - default: bbs_ERROR0( "bpi_faceFinderExit: invalid type" ); - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_faceFinderMemSize( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA ) -{ - switch( ptrA->typeE ) - { - case bpi_FF_BF_FACE_FINDER: return bpi_BFFaceFinder_memSize( cpA, ( struct bpi_BFFaceFinder* )ptrA ); - - default: bbs_ERROR0( "bpi_faceFinderExit: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_faceFinderMemWrite( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, uint16* memPtrA ) -{ - switch( ptrA->typeE ) - { - case bpi_FF_BF_FACE_FINDER: return bpi_BFFaceFinder_memWrite( cpA, ( struct bpi_BFFaceFinder* )ptrA, memPtrA ); - - default: bbs_ERROR0( "bpi_faceFinderMemWrite: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_faceFinderMemRead( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - switch( ptrA->typeE ) - { - case bpi_FF_BF_FACE_FINDER: return bpi_BFFaceFinder_memRead( cpA, ( struct bpi_BFFaceFinder* )ptrA, memPtrA, mtpA ); - - default: bbs_ERROR0( "bpi_faceFinderMemRead: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_faceFinderSizeOf16( struct bbs_Context* cpA, enum bpi_FaceFinderType typeA ) -{ - switch( typeA ) - { - case bpi_FF_BF_FACE_FINDER: return bbs_SIZEOF16( struct bpi_BFFaceFinder ); - - default: bbs_ERROR0( "bpi_faceFinderSizeOf16: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_APIEm/FaceFinder.h b/Embedded/common/src/b_APIEm/FaceFinder.h deleted file mode 100644 index 76c4829..0000000 --- a/Embedded/common/src/b_APIEm/FaceFinder.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bpi_FACE_FINDER_EM_H -#define bpi_FACE_FINDER_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/Flt16Vec.h" -#include "b_TensorEm/IdCluster2D.h" -#include "b_APIEm/DCR.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** Object Type */ -enum bpi_FaceFinderType -{ - bpi_FF_UNDEFINED = 0, - bpi_FF_BF_FACE_FINDER /* bitfeature based faceFinder */ -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** base object for face finder modules (occurs as first element in all face finder objects) */ -struct bpi_FaceFinder -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** object type */ - uint32 typeE; - - /* ---- virtual functions ---------------------------------------------- */ - - /** initializes some parameters prior to reading */ - void ( *vpSetParamsE )( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA ); - - /** sets detection range */ - void ( *vpSetRangeE )( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - uint32 minEyeDistanceA, - uint32 maxEyeDistanceA ); - - /** single face processing function; returns confidence (8.24) */ - int32 ( *vpProcessE )( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - struct bpi_DCR* dcrPtrA ); - - /** multiple face processing function; returns number of faces detected */ - int32 ( *vpPutDcrE )( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - struct bpi_DCR* dcrPtrA ); - - /** retrieves indexed face from face finder after calling PutDCR */ - void ( *vpGetDcrE )( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - uint32 indexA, - struct bpi_DCR* dcrPtrA ); - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bpi_FaceFinder */ -void bpi_FaceFinder_init( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA ); - -/** resets bpi_FaceFinder */ -void bpi_FaceFinder_exit( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bpi_FaceFinder_copy( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - const struct bpi_FaceFinder* srcPtrA ); - -/** equal operator */ -flag bpi_FaceFinder_equal( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - const struct bpi_FaceFinder* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bpi_FaceFinder_memSize( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bpi_FaceFinder_memWrite( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bpi_FaceFinder_memRead( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** virtual init function */ -void bpi_faceFinderInit( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - enum bpi_FaceFinderType typeA ); - -/** virtual exit function */ -void bpi_faceFinderExit( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA ); - -/** virtual mem size function */ -uint32 bpi_faceFinderMemSize( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA ); - -/** virtual mem write function */ -uint32 bpi_faceFinderMemWrite( struct bbs_Context* cpA, - const struct bpi_FaceFinder* ptrA, - uint16* memPtrA ); - -/** virtual mem read function */ -uint32 bpi_faceFinderMemRead( struct bbs_Context* cpA, - struct bpi_FaceFinder* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/** virtual sizeof operator for 16bit units */ -uint32 bpi_faceFinderSizeOf16( struct bbs_Context* cpA, - enum bpi_FaceFinderType typeA ); - -#endif /* bpi_FACE_FINDER_EM_H */ - diff --git a/Embedded/common/src/b_APIEm/FaceFinderRef.c b/Embedded/common/src/b_APIEm/FaceFinderRef.c deleted file mode 100644 index 01e5ed1..0000000 --- a/Embedded/common/src/b_APIEm/FaceFinderRef.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_APIEm/FaceFinderRef.h" -#include "b_APIEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinderRef_init( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA ) -{ - bbs_UInt16Arr_init( cpA, &ptrA->objBufE ); - ptrA->faceFinderPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinderRef_exit( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA ) -{ - if( ptrA->faceFinderPtrE != NULL ) bpi_faceFinderExit( cpA, ptrA->faceFinderPtrE ); - bbs_UInt16Arr_exit( cpA, &ptrA->objBufE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinderRef_copy( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA, - const struct bpi_FaceFinderRef* srcPtrA ) -{ - bbs_ERROR0( "bpi_FaceFinderRef_copy: function is not implemented" ); -} - -/* ------------------------------------------------------------------------- */ - -flag bpi_FaceFinderRef_equal( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - const struct bpi_FaceFinderRef* srcPtrA ) -{ - bbs_ERROR0( "bpi_FaceFinderRef_equal: function is not implemented" ); - return FALSE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_FaceFinderRef_memSize( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA ) -{ - uint32 memSizeL = 0; - memSizeL += bbs_SIZEOF16( uint32 ); /* mem size */ - memSizeL += bbs_SIZEOF16( flag ); /* object presence flag */ - if( ptrA->faceFinderPtrE != NULL ) memSizeL += bpi_faceFinderMemSize( cpA, ptrA->faceFinderPtrE ); - memSizeL += bbs_SIZEOF16( uint16 ); /* csa */ - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_FaceFinderRef_memWrite( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bpi_FaceFinderRef_memSize( cpA, ptrA ); - flag objPresentL = ptrA->faceFinderPtrE != NULL; - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &objPresentL, memPtrA ); - if( objPresentL ) memPtrA += bpi_faceFinderMemWrite( cpA, ptrA->faceFinderPtrE, memPtrA ); - memPtrA += bpi_memWriteCsa16( memPtrA, memSizeL, 0xFFFF ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_FaceFinderRef_memRead( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL; - flag objPresentL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &objPresentL, memPtrA ); - - /* check object & allocate data buffer */ - { - const uint16* memPtrL = memPtrA; - uint32 dataSizeL = 0; - - if( objPresentL ) - { - enum bpi_FaceFinderType typeL = ( enum bpi_FaceFinderType )bbs_memPeek32( memPtrL + 4 ); - dataSizeL += bpi_faceFinderSizeOf16( cpA, typeL ); - memPtrL += bbs_memPeek32( memPtrL ); - } - - bbs_UInt16Arr_create( cpA, &ptrA->objBufE, dataSizeL, espL ); - } - - /* load object */ - { - uint16* dataPtrL = ptrA->objBufE.arrPtrE; - - if( objPresentL ) - { - enum bpi_FaceFinderType typeL = ( enum bpi_FaceFinderType )bbs_memPeek32( memPtrA + 4 ); - ptrA->faceFinderPtrE = ( struct bpi_FaceFinder* )dataPtrL; - bpi_faceFinderInit( cpA, ptrA->faceFinderPtrE, typeL ); - ptrA->faceFinderPtrE->vpSetParamsE( cpA, ptrA->faceFinderPtrE, maxImageWidthA, maxImageHeightA ); - memPtrA += bpi_faceFinderMemRead( cpA, ptrA->faceFinderPtrE, memPtrA, &memTblL ); - dataPtrL += bpi_faceFinderSizeOf16( cpA, typeL ); - } - else - { - ptrA->faceFinderPtrE = NULL; - } - } - - memPtrA += bpi_memReadCsa16( memPtrA ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinderRef_setParams( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA ) -{ - bbs_DEF_fNameL( "bpi_FaceFinderRef_setParams" ); - if( ptrA->faceFinderPtrE == NULL ) - { - bbs_ERROR1( "%s:\nNo face finder object was loaded", fNameL ); - return; - } - ptrA->faceFinderPtrE->vpSetParamsE( cpA, ptrA->faceFinderPtrE, maxImageWidthA, maxImageHeightA ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinderRef_setRange( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA, - uint32 minEyeDistanceA, - uint32 maxEyeDistanceA ) -{ - bbs_DEF_fNameL( "bpi_FaceFinderRef_setRange" ); - if( ptrA->faceFinderPtrE == NULL ) - { - bbs_ERROR1( "%s:\nNo face finder object was loaded", fNameL ); - return; - } - ptrA->faceFinderPtrE->vpSetRangeE( cpA, ptrA->faceFinderPtrE, minEyeDistanceA, maxEyeDistanceA ); -} - -/* ------------------------------------------------------------------------- */ - -int32 bpi_FaceFinderRef_process( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - struct bpi_DCR* dcrPtrA ) -{ - bbs_DEF_fNameL( "bpi_FaceFinderRef_process" ); - if( ptrA->faceFinderPtrE == NULL ) - { - bbs_ERROR1( "%s:\nNo face finder object was loaded", fNameL ); - return 0; - } - return ptrA->faceFinderPtrE->vpProcessE( cpA, ptrA->faceFinderPtrE, dcrPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -int32 bpi_FaceFinderRef_putDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - struct bpi_DCR* dcrPtrA ) -{ - bbs_DEF_fNameL( "bpi_FaceFinderRef_putDcr" ); - if( ptrA->faceFinderPtrE == NULL ) - { - bbs_ERROR1( "%s:\nNo face finder object was loaded", fNameL ); - return 0; - } - return ptrA->faceFinderPtrE->vpPutDcrE( cpA, ptrA->faceFinderPtrE, dcrPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -void bpi_FaceFinderRef_getDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - uint32 indexA, - struct bpi_DCR* dcrPtrA ) -{ - bbs_DEF_fNameL( "bpi_FaceFinderRef_getDcr" ); - if( ptrA->faceFinderPtrE == NULL ) - { - bbs_ERROR1( "%s:\nNo face finder object was loaded", fNameL ); - return; - } - ptrA->faceFinderPtrE->vpGetDcrE( cpA, ptrA->faceFinderPtrE, indexA, dcrPtrA ); -} - - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_APIEm/FaceFinderRef.h b/Embedded/common/src/b_APIEm/FaceFinderRef.h deleted file mode 100644 index 4fcfe09..0000000 --- a/Embedded/common/src/b_APIEm/FaceFinderRef.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bpi_FACE_FINDER_REF_EM_H -#define bpi_FACE_FINDER_REF_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/UInt16Arr.h" -#include "b_APIEm/FaceFinder.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** type independent reference to a faceFinder module */ -struct bpi_FaceFinderRef -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** object buffer */ - struct bbs_UInt16Arr objBufE; - - /** faceFinder pointer */ - struct bpi_FaceFinder* faceFinderPtrE; - - /* ---- functions ------------------------------------------------------ */ - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bpi_FaceFinderRef */ -void bpi_FaceFinderRef_init( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA ); - -/** resets bpi_FaceFinderRef */ -void bpi_FaceFinderRef_exit( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bpi_FaceFinderRef_copy( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA, - const struct bpi_FaceFinderRef* srcPtrA ); - -/** equal operator */ -flag bpi_FaceFinderRef_equal( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - const struct bpi_FaceFinderRef* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bpi_FaceFinderRef_memSize( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bpi_FaceFinderRef_memWrite( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bpi_FaceFinderRef_memRead( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA, - uint32 maxImageWidthA, - uint32 maxImageHeightA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** sets detection range */ -void bpi_FaceFinderRef_setRange( struct bbs_Context* cpA, - struct bpi_FaceFinderRef* ptrA, - uint32 minEyeDistanceA, - uint32 maxEyeDistanceA ); - -/** single face processing function; returns confidence (8.24) */ -int32 bpi_FaceFinderRef_process( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - struct bpi_DCR* dcrPtrA ); - -/** multiple face processing function; returns number of faces detected */ -int32 bpi_FaceFinderRef_putDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - struct bpi_DCR* dcrPtrA ); - -/** retrieves indexed face from face finder after calling PutDCR */ -void bpi_FaceFinderRef_getDcr( struct bbs_Context* cpA, - const struct bpi_FaceFinderRef* ptrA, - uint32 indexA, - struct bpi_DCR* dcrPtrA ); - -#endif /* bpi_FACE_FINDER_REF_EM_H */ - diff --git a/Embedded/common/src/b_APIEm/Functions.c b/Embedded/common/src/b_APIEm/Functions.c deleted file mode 100644 index fe8de17..0000000 --- a/Embedded/common/src/b_APIEm/Functions.c +++ /dev/null @@ -1,316 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_APIEm/Functions.h" -#include "b_BasicEm/Memory.h" - - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bpi_normalizeSimilarities( struct bbs_Context* cpA, - const int32* rawSimArrA, - const int32* rawIdArrA, - uint32 rawSizeA, - const int32* refSimArrA, - const int32* refIdArrA, - uint32 refSizeA, - enum bpi_SimType simTypeA, - int32* outSimArrA ) -{ - /* 8.24 */ - int32 refSimL = 0; - uint32 iL, jL, kL; - int32* outPtrL = outSimArrA; - const int32* rawPtrL = rawSimArrA; - - switch( simTypeA ) - { - case bpi_RAW_SIM: - { - /* nothing to do */ - } - break; - - case bpi_SUB_MEAN: - { - int32 shiftL = 0; - int32 roundL = 0; - refSimL = 0; - for( iL = 0; iL < refSizeA; iL++ ) - { - refSimL += ( refSimArrA[ iL ] + roundL ) >> shiftL; - if( refSimL > 0x40000000 ) - { - refSimL = ( refSimL + 1 ) >> 1; - shiftL++; - roundL = ( int32 )1 << ( shiftL - 1 ); - } - } - refSimL = ( refSimL / refSizeA ) << shiftL; - } - break; - - case bpi_SUB_MAX_2: - { - int32 maxL = 0; - uint32 maxIndexL = 0; - int32 idL = 0; - - /* find raw maximum */ - for( iL = 0; iL < rawSizeA; iL++ ) - { - if( maxL < rawSimArrA[ iL ] ) - { - maxL = refSimArrA[ iL ]; - maxIndexL = iL; - } - } - - /* consider id of maximum equal to probe id */ - idL = rawIdArrA[ maxIndexL ]; - - /* find maximum similarity in ref array of different id */ - for( iL = 0; iL < refSizeA; iL++ ) - { - if( refIdArrA[ iL ] != idL ) - { - refSimL = ( refSimL > refSimArrA[ iL ] ) ? refSimL : refSimArrA[ iL ]; - } - } - } - break; - - case bpi_SUB_16_MAX_2: - { - int32 maxL = 0; - uint32 maxIndexL = 0; - int32 idL = 0; - - int32 maxSimArrL[ 16 ]; - bbs_memset32( maxSimArrL, ( uint32 )-1, bbs_SIZEOF32( maxSimArrL ) ); - - /* find raw maximum */ - for( iL = 0; iL < rawSizeA; iL++ ) - { - if( maxL < rawSimArrA[ iL ] ) - { - maxL = rawSimArrA[ iL ]; - maxIndexL = iL; - } - } - - /* consider id of maximum equal to probe id */ - idL = rawIdArrA[ maxIndexL ]; - - /* find 16 maximum similarities of different id in ref array */ - for( iL = 0; iL < refSizeA; iL++ ) - { - if( refIdArrA[ iL ] != idL ) - { - int32 simL = refSimArrA[ iL ]; - for( jL = 0; jL < 16; jL++ ) - { - if( simL > maxSimArrL[ jL ] ) break; - } - for( kL = 15; kL > jL; kL-- ) - { - maxSimArrL[ kL ] = maxSimArrL[ kL - 1 ]; - } - if( jL < 16 ) maxSimArrL[ jL ] = simL; - } - } - - refSimL = 0; - for( jL = 0; jL < 16; jL++ ) - { - if( maxSimArrL[ jL ] == -1 ) break; - refSimL += maxSimArrL[ jL ]; - } - - if( jL > 0 ) - { - refSimL /= jL; - } - } - break; - - default: - { - bbs_ERROR1( "void bpi_Identifier_normalizeSimilarities(): simTypeA '%i' is handled", simTypeA ); - return; - } - } - - /* refSimL -= 1.0 */ - refSimL -= ( (uint32)1 << 24 ); - - for( iL = rawSizeA; iL > 0; iL-- ) - { - *outPtrL++ = ( *rawPtrL++ - refSimL + 1 ) >> 1; - } - -} - -/* ------------------------------------------------------------------------- */ - -int32 bpi_normalizedSimilarity( struct bbs_Context* cpA, - int32 rawSimA, - int32 rawIdA, - const int32* refSimArrA, - const int32* refIdArrA, - uint32 refSizeA, - enum bpi_SimType simTypeA ) -{ - /* 8.24 */ - int32 refSimL = 0; - uint32 iL, jL, kL; - - switch( simTypeA ) - { - case bpi_RAW_SIM: - { - /* nothing to do */ - return rawSimA; /* return without adjustment of value range */ - } - - case bpi_SUB_MEAN: - { - int32 shiftL = 0; - int32 roundL = 0; - refSimL = 0; - for( iL = 0; iL < refSizeA; iL++ ) - { - refSimL += ( refSimArrA[ iL ] + roundL ) >> shiftL; - if( refSimL > 0x40000000 ) - { - refSimL = ( refSimL + 1 ) >> 1; - shiftL++; - roundL = ( int32 )1 << ( shiftL - 1 ); - } - } - refSimL = ( refSimL / refSizeA ) << shiftL; - } - break; - - case bpi_SUB_MAX_2: - { - /* find maximum similarity in ref array of different rawIdA */ - for( iL = 0; iL < refSizeA; iL++ ) - { - if( refIdArrA[ iL ] != rawIdA ) - { - refSimL = ( refSimL > refSimArrA[ iL ] ) ? refSimL : refSimArrA[ iL ]; - } - } - } - break; - - case bpi_SUB_16_MAX_2: - { - int32 maxSimArrL[ 16 ]; - int32 idL = rawIdA; - bbs_memset32( maxSimArrL, ( uint32 )-1, bbs_SIZEOF32( maxSimArrL ) ); - - /* find 16 maximum similarities of different id in ref array */ - for( iL = 0; iL < refSizeA; iL++ ) - { - if( refIdArrA[ iL ] != idL ) - { - int32 simL = refSimArrA[ iL ]; - for( jL = 0; jL < 16; jL++ ) - { - if( simL > maxSimArrL[ jL ] ) break; - } - for( kL = 15; kL > jL; kL-- ) - { - maxSimArrL[ kL ] = maxSimArrL[ kL - 1 ]; - } - if( jL < 16 ) maxSimArrL[ jL ] = simL; - } - } - - refSimL = 0; - for( jL = 0; jL < 16; jL++ ) - { - if( maxSimArrL[ jL ] == -1 ) break; - refSimL += maxSimArrL[ jL ]; - } - - if( jL > 0 ) - { - refSimL /= jL; - } - } - break; - - default: - { - bbs_ERROR1( "void bpi_Identifier_normalizeSimilarities(): simTypeA '%i' is handled", simTypeA ); - } - break; - } - - /* refSimL -= 1.0 */ - refSimL -= ( (uint32)1 << 24 ); - return ( rawSimA - refSimL + 1 ) >> 1; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_memWriteCsa16( uint16* memPtrA, uint32 memSizeA, uint16 chkSumA ) -{ - uint16* memPtrL = memPtrA - memSizeA + 1; - uint32 iL; - uint16 sumL = 0; - uint16 csaL = 0; - - bbs_memWrite16( &csaL, memPtrA ); - for( iL = 0; iL < memSizeA; iL++ ) - { - uint16 valL = 0; - memPtrL += bbs_memRead16( &valL, memPtrL ); - sumL += valL; - } - csaL = chkSumA - sumL; - - return bbs_memWrite16( &csaL, memPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bpi_memReadCsa16( const uint16* memPtrA ) -{ - return bbs_SIZEOF16( uint16 ); -} - -/* ------------------------------------------------------------------------- */ - diff --git a/Embedded/common/src/b_APIEm/Functions.h b/Embedded/common/src/b_APIEm/Functions.h deleted file mode 100644 index f2f81bf..0000000 --- a/Embedded/common/src/b_APIEm/Functions.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bpi_FUNCTIONS_EM_H -#define bpi_FUNCTIONS_EM_H - -/** - * This files contains general purpose functions. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Functions.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - - -/** methods of similarty normalization for identification and verification */ -enum bpi_SimType -{ - bpi_RAW_SIM, /* take raw similarity only */ - bpi_SUB_MEAN, /* subtract average */ - bpi_SUB_MAX_1, /* subtract maximum (different id of each entry) */ - bpi_SUB_MAX_2, /* subtract maximum (different id of best entry) */ - bpi_SUB_4_MAX_2, /* subtract average maximum of best 4 entries (method 2) */ - bpi_SUB_8_MAX_2, /* subtract average maximum of best 8 entries (method 2) */ - bpi_SUB_16_MAX_2, /* subtract average maximum of best 16 entries (method 2) */ - bpi_SUB_32_MAX_2 /* subtract average maximum of best 32 entries (method 2) */ -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/** Normalizes similarities. - * This function is used by identifier module - */ -void bpi_normalizeSimilarities( struct bbs_Context* cpA, - const int32* rawSimArrA, - const int32* rawIdArrA, - uint32 rawSizeA, - const int32* refSimArrA, - const int32* refIdArrA, - uint32 refSizeA, - enum bpi_SimType simTypeA, - int32* outSimArrA ); - -/** Returnes normalized single similarity. - * This function is used by verifier module - */ -int32 bpi_normalizedSimilarity( struct bbs_Context* cpA, - int32 rawSimA, - int32 rawIdA, - const int32* refSimArrA, - const int32* refIdArrA, - uint32 refSizeA, - enum bpi_SimType simTypeA ); - - - -/** writes checksum adjustment value to meet chkSumA to memory - * the function assumes that memPtrA is memSizeA - 1 units - * away from beginning of object-memory block - */ -uint32 bpi_memWriteCsa16( uint16* memPtrA, uint32 memSizeA, uint16 chkSumA ); - -/** takes checksum adjustment value from memory stream */ -uint32 bpi_memReadCsa16( const uint16* memPtrA ); - -/** tests check sum and produxes error condition if no match */ -void bpi_testCheckSum( struct bbs_Context* cpA, uint16* memPtrA, uint16 chkSumA, const char* fNameA ); - - -#endif /* bpi_FUNCTIONS_EM_H */ - diff --git a/Embedded/common/src/b_APIEm/Types.h b/Embedded/common/src/b_APIEm/Types.h deleted file mode 100644 index ea2e294..0000000 --- a/Embedded/common/src/b_APIEm/Types.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bpi_TYPES_EM_H -#define bpi_TYPES_EM_H - -/** - * This file contains gerenral purpose types. - */ - -/* ---- includes ----------------------------------------------------------- */ - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** Type of module */ -enum bpi_ModuleType -{ - bpi_UNDEFINED, - bpi_OLD_FACE_FINDER_REMOVED, - bpi_FACE_FINDER, - bpi_LANDMARKER, - bpi_CONVERTER, - bpi_IDENTIFIER -}; - -/** List of object identifiers - * This list is is synchronized with enum list epi_ObjectId - * Not all types are neccessarily in use in the embedded realm - * values in round braces ( e.g. (32) ) denote the size in bits of the associated data type - * - * Object formats: - * ASCII String: 0-terminates string of characters - * - * Image: <(32) type><(32) width><(32) height><(8) byte1><(8) byte2>.... - * type: 0: gray image - pixels are bytes starting at upper left corner - * 1: rgb color images - prixels are 3-byte rgb groups starting at upper left corner - * 2: jpeg compressed image (<(32) type><(32) width><(32) height> precede jpeg data) - * - * Cue: SDK compatible template (bpi_IdCueHdr + subsequent data) - * - * The type values never change. Type numbers can be taken for granted. - */ -enum bpi_ObjectId -{ - bpi_ID_FILE, /** (ASCII String) file name (of image) */ - bpi_ID_BOUNDING_BOX, /** bounding box (coordinates of original image) */ - bpi_ID_GRAPH, /** ground truth graph */ - bpi_ID_FILE_LIST, /** list of filenames */ - bpi_ID_GRAPH_LIST, /** list of egp_SpatialGraph (multiple ground truth graphs per image) */ - bpi_ID_GROUP, /** generic group element (used in the embedded domain to identify an object set) */ - bpi_ID_IMAGE = 256, /** (Image) downscaled byte image */ - bpi_ID_IMAGE_FRAME, /** bounding box surrounding original image */ - bpi_ID_IMAGE_ID, /** (32)-integer id number of person por object in image */ - bpi_ID_SIGNATURE_NAME = 512, /** (ASCII String) name of gallery element (=signature) */ - bpi_ID_CONFIDENCE, /** general purpose confidence value */ - bpi_ID_CUE, /** (Cue) general purpose cue */ - bpi_ID_PCA_MAT, /** eigenvector matrix obtained from PCA analysis */ - bpi_ID_PCA_AVG, /** PCA average vector */ - bpi_ID_PCA_EVL, /** PCA eigen values */ - bpi_ID_COMMENT /** (ASCII String) comment or description of data */ - // never modify this list alone (!) - modification must be initiated in Kernel/API -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -#endif /* bpi_TYPES_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/APh.c b/Embedded/common/src/b_BasicEm/APh.c deleted file mode 100644 index dd53ad9..0000000 --- a/Embedded/common/src/b_BasicEm/APh.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/APh.h" -#include "b_BasicEm/Complex.h" -#include "b_BasicEm/Math.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -flag bbs_APh_equal( struct bbs_APh aph1A, - struct bbs_APh aph2A ) -{ - return ( aph1A.absE == aph2A.absE ) && ( aph1A.phaseE == aph2A.phaseE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_APh_memSize( struct bbs_Context* cpA, - struct bbs_APh aPhA ) -{ - return bbs_SIZEOF16( aPhA.absE ) + bbs_SIZEOF16( aPhA.phaseE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_APh_memWrite( struct bbs_Context* cpA, - const struct bbs_APh* ptrA, - uint16* memPtrA ) -{ - memPtrA += bbs_memWrite16( &ptrA->absE, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->phaseE, memPtrA ); - return bbs_APh_memSize( cpA, *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_APh_memRead( struct bbs_Context* cpA, - struct bbs_APh* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead16( &ptrA->absE, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->phaseE, memPtrA ); - return bbs_APh_memSize( cpA, *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -struct bbs_APh bbs_APh_conj( const struct bbs_APh aPhA ) -{ - struct bbs_APh aphL; - aphL.absE = aPhA.absE; - aphL.phaseE = - aPhA.phaseE; - return aphL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_APh_importComplex( struct bbs_APh* dstPtrA, - const struct bbs_Complex* srcPtrA ) -{ - dstPtrA->absE = bbs_sqrt32( ( int32 ) srcPtrA->realE * srcPtrA->realE + ( int32 ) srcPtrA->imagE * srcPtrA->imagE ); - dstPtrA->phaseE = bbs_phase16( srcPtrA->realE, srcPtrA->imagE ); -} - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/APh.h b/Embedded/common/src/b_BasicEm/APh.h deleted file mode 100644 index 39cc7e1..0000000 --- a/Embedded/common/src/b_BasicEm/APh.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_APH_H -#define bbs_APH_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bbs_Complex; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** Object representing absolute and phase value of a complex number */ -struct bbs_APh -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** absolute value */ - uint16 absE; - - /** phase value */ - phase16 phaseE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** equal operator */ -flag bbs_APh_equal( struct bbs_APh aph1A, - struct bbs_APh aph2A ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size in 16-bit words object needs when written to memory */ -uint32 bbs_APh_memSize( struct bbs_Context* cpA, - struct bbs_APh aPhA ); - -/** writes object to memory; returns number of 16-bit words written */ -uint32 bbs_APh_memWrite( struct bbs_Context* cpA, - const struct bbs_APh* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of 16-bit words read */ -uint32 bbs_APh_memRead( struct bbs_Context* cpA, - struct bbs_APh* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** conjugated value */ -struct bbs_APh bbs_APh_conj( const struct bbs_APh aPhA ); - -/** imports complex value */ -void bbs_APh_importComplex( struct bbs_APh* dstPtrA, - const struct bbs_Complex* srcPtrA ); - -/* ------------------------------------------------------------------------- */ - -#endif /* bbs_APH_H */ diff --git a/Embedded/common/src/b_BasicEm/APhArr.c b/Embedded/common/src/b_BasicEm/APhArr.c deleted file mode 100644 index 7bfa0e0..0000000 --- a/Embedded/common/src/b_BasicEm/APhArr.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/APhArr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_APhArr_init( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_APhArr_exit( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_APhArr_copy( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - const struct bbs_APhArr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->allocatedSizeE ) - { - bbs_ERROR0( "void bbs_APhArr_copy(...):\n" - "Insufficient allocated memory in destination array." ); - return; - } -#endif - bbs_APhArr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy32( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE * bbs_SIZEOF32( struct bbs_APh ) ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_APhArr_equal( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA, - const struct bbs_APhArr* srcPtrA ) -{ - uint32 iL; - const struct bbs_APh* ptr1L = ptrA->arrPtrE; - const struct bbs_APh* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( !bbs_APh_equal( *ptr1L, *ptr2L ) ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_APhArr_heapSize( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA, - uint32 sizeA ) -{ - return sizeA * bbs_SIZEOF16( struct bbs_APh ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_APhArr_create( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_APhArr_size( cpA, ptrA, sizeA ); - } - else - { - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( struct bbs_APh ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeA; - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_APhArr_size( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_APhArr_size( struct bbs_APhArr*, uint32 ):\n" - "Insufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_APhArr_memSize( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE * bbs_SIZEOF16( struct bbs_APh ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_APhArr_memWrite( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_APhArr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE * 2, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_APhArr_memRead( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_APhArr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE * 2, memPtrA ); - - if( memSizeL != bbs_APhArr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbs_APhArr_memRead( const struct bbs_APhArr*, const uint16* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/APhArr.h b/Embedded/common/src/b_BasicEm/APhArr.h deleted file mode 100644 index 9a70d83..0000000 --- a/Embedded/common/src/b_BasicEm/APhArr.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_APH_ARR_EM_H -#define bbs_APH_ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" -#include "b_BasicEm/APh.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** abs phase array */ -struct bbs_APhArr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of bytes */ - struct bbs_APh* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_APhArr */ -void bbs_APhArr_init( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA ); - -/** frees bbs_APhArr */ -void bbs_APhArr_exit( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_APhArr_copy( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - const struct bbs_APhArr* srcPtrA ); - -/** equal operator */ -flag bbs_APhArr_equal( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA, - const struct bbs_APhArr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_APhArr_heapSize( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** creates bbs_APhArr object. - * This function must be called after initialization before usage of - * object. - */ -void bbs_APhArr_create( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** sets array size */ -void bbs_APhArr_size( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bbs_APhArr_memSize( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bbs_APhArr_memWrite( struct bbs_Context* cpA, - const struct bbs_APhArr* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bbs_APhArr_memRead( struct bbs_Context* cpA, - struct bbs_APhArr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -#endif /* bbs_APH_ARR_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Basic.h b/Embedded/common/src/b_BasicEm/Basic.h deleted file mode 100644 index 2e75f68..0000000 --- a/Embedded/common/src/b_BasicEm/Basic.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_BASIC_EM_H -#define bbs_BASIC_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -/** This header file is not part of the repository. - * If you get an error message at this point, copy - * b_BasicEm/LibConfigDefault.h into - * "../conf/b_BasicEm/LibConfig.h" - */ -#include "../conf/b_BasicEm/LibConfig.h" - -#include "b_BasicEm/Config.h" - -/* ---- defines ------------------------------------------------------------ */ - -#if defined( WIN32 ) - /* disable warning for short += short: */ - #pragma warning( disable : 4244 ) -#endif - -#if defined( bbs_NO_MESSAGE_HANDLING ) -#error bbs_NO_MESSAGE_HANDLING is obsolete, please use bbs_COMPACT_MESSAGE_HANDLING instead. -#endif -#if defined( bbs_ENABLE_MESSAGE_FPTRG ) -#error bbs_ENABLE_MESSAGE_FPTRG is obsolete, please use error handler in context object instead. -#endif - -#if defined( bbs_NO_MESSAGE_HANDLING ) && defined( bbs_ENABLE_MESSAGE_FPTRG ) -#error LibConfig.h: bbs_NO_MESSAGE_HANDLING and bbs_ENABLE_MESSAGE_FPTRG are mutually exclusive -#endif - - - -/* ---- typedefs ----------------------------------------------------------- */ - -typedef signed char int8; -typedef signed short int16; -typedef unsigned char uint8; -typedef unsigned short uint16; - -#if defined HW_TMS320C6x - typedef signed int int32; - typedef unsigned int uint32; - typedef uint32 count_t; -#elif defined HW_TMS320C5x - typedef signed long int32; - typedef unsigned long uint32; - typedef uint16 count_t; -#else - typedef signed int int32; - typedef unsigned int uint32; - typedef uint32 count_t; -#endif - - -typedef uint32 flag; /* boolean type */ - -/* - Please modify the 64 bit types declarations below for specific platforms/compilers - where necessary; - bbs_TYPES_64_AVAILABLE should be checked in code sections that make use of 64 bit data types. -*/ -#ifdef bbs_TYPES_64_AVAILABLE - -#ifdef WIN64 - typedef __int64 int64; - typedef unsigned __int64 uint64; -#else - typedef long long int64; - typedef unsigned long long uint64; -#endif - -#endif /* bbs_TYPES_64_AVAILABLE */ - -/** floating point type */ -struct flt16 -{ - int16 valE; - int16 bbpE; -}; - -#ifndef TRUE - #define TRUE 1 - #define FALSE 0 -#endif - -#ifndef NULL - #define NULL 0L -#endif - -#define bbs_MAX_STRING_LENGTH 1024 - -/* ---- macros ------------------------------------------------------------- */ - -/** device independent macro definitions for sizeof: - * bbs_SIZEOF8: size in bytes - * bbs_SIZEOF16: size in 16-bit words - * bbs_SIZEOF32: size in 32-bit words - */ -#if defined( HW_TMS320C5x ) - #define bbs_SIZEOF8( typeA ) ( sizeof( typeA ) << 1 ) - #define bbs_SIZEOF16( typeA ) ( sizeof( typeA ) ) - #define bbs_SIZEOF32( typeA ) ( sizeof( typeA ) >> 1 ) -#else - #define bbs_SIZEOF8( typeA ) ( sizeof( typeA ) ) - #define bbs_SIZEOF16( typeA ) ( sizeof( typeA ) >> 1 ) - #define bbs_SIZEOF32( typeA ) ( sizeof( typeA ) >> 2 ) -#endif - -/** messages */ -#if defined( HW_TMS320C5x ) || defined( bbs_COMPACT_MESSAGE_HANDLING ) - - #define bbs_DEF_fNameL( fNameA ) - - #define bbs_ERROR0( formatA ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, NULL ) ) - #define bbs_ERROR1( formatA, arg1A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, NULL ) ) - #define bbs_ERROR2( formatA, arg1A, arg2A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, NULL ) ) - #define bbs_ERROR3( formatA, arg1A, arg2A, arg3A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, NULL ) ) - #define bbs_ERROR4( formatA, arg1A, arg2A, arg3A, arg4A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, NULL ) ) - #define bbs_ERROR5( formatA, arg1A, arg2A, arg3A, arg4A, arg5A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, NULL ) ) - - #define bbs_ERR0( errorA, formatA ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, NULL ) ) - #define bbs_ERR1( errorA, formatA, arg1A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, NULL ) ) - #define bbs_ERR2( errorA, formatA, arg1A, arg2A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, NULL ) ) - #define bbs_ERR3( errorA, formatA, arg1A, arg2A, arg3A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, NULL ) ) - #define bbs_ERR4( errorA, formatA, arg1A, arg2A, arg3A, arg4A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, NULL ) ) - #define bbs_ERR5( errorA, formatA, arg1A, arg2A, arg3A, arg4A, arg5A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, NULL ) ) - -#else - - #define bbs_DEF_fNameL( fNameA ) const char* fNameL = fNameA; - - #define bbs_ERROR0( formatA ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, formatA ) ) - #define bbs_ERROR1( formatA, arg1A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, formatA, arg1A ) ) - #define bbs_ERROR2( formatA, arg1A, arg2A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, formatA, arg1A, arg2A ) ) - #define bbs_ERROR3( formatA, arg1A, arg2A, arg3A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, formatA, arg1A, arg2A, arg3A ) ) - #define bbs_ERROR4( formatA, arg1A, arg2A, arg3A, arg4A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, formatA, arg1A, arg2A, arg3A, arg4A ) ) - #define bbs_ERROR5( formatA, arg1A, arg2A, arg3A, arg4A, arg5A ) bbs_Context_pushError( cpA, bbs_Error_create( bbs_ERR_ERROR, __LINE__, __FILE__, formatA, arg1A, arg2A, arg3A, arg4A, arg5A ) ) - - #define bbs_ERR0( errorA, formatA ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, formatA ) ) - #define bbs_ERR1( errorA, formatA, arg1A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, formatA, arg1A ) ) - #define bbs_ERR2( errorA, formatA, arg1A, arg2A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, formatA, arg1A, arg2A ) ) - #define bbs_ERR3( errorA, formatA, arg1A, arg2A, arg3A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, formatA, arg1A, arg2A, arg3A ) ) - #define bbs_ERR4( errorA, formatA, arg1A, arg2A, arg3A, arg4A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, formatA, arg1A, arg2A, arg3A, arg4A ) ) - #define bbs_ERR5( errorA, formatA, arg1A, arg2A, arg3A, arg4A, arg5A ) bbs_Context_pushError( cpA, bbs_Error_create( errorA, __LINE__, __FILE__, formatA, arg1A, arg2A, arg3A, arg4A, arg5A ) ) - -#endif - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -#endif /* bbs_BASIC_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Complex.c b/Embedded/common/src/b_BasicEm/Complex.c deleted file mode 100644 index 07c3f43..0000000 --- a/Embedded/common/src/b_BasicEm/Complex.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Complex.h" -#include "b_BasicEm/APh.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -flag bbs_Complex_equal( struct bbs_Complex compl1A, struct bbs_Complex compl2A ) -{ - return ( compl1A.realE == compl2A.realE ) && ( compl1A.imagE == compl2A.imagE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Complex_memSize( struct bbs_Context* cpA, - struct bbs_Complex complA ) -{ - return bbs_SIZEOF16( complA.realE ) + bbs_SIZEOF16( complA.imagE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Complex_memWrite( struct bbs_Context* cpA, - const struct bbs_Complex* ptrA, - uint16* memPtrA ) -{ - memPtrA += bbs_memWrite16( &ptrA->realE, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->imagE, memPtrA ); - return bbs_Complex_memSize( cpA, *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Complex_memRead( struct bbs_Context* cpA, - struct bbs_Complex* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead16( &ptrA->realE, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->imagE, memPtrA ); - return bbs_Complex_memSize( cpA, *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -struct bbs_Complex bbs_Complex_conj( struct bbs_Complex complA ) -{ - struct bbs_Complex resultL; - resultL.imagE = - complA.imagE; - resultL.realE = complA.realE; - return resultL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Complex_abs2( struct bbs_Complex complA ) -{ - return ( int32 ) complA.realE * complA.realE + - ( int32 ) complA.imagE * complA.imagE; -} - -/* ------------------------------------------------------------------------- */ - -uint16 bbs_Complex_abs( struct bbs_Complex complA ) -{ - return bbs_sqrt32( bbs_Complex_abs2( complA ) ); -} - -/* ------------------------------------------------------------------------- */ - -phase16 bbs_Complex_phase( struct bbs_Complex complA ) -{ - int32 realL, imagL; - realL = complA.realE; - imagL = complA.imagE; - - return bbs_phase16( realL, imagL ); -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Complex_importAPh( struct bbs_Complex* dstPtrA, const struct bbs_APh* srcPtrA ) -{ - dstPtrA->realE = ( ( bbs_cos32( srcPtrA->phaseE ) >> 8 ) * srcPtrA->absE ) >> 16; - dstPtrA->imagE = ( ( bbs_sin32( srcPtrA->phaseE ) >> 8 ) * srcPtrA->absE ) >> 16; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/Complex.h b/Embedded/common/src/b_BasicEm/Complex.h deleted file mode 100644 index fbed51e..0000000 --- a/Embedded/common/src/b_BasicEm/Complex.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_COMPLEX_H -#define bbs_COMPLEX_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bbs_APh; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** Complex object */ -struct bbs_Complex -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** real part */ - int16 realE; - - /** imaginary part */ - int16 imagE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** equal operator */ -flag bbs_Complex_equal( struct bbs_Complex compl1A, struct bbs_Complex compl2A ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size in 16-bit words object needs when written to memory */ -uint32 bbs_Complex_memSize( struct bbs_Context* cpA, - struct bbs_Complex complA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbs_Complex_memWrite( struct bbs_Context* cpA, - const struct bbs_Complex* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbs_Complex_memRead( struct bbs_Context* cpA, - struct bbs_Complex* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** conjugated value */ -struct bbs_Complex bbs_Complex_conj( struct bbs_Complex complA ); - -/** returns squared abs value */ -uint32 bbs_Complex_abs2( struct bbs_Complex complA ); - -/** returns absolute value */ -uint16 bbs_Complex_abs( struct bbs_Complex complA ); - -/** returns phase value */ -phase16 bbs_Complex_phase( struct bbs_Complex complA ); - -/** imports abs-phase value */ -void bbs_Complex_importAPh( struct bbs_Complex* dstPtrA, const struct bbs_APh* srcPtrA ); - -/* ------------------------------------------------------------------------- */ - -#endif /* bbs_COMPLEX_H */ diff --git a/Embedded/common/src/b_BasicEm/ComplexArr.c b/Embedded/common/src/b_BasicEm/ComplexArr.c deleted file mode 100644 index b667f96..0000000 --- a/Embedded/common/src/b_BasicEm/ComplexArr.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/ComplexArr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_ComplexArr_init( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_ComplexArr_exit( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_ComplexArr_copy( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - const struct bbs_ComplexArr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->allocatedSizeE ) - { - bbs_ERROR0( "void bbs_ComplexArr_copy( ... ):\n" - "Unsufficient allocated memory in destination array." ); - return; - } -#endif - bbs_ComplexArr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy32( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE * bbs_SIZEOF32( struct bbs_Complex ) ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_ComplexArr_equal( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA, - const struct bbs_ComplexArr* srcPtrA ) -{ - uint32 iL; - const struct bbs_Complex* ptr1L = ptrA->arrPtrE; - const struct bbs_Complex* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( !bbs_Complex_equal( *ptr1L, *ptr2L ) ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_ComplexArr_heapSize( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA, - uint32 sizeA ) -{ - return sizeA * bbs_SIZEOF16( struct bbs_Complex ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_ComplexArr_create( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_ComplexArr_size( cpA, ptrA, sizeA ); - } - else - { - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( struct bbs_Complex ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeA; - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_ComplexArr_size( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_ComplexArr_size( struct bbs_ComplexArr*, uint32 sizeA ):\n" - "Unsufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_ComplexArr_memSize( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA ) - -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE * bbs_SIZEOF16( struct bbs_Complex ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_ComplexArr_memWrite( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_ComplexArr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE * 2, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_ComplexArr_memRead( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_ComplexArr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE * 2, memPtrA ); - - if( memSizeL != bbs_ComplexArr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbs_ComplexArr_memRead( const struct bbs_ComplexArr* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/ComplexArr.h b/Embedded/common/src/b_BasicEm/ComplexArr.h deleted file mode 100644 index 328920a..0000000 --- a/Embedded/common/src/b_BasicEm/ComplexArr.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_COMPLEX_ARR_EM_H -#define bbs_COMPLEX_ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" -#include "b_BasicEm/Complex.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** complex array */ -struct bbs_ComplexArr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of bytes */ - struct bbs_Complex* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_ComplexArr */ -void bbs_ComplexArr_init( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA ); - -/** frees bbs_ComplexArr */ -void bbs_ComplexArr_exit( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_ComplexArr_copy( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - const struct bbs_ComplexArr* srcPtrA ); - -/** equal operator */ -flag bbs_ComplexArr_equal( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA, - const struct bbs_ComplexArr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_ComplexArr_heapSize( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** creates bbs_ComplexArr object */ -void bbs_ComplexArr_create( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** sets array size */ -void bbs_ComplexArr_size( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size in 16-bit words object needs when written to memory */ -uint32 bbs_ComplexArr_memSize( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbs_ComplexArr_memWrite( struct bbs_Context* cpA, - const struct bbs_ComplexArr* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbs_ComplexArr_memRead( struct bbs_Context* cpA, - struct bbs_ComplexArr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -#endif /* bbs_COMPLEX_ARR_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Config.h b/Embedded/common/src/b_BasicEm/Config.h deleted file mode 100644 index 06d37c0..0000000 --- a/Embedded/common/src/b_BasicEm/Config.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_CONFIG_EM_H -#define bbs_CONFIG_EM_H - -/** - * This file contains hardware and OS specific definitions - */ - -/* ---- release specific defines ------------------------------------------- */ - -/* ---- hardware specific defines ------------------------------------------ */ - -#if defined( HW_i586 ) || defined( HW_i686 ) - #ifdef HW_SSE2 - #define bbs_MEMORY_ALIGNMENT 16 /* SSE2: align data to 128 bits */ - #else - #define bbs_MEMORY_ALIGNMENT 8 /* MMX: align data to 64 bits */ - #endif -#elif defined( HW_EE ) - #define bbs_MEMORY_ALIGNMENT 16 /* align EE-MMI data to 128 bits */ -#else - #define bbs_MEMORY_ALIGNMENT 1 -#endif - -#ifdef HW_TMS470R2X - #pragma message("Warning: deprecated define HW_TMS470R2X, use HW_ARMv4 instead") - #define HW_ARMv4 -#endif - -#ifdef HW_ARM9E - #pragma message("Warning: deprecated define HW_ARM9E, use HW_ARMv5TE instead") - #define HW_ARMv5TE -#endif - -/* ---- operating system specific defines ---------------------------------- */ - -#if defined( WIN32 ) || defined( _WIN32_WCE ) - /* disable warning "unreferenced formal parameter": */ - #pragma warning( disable : 4100 ) - - /* disable warning for constant expression in condition: */ - #pragma warning( disable : 4127 ) - - /* disable warning for short += short: */ - #pragma warning( disable : 4244 ) - - /* disable warning 'unreachable code' in release build: */ - /* this warning occurs due to a wrong code evaluation of the compiler */ - #pragma warning( disable : 4702 ) - - /* disable warning for not expanded inline functions in release build: */ - #pragma warning( disable : 4710 ) - - /* disable warning for automatic expanded inline functions in release build: */ - #pragma warning( disable : 4711 ) - - /* disable warning "unreferenced inline function has been removed": */ - #pragma warning( disable : 4514 ) - -#endif - -/* -------------------------------------------------------------------------- */ - -#endif /* bbs_CONFIG_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Context.c b/Embedded/common/src/b_BasicEm/Context.c deleted file mode 100644 index 02f52c8..0000000 --- a/Embedded/common/src/b_BasicEm/Context.c +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Context.h" -#include "b_BasicEm/String.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Context_init( struct bbs_Context* cpA ) -{ - uint32 iL; - for( iL = 0; iL < bbs_CONTEXT_MAX_ERRORS; iL++ ) - { - cpA->errStackE[ iL ].errorE = bbs_ERR_OK; - cpA->errStackE[ iL ].fileE[ 0 ] = 0; - cpA->errStackE[ iL ].lineE = 0; - cpA->errStackE[ iL ].textE[ 0 ] = 0; - } - - cpA->errIndexE = 0; - - bbs_MemTbl_init( cpA, &cpA->memTblE ); - - for( iL = 0; iL < bbs_CONTEXT_MAX_MEM_MANAGERS; iL++ ) - { - bbs_DynMemManager_init( cpA, &cpA->dynMemManagerArrE[ iL ] ); - } - - cpA->dynMemManagerArrSizeE = 0; - cpA->errorHandlerE = NULL; - cpA->callbackHandlerE = NULL; - cpA->userPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Context_exit( struct bbs_Context* cpA ) -{ - uint32 iL; - for( iL = 0; iL < bbs_CONTEXT_MAX_ERRORS; iL++ ) - { - cpA->errStackE[ iL ].errorE = bbs_ERR_OK; - cpA->errStackE[ iL ].fileE[ 0 ] = 0; - cpA->errStackE[ iL ].lineE = 0; - cpA->errStackE[ iL ].textE[ 0 ] = 0; - } - - cpA->errIndexE = 0; - - bbs_MemTbl_exit( cpA, &cpA->memTblE ); - - for( iL = 0; iL < cpA->dynMemManagerArrSizeE; iL++ ) - { - bbs_DynMemManager_freeAll( cpA, &cpA->dynMemManagerArrE[ iL ] ); - } - - for( iL = 0; iL < bbs_CONTEXT_MAX_MEM_MANAGERS; iL++ ) - { - bbs_DynMemManager_exit( cpA, &cpA->dynMemManagerArrE[ iL ] ); - } - - cpA->dynMemManagerArrSizeE = 0; - cpA->errorHandlerE = NULL; - cpA->callbackHandlerE = NULL; - cpA->userPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Context_copy( struct bbs_Context* cpA, const struct bbs_Context* srcPtrA ) -{ - bbs_ERROR0( "void bbs_Context_copy( struct bbs_Context* cpA, const struct bbs_Context* srcPtrA ):\n" - "A comtext object cannot be copied" ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bbs_Error bbs_Error_create( uint32 errorA, - uint32 lineA, - const char* fileA, - const char* textA, - ... ) -{ - struct bbs_Error errorL; - errorL.errorE = errorA; - errorL.lineE = lineA; - - if( fileA != NULL ) - { - uint32 lenL = bbs_strlen( fileA ); - uint32 ofsL = ( lenL + 1 > bbs_ERROR_MAX_FILE_CHARS ) ? lenL + 1 - bbs_ERROR_MAX_FILE_CHARS : 0; - bbs_strcpy( errorL.fileE, fileA + ofsL ); - } - else - { - errorL.fileE[ 0 ] = 0; - } - - if( textA != NULL ) - { - va_list argsL; - va_start( argsL, textA ); - bbs_vsnprintf( errorL.textE, bbs_ERROR_MAX_TEXT_CHARS, textA, argsL ); - va_end( argsL ); - } - else - { - errorL.textE[ 0 ] = 0; - } - - return errorL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -flag bbs_Context_pushError( struct bbs_Context* cpA, struct bbs_Error errorA ) -{ - flag returnL = FALSE; - if( cpA->errIndexE < bbs_CONTEXT_MAX_ERRORS ) - { - cpA->errStackE[ cpA->errIndexE++ ] = errorA; - returnL = TRUE; - } - - if( cpA->errorHandlerE != NULL ) - { - cpA->errorHandlerE( cpA ); - } - - return returnL; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_Error bbs_Context_popError( struct bbs_Context* cpA ) -{ - if( cpA->errIndexE > 0 ) - { - return cpA->errStackE[ --( cpA->errIndexE ) ]; - } - else - { - return cpA->errStackE[ 0 ]; - } -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_Error bbs_Context_peekError( struct bbs_Context* cpA ) -{ - if( cpA->errIndexE > 0 ) - { - return cpA->errStackE[ cpA->errIndexE - 1 ]; - } - else - { - return cpA->errStackE[ 0 ]; - } -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_Context_error( struct bbs_Context* cpA ) -{ - return cpA->errIndexE > 0; -} - -/* ------------------------------------------------------------------------- */ - -bbs_errorFPtr bbs_Context_setErrorHandler( struct bbs_Context* cpA, - bbs_errorFPtr errorHandlerA ) -{ - bbs_errorFPtr oldErrorHandlerL = cpA->errorHandlerE; - cpA->errorHandlerE = errorHandlerA; - return oldErrorHandlerL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Context_doCallback( struct bbs_Context* cpA ) -{ - if( cpA->callbackHandlerE != NULL ) - { - uint32 errorL = ( *cpA->callbackHandlerE )( cpA ); - if( errorL != bbs_ERR_OK ) - { - bbs_Context_pushError( cpA, bbs_Error_create( errorL, 0, NULL, NULL ) ); - } - } -} - -/* ------------------------------------------------------------------------- */ - -bbs_callbackFPtr bbs_Context_setCallbackHandler( struct bbs_Context* cpA, - bbs_callbackFPtr callbackHandlerA ) -{ - bbs_callbackFPtr oldCallbackHandlerL = cpA->callbackHandlerE; - cpA->callbackHandlerE = callbackHandlerA; - return oldCallbackHandlerL; -} - -/* ------------------------------------------------------------------------- */ - -/** adds a static memory segment to memory table of context */ -void bbs_Context_addStaticSeg( struct bbs_Context* cpA, - uint16* memPtrA, /* pointer to memory */ - uint32 sizeA, /* size of memory segment in 16 bit units */ - flag sharedA, /* Indicates that this segment is to be shared among multiple objects */ - uint32 idA ) /* ID of segment, id=0: unspecified */ -{ - struct bbs_MemSeg memSegL; - bbs_DEF_fNameL( "void bbs_Context_addStaticSeg(....)" ) - - - /* checks */ - if( sharedA && cpA->memTblE.ssSizeE == bbs_MAX_MEM_SEGS ) - { - bbs_ERROR1( "%s:\nShared Memory Table is full! Increase bbs_MAX_MEM_SEGS", fNameL ); - return; - } - if( sharedA && cpA->memTblE.esSizeE == bbs_MAX_MEM_SEGS ) - { - bbs_ERROR1( "%s:\nExclusive Memory Table is full! Increase bbs_MAX_MEM_SEGS", fNameL ); - return; - } - - - bbs_MemSeg_init( cpA, &memSegL ); - memSegL.memPtrE = memPtrA; - memSegL.sizeE = sizeA; - memSegL.allocIndexE = 0; - memSegL.sharedE = sharedA; - memSegL.idE = idA; - memSegL.dynMemManagerPtrE = NULL; - - if( sharedA ) - { - cpA->memTblE.ssArrE[ cpA->memTblE.ssSizeE++ ] = memSegL; - } - else - { - cpA->memTblE.esArrE[ cpA->memTblE.esSizeE ] = memSegL; - cpA->memTblE.espArrE[ cpA->memTblE.esSizeE ] = &cpA->memTblE.esArrE[ cpA->memTblE.esSizeE ]; - cpA->memTblE.esSizeE++; - } -} - -/* ------------------------------------------------------------------------- */ - -/* adds a dynamic memory segment to memory table of context - * Upon destruction of the context object any residual will be freed automatically - */ -void bbs_Context_addDynamicSeg( struct bbs_Context* cpA, - bbs_mallocFPtr mallocFPtrA, /* function pointer to external mem alloc function (s. comment of type declaration)*/ - bbs_freeFPtr freeFPtrA, /* function pointer to external mem free function */ - flag sharedA, /* Indicates that this segment is to be shared among multiple objects */ - uint32 idA ) /* ID of segment, id=0: unspecified */ -{ - struct bbs_DynMemManager memManagerL; - struct bbs_MemSeg memSegL; - bbs_DEF_fNameL( "void bbs_Context_addDynamicSeg(....)" ) - - - /* checks */ - if( cpA->dynMemManagerArrSizeE == bbs_CONTEXT_MAX_MEM_MANAGERS ) - { - bbs_ERROR1( "%s:\nMemory Manager Table is full! Increase bbs_CONTEXT_MAX_MEM_MANAGERS", fNameL ); - return; - } - if( sharedA && cpA->memTblE.ssSizeE == bbs_MAX_MEM_SEGS ) - { - bbs_ERROR1( "%s:\nShared Memory Table is full! Increase bbs_MAX_MEM_SEGS", fNameL ); - return; - } - if( sharedA && cpA->memTblE.esSizeE == bbs_MAX_MEM_SEGS ) - { - bbs_ERROR1( "%s:\nExclusive Memory Table is full! Increase bbs_MAX_MEM_SEGS", fNameL ); - return; - } - - bbs_DynMemManager_init( cpA, &memManagerL ); - memManagerL.mallocFPtrE = mallocFPtrA; - memManagerL.freeFPtrE = freeFPtrA; - memManagerL.memPtrE = NULL; - cpA->dynMemManagerArrE[ cpA->dynMemManagerArrSizeE++ ] = memManagerL; - - bbs_MemSeg_init( cpA, &memSegL ); - memSegL.memPtrE = NULL; - memSegL.sizeE = 0; - memSegL.allocIndexE = 0; - memSegL.sharedE = sharedA; - memSegL.idE = idA; - memSegL.dynMemManagerPtrE = &cpA->dynMemManagerArrE[ cpA->dynMemManagerArrSizeE - 1 ]; - - if( sharedA ) - { - cpA->memTblE.ssArrE[ cpA->memTblE.ssSizeE++ ] = memSegL; - } - else - { - cpA->memTblE.esArrE[ cpA->memTblE.esSizeE ] = memSegL; - cpA->memTblE.espArrE[ cpA->memTblE.esSizeE ] = &cpA->memTblE.esArrE[ cpA->memTblE.esSizeE ]; - cpA->memTblE.esSizeE++; - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Context_exclAllocSize( struct bbs_Context* cpA, uint32 segIndexA ) -{ - return bbs_MemSeg_allocatedSize( cpA, &cpA->memTblE.esArrE[ segIndexA ] ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Context_shrdAllocSize( struct bbs_Context* cpA, uint32 segIndexA ) -{ - return bbs_MemSeg_allocatedSize( cpA, &cpA->memTblE.ssArrE[ segIndexA ] ); -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Context_quickInit( struct bbs_Context* cpA, - bbs_mallocFPtr mallocFPtrA, /* function pointer to external mem alloc function (s. comment of type declaration)*/ - bbs_freeFPtr freeFPtrA, - bbs_errorFPtr errorHandlerA ) -{ - bbs_Context_init( cpA ); - bbs_Context_addDynamicSeg( cpA, mallocFPtrA, freeFPtrA, FALSE, 0 ); - bbs_Context_addDynamicSeg( cpA, mallocFPtrA, freeFPtrA, TRUE, 0 ); - bbs_Context_setErrorHandler( cpA, errorHandlerA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/Context.h b/Embedded/common/src/b_BasicEm/Context.h deleted file mode 100644 index 7ea323b..0000000 --- a/Embedded/common/src/b_BasicEm/Context.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_CONTEXT_EM_H -#define bbs_CONTEXT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BasicEm/DynMemManager.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bbs_Context; - -/* ---- typedefs ----------------------------------------------------------- */ - -/** error handler function pointer */ -typedef void ( *bbs_errorFPtr )( struct bbs_Context* cpA ); - -/** callback handler function pointer */ -typedef uint32 ( *bbs_callbackFPtr )( struct bbs_Context* cpA ); - -/* ---- constants ---------------------------------------------------------- */ - -#define bbs_CONTEXT_MAX_ERRORS 8 -#define bbs_CONTEXT_MAX_MEM_MANAGERS 8 - -#ifdef bbs_COMPACT_MESSAGE_HANDLING -/* characters allocated for file name string (string is stored rightbound) (minimum 1)*/ -#define bbs_ERROR_MAX_FILE_CHARS 24 -/* characters allocated for text message (minimum 1) */ -#define bbs_ERROR_MAX_TEXT_CHARS 1 -#else -/* characters allocated for file name string (string is stored rightbound) (minimum 1)*/ -#define bbs_ERROR_MAX_FILE_CHARS 52 -/* characters allocated for text message (minimum 1) */ -#define bbs_ERROR_MAX_TEXT_CHARS 256 -#endif - -/* defined error codes */ -#define bbs_ERR_OK 0 /* no error condition */ -#define bbs_ERR_ERROR 1 /* generic error */ -#define bbs_ERR_OUT_OF_MEMORY 2 /* malloc handler returns with NULL*/ -#define bbs_ERR_MEMORY_OVERFLOW 3 /* not enough memory in a segment or no segment */ -#define bbs_ERR_WRONG_VERSION 4 /* incompatible version in ..._memRead() */ -#define bbs_ERR_CORRUPT_DATA 5 /* corrupt data in ..._memRead()*/ -#define bbs_ERR_CALLBACK_ERROR 6 /* a defined error originiating from a callback function */ - -/* ---- object definition -------------------------------------------------- */ - -/** error object */ -struct bbs_Error -{ - /* error code */ - uint32 errorE; - - /* line number */ - uint32 lineE; - - /* file name */ - char fileE[ bbs_ERROR_MAX_FILE_CHARS ]; - - /* error text */ - char textE[ bbs_ERROR_MAX_TEXT_CHARS ]; -}; - -/* ------------------------------------------------------------------------- */ - -/** context object */ -struct bbs_Context -{ - - /* ---- private data --------------------------------------------------- */ - - /** error stack */ - struct bbs_Error errStackE[ bbs_CONTEXT_MAX_ERRORS ]; - - /** error stack index */ - uint32 errIndexE; - - /** memory table */ - struct bbs_MemTbl memTblE; - - /** multiple purpose dynamic memory managers */ - struct bbs_DynMemManager dynMemManagerArrE[ bbs_CONTEXT_MAX_MEM_MANAGERS ]; - - /** number of used memory managers */ - uint32 dynMemManagerArrSizeE; - - /** error function handler */ - bbs_errorFPtr errorHandlerE; - - /** callback function handler */ - bbs_callbackFPtr callbackHandlerE; - - /** user-defined pointer */ - void* userPtrE; - - /* ---- public data ---------------------------------------------------- */ - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_Context */ -void bbs_Context_init( struct bbs_Context* cpA ); - -/** frees bbs_Context */ -void bbs_Context_exit( struct bbs_Context* cpA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_Context_copy( struct bbs_Context* cpA, const struct bbs_Context* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** composes an error object */ -struct bbs_Error bbs_Error_create( uint32 errorA, uint32 lineA, const char* fileA, const char* textA, ... ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/****** ERROR HANDLING *********/ - -/** puts an error onto the error stack (returns false if stack was already full) */ -flag bbs_Context_pushError( struct bbs_Context* cpA, struct bbs_Error errorA ); - -/** takes the last error from stack and returns it (when stack is empty: returns the error at stack position 0)*/ -struct bbs_Error bbs_Context_popError( struct bbs_Context* cpA ); - -/** returns the last error of stack without removing it (when stack is empty: returns the error at stack position 0)*/ -struct bbs_Error bbs_Context_peekError( struct bbs_Context* cpA ); - -/** returns true if the error stack is not empty */ -flag bbs_Context_error( struct bbs_Context* cpA ); - -/** sets error handler; returns pointer to previous error handler - * Pointer to Error handler can be NULL (->no handler call) - * The error handler is called by function pushError diectly after an error was posted - */ -bbs_errorFPtr bbs_Context_setErrorHandler( struct bbs_Context* cpA, - bbs_errorFPtr errorHandlerA ); - -/*******************************/ - -/****** CALLBACK HANDLING ******/ - -/** call the callback handler, push error if return value is != bbs_ERR_OK */ -void bbs_Context_doCallback( struct bbs_Context* cpA ); - -/** sets callback handler; returns pointer to previous callback handler - * Pointer to callback handler can be NULL (->no handler call) - * The callback handler is called by function doCallback - */ -bbs_callbackFPtr bbs_Context_setCallbackHandler( struct bbs_Context* cpA, - bbs_callbackFPtr callbackHandlerA ); - -/*******************************/ - -/******* MEMORY HANDLING *******/ - -/** adds a static memory segment to memory table of context */ -void bbs_Context_addStaticSeg( struct bbs_Context* cpA, - uint16* memPtrA, /* pointer to memory (32bit aligned)*/ - uint32 sizeA, /* size of memory segment in 16 bit units */ - flag sharedA, /* Indicates that this segment is to be shared among multiple objects */ - uint32 idA ); /* ID of segment, id=0: unspecified */ - -/* adds a dynamic memory segment to memory table of context - * Upon destruction of the context object any residual will be freed automatically - */ -void bbs_Context_addDynamicSeg( struct bbs_Context* cpA, - bbs_mallocFPtr mallocFPtrA, /* function pointer to external mem alloc function (s. comment of type declaration)*/ - bbs_freeFPtr freeFPtrA, /* function pointer to external mem free function */ - flag sharedA, /* Indicates that this segment is to be shared among multiple objects */ - uint32 idA ); /* ID of segment, id=0: unspecified */ - - -/** Returns allocated memory in selected exclusive segment in units of 16bits */ -uint32 bbs_Context_exclAllocSize( struct bbs_Context* cpA, uint32 segIndexA ); - -/** Returns allocated memory in selected exclusive segment in units of 16bits - * Note that in case of static memory the return value might not reflect - * the actually allocated memory amount. - */ -uint32 bbs_Context_shrdAllocSize( struct bbs_Context* cpA, uint32 segIndexA ); - -/*******************************/ - - -/** quick compact setup for dynamic memory management environment - * creates an initialized segment with - * - one dynamic exclusive segment - * - one dynamic shared segment - * - error handler (can be NULL) - * - * Don't forget to call bbs_Context_exit on returned context if it goes out of scope - */ -void bbs_Context_quickInit( struct bbs_Context* cpA, - bbs_mallocFPtr mallocFPtrA, /* function pointer to external mem alloc function (s. comment of type declaration)*/ - bbs_freeFPtr freeFPtrA, - bbs_errorFPtr errorHandlerA ); - - -#endif /* bbs_CONTEXT_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/DynMemManager.c b/Embedded/common/src/b_BasicEm/DynMemManager.c deleted file mode 100644 index 523b939..0000000 --- a/Embedded/common/src/b_BasicEm/DynMemManager.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/DynMemManager.h" -#include "b_BasicEm/Context.h" - -/* ------------------------------------------------------------------------- */ - -/* minimum block size dynamically allocated in function nextBlock (affects only shared memory) */ -#define bbs_DYN_MEM_MIN_NEW_BLOCK_SIZE 0 - -/** Offset to actual memory area on allocated memory blocks (in 16-bit words). - * Value needs to be large enough to hold the pointer to the next memory block - * and the size value (32-bit) of the memory area. - */ -#define bbs_MEM_OFFSET 6 - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_DynMemManager_init( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA ) -{ - ptrA->memPtrE = NULL; - ptrA->mallocFPtrE = NULL; - ptrA->freeFPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_DynMemManager_exit( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA ) -{ - ptrA->memPtrE = NULL; - ptrA->mallocFPtrE = NULL; - ptrA->freeFPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_DynMemManager_allocatedSize( struct bbs_Context* cpA, - const struct bbs_DynMemManager* ptrA ) -{ - uint32 sizeL = 0; - uint16* pL = ( uint16* )ptrA->memPtrE; - while( pL != NULL ) - { - sizeL += ( ( uint32* )pL )[ 2 ]; - pL = *( uint16** )pL; - } - return sizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint16* bbs_DynMemManager_alloc( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA, - const struct bbs_MemSeg* memSegPtrA, - uint32 sizeA ) -{ - uint16* pL = NULL; - bbs_DEF_fNameL( "uint16* bbs_DynMemManager_alloc( struct bbs_DynMemManager* ptrA, uint32 sizeA )" ) - - - if( ptrA->mallocFPtrE == NULL ) - { - bbs_ERROR1( "%s:\n Malloc handler not defined.\n", fNameL ); - return NULL; - } - - if( ptrA->memPtrE == NULL ) - { - ptrA->memPtrE = ptrA->mallocFPtrE( cpA, memSegPtrA, ( sizeA + bbs_MEM_OFFSET ) << 1 ); - pL = ptrA->memPtrE; - } - else - { - uint16** ppL = ( uint16** )ptrA->memPtrE; - while( *ppL != NULL ) ppL = ( uint16** )*ppL; - *ppL = ptrA->mallocFPtrE( cpA, memSegPtrA, ( sizeA + bbs_MEM_OFFSET ) << 1 ); - pL = *ppL; - } - - if( pL == NULL ) - { - bbs_ERR1( bbs_ERR_OUT_OF_MEMORY, "%s:\n Allocation failed.\n", fNameL ); - return NULL; - } - - ( ( uint32* )pL )[ 0 ] = 0; - ( ( uint32* )pL )[ 1 ] = 0; - ( ( uint32* )pL )[ 2 ] = sizeA + bbs_MEM_OFFSET; - - return pL + bbs_MEM_OFFSET; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_DynMemManager_free( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA, - uint16* memPtrA ) -{ - bbs_DEF_fNameL( "void bbs_DynMemManager_free( .... )" ) - - if( ptrA->memPtrE == NULL ) - { - bbs_ERROR1( "%s:\n Memory was not allocated.\n", fNameL ); - return; - } - else if( ptrA->memPtrE + bbs_MEM_OFFSET == memPtrA ) - { - uint16* memPtrL = ptrA->memPtrE; - ptrA->memPtrE = *( uint16** )ptrA->memPtrE; - ptrA->freeFPtrE( memPtrL ); - } - else - { - uint16* p0L = NULL; - uint16* pL = ( uint16* )ptrA->memPtrE; - - while( pL != NULL ) - { - if( pL + bbs_MEM_OFFSET == memPtrA ) break; - p0L = pL; - pL = *( uint16** )pL; - } - - if( pL != NULL ) - { - if( ptrA->freeFPtrE == NULL ) - { - bbs_ERROR1( "%s:\n Free handler not defined.\n", fNameL ); - return; - } - - if( p0L != NULL ) - { - *( uint16** )p0L = *( uint16** )pL; - } - else - { - ptrA->memPtrE = *( uint16** )pL; - } - - ptrA->freeFPtrE( pL ); - } - else - { - bbs_ERROR1( "%s:\n Attempt to free memory that was not allocated.\n", fNameL ); - return; - } - } -} - -/* ------------------------------------------------------------------------- */ - -uint16* bbs_DynMemManager_nextBlock( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA, - const struct bbs_MemSeg* memSegPtrA, - uint16* curBlockPtrA, - uint32 minSizeA, - uint32* actualSizePtrA ) -{ - uint16* pL = ( uint16* )ptrA->memPtrE; - bbs_DEF_fNameL( "uint16* bbs_DynMemManager_nextBlock( .... )" ) - - if( curBlockPtrA != NULL ) - { - /* find current block */ - while( pL != NULL ) - { - if( pL + bbs_MEM_OFFSET == curBlockPtrA ) break; - pL = *( uint16** )pL; - } - - if( pL == NULL ) - { - bbs_ERROR1( "%s:\nCould not find current memory block.\n", fNameL ); - *actualSizePtrA = 0; - return NULL; - } - - /* go to next block */ - pL = *( uint16** )pL; - } - - /* find next fitting block */ - while( pL != NULL ) - { - if( ( ( uint32* )pL )[ 2 ] >= minSizeA + bbs_MEM_OFFSET ) break; - pL = *( uint16** )pL; - } - - if( pL == NULL ) - { - /* no proper block -> allocate new one */ - uint32 blockSizeL = minSizeA > bbs_DYN_MEM_MIN_NEW_BLOCK_SIZE ? minSizeA : bbs_DYN_MEM_MIN_NEW_BLOCK_SIZE; - uint16* memPtrL = bbs_DynMemManager_alloc( cpA, ptrA, memSegPtrA, blockSizeL ); - if( memPtrL != NULL ) - { - *actualSizePtrA = blockSizeL; - } - else - { - *actualSizePtrA = 0; - } - return memPtrL; - } - else - { - *actualSizePtrA = ( ( uint32* )pL )[ 2 ] - bbs_MEM_OFFSET; - return pL + bbs_MEM_OFFSET; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_DynMemManager_freeAll( struct bbs_Context* cpA, struct bbs_DynMemManager* ptrA ) -{ - uint16** ppL = ( uint16** )ptrA->memPtrE; - while( ppL != NULL ) - { - uint16* memPtrL = ( uint16* )ppL; - ppL = ( uint16** )*ppL; - ptrA->freeFPtrE( memPtrL ); - } - ptrA->memPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_BasicEm/DynMemManager.h b/Embedded/common/src/b_BasicEm/DynMemManager.h deleted file mode 100644 index 13ce084..0000000 --- a/Embedded/common/src/b_BasicEm/DynMemManager.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_DYN_MEM_MANAGER_EM_H -#define bbs_DYN_MEM_MANAGER_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bbs_Context; -struct bbs_MemSeg; - -/* ---- typedefs ----------------------------------------------------------- */ - -/** 'malloc' function pointer. - * Allocated memory block must be 32-bit-aligned. - * sizeA refers to the size of a memory block in bytes - */ -typedef void* ( *bbs_mallocFPtr )( struct bbs_Context* cpA, - const struct bbs_MemSeg* memSegPtrA, - uint32 sizeA ); - -/** free function pointer */ -typedef void ( *bbs_freeFPtr )( void* memPtrA ); - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** Dynamic memory manager. - * Handles allocation and deallocation of memory blocks via function pointers - * to malloc and free. - * - * Each memory block is organized as follows: - * - The first 8 bytes are reserved for the pointer to the next - * memory block (8 to allow support of 64-bit platforms). - * - Next a 32-bit value stores the allocated memory size in 16-bit units. - * - Finally the actual allocated memory area. - * This means for each new memory block an additional 12 bytes are allocated. - */ -struct bbs_DynMemManager -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to first memory block */ - uint16* memPtrE; - - /** function pointer to external mem alloc function (s. comment of type declaration)*/ - bbs_mallocFPtr mallocFPtrE; - - /** function pointer to external mem free function */ - bbs_freeFPtr freeFPtrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_DynMemManager */ -void bbs_DynMemManager_init( struct bbs_Context* cpA, struct bbs_DynMemManager* ptrA ); - -/** frees bbs_DynMemManager */ -void bbs_DynMemManager_exit( struct bbs_Context* cpA, struct bbs_DynMemManager* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns size of currently allocated memory in 16bit units */ -uint32 bbs_DynMemManager_allocatedSize( struct bbs_Context* cpA, const struct bbs_DynMemManager* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** allocates sizeA words of memory */ -uint16* bbs_DynMemManager_alloc( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA, - const struct bbs_MemSeg* memSegPtrA, - uint32 sizeA ); - -/** frees previously allocated memory */ -void bbs_DynMemManager_free( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA, - uint16* memPtrA ); - -/** returns the next memory block of at least minSizeA length; allocates new block if neccessary */ -uint16* bbs_DynMemManager_nextBlock( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA, - const struct bbs_MemSeg* memSegPtrA, - uint16* curBlockPtrA, - uint32 minSizeA, - uint32* actualSizePtrA ); - -/** frees all allocated memory */ -void bbs_DynMemManager_freeAll( struct bbs_Context* cpA, - struct bbs_DynMemManager* ptrA ); - - -#endif /* bbs_DYN_MEM_MANAGER_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Functions.c b/Embedded/common/src/b_BasicEm/Functions.c deleted file mode 100644 index f4a346c..0000000 --- a/Embedded/common/src/b_BasicEm/Functions.c +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Context.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- globals ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint16 bbs_swapBytes( uint16 valA ) -{ - return ( ( valA >> 8 ) & 0x00FF ) | ( ( valA << 8 ) & 0xFF00 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memWrite32( const void* ptrA, - uint16* memPtrA ) -{ - uint32 valL = *( uint32* )ptrA; - - #ifdef HW_BIG_ENDIAN - *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valL >> 0 ) & 0xFFFF ) ); - *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valL >> 16 ) & 0xFFFF ) ); - #else - *memPtrA++ = ( valL >> 0 ) & 0xFFFF; - *memPtrA++ = ( valL >> 16 ) & 0xFFFF; - #endif - - - return bbs_SIZEOF16( uint32 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memRead32( void* ptrA, - const uint16* memPtrA ) -{ - uint32 valL = 0; - - #ifdef HW_BIG_ENDIAN - valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 0 ); - valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 16 ); - #else - valL |= ( ( uint32 )*memPtrA++ << 0 ); - valL |= ( ( uint32 )*memPtrA++ << 16 ); - #endif - - *( uint32* )ptrA = valL; - - return bbs_SIZEOF16( uint32 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memPeek32( const uint16* memPtrA ) -{ - uint32 valL = 0; - - #ifdef HW_BIG_ENDIAN - valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 0 ); - valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 16 ); - #else - valL |= ( ( uint32 )*memPtrA++ << 0 ); - valL |= ( ( uint32 )*memPtrA++ << 16 ); - #endif - - return valL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memWrite16( const void* ptrA, - uint16* memPtrA ) -{ - #ifdef HW_BIG_ENDIAN - *memPtrA++ = bbs_swapBytes( *( uint16* )ptrA ); - #else - *memPtrA++ = *( uint16* )ptrA; - #endif - return bbs_SIZEOF16( uint16 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memRead16( void* ptrA, - const uint16* memPtrA ) -{ - #ifdef HW_BIG_ENDIAN - *( uint16* )ptrA = bbs_swapBytes( *memPtrA++ ); - #else - *( uint16* )ptrA = *memPtrA++; - #endif - - return bbs_SIZEOF16( uint16 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memWrite32Arr( struct bbs_Context* cpA, - const void* ptrA, - uint32 sizeA, uint16* memPtrA ) -{ - uint32 iL; - const uint32* srcL = ( uint32* )ptrA; - - if( bbs_Context_error( cpA ) ) return 0; - - for( iL = 0; iL < sizeA; iL++ ) - { - memPtrA += bbs_memWrite32( srcL++, memPtrA ); - } - - return sizeA * bbs_SIZEOF16( uint32 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memRead32Arr( struct bbs_Context* cpA, - void* ptrA, - uint32 sizeA, - const uint16* memPtrA ) -{ - uint32 iL; - uint32* dstL = ( uint32* )ptrA; - - if( bbs_Context_error( cpA ) ) return 0; - - for( iL = 0; iL < sizeA; iL++ ) - { - memPtrA += bbs_memRead32( dstL++, memPtrA ); - } - - return sizeA * bbs_SIZEOF16( uint32 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memWrite16Arr( struct bbs_Context* cpA, - const void* ptrA, - uint32 sizeA, - uint16* memPtrA ) -{ - uint32 iL; - const uint16* srcL = ( uint16* )ptrA; - - if( bbs_Context_error( cpA ) ) return 0; - - for( iL = 0; iL < sizeA; iL++ ) - { - memPtrA += bbs_memWrite16( srcL++, memPtrA ); - } - - return sizeA * bbs_SIZEOF16( uint16 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memRead16Arr( struct bbs_Context* cpA, - void* ptrA, - uint32 sizeA, - const uint16* memPtrA ) -{ - uint32 iL; - uint16* dstL = ( uint16* )ptrA; - - if( bbs_Context_error( cpA ) ) return 0; - - for( iL = 0; iL < sizeA; iL++ ) - { - memPtrA += bbs_memRead16( dstL++, memPtrA ); - } - - return sizeA * bbs_SIZEOF16( uint16 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memWriteUInt32( uint32 valA, - uint16* memPtrA ) -{ - #ifdef HW_BIG_ENDIAN - *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valA >> 0 ) & 0xFFFF ) ); - *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valA >> 16 ) & 0xFFFF ) ); - #else - *memPtrA++ = ( valA >> 0 ) & 0xFFFF; - *memPtrA++ = ( valA >> 16 ) & 0xFFFF; - #endif - - return bbs_SIZEOF16( valA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memWriteUInt16( uint16 valA, - uint16* memPtrA ) -{ - #ifdef HW_BIG_ENDIAN - *memPtrA++ = bbs_swapBytes( valA ); - #else - *memPtrA++ = valA; - #endif - - return bbs_SIZEOF16( valA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_memReadVersion32( struct bbs_Context* cpA, - uint32* versionPtrA, - uint32 refVersionA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - - bbs_memRead32( versionPtrA, memPtrA ); - if( *versionPtrA > refVersionA ) - { - bbs_ERR0( bbs_ERR_WRONG_VERSION, "uint32 bbs_memReadVersion32( .... ):\n" - "Data format is newer than software or corrupt\n" ); - } - return bbs_SIZEOF16( uint32 ); -} - -/* ------------------------------------------------------------------------- */ - -uint16 bbs_memCheckSum16( const uint16* memPtrA, uint32 sizeA ) -{ - uint32 iL; - uint16 sumL = 0; - for( iL = 0; iL < sizeA; iL++ ) - { - #ifdef HW_BIG_ENDIAN - sumL += bbs_swapBytes( memPtrA[ iL ] ); - #else - sumL += memPtrA[ iL ]; - #endif - } - - return sumL; -} - -/* ------------------------------------------------------------------------- */ - diff --git a/Embedded/common/src/b_BasicEm/Functions.h b/Embedded/common/src/b_BasicEm/Functions.h deleted file mode 100644 index c81d20d..0000000 --- a/Embedded/common/src/b_BasicEm/Functions.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_FUNCTIONS_EM_H -#define bbs_FUNCTIONS_EM_H - -/** - * This files contains gerenral purpose functions. - */ - -/* ---- includes ----------------------------------------------------------- */ -/* -#include <stdarg.h> -#include <stdlib.h> -*/ -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/String.h" -#include "b_BasicEm/Memory.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bbs_Context; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* Memory I/O Functions */ - -/* Memory I/O Operations use the little endian data alignment - regardless of platform */ - -/** writes a 32 bit word to memory; returns bbs_SIZEOF16( uint32 ) */ -uint32 bbs_memWrite32( const void* ptrA, - uint16* memPtrA ); - -/** reads a 32 bit word from memory; returns bbs_SIZEOF16( uint32 ) */ -uint32 bbs_memRead32( void* ptrA, - const uint16* memPtrA ); - -/** reads a 32 bit word from memory and returns it */ -uint32 bbs_memPeek32( const uint16* memPtrA ); - -/** writes a 16 bit word to memory; returns bbs_SIZEOF16( uint16 ) */ -uint32 bbs_memWrite16( const void* ptrA, - uint16* memPtrA ); - -/** reads a 16 bit word from memory; returns bbs_SIZEOF16( uint16 ) */ -uint32 bbs_memRead16( void* ptrA, - const uint16* memPtrA ); - -/** writes a 32 bit word array to memory; sizeA specifies number of words in array; returns bbs_SIZEOF16( uint32 ) * sizeA */ -uint32 bbs_memWrite32Arr( struct bbs_Context* cpA, - const void* ptrA, - uint32 sizeA, uint16* memPtrA ); - -/** reads a 32 bit word array from memory; sizeA specifies number of words in array; returns bbs_SIZEOF16( uint32 ) * sizeA */ -uint32 bbs_memRead32Arr( struct bbs_Context* cpA, - void* ptrA, - uint32 sizeA, const uint16* memPtrA ); - -/** writes a 16 bit word array to memory; sizeA specifies number of words in array; returns bbs_SIZEOF16( uint16 ) * sizeA */ -uint32 bbs_memWrite16Arr( struct bbs_Context* cpA, - const void* ptrA, - uint32 sizeA, uint16* memPtrA ); - -/** reads a 16 bit word array from memory; sizeA specifies number of words in array; returns bbs_SIZEOF16( uint16 ) * sizeA */ -uint32 bbs_memRead16Arr( struct bbs_Context* cpA, - void* ptrA, - uint32 sizeA, const uint16* memPtrA ); - -/* Spcial I/O Functions */ - -/** writes a 32 bit value to memory; returns bbs_SIZEOF16( uint32 ) */ -uint32 bbs_memWriteUInt32( uint32 valA, - uint16* memPtrA ); - -/** writes a 16 bit values to memory; returns bbs_SIZEOF16( uint16 ) */ -uint32 bbs_memWriteUInt16( uint16 valA, - uint16* memPtrA ); - -/** reads a 32 bit version number word from memory. - * Compares the number to refVersionA. - * If refVersionA is lower an error condition is created. - * returns bbs_SIZEOF16( uint32 ) - */ -uint32 bbs_memReadVersion32( struct bbs_Context* cpA, - uint32* versionPtrA, - uint32 refVersionA, - const uint16* memPtrA ); - -/** return 16bit check sum of memory area (applies platform specific byte swapps) */ -uint16 bbs_memCheckSum16( const uint16* memPtrA, uint32 sizeA ); - -#endif /* bbs_FUNCTIONS_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Int16Arr.c b/Embedded/common/src/b_BasicEm/Int16Arr.c deleted file mode 100644 index 1d4d0ce..0000000 --- a/Embedded/common/src/b_BasicEm/Int16Arr.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Int16Arr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int16Arr_init( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Int16Arr_exit( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int16Arr_copy( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - const struct bbs_Int16Arr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->sizeE ) - { - bbs_ERROR0( "void bbs_Int16Arr_copy(...):\n" - "Insufficient allocated memory in destination array." ); - return; - } -#endif - bbs_Int16Arr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy16( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE * bbs_SIZEOF16( int16 ) ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_Int16Arr_equal( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA, - const struct bbs_Int16Arr* srcPtrA ) -{ - uint32 iL; - const int16* ptr1L = ptrA->arrPtrE; - const int16* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( *ptr1L++ != *ptr2L++ ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int16Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA, - uint32 sizeA ) -{ - return sizeA * bbs_SIZEOF16( int16 ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int16Arr_create( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->sizeE == sizeA ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_Int16Arr_size( cpA, ptrA, sizeA ); - } - else - { - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( int16 ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeA; - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Int16Arr_createAligned( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA, - struct bbs_Int16Arr* allocPtrA, - uint32 alignBytesA ) -{ - /* allocate extra memory for alignment */ - bbs_Int16Arr_create( cpA, allocPtrA, sizeA + ( ( alignBytesA - 1 ) >> 1 ), mspA ); - - /* set members of ptrA */ - ptrA->mspE = 0; /* no own allocated memory */ - ptrA->sizeE = sizeA; - ptrA->allocatedSizeE = ptrA->sizeE; - ptrA->arrPtrE = allocPtrA->arrPtrE; - -#if defined( WIN32 ) || defined( _WIN32_WCE ) - /* disable warning "pointer truncation...": */ - #pragma warning( disable : 4311 ) -#endif - - - /* align memory */ -#ifdef bbs_TYPES_64_AVAILABLE - - while( ( ( ( uint64 ) ptrA->arrPtrE ) & ( alignBytesA - 1 ) ) ) - { - ptrA->arrPtrE++; - } -#else - while( ( ( ( uint32 ) ptrA->arrPtrE ) & ( alignBytesA - 1 ) ) ) - { - ptrA->arrPtrE++; - } -#endif - -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Int16Arr_size( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_Int16Arr_size( struct bbs_Int16Arr*, uint32 sizeA ):\n" - "Unsufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int16Arr_memSize( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE * bbs_SIZEOF16( int16 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int16Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_Int16Arr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int16Arr_memRead( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_Int16Arr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - - if( memSizeL != bbs_Int16Arr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, - "uint32 bbs_Int16Arr_memRead( const struct bbs_Int16Arr*, const uint16* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int16Arr_fill( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - int16 valA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - ptrA->arrPtrE[ iL ] = valA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/Int16Arr.h b/Embedded/common/src/b_BasicEm/Int16Arr.h deleted file mode 100644 index fbb7f39..0000000 --- a/Embedded/common/src/b_BasicEm/Int16Arr.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_INT16ARR_EM_H -#define bbs_INT16ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** short array */ -struct bbs_Int16Arr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of int16 */ - int16* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_Int16Arr */ -void bbs_Int16Arr_init( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA ); - -/** frees bbs_Int16Arr */ -void bbs_Int16Arr_exit( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_Int16Arr_copy( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - const struct bbs_Int16Arr* srcPtrA ); - -/** equal operator */ -flag bbs_Int16Arr_equal( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA, - const struct bbs_Int16Arr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_Int16Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bbs_Int16Arr */ -void bbs_Int16Arr_create( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** allocates memory for bbs_Int16Arr, - Allocation is done for allocPtrA with extra memory to allow for alignment, - aligned memory pointer is copied to ptrA. - alignBytes must be a power of 2. - bbs_Int16Arr_heapSize does not apply ! -*/ -void bbs_Int16Arr_createAligned( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA, - struct bbs_Int16Arr* allocPtrA, - uint32 alignBytesA ); - -/** sets array size */ -void bbs_Int16Arr_size( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bbs_Int16Arr_memSize( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA ); - -/** writes object to memory; returns number of 16-bit words written */ -uint32 bbs_Int16Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_Int16Arr* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of 16-bit words read */ -uint32 bbs_Int16Arr_memRead( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** fills array with a value */ -void bbs_Int16Arr_fill( struct bbs_Context* cpA, - struct bbs_Int16Arr* ptrA, - int16 valA ); - -#endif /* bbs_INT16ARR_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Int32Arr.c b/Embedded/common/src/b_BasicEm/Int32Arr.c deleted file mode 100644 index 9326a7b..0000000 --- a/Embedded/common/src/b_BasicEm/Int32Arr.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Int32Arr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int32Arr_init( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Int32Arr_exit( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int32Arr_copy( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - const struct bbs_Int32Arr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->allocatedSizeE ) - { - bbs_ERROR0( "void bbs_Int32Arr_copy(...):\n" - "Unsufficient allocated memory in destination array." ); - return; - } -#endif - bbs_Int32Arr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy32( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE * bbs_SIZEOF32( int32 ) ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_Int32Arr_equal( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA, - const struct bbs_Int32Arr* srcPtrA ) -{ - uint32 iL; - const int32* ptr1L = ptrA->arrPtrE; - const int32* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( *ptr1L++ != *ptr2L++ ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int32Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA, - uint32 sizeA ) -{ - return sizeA * bbs_SIZEOF16( int32 ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int32Arr_create( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->sizeE == sizeA ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_Int32Arr_size( cpA, ptrA, sizeA ); - } - else - { - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( int32 ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeA; - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Int32Arr_size( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_Int32Arr_size( struct bbs_Int32Arr*, uint32 ):\n" - "Unsufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int32Arr_memSize( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE * bbs_SIZEOF16( int32 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int32Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_Int32Arr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite32Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int32Arr_memRead( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_Int32Arr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead32Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - - if( memSizeL != bbs_Int32Arr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbs_Int32Arr_memRead( const struct bbs_Int32Arr*, const uint16* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int32Arr_fill( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - int32 valA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - ptrA->arrPtrE[ iL ] = valA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/Int32Arr.h b/Embedded/common/src/b_BasicEm/Int32Arr.h deleted file mode 100644 index 3ad2736..0000000 --- a/Embedded/common/src/b_BasicEm/Int32Arr.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_INT32ARR_EM_H -#define bbs_INT32ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** byte array */ -struct bbs_Int32Arr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of int32 */ - int32* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_Int32Arr */ -void bbs_Int32Arr_init( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA ); - -/** frees bbs_Int32Arr */ -void bbs_Int32Arr_exit( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_Int32Arr_copy( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - const struct bbs_Int32Arr* srcPtrA ); - -/** equal operator */ -flag bbs_Int32Arr_equal( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA, - const struct bbs_Int32Arr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_Int32Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bbs_Int32Arr */ -void bbs_Int32Arr_create( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** sets array size */ -void bbs_Int32Arr_size( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bbs_Int32Arr_memSize( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bbs_Int32Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_Int32Arr* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bbs_Int32Arr_memRead( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** fills array with a value */ -void bbs_Int32Arr_fill( struct bbs_Context* cpA, - struct bbs_Int32Arr* ptrA, - int32 valA ); - -#endif /* bbs_INT32ARR_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Int8Arr.c b/Embedded/common/src/b_BasicEm/Int8Arr.c deleted file mode 100644 index c31ceec..0000000 --- a/Embedded/common/src/b_BasicEm/Int8Arr.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Int8Arr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int8Arr_init( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Int8Arr_exit( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int8Arr_copy( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - const struct bbs_Int8Arr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->allocatedSizeE ) - { - bbs_ERROR0( "void bbs_Int8Arr_copy(...):\n" - "Unsufficient allocated memory in destination array." ); - return; - } -#endif - bbs_Int8Arr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy16( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE >> 1 ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_Int8Arr_equal( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA, - const struct bbs_Int8Arr* srcPtrA ) -{ - long iL; - const int8* ptr1L = ptrA->arrPtrE; - const int8* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( *ptr1L++ != *ptr2L++ ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int8Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA, - uint32 sizeA ) -{ - return ( sizeA >> 1 ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int8Arr_create( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->sizeE == sizeA ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_Int8Arr_size( cpA, ptrA, sizeA ); - } - else - { - /* if size is odd increase by 1 byte */ - uint32 sizeL = sizeA; - if( ( sizeL & 1 ) != 0 ) sizeL++; - - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeL >> 1 ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeL; - - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_Int8Arr_size( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_Int8Arr_size( struct bbs_Int8Arr*, uint32 ):\n" - "Unsufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int8Arr_memSize( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE / 2; /* int8 = 0.5 word size*/ -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int8Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_Int8Arr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE / 2, memPtrA ); - /*bbs_memcpy( memPtrA, ptrA->arrPtrE, ptrA->sizeE );*/ - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_Int8Arr_memRead( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_Int8Arr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE / 2, memPtrA ); - - if( memSizeL != bbs_Int8Arr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbs_Int8Arr_memRead( const struct bbs_Int8Arr*, const uint16* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_Int8Arr_fill( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - int8 valA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - ptrA->arrPtrE[ iL ] = valA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/Int8Arr.h b/Embedded/common/src/b_BasicEm/Int8Arr.h deleted file mode 100644 index 1606657..0000000 --- a/Embedded/common/src/b_BasicEm/Int8Arr.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_INT8ARR_EM_H -#define bbs_INT8ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** byte array */ -struct bbs_Int8Arr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of int8 */ - int8* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_Int8Arr */ -void bbs_Int8Arr_init( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA ); - -/** frees bbs_Int8Arr */ -void bbs_Int8Arr_exit( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_Int8Arr_copy( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - const struct bbs_Int8Arr* srcPtrA ); - -/** equal operator */ -flag bbs_Int8Arr_equal( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA, - const struct bbs_Int8Arr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_Int8Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bbs_Int8Arr */ -void bbs_Int8Arr_create( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** sets array size */ -void bbs_Int8Arr_size( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bbs_Int8Arr_memSize( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbs_Int8Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_Int8Arr* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) written */ -uint32 bbs_Int8Arr_memRead( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** fills array with a value */ -void bbs_Int8Arr_fill( struct bbs_Context* cpA, - struct bbs_Int8Arr* ptrA, - int8 valA ); - -#endif /* bbs_INT8ARR_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Math.c b/Embedded/common/src/b_BasicEm/Math.c deleted file mode 100644 index a788beb..0000000 --- a/Embedded/common/src/b_BasicEm/Math.c +++ /dev/null @@ -1,1282 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -#if defined( HW_SSE2 ) - extern int32 bbs_dotProduct_128SSE2( const int16* vec1A, const int16* vec2A, uint32 sizeA ); - extern int32 bbs_dotProduct_u128SSE2( const int16* vec1A, const int16* vec2A, uint32 sizeA ); -#endif - -#if defined( HW_FR71 ) - int32 bbs_dotProduct_fr71( const int16* vec1A, const int16* vec2A, uint32 sizeA ); -#endif - -/* ------------------------------------------------------------------------- */ - -uint16 bbs_sqrt32( uint32 valA ) -{ - uint32 rootL = 0; - uint32 expL = 0; - expL += ( ( valA >> ( expL + 0x10 ) ) != 0 ) << 4; - expL += ( ( valA >> ( expL + 0x08 ) ) != 0 ) << 3; - expL += ( ( valA >> ( expL + 0x04 ) ) != 0 ) << 2; - expL += ( ( valA >> ( expL + 0x02 ) ) != 0 ) << 1; - switch( expL >> 1 ) - { - case 15: rootL += ( ( rootL + 0x8000 ) * ( rootL + 0x8000 ) <= valA ) << 15; - case 14: rootL += ( ( rootL + 0x4000 ) * ( rootL + 0x4000 ) <= valA ) << 14; - case 13: rootL += ( ( rootL + 0x2000 ) * ( rootL + 0x2000 ) <= valA ) << 13; - case 12: rootL += ( ( rootL + 0x1000 ) * ( rootL + 0x1000 ) <= valA ) << 12; - case 11: rootL += ( ( rootL + 0x0800 ) * ( rootL + 0x0800 ) <= valA ) << 11; - case 10: rootL += ( ( rootL + 0x0400 ) * ( rootL + 0x0400 ) <= valA ) << 10; - case 9: rootL += ( ( rootL + 0x0200 ) * ( rootL + 0x0200 ) <= valA ) << 9; - case 8: rootL += ( ( rootL + 0x0100 ) * ( rootL + 0x0100 ) <= valA ) << 8; - case 7: rootL += ( ( rootL + 0x0080 ) * ( rootL + 0x0080 ) <= valA ) << 7; - case 6: rootL += ( ( rootL + 0x0040 ) * ( rootL + 0x0040 ) <= valA ) << 6; - case 5: rootL += ( ( rootL + 0x0020 ) * ( rootL + 0x0020 ) <= valA ) << 5; - case 4: rootL += ( ( rootL + 0x0010 ) * ( rootL + 0x0010 ) <= valA ) << 4; - case 3: rootL += ( ( rootL + 0x0008 ) * ( rootL + 0x0008 ) <= valA ) << 3; - case 2: rootL += ( ( rootL + 0x0004 ) * ( rootL + 0x0004 ) <= valA ) << 2; - case 1: rootL += ( ( rootL + 0x0002 ) * ( rootL + 0x0002 ) <= valA ) << 1; - case 0: rootL += ( ( rootL + 0x0001 ) * ( rootL + 0x0001 ) <= valA ) << 0; - } - - return ( uint16 )rootL; -} - -/* ------------------------------------------------------------------------- */ - -uint8 bbs_sqrt16( uint16 valA ) -{ - uint16 rootL = 0; - rootL += ( ( rootL + 0x80 ) * ( rootL + 0x80 ) <= valA ) << 7; - rootL += ( ( rootL + 0x40 ) * ( rootL + 0x40 ) <= valA ) << 6; - rootL += ( ( rootL + 0x20 ) * ( rootL + 0x20 ) <= valA ) << 5; - rootL += ( ( rootL + 0x10 ) * ( rootL + 0x10 ) <= valA ) << 4; - rootL += ( ( rootL + 0x08 ) * ( rootL + 0x08 ) <= valA ) << 3; - rootL += ( ( rootL + 0x04 ) * ( rootL + 0x04 ) <= valA ) << 2; - rootL += ( ( rootL + 0x02 ) * ( rootL + 0x02 ) <= valA ) << 1; - rootL += ( ( rootL + 0x01 ) * ( rootL + 0x01 ) <= valA ) << 0; - return ( uint8 )rootL; -} - -/* ------------------------------------------------------------------------- */ - -/* table of sqrt and slope values */ -const uint32 bbs_fastSqrt32_tableG[] = -{ - 268435456, 1016, 272596992, 1000, 276692992, 987, 280735744, 972, - 284717056, 959, 288645120, 946, 292519936, 933, 296341504, 922, - 300118016, 910, 303845376, 899, 307527680, 889, 311169024, 878, - 314765312, 869, 318324736, 858, 321839104, 850, 325320704, 840, - 328761344, 832, 332169216, 824, 335544320, 815, 338882560, 807, - 342188032, 799, 345460736, 792, 348704768, 785, 351920128, 777, - 355102720, 771, 358260736, 764, 361390080, 757, 364490752, 751, - 367566848, 745, 370618368, 739, 373645312, 732, 376643584, 727, - 379621376, 722, 382578688, 715, 385507328, 711, 388419584, 705, - 391307264, 700, 394174464, 695, 397021184, 689, 399843328, 686, - 402653184, 680, 405438464, 675, 408203264, 672, 410955776, 666, - 413683712, 663, 416399360, 658, 419094528, 653, 421769216, 650, - 424431616, 646, 427077632, 641, 429703168, 638, 432316416, 634, - 434913280, 630, 437493760, 627, 440061952, 622, 442609664, 620, - 445149184, 615, 447668224, 613, 450179072, 609, 452673536, 605, - 455151616, 602, 457617408, 600, 460075008, 595, 462512128, 593, - 464941056, 590, 467357696, 587, 469762048, 583, 472150016, 581, - 474529792, 578, 476897280, 575, 479252480, 572, 481595392, 569, - 483926016, 567, 486248448, 564, 488558592, 561, 490856448, 559, - 493146112, 556, 495423488, 553, 497688576, 552, 499949568, 548, - 502194176, 546, 504430592, 544, 506658816, 541, 508874752, 539, - 511082496, 537, 513282048, 534, 515469312, 533, 517652480, 529, - 519819264, 528, 521981952, 526, 524136448, 523, 526278656, 521, - 528412672, 519, 530538496, 517, 532656128, 515, 534765568, 514 -}; - -uint16 bbs_fastSqrt32( uint32 valA ) -{ - uint32 expL = 0; - uint32 valL; - uint32 offsL; - uint32 indexL = 0; - - if( valA == 0 ) return 0; - - /* compute closest even size exponent of valA */ - expL += ( ( valA >> ( expL + 0x10 ) ) != 0 ) << 4; - expL += ( ( valA >> ( expL + 0x08 ) ) != 0 ) << 3; - expL += ( ( valA >> ( expL + 0x04 ) ) != 0 ) << 2; - expL += ( ( valA >> ( expL + 0x02 ) ) != 0 ) << 1; - - valL = ( ( valA << ( 30 - expL ) ) - 1073741824 ); /* ( 1 << 30 ) */ - offsL = ( ( valL & 0x01FFFFFF ) + ( 1 << 12 ) ) >> 13; - indexL = ( valL >> 24 ) & 0xFE; - - return ( bbs_fastSqrt32_tableG[ indexL ] + offsL * bbs_fastSqrt32_tableG[ indexL + 1 ] ) >> ( 28 - ( expL >> 1 ) ); -} - -/* ------------------------------------------------------------------------- */ - -/* table of 1/sqrt (1.31) and negative slope (.15) values - referenced in b_GaborCueEm/focusDispAsm.s55, do not rename or remove ! */ -const uint32 bbs_invSqrt32_tableG[] = -{ - 2147483648u, 1001, 2114682880, 956, 2083356672, 915, 2053373952, 877, - 2024636416, 840, 1997111296, 808, 1970634752, 776, 1945206784, 746, - 1920761856, 720, 1897168896, 693, 1874460672, 669, 1852538880, 646, - 1831370752, 625, 1810890752, 604, 1791098880, 584, 1771962368, 567, - 1753382912, 548, 1735426048, 533, 1717960704, 516, 1701052416, 502, - 1684602880, 487, 1668644864, 474, 1653112832, 461, 1638006784, 448, - 1623326720, 436, 1609039872, 426, 1595080704, 414, 1581514752, 404, - 1568276480, 394, 1555365888, 384, 1542782976, 375, 1530494976, 367, - 1518469120, 357, 1506770944, 350, 1495302144, 342, 1484095488, 334, - 1473150976, 327, 1462435840, 320, 1451950080, 313, 1441693696, 307, - 1431633920, 300, 1421803520, 294, 1412169728, 289, 1402699776, 282, - 1393459200, 277, 1384382464, 272, 1375469568, 266, 1366753280, 262, - 1358168064, 257, 1349746688, 251, 1341521920, 248, 1333395456, 243, - 1325432832, 238, 1317634048, 235, 1309933568, 230, 1302396928, 227, - 1294958592, 222, 1287684096, 219, 1280507904, 216, 1273430016, 211, - 1266515968, 209, 1259667456, 205, 1252950016, 202, 1246330880, 198, - 1239842816, 196, 1233420288, 192, 1227128832, 190, 1220902912, 187, - 1214775296, 184, 1208745984, 181, 1202814976, 179, 1196949504, 176, - 1191182336, 173, 1185513472, 171, 1179910144, 169, 1174372352, 166, - 1168932864, 164, 1163558912, 162, 1158250496, 160, 1153007616, 157, - 1147863040, 155, 1142784000, 154, 1137737728, 151, 1132789760, 149, - 1127907328, 148, 1123057664, 145, 1118306304, 144, 1113587712, 142, - 1108934656, 140, 1104347136, 138, 1099825152, 137, 1095335936, 135, - 1090912256, 134, 1086521344, 131, 1082228736, 131, 1077936128, 128 -}; - -uint32 bbs_invSqrt32( uint32 valA ) -{ - - uint32 expL = 0; - uint32 valL; - uint32 offsL; - uint32 indexL = 0; - - if( valA == 0U ) return 0x80000000; - - /* compute closest even size exponent of valA */ - expL += ( ( valA >> ( expL + 0x10 ) ) != 0 ) << 4; - expL += ( ( valA >> ( expL + 0x08 ) ) != 0 ) << 3; - expL += ( ( valA >> ( expL + 0x04 ) ) != 0 ) << 2; - expL += ( ( valA >> ( expL + 0x02 ) ) != 0 ) << 1; - - valL = ( ( valA << ( 30 - expL ) ) - 1073741824 ); /* ( 1 << 30 ) */ - offsL = ( ( valL & 0x01FFFFFF ) + ( 1 << 9 ) ) >> 10; - indexL = ( valL >> 24 ) & 0xFE; - - return ( bbs_invSqrt32_tableG[ indexL ] - offsL * bbs_invSqrt32_tableG[ indexL + 1 ] ) >> ( expL >> 1 ); -} - -/* ------------------------------------------------------------------------- */ - -/* table of 1/( x + 1 ) (2.30) and negative slope (.14) values - referenced in b_GaborCueEm/focusDispAsm.s55, do not rename or remove ! */ -const int32 bbs_inv32_tableG[] = -{ - 1073741824, 1986, 1041203200, 1870, 1010565120, 1762, 981696512, 1664, - 954433536, 1575, 928628736, 1491, 904200192, 1415, 881016832, 1345, - 858980352, 1278, 838041600, 1218, 818085888, 1162, 799047680, 1108, - 780894208, 1059, 763543552, 1013, 746946560, 970, 731054080, 930, - 715816960, 891, 701218816, 856, 687194112, 823, 673710080, 791, - 660750336, 761, 648282112, 732, 636289024, 706, 624721920, 681, - 613564416, 657, 602800128, 635, 592396288, 613, 582352896, 592, - 572653568, 573, 563265536, 554, 554188800, 537, 545390592, 520, -}; - -int32 bbs_inv32( int32 valA ) -{ - - uint32 expL = 0; - int32 signL = ( ( valA >> 30 ) & 0xFFFFFFFE ) + 1; - int32 valL = signL * valA; - int32 offsL; - uint32 indexL = 0; - - if( valL <= ( int32 ) 1 ) return 0x40000000 * signL; - - /* compute size exponent of valL */ - expL += ( ( valL >> ( expL + 0x10 ) ) != 0 ) << 4; - expL += ( ( valL >> ( expL + 0x08 ) ) != 0 ) << 3; - expL += ( ( valL >> ( expL + 0x04 ) ) != 0 ) << 2; - expL += ( ( valL >> ( expL + 0x02 ) ) != 0 ) << 1; - expL += ( ( valL >> ( expL + 0x01 ) ) != 0 ); - - valL = ( ( valL << ( 30 - expL ) ) - 1073741824 ); /*( 1U << 30 )*/ - offsL = ( ( valL & 0x01FFFFFF ) + ( 1 << 10 ) ) >> 11; - indexL = ( valL >> 24 ) & 0xFE; - - return signL * ( ( ( ( bbs_inv32_tableG[ indexL ] - offsL * bbs_inv32_tableG[ indexL + 1 ] ) >> ( expL - 1 ) ) + 1 ) >> 1 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_intLog2( uint32 valA ) -{ - uint32 expL = 0; - expL += 0x10 * ( ( valA >> ( expL + 0x10 ) ) != 0 ); - expL += 0x08 * ( ( valA >> ( expL + 0x08 ) ) != 0 ); - expL += 0x04 * ( ( valA >> ( expL + 0x04 ) ) != 0 ); - expL += 0x02 * ( ( valA >> ( expL + 0x02 ) ) != 0 ); - expL += 0x01 * ( ( valA >> ( expL + 0x01 ) ) != 0 ); - return expL; -} - -/* ------------------------------------------------------------------------- */ - -const uint32 bbs_pow2M1_tableG[] = -{ - 0, 713, 46769127, 721, 94047537, 729, 141840775, 737, - 190154447, 745, 238994221, 753, 288365825, 761, 338275050, 769, - 388727751, 778, 439729846, 786, 491287318, 795, 543406214, 803, - 596092647, 812, 649352798, 821, 703192913, 830, 757619310, 839, - 812638371, 848, 868256550, 857, 924480371, 867, 981316430, 876, - 1038771393, 886, 1096851999, 895, 1155565062, 905, 1214917468, 915, - 1274916179, 925, 1335568233, 935, 1396880745, 945, 1458860907, 956, - 1521515988, 966, 1584853338, 976, 1648880387, 987, 1713604645, 998, - 1779033703, 1009, 1845175238, 1020, 1912037006, 1031, 1979626852, 1042, - 2047952702, 1053, 2117022572, 1065, 2186844564u, 1077, 2257426868u, 1088, - 2328777762u, 1100, 2400905617u, 1112, 2473818892u, 1124, 2547526141u, 1136, - 2622036010u, 1149, 2697357237u, 1161, 2773498659u, 1174, 2850469207u, 1187, - 2928277909u, 1200, 3006933892u, 1213, 3086446383u, 1226, 3166824708u, 1239, - 3248078296u, 1253, 3330216677u, 1266, 3413249486u, 1280, 3497186464u, 1294, - 3582037455u, 1308, 3667812413u, 1323, 3754521399u, 1337, 3842174584u, 1352, - 3930782250u, 1366, 4020354790u, 1381, 4110902710u, 1396, 4202436633u, 1411 -}; - -uint32 bbs_pow2M1( uint32 valA ) -{ - uint32 offsL = ( valA & 0x03FFFFFF ) >> 10; - uint16 indexL = ( ( valA & 0xFC000000 ) >> 26 ) << 1; - return bbs_pow2M1_tableG[ indexL ] + offsL * bbs_pow2M1_tableG[ indexL + 1 ]; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_pow2( int32 valA ) -{ - int32 shiftL = 16 - ( valA >> 27 ); - uint32 offsL = ( uint32 )( valA << 5 ); - if( shiftL == 32 ) return 1; - return ( 1 << ( 32 - shiftL ) ) + ( bbs_pow2M1( offsL ) >> shiftL ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_exp( int32 valA ) -{ - int32 adjustedL; - int32 shiftL; - int32 offsL; - - /* check boundaries to avoid overflow */ - if( valA < -1488522236 ) - { - return 0; - } - else if( valA > 1488522236 ) - { - return 0xFFFFFFFF; - } - - /* multily valA with 1/ln(2) in order to use function 2^x instead of e^x */ - adjustedL = ( valA >> 16 ) * 94548 + ( ( ( ( ( uint32 )valA ) & 0x0FFFF ) * 47274 ) >> 15 ); - - shiftL = 16 - ( adjustedL >> 27 ); - if( shiftL == 32 ) return 1; - offsL = ( uint32 )( adjustedL << 5 ); - return ( ( int32 ) 1 << ( 32 - shiftL ) ) + ( bbs_pow2M1( offsL ) >> shiftL ); -} - -/* ------------------------------------------------------------------------- */ - -int16 bbs_satS16( int32 valA ) -{ - if( valA > 32767 ) return 32767; - if( valA < -32768 ) return -32768; - return valA; -} - -/* ------------------------------------------------------------------------- */ - -#if defined( HW_i586 ) || defined( HW_i686 ) - -/* Windows section */ -#if defined( WIN32 ) && !defined( WIN64 ) - -/* disable warning "no return value"*/ -#pragma warning( disable : 4035 ) - -/** - * computes a fast dot product using intel MMX, sizeA must be multiple of 16 and >0 - */ -int32 bbs_dotProduct_intelMMX16( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - __asm - { - push esi - push edi - - mov eax, vec1A - mov ebx, vec2A - - mov ecx, sizeA - - pxor mm4, mm4 - pxor mm6, mm6 - - pxor mm7, mm7 - shr ecx, 4 - - inner_loop_start: - movq mm0, 0[eax] - paddd mm7, mm4 - - movq mm1, 0[ebx] - paddd mm7, mm6 - - movq mm2, 8[eax] - pmaddwd mm0, mm1 - - movq mm3, 8[ebx] - - movq mm4, 16[eax] - pmaddwd mm2, mm3 - - movq mm5, 16[ebx] - paddd mm7, mm0 - - movq mm6, 24[eax] - pmaddwd mm4, mm5 - - pmaddwd mm6, 24[ebx] - paddd mm7, mm2 - - add eax, 32 - add ebx, 32 - - dec ecx - jnz inner_loop_start - - paddd mm7, mm4 - - paddd mm7, mm6 - - movq mm0, mm7 - - psrlq mm0, 32 - - paddd mm7, mm0 - - movd eax, mm7 - - emms - pop edi - pop esi - } -} - -#pragma warning( default : 4035 ) - -/* gcc compiler section */ -#elif defined( epl_LINUX ) || defined( CYGWIN ) - -/** - * computes a fast dot product using intel MMX, sizeA must be multiple of 16 and >0 - */ -int32 bbs_dotProduct_intelMMX16( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - int32 resultL; - - __asm__ __volatile__( - - "movl %1,%%eax\n\t" - "movl %2,%%ebx\n\t" - - "movl %3,%%ecx\n\t" - - "pxor %%mm4,%%mm4\n\t" - "pxor %%mm6,%%mm6\n\t" - - "pxor %%mm7, %%mm7\n\t" - "shrl $4, %%ecx\n\t" - - "\n1:\t" - "movq 0(%%eax),%%mm0\n\t" - "paddd %%mm4,%%mm7\n\t" - - "movq 0( %%ebx ),%%mm1\n\t" - "paddd %%mm6,%%mm7\n\t" - - "movq 8( %%eax ),%%mm2\n\t" - "pmaddwd %%mm1,%%mm0\n\t" - - "movq 8( %%ebx ),%%mm3\n\t" - - "movq 16( %%eax ),%%mm4\n\t" - "pmaddwd %%mm3,%%mm2\n\t" - - "movq 16( %%ebx ),%%mm5\n\t" - "paddd %%mm0,%%mm7\n\t" - - "movq 24( %%eax ),%%mm6\n\t" - "pmaddwd %%mm5,%%mm4\n\t" - - "pmaddwd 24( %%ebx ),%%mm6\n\t" - "paddd %%mm2,%%mm7\n\t" - - "addl $32,%%eax\n\t" - "addl $32,%%ebx\n\t" - - "decl %%ecx\n\t" - "jnz 1b\n\t" - - "paddd %%mm4,%%mm7\n\t" - "paddd %%mm6,%%mm7\n\t" - - "movq %%mm7,%%mm0\n\t" - - "psrlq $32,%%mm0\n\t" - - "paddd %%mm0,%%mm7\n\t" - - "movd %%mm7,%0\n\t" - - "emms\n\t" - - : "=&g" ( resultL ) - : "g" ( vec1A ), "g" ( vec2A ), "g" ( sizeA ) - : "si", "di", "ax", "bx", "cx", "st", "memory" ); - - return resultL; -} - -#endif /* epl_LINUX, CYGWIN */ - -#endif /* HW_i586 || HW_i686 */ - -/* ------------------------------------------------------------------------- */ - -#ifdef HW_TMS320C6x -/** - * Calls fast assembler version of dotproduct for DSP. - * dotProduct_C62x is implemented in file dotprod.asm and expects input vectors - * of even length. - */ -int32 bbs_dotProduct_dsp( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - if( sizeA & 1 ) - { - int32 resultL; - resultL = dotProduct_C62x( vec1A, vec2A, sizeA - 1 ); - return resultL + ( int32 ) *( vec1A + sizeA - 1 ) * *( vec2A + sizeA - 1 ); - } - else - { - return dotProduct_C62x( vec1A, vec2A, sizeA ); - } -} -#endif /* HW_TMS320C6x */ - -/* ------------------------------------------------------------------------- */ - -/* 16 dot product for the PS2/EE processor */ -/* input vectors MUST be 128 bit aligned ! */ - -#if defined( epl_LINUX ) && defined( HW_EE ) - -int32 bbs_dotProduct_EE( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - int32 resultL = 0, - iL = sizeA >> 3, - jL = sizeA - ( iL << 3 ); - - if( iL > 0 ) - { - /* multiply-add elements of input vectors in sets of 8 */ - int32 accL[ 4 ], t1L, t2L, t3L; - asm volatile ( - "pxor %4, %2, %2\n\t" /* reset 8 accumulators (LO and HI register) to 0 */ - "pmtlo %4\n\t" - "pmthi %4\n\t" - - "\n__begin_loop:\t" - - "lq %2,0(%0)\n\t" /* load 8 pairs of int16 */ - "lq %3,0(%1)\n\t" - - "addi %0,%0,16\n\t" /* vec1L += 16 */ - "addi %1,%1,16\n\t" /* vec2L += 16 */ - "addi %7,%7,-1\n\t" /* iL-- */ - - "pmaddh %4,%2,%3\n\t" /* parallel multiply-add of 8 pairs of int16 */ - - "bgtzl %7,__begin_loop\n\t" /* if iL > 0 goto _begin_loop */ - - "pmflo %2\n\t" /* parallel add 8 accumulators , store remaining 4 accumulators in tmpL */ - "pmfhi %3\n\t" - "paddw %4,%2,%3\n\t" - "sq %4,0(%8)\n\t" - : "=r" ( vec1A ), "=r" ( vec2A ), "=r" ( t1L ), "=r" ( t2L ), "=r" ( t3L ) - : "0" ( vec1A ), "1" ( vec2A ), "r" ( iL ), "r" ( accL ) - : "memory" ); - - /* add 4 parallel accumulators */ - resultL += accL[ 0 ] + accL[ 1 ] + accL[ 2 ] + accL[ 3 ]; - } - - /* multiply-add remaining elements of input vectors */ - for( ; jL--; ) resultL += ( int32 ) *vec1A++ * *vec2A++; - - return resultL; -} - -#endif - -/* ------------------------------------------------------------------------- */ - -#if defined( HW_ARMv5TE ) - -/* fast 16 dot product for ARM9E cores (DSP extensions). - * input vectors must be 32 bit aligned - */ -int32 bbs_dotProduct_arm9e( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - int32 accuL = 0; - - int32* v1PtrL = ( int32* )vec1A; - int32* v2PtrL = ( int32* )vec2A; - - for( ; sizeA >= 4; sizeA -= 4 ) - { - __asm { - smlabb accuL, *v1PtrL, *v2PtrL, accuL; - smlatt accuL, *v1PtrL, *v2PtrL, accuL; - } - v1PtrL++; v2PtrL++; - __asm { - smlabb accuL, *v1PtrL, *v2PtrL, accuL; - smlatt accuL, *v1PtrL, *v2PtrL, accuL; - } - v1PtrL++; v2PtrL++; - } - - vec1A = ( int16* )v1PtrL; - vec2A = ( int16* )v2PtrL; - - /* multiply-add remaining elements of input vectors */ - for( ; sizeA > 0; sizeA-- ) accuL += ( int32 )*vec1A++ * *vec2A++; - - return accuL; -} - -#endif - -/* ------------------------------------------------------------------------- */ - -/** - * Computes a fast dot product using standard C - */ -int32 bbs_dotProduct_stdc( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - int32 accuL = 0; - - for( ; sizeA >= 8; sizeA -= 8 ) - { - accuL += ( int32 ) *vec1A * *vec2A; - accuL += ( int32 ) *( vec1A + 1 ) * *( vec2A + 1 ); - accuL += ( int32 ) *( vec1A + 2 ) * *( vec2A + 2 ); - accuL += ( int32 ) *( vec1A + 3 ) * *( vec2A + 3 ); - - accuL += ( int32 ) *( vec1A + 4 ) * *( vec2A + 4 ); - accuL += ( int32 ) *( vec1A + 5 ) * *( vec2A + 5 ); - accuL += ( int32 ) *( vec1A + 6 ) * *( vec2A + 6 ); - accuL += ( int32 ) *( vec1A + 7 ) * *( vec2A + 7 ); - - vec1A += 8; - vec2A += 8; - } - - for( ; sizeA; sizeA-- ) accuL += ( int32 ) *vec1A++ * *vec2A++; - - return accuL; -} - -/* ------------------------------------------------------------------------- */ - -int32 bbs_dotProductInt16( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ -/* PC */ -#if ( defined( HW_i586 ) || defined( HW_i686 ) ) - - #if defined( HW_SSE2 ) - uint32 size16L = sizeA & 0xfffffff0; - if( size16L ) - { - if( ( (uint32)vec1A & 0xF ) == 0 && ( (uint32)vec2A & 0xF ) == 0 ) - { - return bbs_dotProduct_128SSE2( vec1A, vec2A, sizeA ); - } - else - { - return bbs_dotProduct_u128SSE2( vec1A, vec2A, sizeA ); - } - } - #elif !defined( WIN64 ) - /* MMX version (not supported by 64-bit compiler) */ - uint32 size16L = sizeA & 0xfffffff0; - if( size16L ) - { - if( sizeA == size16L ) - { - return bbs_dotProduct_intelMMX16( vec1A, vec2A, size16L ); - } - return bbs_dotProduct_intelMMX16( vec1A, vec2A, size16L ) - + bbs_dotProduct_stdc( vec1A + size16L, vec2A + size16L, sizeA - size16L ); - } /* if( size16L ) */ - #endif - - return bbs_dotProduct_stdc( vec1A, vec2A, sizeA ); - -/* Playstation 2 */ -#elif defined( HW_EE ) && defined( epl_LINUX ) - - if( ( (uint32)vec1A & 0xF ) == 0 && ( (uint32)vec2A & 0xF ) == 0 ) - { - return bbs_dotProduct_EE( vec1A, vec2A, sizeA ); - } - return bbs_dotProduct_stdc( vec1A, vec2A, sizeA ); - -/* ARM9E */ -#elif defined( HW_ARMv5TE ) - - return bbs_dotProduct_arm9e( vec1A, vec2A, sizeA ); - -/* TI C6000 */ -#elif defined( HW_TMS320C6x ) - - return bbs_dotProduct_dsp( vec1A, vec2A, sizeA ); - -#elif defined( HW_FR71 ) - - uint32 size16L = sizeA & 0xfffffff0; - if( size16L ) - { - if( sizeA == size16L ) - { - return bbs_dotProduct_fr71( vec1A, vec2A, size16L ); - } - return bbs_dotProduct_fr71( vec1A, vec2A, size16L ) - + bbs_dotProduct_stdc( vec1A + size16L, vec2A + size16L, sizeA - size16L ); - } - - return bbs_dotProduct_stdc( vec1A, vec2A, sizeA ); - -#endif - - return bbs_dotProduct_stdc( vec1A, vec2A, sizeA ); -} - -/* ------------------------------------------------------------------------- */ - -/* table of fermi and slope values (result: 2.30; offset: .12) - referenced in b_NeuralNetEm/FastMlpNet.c, not not rename or remove */ -const uint32 bbs_fermi_tableG[] = -{ - 45056, 8, 77824, 13, 131072, 21, 217088, 34, - 356352, 57, 589824, 94, 974848, 155, 1609728, 255, - 2654208, 418, 4366336, 688, 7184384, 1126, 11796480, 1834, - 19308544, 2970, 31473664, 4748, 50921472, 7453, 81448960, 11363, - 127991808, 16573, 195874816, 22680, 288772096, 28469, 405381120, 32102, - 536870912, 32101, 668356608, 28469, 784965632, 22680, 877862912, 16573, - 945745920, 11363, 992288768, 7453, 1022816256, 4748, 1042264064, 2970, - 1054429184, 1834, 1061941248, 1126, 1066553344, 688, 1069371392, 418, - 1071083520, 255, 1072128000, 155, 1072762880, 94, 1073147904, 57, - 1073381376, 34, 1073520640, 21, 1073606656, 13, 1073659904, 8, -}; - -int32 bbs_fermi( int32 valA ) -{ - uint32 indexL = ( ( valA >> 15 ) + 20 ) << 1; - uint32 offsL = ( ( valA & 0x00007FFF ) + 4 ) >> 3; - if( valA < -655360 ) return 1; - if( valA >= 655360 ) return 1073741824 - 1; /* ( 1 << 30 ) */ - return ( bbs_fermi_tableG[ indexL ] + offsL * bbs_fermi_tableG[ indexL + 1 ] ); -} - -/* ------------------------------------------------------------------------- */ - -void bbs_uint32ReduceToNBits( uint32* argPtrA, int32* bbpPtrA, uint32 nBitsA ) -{ - int32 posHighestBitL = bbs_intLog2( *argPtrA ) + 1; - int32 shiftL = posHighestBitL - nBitsA; - if( shiftL > 0 ) - { - ( *argPtrA ) >>= shiftL; - ( *bbpPtrA ) -= shiftL; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_int32ReduceToNBits( int32* argPtrA, int32* bbpPtrA, uint32 nBitsA ) -{ - int32 posHighestBitL = bbs_intLog2( bbs_abs( *argPtrA ) ) + 1; - int32 shiftL = posHighestBitL - nBitsA; - if( shiftL > 0 ) - { - ( *argPtrA ) >>= shiftL; - ( *bbpPtrA ) -= shiftL; - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_convertU32( uint32 srcA, int32 srcBbpA, int32 dstBbpA ) -{ - if( dstBbpA >= srcBbpA ) - { - uint32 shiftL = dstBbpA - srcBbpA; - if( srcA > ( ( uint32 )0xFFFFFFFF >> shiftL ) ) - { - /* overflow */ - return ( uint32 )0xFFFFFFFF; - } - else - { - return srcA << shiftL; - } - } - else - { - uint32 shiftL = srcBbpA - dstBbpA; - uint32 addL = 1L << ( shiftL - 1 ); - if( srcA + addL < addL ) - { - /* rounding would cause overflow */ - return srcA >> shiftL; - } - else - { - return ( srcA + addL ) >> shiftL; - } - } -} - -/* ------------------------------------------------------------------------- */ - -int32 bbs_convertS32( int32 srcA, int32 srcBbpA, int32 dstBbpA ) -{ - if( dstBbpA >= srcBbpA ) - { - uint32 shiftL = ( uint32 )( dstBbpA - srcBbpA ); - if( srcA > ( ( int32 )0x7FFFFFFF >> shiftL ) ) - { - /* overflow */ - return ( uint32 )0x7FFFFFFF; - } - else if( srcA < ( ( int32 )0x80000000 >> shiftL ) ) - { - /* underflow */ - return ( int32 )0x80000000; - } - else - { - return srcA << shiftL; - } - } - else - { - uint32 shiftL = ( uint32 )( srcBbpA - dstBbpA ); - int32 addL = 1L << ( shiftL - 1 ); - if( srcA + addL < addL ) - { - /* rounding would cause overflow */ - return srcA >> shiftL; - } - else - { - return ( srcA + addL ) >> shiftL; - } - } -} - -/* ------------------------------------------------------------------------- */ - -int32 bbs_vecPowerFlt16( const int16 *xA, int16 nxA ) -{ -/* #if defined( HW_TMS320C5x ) - uint32 rL; - power( ( int16* ) xA, ( int32* ) &rL, nxA ); // does not work properly in DSPLib version 2.20.02 - return ( rL >> 1 ); - #else*/ - /* needs to be optimized */ - int32 rL = 0; - for( ; nxA--; ) - { - rL += ( int32 ) *xA * *xA; - xA++; - } - return rL; -/* #endif */ -} - -/* ------------------------------------------------------------------------- */ - -void bbs_mulU32( uint32 v1A, uint32 v2A, uint32* manPtrA, int32* expPtrA ) -{ - uint32 log1L = bbs_intLog2( v1A ); - uint32 log2L = bbs_intLog2( v2A ); - - if( log1L + log2L < 32 ) - { - *manPtrA = v1A * v2A; - *expPtrA = 0; - } - else - { - uint32 v1L = v1A; - uint32 v2L = v2A; - uint32 exp1L = 0; - uint32 exp2L = 0; - if( log1L > 15 && log2L > 15 ) - { - exp1L = log1L - 15; - exp2L = log2L - 15; - v1L = ( ( v1L >> ( exp1L - 1 ) ) + 1 ) >> 1; - v2L = ( ( v2L >> ( exp2L - 1 ) ) + 1 ) >> 1; - } - else if( log1L > 15 ) - { - exp1L = log1L + log2L - 31; - v1L = ( ( v1L >> ( exp1L - 1 ) ) + 1 ) >> 1; - } - else - { - exp2L = log1L + log2L - 31; - v2L = ( ( v2L >> ( exp2L - 1 ) ) + 1 ) >> 1; - } - - *manPtrA = v1L * v2L; - *expPtrA = exp1L + exp2L; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_mulS32( int32 v1A, int32 v2A, int32* manPtrA, int32* expPtrA ) -{ - uint32 log1L = bbs_intLog2( v1A > 0 ? v1A : -v1A ); - uint32 log2L = bbs_intLog2( v2A > 0 ? v2A : -v2A ); - - if( log1L + log2L < 30 ) - { - *manPtrA = v1A * v2A; - *expPtrA = 0; - } - else - { - int32 v1L = v1A; - int32 v2L = v2A; - int32 exp1L = 0; - int32 exp2L = 0; - if( log1L > 14 && log2L > 14 ) - { - exp1L = log1L - 14; - exp2L = log2L - 14; - v1L = ( ( v1L >> ( exp1L - 1 ) ) + 1 ) >> 1; - v2L = ( ( v2L >> ( exp2L - 1 ) ) + 1 ) >> 1; - } - else if( log1L > 14 ) - { - exp1L = log1L + log2L - 29; - v1L = ( ( v1L >> ( exp1L - 1 ) ) + 1 ) >> 1; - } - else - { - exp2L = log1L + log2L - 29; - v2L = ( ( v2L >> ( exp2L - 1 ) ) + 1 ) >> 1; - } - - *manPtrA = v1L * v2L; - *expPtrA = exp1L + exp2L; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_vecSqrNorm32( const int32* vecA, uint32 sizeA, uint32* manPtrA, uint32* expPtrA ) -{ - uint32 sumL = 0; - int32 sumExpL = 0; - - uint32 iL; - for( iL = 0; iL < sizeA; iL++ ) - { - int32 vL = vecA[ iL ]; - int32 logL = bbs_intLog2( vL > 0 ? vL : -vL ); - int32 expL = ( logL > 14 ) ? logL - 14 : 0; - uint32 prdL; - - if( expL >= 1 ) - { - vL = ( ( vL >> ( expL - 1 ) ) + 1 ) >> 1; - } - else - { - vL = vL >> expL; - } - - prdL = vL * vL; - expL <<= 1; /* now exponent of product */ - - if( sumExpL > expL ) - { - uint32 shrL = sumExpL - expL; - prdL = ( ( prdL >> ( shrL - 1 ) ) + 1 ) >> 1; - } - else if( expL > sumExpL ) - { - uint32 shrL = expL - sumExpL; - sumL = ( ( sumL >> ( shrL - 1 ) ) + 1 ) >> 1; - sumExpL += shrL; - } - - sumL += prdL; - - if( sumL > 0x80000000 ) - { - sumL = ( sumL + 1 ) >> 1; - sumExpL++; - } - } - - /* make exponent even */ - if( ( sumExpL & 1 ) != 0 ) - { - sumL = ( sumL + 1 ) >> 1; - sumExpL++; - } - - if( manPtrA != NULL ) *manPtrA = sumL; - if( expPtrA != NULL ) *expPtrA = sumExpL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_vecSqrNorm16( const int16* vecA, uint32 sizeA, uint32* manPtrA, uint32* expPtrA ) -{ - uint32 sumL = 0; - int32 sumExpL = 0; - - uint32 iL; - for( iL = 0; iL < sizeA; iL++ ) - { - int32 vL = vecA[ iL ]; - uint32 prdL = vL * vL; - - if( sumExpL > 0 ) - { - uint32 shrL = sumExpL; - prdL = ( ( prdL >> ( shrL - 1 ) ) + 1 ) >> 1; - } - - sumL += prdL; - - if( sumL > 0x80000000 ) - { - sumL = ( sumL + 1 ) >> 1; - sumExpL++; - } - } - - /* make exponent even */ - if( ( sumExpL & 1 ) != 0 ) - { - sumL = ( sumL + 1 ) >> 1; - sumExpL++; - } - - if( manPtrA != NULL ) *manPtrA = sumL; - if( expPtrA != NULL ) *expPtrA = sumExpL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_vecNorm16( const int16* vecA, uint32 sizeA ) -{ - uint32 manL; - uint32 expL; - bbs_vecSqrNorm16( vecA, sizeA, &manL, &expL ); - manL = bbs_sqrt32( manL ); - return manL << ( expL >> 1 ); -} - -/* ------------------------------------------------------------------------- */ - -void bbs_matMultiplyFlt16( const int16 *x1A, int16 row1A, int16 col1A, const int16 *x2A, int16 col2A, int16 *rA ) -{ - #if defined( HW_TMS320C5x ) - /* operands need to be in internal memory for mmul*/ - if( x1A > ( int16* ) bbs_C5X_INTERNAL_MEMORY_SIZE || - x2A > ( int16* ) bbs_C5X_INTERNAL_MEMORY_SIZE ) - { - int16 iL,jL,kL; - int16 *ptr1L, *ptr2L; - int32 sumL; - - for( iL = 0; iL < row1A; iL++ ) - { - for( jL = 0; jL < col2A; jL++ ) - { - ptr1L = ( int16* ) x1A + iL * col1A; - ptr2L = ( int16* ) x2A + jL; - sumL = 0; - for( kL = 0; kL < col1A; kL++ ) - { - sumL += ( ( int32 ) *ptr1L++ * *ptr2L ); - ptr2L += col2A; - } - *rA++ = ( sumL + ( 1 << 14 ) ) >> 15; /* round result to 1.15 */ - } - } - } - else mmul( ( int16* ) x1A, row1A, col1A, ( int16* ) x2A, col1A, col2A, rA ); - - #elif defined( HW_ARMv4 ) || defined( HW_ARMv5TE ) - - int32 iL, jL, kL; - int16 *ptr1L, *ptr2L; - int32 sumL; - for( iL = 0; iL < row1A; iL++ ) - { - for( jL = 0; jL < col2A; jL++ ) - { - ptr1L = ( int16* ) x1A + iL * col1A; - ptr2L = ( int16* ) x2A + jL; - sumL = 0; - for( kL = col1A; kL >= 4; kL -= 4 ) - { - sumL += ( ( int32 ) *ptr1L++ * *ptr2L ); - sumL += ( ( int32 ) *ptr1L++ * *( ptr2L += col2A ) ); - sumL += ( ( int32 ) *ptr1L++ * *( ptr2L += col2A ) ); - sumL += ( ( int32 ) *ptr1L++ * *( ptr2L += col2A ) ); - ptr2L += col2A; - } - for( ; kL > 0; kL-- ) - { - sumL += ( ( int32 ) *ptr1L++ * *ptr2L ); - ptr2L += col2A; - } - *rA++ = ( sumL + ( 1 << 14 ) ) >> 15; /* round result to 1.15 */ - } - } - #else - /* needs to be optimized */ - int16 iL,jL,kL; - int16 *ptr1L, *ptr2L; - int32 sumL; - - for( iL = 0; iL < row1A; iL++ ) - { - for( jL = 0; jL < col2A; jL++ ) - { - ptr1L = ( int16* ) x1A + iL * col1A; - ptr2L = ( int16* ) x2A + jL; - sumL = 0; - for( kL = 0; kL < col1A; kL++ ) - { - sumL += ( ( int32 ) *ptr1L++ * *ptr2L ); - ptr2L += col2A; - } - *rA++ = ( sumL + ( 1 << 14 ) ) >> 15; /* round result to 1.15 */ - } - } - #endif -} - -/* ------------------------------------------------------------------------- */ - -void bbs_matMultiplyTranspFlt16( const int16 *x1A, int16 row1A, int16 col1A, - const int16 *x2A, int16 col2A, int16 *rA ) -{ - const int16* ptr1L = x1A; - - int32 iL; - for( iL = row1A; iL > 0 ; iL-- ) - { - int32 jL; - const int16* ptr2L = x2A; - for( jL = col2A; jL > 0 ; jL-- ) - { - int32 kL; - int32 sumL = 0; - for( kL = col1A >> 2; kL > 0; kL-- ) - { - sumL += ( ( int32 ) *ptr1L++ * *ptr2L++ ); - sumL += ( ( int32 ) *ptr1L++ * *ptr2L++ ); - sumL += ( ( int32 ) *ptr1L++ * *ptr2L++ ); - sumL += ( ( int32 ) *ptr1L++ * *ptr2L++ ); - } - for( kL = col1A & 3; kL > 0; kL-- ) - { - sumL += ( ( int32 ) *ptr1L++ * *ptr2L++ ); - } - *rA++ = ( sumL + ( 1 << 14 ) ) >> 15; /* round result to 1.15 */ - ptr1L -= col1A; - } - ptr1L += col1A; - } -} - -/* ------------------------------------------------------------------------- */ - - -#ifndef mtrans -uint16 bbs_matTrans( int16 *xA, int16 rowA, int16 colA, int16 *rA ) -{ - /* needs to be optimized */ - int16 iL; - for( iL = colA; iL--; ) - { - int16* sL = xA++; - int16 jL; - for( jL = rowA; jL--; ) - { - *rA++ = *sL; - sL += colA; - } - } - return 0; -} -#endif - -/* ------------------------------------------------------------------------- */ -#ifndef atan2_16 -int16 bbs_atan2( int16 nomA, int16 denomA ) -{ - int16 phL, argL; - - if( nomA == denomA ) return 8192; - argL = ( ( int32 ) nomA << 15 ) / denomA; - - /* 0.318253*2 x 20857 .15 - +0.003314*2 x^2 217 .15 - -0.130908*2 x^3 -8580 .15 - +0.068542*2 x^4 4491 .15 - -0.009159*2 x^5 -600 .15 */ - - phL = -600; - phL = ( ( ( int32 ) phL * argL ) >> 15 ) + 4481; - phL = ( ( ( int32 ) phL * argL ) >> 15 ) - 8580; - phL = ( ( ( int32 ) phL * argL ) >> 15 ) + 217; - phL = ( ( ( int32 ) phL * argL ) >> 15 ) + 20857; - phL = ( ( int32 ) phL * argL ) >> 15; - - return phL >> 1; /* /2 */ -} - -/* needs to be optimized */ -uint16 bbs_vecPhase( int16 *reA, int16 *imA, int16 *phaseA, uint16 sizeA ) -{ - for( ; sizeA--; ) - { - int16 reL = *reA++; - int16 imL = *imA++; - int16 phL = 0; - - if( reL < 0 ) - { - reL = -reL; - if( imL < 0 ) - { - imL = -imL; - if( reL > imL ) - { - phL = -32768 + bbs_atan2( imL, reL ); - } - else - { - phL = -16384 - bbs_atan2( reL, imL ); - } - } - else - { - if( reL > imL ) - { - phL = -( -32768 + bbs_atan2( imL, reL ) ); - } - else - { - if( imL == 0 ) phL = 0; - else phL = 16384 + bbs_atan2( reL, imL ); - } - } - } - else - { - if( imL < 0 ) - { - imL = -imL; - if( reL > imL ) - { - phL = -bbs_atan2( imL, reL ); - } - else - { - phL = -16384 + bbs_atan2( reL, imL ); - } - } - else - { - if( reL > imL ) - { - phL = bbs_atan2( imL, reL ); - } - else - { - if( imL == 0 ) phL = 0; - else phL = 16384 - bbs_atan2( reL, imL ); - } - } - } - - *phaseA++ = phL; - } - return 0; -} - -#endif - -/* ------------------------------------------------------------------------- */ diff --git a/Embedded/common/src/b_BasicEm/Math.h b/Embedded/common/src/b_BasicEm/Math.h deleted file mode 100644 index e492b22..0000000 --- a/Embedded/common/src/b_BasicEm/Math.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_MATH_EM_H -#define bbs_MATH_EM_H - -/** - * This files contains mathematical functions. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#ifdef HW_TMS320C5x -#include "Dsplib.h" -#endif - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- macros ------------------------------------------------------------- */ - -/** computes the maximum of two variables */ -#define bbs_max( val1A, val2A ) ( ( val1A ) > ( val2A ) ? ( val1A ) : ( val2A ) ) - -/** computes the minimum of two variables */ -#define bbs_min( val1A, val2A ) ( ( val1A ) < ( val2A ) ? ( val1A ) : ( val2A ) ) - -/** computes the absolute value */ -#define bbs_abs( valA ) ( ( valA ) > 0 ? ( valA ) : -( valA ) ) - -/* ---- external functions ------------------------------------------------- */ - -/** - * Computes square root from 32 bit value. - * The return value 'r' is the largest possible integer that - * satisfies r * r <= valA. - * This behavior is identical with (uint16)sqrt( valA ). - * C6201: 162 cycles - */ -uint16 bbs_sqrt32( uint32 valA ); - -/** - * Computes square root from 16 bit value. - * The return value 'r' is the largest possible integer that - * satisfies r * r <= valA. - * This behavior is identical with (uint8)sqrt( valA ). - */ -uint8 bbs_sqrt16( uint16 valA ); - -/** Sqrt approximation */ -uint16 bbs_fastSqrt32( uint32 valA ); - -/** sqrt(1/x) approximation - * return format 1.31 - */ -uint32 bbs_invSqrt32( uint32 valA ); - -/** 1/x approximation - * return format 2.30 - */ -int32 bbs_inv32( int32 valA ); - -/** Returns integer log2 of valA - * C6201: 24 cycles - */ -uint32 bbs_intLog2( uint32 valA ); - -/** - * Returns (2^x) - 1 for a value range of [0,1[ - * Format of valA: 0.32 - * Format of return value: 0.32 - */ -uint32 bbs_pow2M1( uint32 valA ); - -/** - * Returns (2^x) for a value range of [-16,16[ - * Format of valA: 5.27 - * Format of return value: 16.16 - */ -uint32 bbs_pow2( int32 valA ); - - -/** - * Returns (e^x) for a value range of [-11.0903,11.0903] - * If valA is smaller than -11.0903, the function returns 0 - * If valA is larger than 11.0903, the function returns ( 2^32 - 1 ) / ( 2^16 ) - * Format of valA: 5.27 - * Format of return value: 16.16 - * C6201: 72 cycles - */ -uint32 bbs_exp( int32 valA ); - -/** saturates a signed 32 bit value to signed 16 bit */ -int16 bbs_satS16( int32 valA ); - -/** - * Returns the value after rounding to the nearest integer. - */ -/* int32 bbs_round( int32 valA, int32 bbpA ); */ - -/** - * Computes the dot product of vec1A with vec2A, both of size sizeA. - * (no overflow handling, slow for sizeA < 32 ) - */ -int32 bbs_dotProductInt16( const int16* vec1A, const int16* vec2A, uint32 sizeA ); - -/** Fermi function ( 1.0 / ( 1.0 + exp( -valA ) ) ) - * Format valA: 16.16 - * Format return: 2.30 - */ -int32 bbs_fermi( int32 valA ); - -/** reduces uint32 to N bits; if it has already <= N bits, nothing happens */ -void bbs_uint32ReduceToNBits( uint32* argPtrA, int32* bbpPtrA, uint32 nBitsA ); - -/** reduces int32 to N bits; if it has already <= N bits, nothing happens */ -void bbs_int32ReduceToNBits( int32* argPtrA, int32* bbpPtrA, uint32 nBitsA ); - -/** converts a number with source bbp to a 32 bit number with dst bbp; - * applies appropriate shifting, rounding and saturation to minimize overflow-damage - */ -uint32 bbs_convertU32( uint32 srcA, int32 srcBbpA, int32 dstBbpA ); - -/** converts a number with source bbp to a 32 bit number with dst bbp; - * applies appropriate shifting, rounding and saturation to minimize overflow-damage - */ -int32 bbs_convertS32( int32 srcA, int32 srcBbpA, int32 dstBbpA ); - -/** vector power return val = sum(xA_i^2), input 1.15, output 1.30 */ -int32 bbs_vecPowerFlt16( const int16 *xA, int16 nxA ); - -/** returns floating point squared norm of 32 bit vector (maximum accuracy - overflow-safe); - * Function is slow - * returned square norm = man * 2^exp - * The returned exponent is always even - */ -void bbs_vecSqrNorm32( const int32* vecA, uint32 sizeA, uint32* manPtrA, uint32* expPtrA ); - -/** returns floating point squared norm of 16 bit vector (maximum accuracy - overflow-safe); - * returned square norm = man * 2^exp - * The returned exponent is always even - */ -void bbs_vecSqrNorm16( const int16* vecA, uint32 sizeA, uint32* manPtrA, uint32* expPtrA ); - -/** returns the norm of a 16 bit vector; - * overflow-safe when sizeA < 65535 - */ -uint32 bbs_vecNorm16( const int16* vecA, uint32 sizeA ); - -/** multiplies two unsigned 32 bit values and returns product decomposed to mantisse and exponent - * maximum accuracy - overflow-safe - * exponent is always >= 0 - */ -void bbs_mulU32( uint32 v1A, uint32 v2A, uint32* manPtrA, int32* expPtrA ); - -/** multiplies two signed 32 bit values and returns product decomposed to mantisse and exponent - * maximum accuracy - overflow-safe - * exponent is always >= 0 - */ -void bbs_mulS32( int32 v1A, int32 v2A, int32* manPtrA, int32* expPtrA ); - -/** matrix multiply rA = x1A * x2A, input/output 1.15, no overflow protection, in-place not allowed */ -void bbs_matMultiplyFlt16( const int16 *x1A, int16 row1A, int16 col1A, - const int16 *x2A, int16 col2A, int16 *rA ); - -/** matrix multiply rA = x1A * transposed( x2A ), input/output 1.15, no overflow protection, in-place not allowed */ -void bbs_matMultiplyTranspFlt16( const int16 *x1A, int16 row1A, int16 col1A, - const int16 *x2A, int16 row2A, int16 *rA ); - -/* -#ifdef mtrans -#define bbs_matTrans mtrans -#else -uint16 bbs_matTrans( int16 *xA, int16 rowA, int16 colA, int16 *rA ); -#endif - -#ifdef atan2_16 -#define bbs_vecPhase atan2_16 -#else -uint16 bbs_vecPhase( int16* reA, int16* imA, int16* phaseA, uint16 sizeA ); -#endif -*/ - -#endif /* bbs_MATH_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/MathSSE2.c b/Embedded/common/src/b_BasicEm/MathSSE2.c deleted file mode 100644 index 236d8bc..0000000 --- a/Embedded/common/src/b_BasicEm/MathSSE2.c +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" /* to disable some warnings in VC++ */ - -#if ( defined( WIN64 ) || defined( HW_SSE2 ) ) - -#include "emmintrin.h" - -/* disable warning "local variable 'x' used without having been initialized" */ -#pragma warning( disable : 4700 ) - - -/** Using half register (64-bit) in SSE2 to calculate dot product. - * This is a SSE2 reimplementation of bbs_dotProduct_intelMMX16 in Math.c. - * Dependencies: input vectors need to be 16-bit aligned - * Return Value: int32 containing resultL of dot product - */ -int32 bbs_dotProduct_64SSE2( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - __m128i m_XMM0, m_XMM1, m_XMM2, m_XMM3, m_XMM4, m_XMM5, m_XMM6, m_XMM7, m_XMM8; - int16* vec1L = ( int16* )vec1A; - int16* vec2L = ( int16* )vec2A; - - int32 resultL = 0; - uint32 alignOffSetL = 0; - - /* initialize registers to 0 */ - m_XMM4 = _mm_xor_si128( m_XMM4, m_XMM4 ); - m_XMM6 = _mm_xor_si128( m_XMM6, m_XMM6 ); - m_XMM7 = _mm_xor_si128( m_XMM7, m_XMM7 ); - - alignOffSetL = sizeA % 16; - sizeA >>= 4; - - if( sizeA ) - { - while( sizeA > 0 ) - { - m_XMM0 = _mm_loadl_epi64( (__m128i *)&0[vec1L] ); - m_XMM7 = _mm_add_epi32( m_XMM7, m_XMM4 ); - - m_XMM1 = _mm_loadl_epi64( (__m128i *)&0[vec2L] ); - m_XMM7 = _mm_add_epi32( m_XMM7, m_XMM6 ); - - m_XMM2 = _mm_loadl_epi64( (__m128i *)&4[vec1L] ); - - m_XMM0 = _mm_madd_epi16( m_XMM0, m_XMM1 ); - - m_XMM3 = _mm_loadl_epi64( (__m128i *)&4[vec2L] ); - m_XMM4 = _mm_loadl_epi64( (__m128i *)&8[vec1L] ); - - m_XMM2 = _mm_madd_epi16( m_XMM2, m_XMM3 ); - - m_XMM5 = _mm_loadl_epi64( (__m128i *)&8[vec2L] ); - - m_XMM7 = _mm_add_epi32( m_XMM7, m_XMM0 ); - - m_XMM6 = _mm_loadl_epi64( (__m128i *)&12[vec1L] ); - - m_XMM4 = _mm_madd_epi16( m_XMM4, m_XMM5 ); - - m_XMM8 = _mm_loadl_epi64( (__m128i *)&12[vec2L] ); - m_XMM6 = _mm_madd_epi16( m_XMM6, m_XMM8 ); - - m_XMM7 = _mm_add_epi32( m_XMM7, m_XMM2 ); - - vec1L += 16; - vec2L += 16; - sizeA--; - } - - /* sum up accumulators */ - m_XMM7 = _mm_add_epi32( m_XMM7, m_XMM4 ); - - m_XMM7 = _mm_add_epi32( m_XMM7, m_XMM6 ); - - m_XMM0 = _mm_loadl_epi64( (__m128i *)&m_XMM7 ); - - m_XMM0 = _mm_srli_epi64( m_XMM0, 32 ); - - m_XMM7 = _mm_add_epi32( m_XMM7, m_XMM0 ); - - resultL = _mm_cvtsi128_si32( m_XMM7 ); - } - - /* switch statements produces faster code than loop */ - switch( alignOffSetL ) - { - case 15: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 14: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 13: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 12: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 11: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 10: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 9: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 8: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 7: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 6: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 5: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 4: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 3: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 2: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 1: - resultL += ( int32 )*vec1L++ * *vec2L++; - } - - return resultL; -} - -/* ------------------------------------------------------------------------- */ - -/** Using full register (128-bit) in SSE2 to calculate dot Product. - * Dependencies: 16-bit aligned - * Return Value: int32 containing dot Product - */ -int32 bbs_dotProduct_128SSE2( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - __m128i m_XMM0, m_XMM2, m_XMM3, m_XMM5, m_XMM6; - int16* vec1L = ( int16* )vec1A; - int16* vec2L = ( int16* )vec2A; - - int32 resultL = 0; - uint32 alignOffSetL = 0; - - m_XMM5 = _mm_xor_si128( m_XMM5, m_XMM5 ); - m_XMM6 = _mm_xor_si128( m_XMM6, m_XMM6 ); - - alignOffSetL = sizeA % 16; - sizeA >>= 4; - - if( sizeA ) - { - while( sizeA > 0 ) - { - m_XMM0 = _mm_load_si128( (__m128i *)&0[vec1L] ); - m_XMM5 = _mm_add_epi32( m_XMM5, m_XMM6 ); - - m_XMM2 = _mm_load_si128( (__m128i *)&0[vec2L] ); - - m_XMM6 = _mm_load_si128( (__m128i *)&8[vec1L] ); - - m_XMM0 = _mm_madd_epi16( m_XMM0, m_XMM2 ); - - m_XMM5 = _mm_add_epi32( m_XMM5, m_XMM0 ); - - m_XMM3 = _mm_load_si128( (__m128i *)&8[vec2L] ); - - m_XMM6 = _mm_madd_epi16( m_XMM6, m_XMM3 ); - - vec1L += 16; - vec2L += 16; - sizeA--; - } - - /* sum up accumulators */ - m_XMM5 = _mm_add_epi32( m_XMM5, m_XMM6 ); - - m_XMM0 = _mm_load_si128( (__m128i *)&m_XMM5 ); - - resultL = _mm_cvtsi128_si32( m_XMM0 ); /* 1st 32bits */ - - m_XMM0 = _mm_srli_si128( m_XMM0, 4 ); - - resultL += _mm_cvtsi128_si32( m_XMM0 ); /* 2nd 32bits */ - - m_XMM0 = _mm_srli_si128( m_XMM0, 4 ); - - resultL += _mm_cvtsi128_si32( m_XMM0 ); /* 3rd 32bits */ - - m_XMM0 = _mm_srli_si128( m_XMM0, 4 ); - - resultL += _mm_cvtsi128_si32( m_XMM0 ); /* 4th 32bits */ - } - - switch( alignOffSetL ) - { - case 15: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 14: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 13: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 12: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 11: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 10: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 9: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 8: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 7: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 6: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 5: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 4: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 3: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 2: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 1: - resultL += ( int32 )*vec1L++ * *vec2L++; - } - - return resultL; -} - -/* ------------------------------------------------------------------------- */ - - -/** Using full register (128-bit) in SSE2 to calculate dot product (non aligned version). - * Dependencies: memory does not need to be 16-bit aligned - * Return Value: int32 containing dot product - */ -int32 bbs_dotProduct_u128SSE2( const int16* vec1A, const int16* vec2A, uint32 sizeA ) -{ - __m128i m_XMM0, m_XMM2, m_XMM3, m_XMM5, m_XMM6; - int16* vec1L = ( int16* )vec1A; - int16* vec2L = ( int16* )vec2A; - int32 resultL = 0; - uint32 alignOffSetL = 0; - - /* initialize registers to 0 */ - m_XMM5 = _mm_xor_si128( m_XMM5, m_XMM5 ); - m_XMM6 = _mm_xor_si128( m_XMM6, m_XMM6 ); - - - alignOffSetL = sizeA % 16; - sizeA >>= 4; - - if( sizeA ) - { - while( sizeA > 0 ) - { - m_XMM0 = _mm_loadu_si128( (__m128i *)&0[vec1L] ); - m_XMM5 = _mm_add_epi32( m_XMM5, m_XMM6 ); - - m_XMM2 = _mm_loadu_si128( (__m128i *)&0[vec2L] ); - - m_XMM6 = _mm_loadu_si128( (__m128i *)&8[vec1L] ); - - m_XMM0 = _mm_madd_epi16( m_XMM0, m_XMM2 ); - - m_XMM5 = _mm_add_epi32( m_XMM5, m_XMM0 ); - - m_XMM3 = _mm_loadu_si128( (__m128i *)&8[vec2L] ); - - m_XMM6 = _mm_madd_epi16( m_XMM6, m_XMM3 ); - - vec1L += 16; - vec2L += 16; - sizeA--; - } - - /* sum up accumulators */ - m_XMM5 = _mm_add_epi32( m_XMM5, m_XMM6 ); - - m_XMM0 = _mm_loadu_si128( (__m128i *)&m_XMM5 ); - - resultL = _mm_cvtsi128_si32( m_XMM0 ); /* 1st 32bits */ - - m_XMM0 = _mm_srli_si128( m_XMM0, 4 ); - - resultL += _mm_cvtsi128_si32( m_XMM0 ); /* 2nd 32bits */ - - m_XMM0 = _mm_srli_si128( m_XMM0, 4 ); - - resultL += _mm_cvtsi128_si32( m_XMM0 ); /* 3rd 32bits */ - - m_XMM0 = _mm_srli_si128( m_XMM0, 4 ); - - resultL += _mm_cvtsi128_si32( m_XMM0 ); /* 4th 32bits */ - } - - - switch( alignOffSetL ) - { - case 15: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 14: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 13: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 12: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 11: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 10: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 9: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 8: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 7: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 6: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 5: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 4: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 3: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 2: - resultL += ( int32 )*vec1L++ * *vec2L++; - case 1: - resultL += ( int32 )*vec1L++ * *vec2L++; - } - - return resultL; -} - -/* ------------------------------------------------------------------------- */ - -#endif /* HW_SSE2 */ diff --git a/Embedded/common/src/b_BasicEm/MemSeg.c b/Embedded/common/src/b_BasicEm/MemSeg.c deleted file mode 100644 index 2fa509e..0000000 --- a/Embedded/common/src/b_BasicEm/MemSeg.c +++ /dev/null @@ -1,415 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/MemSeg.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Context.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_MemSeg_init( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA ) -{ - ptrA->memPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocIndexE = 0; - ptrA->sharedE = FALSE; - ptrA->idE = 0; - ptrA->dynMemManagerPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_MemSeg_exit( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA ) -{ - ptrA->memPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocIndexE = 0; - ptrA->sharedE = FALSE; - ptrA->idE = 0; - ptrA->dynMemManagerPtrE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_MemSeg_availableSize( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ) -{ - if( ptrA->dynMemManagerPtrE == NULL ) - { - return ( ptrA->sizeE == ptrA->allocIndexE ) ? 0 : ptrA->sizeE - ptrA->allocIndexE - 2 * ptrA->sharedE; - } - else - { - return 0xFFFFFFFF; - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_MemSeg_allocatedSize( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ) -{ - if( ptrA->dynMemManagerPtrE == NULL ) - { - return ptrA->allocIndexE; - } - else - { - return bbs_DynMemManager_allocatedSize( cpA, ptrA->dynMemManagerPtrE ); - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_MemSeg_usedSize( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ) -{ - if( ptrA->dynMemManagerPtrE == NULL ) - { - if( ptrA->sharedE ) - { - return ptrA->allocIndexE; - } - else - { - uint32 indexL = 0; - uint32 countL = 0; - while( indexL < ptrA->allocIndexE ) - { - uint32 sizeL = *( uint32* )( ptrA->memPtrE + indexL ); - indexL += ( sizeL & 0xFFFFFFFE ); - if( ( sizeL & 1 ) == 0 ) - { - countL += sizeL - 2; - } - } - return countL; - } - } - else - { - return bbs_MemSeg_allocatedSize( cpA, ptrA ); - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_MemSeg_blocks( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ) -{ - uint32 indexL = 0; - uint32 countL = 0; - - if( ptrA->sharedE ) return 0; - - while( indexL < ptrA->allocIndexE ) - { - uint32 sizeL = *( uint32* )( ptrA->memPtrE + indexL ); - indexL += ( sizeL & 0xFFFFFFFE ); - countL++; - } - return countL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_MemSeg_usedBlocks( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ) -{ - uint32 indexL = 0; - uint32 countL = 0; - - if( ptrA->sharedE ) return 0; - - while( indexL < ptrA->allocIndexE ) - { - uint32 sizeL = *( uint32* )( ptrA->memPtrE + indexL ); - indexL += ( sizeL & 0xFFFFFFFE ); - countL += ( ( sizeL & 1 ) == 0 ); - } - return countL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg bbs_MemSeg_create( struct bbs_Context* cpA, - void* memPtrA, uint32 sizeA ) -{ - struct bbs_MemSeg memSegL; - memSegL.memPtrE = ( uint16* )memPtrA; - memSegL.sizeE = sizeA & 0xFFFFFFFE; /* enforce even size to avoid overflow problems */ - memSegL.allocIndexE = 0; - memSegL.sharedE = FALSE; - memSegL.idE = 0; - memSegL.dynMemManagerPtrE = NULL; - return memSegL; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg bbs_MemSeg_createShared( struct bbs_Context* cpA, - void* memPtrA, uint32 sizeA ) -{ - struct bbs_MemSeg memSegL; - memSegL.memPtrE = ( uint16* )memPtrA; - memSegL.sizeE = sizeA; - memSegL.allocIndexE = 0; - memSegL.sharedE = TRUE; - memSegL.idE = 0; - memSegL.dynMemManagerPtrE = NULL; - return memSegL; -} - -/* ------------------------------------------------------------------------- */ - -void* bbs_MemSeg_alloc( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA, - uint32 sizeA ) -{ - uint16* memPtrL = NULL; - - if( bbs_Context_error( cpA ) ) return NULL; - - if( !ptrA->sharedE ) - { - if( ptrA->dynMemManagerPtrE == NULL ) - { - uint32 effSizeL = sizeA + ( sizeA & 1 ) + 2; /* effective block size */ - memPtrL = ptrA->memPtrE + ptrA->allocIndexE; - *( ( uint32* )memPtrL ) = effSizeL; - memPtrL += 2; - if( ptrA->allocIndexE + effSizeL > ptrA->sizeE ) - { - bbs_ERR2( bbs_ERR_MEMORY_OVERFLOW, - "uint16* bbs_MemSeg_alloc( struct bbs_MemSeg* ptrA, uint32 sizeA ):\n" - "Exclusive Memory overflow. Segment size: %i. Requested size: %i", ptrA->sizeE, sizeA ); - return NULL; - } - ptrA->allocIndexE += effSizeL; - } - else - { - memPtrL = bbs_DynMemManager_alloc( cpA, ptrA->dynMemManagerPtrE, ptrA, sizeA ); - } - } - else - { - uint32 effSizeL = sizeA + ( sizeA & 1 ); /* effective block size */ - - if( ptrA->allocIndexE + effSizeL > ptrA->sizeE + ( ptrA->sizeE & 1 ) ) - { - if( ptrA->dynMemManagerPtrE == NULL ) - { - bbs_ERR2( bbs_ERR_MEMORY_OVERFLOW, - "uint16* bbs_MemSeg_alloc( struct bbs_MemSeg* ptrA, uint32 sizeA ):\n" - "Shared Memory overflow. Segment size: %i. Requested size: %i", ptrA->sizeE, sizeA ); - return NULL; - } - else - { - uint32 actualBlockSizeL = 0; - ptrA->memPtrE = bbs_DynMemManager_nextBlock( cpA, ptrA->dynMemManagerPtrE, ptrA, ptrA->memPtrE, effSizeL, &actualBlockSizeL ); - ptrA->sizeE = actualBlockSizeL; - ptrA->allocIndexE = 0; - } - } - - memPtrL = ptrA->memPtrE + ptrA->allocIndexE; - ptrA->allocIndexE += effSizeL; - } - - #if defined( HW_TMS320C5x ) - #ifdef DEBUG2 - { - /* check if segment crosses page boundary */ - if( ( ( ( uint32 ) ptrA->memPtrE ) >> 16 ) != - ( ( ( uint32 ) ptrA->memPtrE + ( ptrA->sizeE - 1 ) ) >> 16 ) ) - { - bbs_ERROR0( "uint16* bbs_MemSeg_alloc( struct bbs_MemSeg* ptrA, uint32 sizeA ):\nSegment crosses page boundary\n" ); - return NULL; - } - } - #endif - #endif - - return memPtrL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_MemSeg_free( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA, - void* memPtrA ) -{ - bbs_DEF_fNameL( "void bbs_MemSeg_free( struct bbs_MemSeg* ptrA, void* memPtrA )" ) - - if( bbs_Context_error( cpA ) ) return; - - /** only valid exclusive segments can be freed */ - if( ptrA == NULL || memPtrA == NULL || ptrA->sharedE ) return; - - if( ptrA->dynMemManagerPtrE != NULL ) - { - bbs_DynMemManager_free( cpA, ptrA->dynMemManagerPtrE, memPtrA ); - } - else - { - uint32 indexL, sizeL; - uint16* memPtrL; - - if( ptrA == NULL || memPtrA == NULL ) return; - if( ptrA->sharedE ) return; - - #ifdef HW_TMS320C5x - indexL = ( uint32 ) memPtrA - ( uint32 ) ptrA->memPtrE - 2; - #else - indexL = ( uint16* )memPtrA - ptrA->memPtrE - 2; - #endif - - memPtrL = ptrA->memPtrE + indexL; - sizeL = *( ( int32* )memPtrL ); - - /* checks */ - if( indexL > ptrA->allocIndexE || ( indexL & 1 ) != 0 ) - { - bbs_ERROR4( "%s\n: Invalid memory.\n" - "sizeE = %i\n" - "allocIndexE = %i\n" - "indexL = %i\n", - fNameL, - ptrA->sizeE, - ptrA->allocIndexE, - indexL ); - return; - } - - if( ( sizeL & 1 ) != 0 ) - { - bbs_ERROR1( "%s\n: Memory block was already freed once", fNameL ); - return; - } - - *( ( uint32* )memPtrL ) += 1; /* odd size value indicates unused memory block */ - - /* free last unused blocks if any */ - if( indexL + sizeL == ptrA->allocIndexE ) - { - uint32 newAllocIndexL = 0; - indexL = 0; - while( indexL < ptrA->allocIndexE ) - { - uint32 sizeL = *( uint32* )( ptrA->memPtrE + indexL ); - indexL += ( sizeL & 0xFFFFFFFE ); - if( ( sizeL & 1 ) == 0 ) - { - newAllocIndexL = indexL; - } - } - - ptrA->allocIndexE = newAllocIndexL; - } - - #ifdef DEBUG2 - bbs_MemSeg_checkConsistency( cpA, ptrA ); - #endif - - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_MemSeg_checkConsistency( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ) -{ - uint32 indexL = 0; - - if( ptrA->sharedE ) return; - - while( indexL < ptrA->allocIndexE ) - { - uint32 sizeL = *( uint32* )( ptrA->memPtrE + indexL ); - indexL += ( sizeL & 0xFFFFFFFE ); - } - - if( indexL != ptrA->allocIndexE ) - { - bbs_ERROR0( "Memory consistency check failed" ); - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_BasicEm/MemSeg.h b/Embedded/common/src/b_BasicEm/MemSeg.h deleted file mode 100644 index cf309c9..0000000 --- a/Embedded/common/src/b_BasicEm/MemSeg.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_MEM_SEG_EM_H -#define bbs_MEM_SEG_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/DynMemManager.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bbs_Context; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* overhead memory needed for each memory block allocated (exclusive memory only) */ -#define bbs_MEM_BLOCK_OVERHD 2 - -/* Segment IDs */ -#define bbs_SEG_DEFAULT 0 - -#if defined( HW_TMS320C5x ) || defined( HW_MeP ) || defined( bbs_MEP_MEM_CONFIG ) - #define bbs_SEG_DA 1 - #define bbs_SEG_DA_ALT 2 - #define bbs_SEG_SA 3 - #define bbs_SEG_SA_ALT 4 - #define bbs_SEG_EXT 5 - #define bbs_SEG_EXT_ALT 6 -#elif defined ( bbs_KD_MEM_CONFIG ) || defined ( HW_KD_EASYSHARE ) -/* on-chip optimization for Kodak Easyshare project */ - #define bbs_SEG_DA 1 /* = internal RAM segment */ - #define bbs_SEG_DA_ALT 0 - #define bbs_SEG_SA 0 - #define bbs_SEG_SA_ALT 0 - #define bbs_SEG_EXT 0 - #define bbs_SEG_EXT_ALT 0 -#endif - -/* ---- object definition -------------------------------------------------- */ - -/** Descriptor of a coherent memory segment available for memory management. - * How management works - * - Memory is arranged in blocks - * - Each block refers to a single call of function alloc() - * - Each block is aligned at 32bit - * - The size of each block is even (32bit aligned size) - * Uique (non-shared) segments: - * - Each block has a preceding 32 bit value indication its length - * - Function free() marks the corresponding block 'unused' and - * removes subsequently any unused block at the last position of allocated memory - * Shared segments: - * - No write access to memory block by function alloc() - * - Function free has no effect - * Identifier: - * - Each segment contains an ID. The segment with the ID 0 is the default segment. - */ -struct bbs_MemSeg -{ - /* all member variables are considered read only. Only change them through functions */ - - /** pointer to memory */ - uint16* memPtrE; - - /** size of memory segment in 16 bit units */ - uint32 sizeE; - - /** current allocation index in 16 bit units (index is always even -> 32 bit alignment enforced) */ - uint32 allocIndexE; - - /** Indicates that this isegment is to be shared among multiple objects */ - flag sharedE; - - /** ID of segment, id=0: unspecified */ - uint32 idE; - - /** pointer to external memory manager */ - struct bbs_DynMemManager* dynMemManagerPtrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_MemSeg */ -void bbs_MemSeg_init( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA ); - -/** resets bbs_MemSeg */ -void bbs_MemSeg_exit( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns available 16bit units of memeory in given segment; (allocation is always 32 bit aligned) */ -uint32 bbs_MemSeg_availableSize( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ); - -/** returns currently allocated size in 16bit units of memeory in given segment */ -uint32 bbs_MemSeg_allocatedSize( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ); - -/** returns effectively used memory amount allocated size - unused blocks - overhead */ -uint32 bbs_MemSeg_usedSize( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ); - -/** counts amount of memory blocks allocated */ -uint32 bbs_MemSeg_blocks( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ); - -/** counts amount of memory blocks currently used */ -uint32 bbs_MemSeg_usedBlocks( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** creation of a exclusive memory segment; memPtrA must be 32-bit aligned */ -struct bbs_MemSeg bbs_MemSeg_create( struct bbs_Context* cpA, - void* memPtrA, - uint32 sizeA ); - -/** creation of a shared memory segment; memPtrA must be 32-bit aligned */ -struct bbs_MemSeg bbs_MemSeg_createShared( struct bbs_Context* cpA, - void* memPtrA, - uint32 sizeA ); - -/** allocation of memory (very fast); sizeA specifies number of 16bit units; (allocation is always 32 bit aligned) */ -void* bbs_MemSeg_alloc( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA, - uint32 sizeA ); - -/** Frees allocated memory - * If segment is shared, ptrA == NULL or memPtrA == NULL, nothing happens - */ -void bbs_MemSeg_free( struct bbs_Context* cpA, - struct bbs_MemSeg* ptrA, - void* memPtrA ); - -/** checks consistency of memory */ -void bbs_MemSeg_checkConsistency( struct bbs_Context* cpA, - const struct bbs_MemSeg* ptrA ); - -#endif /* bbs_MEM_SEG_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/MemTbl.c b/Embedded/common/src/b_BasicEm/MemTbl.c deleted file mode 100644 index 2555bd1..0000000 --- a/Embedded/common/src/b_BasicEm/MemTbl.c +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -flag bbs_MemTbl_memOverlap( const uint16* memPtr1A, uint32 size1A, - const uint16* memPtr2A, uint32 size2A ) -{ - int32 diffL = memPtr2A - memPtr1A; - if( diffL >= 0 && diffL < ( int32 )size1A ) return TRUE; - diffL += ( int32 )size2A; - if( diffL >= 0 && diffL < ( int32 )size1A ) return TRUE; - return FALSE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_MemTbl_init( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ) -{ - uint32 iL; - for( iL = 0; iL < bbs_MAX_MEM_SEGS; iL++ ) - { - bbs_MemSeg_init( cpA, &ptrA->esArrE[ iL ] ); - bbs_MemSeg_init( cpA, &ptrA->ssArrE[ iL ] ); - ptrA->espArrE[ iL ] = NULL; - } - ptrA->esSizeE = 0; - ptrA->ssSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_MemTbl_exit( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ) -{ - uint32 iL; - for( iL = 0; iL < bbs_MAX_MEM_SEGS; iL++ ) - { - bbs_MemSeg_exit( cpA, &ptrA->esArrE[ iL ] ); - bbs_MemSeg_exit( cpA, &ptrA->ssArrE[ iL ] ); - ptrA->espArrE[ iL ] = NULL; - } - ptrA->esSizeE = 0; - ptrA->ssSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -flag bbs_MemTbl_overlap( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - const void* memPtrA, uint32 sizeA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->esSizeE; iL++ ) - { - if( bbs_MemTbl_memOverlap( ptrA->espArrE[ iL ]->memPtrE, - ptrA->espArrE[ iL ]->sizeE, - memPtrA, sizeA ) ) - { - return TRUE; - } - } - - for( iL = 0; iL < ptrA->ssSizeE; iL++ ) - { - if( bbs_MemTbl_memOverlap( ptrA->ssArrE[ iL ].memPtrE, - ptrA->ssArrE[ iL ].sizeE, - memPtrA, sizeA ) ) - { - return TRUE; - } - } - - return FALSE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_MemTbl_create( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - void* memPtrA, - uint32 sizeA, - uint32 sharedSubSizeA ) -{ - if( sharedSubSizeA > sizeA ) - { - bbs_ERROR0( "struct bbs_MemTbl bbs_MemTbl_create( void* memPtrA, uint32 sizeA, uint32 sharedSubSizeA ):\n" - "sharedSubSizeA > sizeA" ); - return; - } - bbs_MemTbl_init( cpA, ptrA ); - - - ptrA->esArrE[ 0 ] = bbs_MemSeg_create( cpA, memPtrA, sizeA - sharedSubSizeA ); - #ifdef HW_TMS320C5x - ptrA->ssArrE[ 0 ] = bbs_MemSeg_createShared( cpA, ( uint16* ) ( ( int32 ) ( ( uint16* )memPtrA ) + sizeA - sharedSubSizeA ), sharedSubSizeA ); - #else - ptrA->ssArrE[ 0 ] = bbs_MemSeg_createShared( cpA, ( uint16* )memPtrA + sizeA - sharedSubSizeA, sharedSubSizeA ); - #endif - ptrA->espArrE[ 0 ] = &ptrA->esArrE[ 0 ]; - - ptrA->esSizeE = 1; - ptrA->ssSizeE = 1; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_MemTbl_add( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - void* memPtrA, - uint32 sizeA, - uint32 idA ) -{ - if( ptrA->esSizeE == bbs_MAX_MEM_SEGS ) - { - bbs_ERROR0( "void bbs_MemTbl_add( struct bbs_MemTbl* ptrA, void* memPtrA, uint32 sizeA ):\n" - "Table is full! Increase constant bbs_MAX_MEM_SEGS" ); - return; - } - ptrA->esArrE[ ptrA->esSizeE ] = bbs_MemSeg_create( cpA, memPtrA, sizeA ); - ptrA->esArrE[ ptrA->esSizeE ].idE = idA; - ptrA->espArrE[ ptrA->esSizeE ] = &ptrA->esArrE[ ptrA->esSizeE ]; - ptrA->esSizeE++; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_MemTbl_addShared( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - void* memPtrA, - uint32 sizeA, - uint32 idA ) -{ - if( ptrA->ssSizeE == bbs_MAX_MEM_SEGS ) - { - bbs_ERROR0( "void bbs_MemTbl_addShared( struct bbs_MemTbl* ptrA, void* memPtrA, uint32 sizeA ):\n" - "Table is full! Increase constant bbs_MAX_MEM_SEGS" ); - return; - } - ptrA->ssArrE[ ptrA->ssSizeE ] = bbs_MemSeg_createShared( cpA, memPtrA, sizeA ); - ptrA->ssArrE[ ptrA->ssSizeE ].idE = idA; - ptrA->ssSizeE++; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg* bbs_MemTbl_segPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 idA ) -{ - uint32 iL; - if( ptrA->esSizeE == 0 ) - { - bbs_ERROR0( "bbs_MemTbl_segPtr(): Table contains no exclusive segments." ); - return NULL; - } - if( idA > 0 ) - { - for( iL = 0; iL < ptrA->esSizeE; iL++ ) - { - if( idA == ptrA->espArrE[ iL ]->idE ) return ptrA->espArrE[ iL ]; - } - } - for( iL = 0; iL < ptrA->esSizeE; iL++ ) - { - if( ptrA->espArrE[ iL ]->sizeE > 0 || - ptrA->espArrE[ iL ]->dynMemManagerPtrE != 0 ) - { - return ptrA->espArrE[ iL ]; - } - } - bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW, - "bbs_MemTbl_segPtr(): Table contains no valid exclusive segments." ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg* bbs_MemTbl_sharedSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 idA ) -{ - uint32 iL; - if( ptrA->ssSizeE == 0 ) - { - bbs_ERROR0( "bbs_MemTbl_sharedSegPtr(): Table contains no shared segments." ); - return NULL; - } - if( idA > 0 ) - { - for( iL = 0; iL < ptrA->ssSizeE; iL++ ) - { - if( idA == ptrA->ssArrE[ iL ].idE ) return &ptrA->ssArrE[ iL ]; - } - } - for( iL = 0; iL < ptrA->ssSizeE; iL++ ) - { - if( ptrA->ssArrE[ iL ].sizeE > 0 || - ptrA->ssArrE[ iL ].dynMemManagerPtrE != 0 ) - { - return &ptrA->ssArrE[ iL ]; - } - } - bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW, - "bbs_MemTbl_sharedSegPtr(): Table contains no valid shared segments." ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 minSizeA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->esSizeE; iL++ ) - { - if( bbs_MemSeg_availableSize( cpA, ptrA->espArrE[ iL ] ) >= minSizeA ) break; - } - if( iL == ptrA->esSizeE ) - { - if( ptrA->esSizeE == 0 ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n" - "Table contains no exclusive segments" ); - return NULL; - } - else - { - bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW, - "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n" - "Could not find segment with sufficient free space" ); - return NULL; - } - } - if( ptrA->espArrE[ iL ]->sharedE ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n" - "Table corrupt: Found shared segment in exclusive table" ); - return NULL; - } - - return ptrA->espArrE[ iL ]; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg* bbs_MemTbl_largestSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ) -{ - uint32 iL; - uint32 maxIndexL = 0; - uint32 maxSizeL = 0; - - if( ptrA->esSizeE == 0 ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSegPtr( struct bbs_MemTbl* ptrA ):\n" - "No exclusive segments available" ); - return NULL; - } - - for( iL = 0; iL < ptrA->esSizeE; iL++ ) - { - uint32 sizeL = bbs_MemSeg_availableSize( cpA, ptrA->espArrE[ iL ] ); - if( sizeL > maxSizeL ) - { - maxSizeL = sizeL; - maxIndexL = iL; - } - } - - if( ptrA->espArrE[ maxIndexL ]->sharedE ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSegPtr( struct bbs_MemTbl* ptrA ):\n" - "Table corrupt: Found shared segment in exclusive table" ); - return NULL; - } - - return ptrA->espArrE[ maxIndexL ]; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg* bbs_MemTbl_fastestSharedSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 minSizeA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->ssSizeE; iL++ ) - { - if( bbs_MemSeg_availableSize( cpA, &ptrA->ssArrE[ iL ] ) >= minSizeA ) break; - } - if( iL == ptrA->ssSizeE ) - { - if( ptrA->esSizeE == 0 ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n" - "Table contains no shared segments" ); - return NULL; - } - else - { - bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW, - "struct bbs_MemSeg* bbs_MemTbl_fastestSharedSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n" - "Could not find segment with sufficient free space" ); - return NULL; - } - } - if( !ptrA->ssArrE[ iL ].sharedE ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSharedSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n" - "Table corrupt: Found exclusive segment in shared table" ); - return NULL; - } - - return &ptrA->ssArrE[ iL ]; -} - -/* ------------------------------------------------------------------------- */ - -struct bbs_MemSeg* bbs_MemTbl_largestSharedSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ) -{ - uint32 iL; - uint32 maxIndexL = 0; - uint32 maxSizeL = 0; - - if( ptrA->ssSizeE == 0 ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSharedSegPtr( struct bbs_MemTbl* ptrA ):\n" - "No shared segments available" ); - return NULL; - } - - for( iL = 0; iL < ptrA->ssSizeE; iL++ ) - { - uint32 sizeL = bbs_MemSeg_availableSize( cpA, &ptrA->ssArrE[ iL ] ); - if( sizeL > maxSizeL ) - { - maxSizeL = sizeL; - maxIndexL = iL; - } - } - - if( !ptrA->ssArrE[ maxIndexL ].sharedE ) - { - bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSharedSegPtr( struct bbs_MemTbl* ptrA ):\n" - "Table corrupt: Found exclusive segment in shared table" ); - return NULL; - } - - return &ptrA->ssArrE[ maxIndexL ]; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/MemTbl.h b/Embedded/common/src/b_BasicEm/MemTbl.h deleted file mode 100644 index 9364af3..0000000 --- a/Embedded/common/src/b_BasicEm/MemTbl.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_MEM_TBL_EM_H -#define bbs_MEM_TBL_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/MemSeg.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bbs_Context; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* maximum number of exclusive and shared memory segments used, increase this number if needed */ -#define bbs_MAX_MEM_SEGS 4 - -/* ---- object definition -------------------------------------------------- */ - -/** Descriptor of a set of memory segments - * The first segment in each array (exclusive and shared) with a size > 0 is - * the default segment. - */ -struct bbs_MemTbl -{ - /* number of exclusive memory segments */ - uint32 esSizeE; - - /** array of exclusive memory segments (for initialisation purposes only ) */ - struct bbs_MemSeg esArrE[ bbs_MAX_MEM_SEGS ]; - - /** array of pointer to exclusive memory segments */ - struct bbs_MemSeg* espArrE[ bbs_MAX_MEM_SEGS ]; - - /* number of shared memory segments */ - uint32 ssSizeE; - - /** array of shared memory segments */ - struct bbs_MemSeg ssArrE[ bbs_MAX_MEM_SEGS ]; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_MemTbl */ -void bbs_MemTbl_init( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ); - -/** resets bbs_MemTbl */ -void bbs_MemTbl_exit( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* indicates whether memory segment overalps with any segment in memory table */ -flag bbs_MemTbl_overlap( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - const void* memPtrA, uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** creates a memory table with one exclusive and one shared segment from a coherent memory block */ -void bbs_MemTbl_create( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - void* memPtrA, - uint32 sizeA, - uint32 sharedSubSizeA ); - -/** adds new exclusive segment to table ( default segment must be added first ) */ -void bbs_MemTbl_add( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - void* memPtrA, - uint32 sizeA, - uint32 idA ); - -/** adds new shared segment to table ( default segment must be added first ) */ -void bbs_MemTbl_addShared( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - void* memPtrA, - uint32 sizeA, - uint32 idA ); - -/** returns specified segment. If specified segment is not found the default segment is returned */ -struct bbs_MemSeg* bbs_MemTbl_segPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 idA ); - -struct bbs_MemSeg* bbs_MemTbl_sharedSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 idA ); - -/* Search functions below are obsolete. Please use bbs_MemTbl_segPtr or bbs_MemTbl_sharedSegPtr instead. */ - -/** returns pointer to fastest exclusive segment that has at least minSizeA words available */ -struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 minSizeA ); - -/** returns pointer to exclusive segment that has most words available */ -struct bbs_MemSeg* bbs_MemTbl_largestSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ); - -/** returns fastest shared segment that has at least minSizeA words available */ -struct bbs_MemSeg* bbs_MemTbl_fastestSharedSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA, - uint32 minSizeA ); - -/** returns shared segment that has most words available */ -struct bbs_MemSeg* bbs_MemTbl_largestSharedSegPtr( struct bbs_Context* cpA, - struct bbs_MemTbl* ptrA ); - -#endif /* bbs_MEM_TBL_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Memory.c b/Embedded/common/src/b_BasicEm/Memory.c deleted file mode 100644 index d3b965d..0000000 --- a/Embedded/common/src/b_BasicEm/Memory.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Functions.h" -/* -#include <string.h> -*/ -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* -void* bbs_memcpy( void* dstA, const void* srcA, uint32 sizeA ) -{ - if( sizeA & 1 ) - { - bbs_ERROR0( "bbs_memcpy( .... ): sizeA must be even" ); - return NULL; - } - return bbs_memcpy16( dstA, srcA, sizeA >> 1 ); -} -*/ -/* ------------------------------------------------------------------------- */ - -void* bbs_memcpy16( void* dstA, const void* srcA, uint32 sizeA ) -{ -#ifdef HW_TMS320C5x - if( ( ( int32 ) dstA >> 16 ) == ( ( ( int32 ) dstA + sizeA ) >> 16 ) && - ( ( int32 ) srcA >> 16 ) == ( ( ( int32 ) srcA + sizeA ) >> 16 ) ) - { - /* fast version, works only if pointers do not cross page boundary. */ - uint16* dstL = ( uint16* )dstA; - const uint16* srcL = ( uint16* )srcA; - uint16 iL; - for( iL = sizeA; iL--; ) - { - *dstL++ = *srcL++; - } - } - else - { - /* safe version */ - uint32 iL; - for( iL = 0; iL < sizeA; iL++ ) - { - *( uint16* ) ( ( int32 ) dstA + iL ) = *( uint16* ) ( ( int32 ) srcA + iL ); - } - } - return dstA; -#else - uint16* dstL = ( uint16* )dstA; - const uint16* srcL = ( uint16* )srcA; - - for( ; sizeA >= 4; sizeA -= 4 ) - { - dstL[ 0 ] = srcL[ 0 ]; - dstL[ 1 ] = srcL[ 1 ]; - dstL[ 2 ] = srcL[ 2 ]; - dstL[ 3 ] = srcL[ 3 ]; - dstL += 4; - srcL += 4; - } - - for( ; sizeA > 0; sizeA-- ) - { - *dstL++ = *srcL++; - } - - return dstA; -#endif -} - -/* ------------------------------------------------------------------------- */ - -void* bbs_memcpy32( void* dstA, const void* srcA, uint32 sizeA ) -{ -#ifdef HW_TMS320C5x - if( ( ( int32 ) dstA >> 16 ) == ( ( ( int32 ) dstA + ( sizeA << 1 ) ) >> 16 ) && - ( ( int32 ) srcA >> 16 ) == ( ( ( int32 ) srcA + ( sizeA << 1 ) ) >> 16 ) ) - { - /* fast version, works only if pointers do not cross page boundary. */ - uint32* dstL = ( uint32* )dstA; - const uint32* srcL = ( uint32* )srcA; - uint16 iL; - for( iL = sizeA; iL--; ) - { - *dstL++ = *srcL++; - } - } - else - { - /* safe version */ - uint32 iL; - sizeA <<= 1; - for( iL = 0; iL < sizeA; iL += 2 ) - { - *( uint32* ) ( ( int32 ) dstA + iL ) = *( uint32* ) ( ( int32 ) srcA + iL ); - } - } - return dstA; -/* - uint16* dstL = ( uint16* )dstA; - const uint16* srcL = ( uint16* )srcA; - - // copying with base object-size of 16bit - // is more efficient on 16 bit architecture - sizeA <<= 1; - - for( ; sizeA >= 4; sizeA -= 4 ) - { - dstL[ 0 ] = srcL[ 0 ]; - dstL[ 1 ] = srcL[ 1 ]; - dstL[ 2 ] = srcL[ 2 ]; - dstL[ 3 ] = srcL[ 3 ]; - dstL += 4; - srcL += 4; - } - - for( ; sizeA > 0; sizeA-- ) - { - *dstL++ = *srcL++; - } - - return dstA; -*/ -#else /* 32bit architectures */ - - uint32* dstL = ( uint32* )dstA; - const uint32* srcL = ( uint32* )srcA; - - for( ; sizeA >= 4; sizeA -= 4 ) - { - dstL[ 0 ] = srcL[ 0 ]; - dstL[ 1 ] = srcL[ 1 ]; - dstL[ 2 ] = srcL[ 2 ]; - dstL[ 3 ] = srcL[ 3 ]; - dstL += 4; - srcL += 4; - } - - for( ; sizeA > 0; sizeA-- ) - { - *dstL++ = *srcL++; - } - - return dstA; - -#endif -} - -/* ------------------------------------------------------------------------- */ - -void* bbs_memset16( void* dstA, uint16 valA, uint32 sizeA ) -{ - uint32 iL; - uint16* dstL = ( uint16* )dstA; - /* to be optimized */ - for( iL = 0; iL < sizeA; iL++ ) - { - *dstL++ = valA; - } - return dstA; -} - -/* ------------------------------------------------------------------------- */ - -void* bbs_memset32( void* dstA, uint32 valA, uint32 sizeA ) -{ - uint32 iL; - uint32* dstL = ( uint32* )dstA; - /* to be optimized */ - for( iL = 0; iL < sizeA; iL++ ) - { - *dstL++ = valA; - } - return dstA; -} - -/* ------------------------------------------------------------------------- */ - diff --git a/Embedded/common/src/b_BasicEm/Memory.h b/Embedded/common/src/b_BasicEm/Memory.h deleted file mode 100644 index b533a25..0000000 --- a/Embedded/common/src/b_BasicEm/Memory.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_MEMORY_EM_H -#define bbs_MEMORY_EM_H - -/** - * This files contains memory related functions. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/** copies memory for src to dst (no overlap allowed); returns dstA - * src & dst data must be 16 bit aligned - */ -/* void* bbs_memcpy( void* dstA, const void* srcA, uint32 sizeA ); */ - -/** copies memory for src to dst (no overlap allowed), size is given in 16-bit words - * src & dst data must be 16 bit aligned - * returns dstA - */ -void* bbs_memcpy16( void* dstA, const void* srcA, uint32 sizeA ); - -/** copies memory for src to dst (no overlap allowed), size is given in 32-bit words - * src & dst data must be 32 bit aligned - * returns dstA - */ -void* bbs_memcpy32( void* dstA, const void* srcA, uint32 sizeA ); - -/** fills memory with a value, size is given in 16-bit words - * dst data must be 16 bit aligned - * returns dstA - */ -void* bbs_memset16( void* dstA, uint16 valA, uint32 sizeA ); - -/** fills memory with a value, size is given in 32-bit words - * dst data must be 32 bit aligned - * returns dstA - */ -void* bbs_memset32( void* dstA, uint32 valA, uint32 sizeA ); - -#endif /* bbs_MEMORY_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/Phase.c b/Embedded/common/src/b_BasicEm/Phase.c deleted file mode 100644 index 6fdbd35..0000000 --- a/Embedded/common/src/b_BasicEm/Phase.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Phase.h" -#include "b_BasicEm/Math.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -#ifndef bbs_SIN_INTERPOLATION_METHOD_2 -const int32 bbs_sin32_table1G[] = -{ - 0, 1608, 411648, 1607, 823040, 1606, 1234176, 1602, - 1644288, 1599, 2053632, 1594, 2461696, 1588, 2868224, 1581, - 3272960, 1574, 3675904, 1564, 4076288, 1556, 4474624, 1545, - 4870144, 1533, 5262592, 1521, 5651968, 1508, 6038016, 1493, - 6420224, 1478, 6798592, 1463, 7173120, 1445, 7543040, 1428, - 7908608, 1409, 8269312, 1390, 8625152, 1369, 8975616, 1348, - 9320704, 1327, 9660416, 1303, 9993984, 1280, 10321664, 1256, - 10643200, 1231, 10958336, 1205, 11266816, 1178, 11568384, 1151, - 11863040, 1124, 12150784, 1094, 12430848, 1066, 12703744, 1036, - 12968960, 1005, 13226240, 974, 13475584, 942, 13716736, 910, - 13949696, 877, 14174208, 844, 14390272, 810, 14597632, 775, - 14796032, 741, 14985728, 705, 15166208, 670, 15337728, 634, - 15500032, 597, 15652864, 561, 15796480, 523, 15930368, 486, - 16054784, 448, 16169472, 409, 16274176, 372, 16369408, 333, - 16454656, 295, 16530176, 255, 16595456, 217, 16651008, 177, - 16696320, 138, 16731648, 99, 16756992, 59, 16772096, 20, - 16777216, -20, 16772096, -59, 16756992, -99, 16731648, -138, - 16696320, -177, 16651008, -217, 16595456, -255, 16530176, -295, - 16454656, -333, 16369408, -372, 16274176, -409, 16169472, -448, - 16054784, -486, 15930368, -523, 15796480, -561, 15652864, -597, - 15500032, -634, 15337728, -670, 15166208, -705, 14985728, -741, - 14796032, -775, 14597632, -810, 14390272, -844, 14174208, -877, - 13949696, -910, 13716736, -942, 13475584, -974, 13226240, -1005, - 12968960, -1036, 12703744, -1066, 12430848, -1094, 12150784, -1124, - 11863040, -1151, 11568384, -1178, 11266816, -1205, 10958336, -1231, - 10643200, -1256, 10321664, -1280, 9993984, -1303, 9660416, -1327, - 9320704, -1348, 8975616, -1369, 8625152, -1390, 8269312, -1409, - 7908608, -1428, 7543040, -1445, 7173120, -1463, 6798592, -1478, - 6420224, -1493, 6038016, -1508, 5651968, -1521, 5262592, -1533, - 4870144, -1545, 4474624, -1556, 4076288, -1564, 3675904, -1574, - 3272960, -1581, 2868224, -1588, 2461696, -1594, 2053632, -1599, - 1644288, -1602, 1234176, -1606, 823040, -1607, 411648, -1608 -}; -#else -const int32 bbs_sin32_table2G[] = -{ - 0, 12907, -122, - 209469440, 12662, -368, - 410894336, 11926, -596, - 596525056, 10733, -802, - 759234560, 9129, -978, - 892780544, 7168, -1112, - 992002048, 4939, -1210, - 1053097984, 2516, -1256, - 1073741824, -4, -1256, - 1053097984, -2519, -1210, - 992002048, -4944, -1112, - 892780544, -7173, -978, - 759234560, -9129, -802, - 596525056, -10734, -596, - 410894336, -11926, -368, - 209469440, -12663, -122 -}; -#endif - -int32 bbs_sin32( phase16 phaseA ) -{ -#ifndef bbs_SIN_INTERPOLATION_METHOD_2 - - int32 oL = ( phaseA & 0x00FF ); - uint16 indexL = ( ( phaseA & 0x7F00 ) >> 8 ) << 1; - int32 sinL = bbs_sin32_table1G[ indexL ] + oL * bbs_sin32_table1G[ indexL + 1 ]; - - if( ( phaseA & 0x8000 ) != 0 ) - { - return -sinL; - } - else - { - return sinL; - } - -#else /*bbs_SIN_INTERPOLATION_METHOD_2*/ - - int32 o1L = ( phaseA & 0x07FF ); - int32 o2L = ( o1L * o1L ) >> 8; - uint16 indexL = ( ( phaseA & 0x7800 ) >> 11 ) * 3; - int32 sinL = bbs_sin32_table2G[ indexL ] + ( ( o1L * bbs_sin32_table2G[ indexL + 1 ] ) << 3 ) + o2L * bbs_sin32_table2G[ indexL + 2 ]; - - if( ( phaseA & 0x8000 ) != 0 ) - { - return -sinL >> 6; - } - else - { - return sinL >> 6; - } - -#endif /*bbs_SIN_INTERPOLATION_METHOD_2*/ -} - -/** computation of sine tables (do not uncomment or remove) -void sin1Table() -{ - long iL; - for( iL = 0; iL < 128; iL++ ) - { - int32 phase1L = iL * 256; - int32 phase2L = phase1L + 256; - double angle1L = ( M_PI * phase1L ) / 32768; - double angle2L = ( M_PI * phase2L ) / 32768; - int32 sin1L = ( sin( angle1L ) * 65536 ); - int32 sin2L = ( sin( angle2L ) * 65536 ); - int32 diffL = sin2L - sin1L; - eout << iL << ": " << ( sin1L << 8 ) << " + oL * " << diffL << endl; - } -} - -void sin2Table() -{ - long iL; - for( iL = 0; iL < 16; iL++ ) - { - int32 p0L = iL * ( 1 << 11 ); - int32 p1L = p0L + ( 1 << 10 ); - int32 p2L = p0L + ( 1 << 11 ); - - double a0L = ( M_PI * p0L ) / ( 1 << 15 ); - double a1L = ( M_PI * p1L ) / ( 1 << 15 ); - double a2L = ( M_PI * p2L ) / ( 1 << 15 ); - - int32 s0L = ( sin( a0L ) * ( 1 << 16 ) ); - int32 s1L = ( sin( a1L ) * ( 1 << 16 ) ); - int32 s2L = ( sin( a2L ) * ( 1 << 16 ) ); - - int32 aL = 4 * s1L - 3 * s0L - s2L; - int32 bL = 2 * s2L + 2 * s0L - 4 * s1L; - - eout << iL << ": " << ( s0L << 14 ) << " + ( ( o1L * " << aL << " ) << 3 )" - << " + o2L * " << bL << endl; - } -} -*/ - -/* ------------------------------------------------------------------------- */ - -int32 bbs_cos32( phase16 phaseA ) -{ - return bbs_sin32( ( phase16 )( phaseA + bbs_M_PI_2_16 ) ); -} - -/* ------------------------------------------------------------------------- */ - -int16 bbs_sin16( phase16 phaseA ) -{ - return bbs_sin32( phaseA ) >> 10; -} - -/* ------------------------------------------------------------------------- */ - -int16 bbs_cos16( phase16 phaseA ) -{ - return bbs_sin32( ( phase16 )( phaseA + bbs_M_PI_2_16 ) ) >> 10; -} - -/* ------------------------------------------------------------------------- */ - -const int32 bbs_atan16_tableG[] = -{ - 0, 325, 332800, 326, 666624, 326, 1000448, 325, - 1333248, 324, 1665024, 323, 1995776, 323, 2326528, 322, - 2656256, 320, 2983936, 319, 3310592, 317, 3635200, 316, - 3958784, 314, 4280320, 312, 4599808, 310, 4917248, 308, - 5232640, 306, 5545984, 303, 5856256, 301, 6164480, 298, - 6469632, 296, 6772736, 292, 7071744, 291, 7369728, 287, - 7663616, 284, 7954432, 281, 8242176, 279, 8527872, 275, - 8809472, 272, 9088000, 269, 9363456, 265, 9634816, 263, - 9904128, 259, 10169344, 256, 10431488, 252, 10689536, 249, - 10944512, 246, 11196416, 243, 11445248, 239, 11689984, 236, - 11931648, 233, 12170240, 230, 12405760, 226, 12637184, 223, - 12865536, 219, 13089792, 217, 13312000, 213, 13530112, 210, - 13745152, 207, 13957120, 204, 14166016, 201, 14371840, 198, - 14574592, 195, 14774272, 192, 14970880, 189, 15164416, 186, - 15354880, 183, 15542272, 180, 15726592, 178, 15908864, 175, - 16088064, 172, 16264192, 169, 16437248, 167, 16608256, 165 -}; - -phase16 bbs_atan16( uint32 valA ) -{ - uint32 oL = valA & 0x03FF; - uint16 indexL = ( valA >> 10 ) << 1; - uint32 phaseL = bbs_atan16_tableG[ indexL ] + oL * bbs_atan16_tableG[ indexL + 1 ]; - return ( phase16 )( phaseL >> 11 ); -} - -/* ------------------------------------------------------------------------- */ - -phase16 bbs_phase16( int32 xA, int32 yA ) -{ - uint32 xL = ( xA > 0 ) ? xA : -xA; - uint32 yL = ( yA > 0 ) ? yA : -yA; - phase16 phaseL; - - if( xL == 0 && yL == 0 ) return 0; - - if( xL == yL ) - { - phaseL = bbs_M_PI_4_16; /*PI/4*/ - } - else if( xL > yL ) - { - if( yL >= 65536 ) /* avoid overflow (1 << 16) */ - { - uint32 shiftL = bbs_intLog2( yL ) - 15; - xL >>= shiftL; - yL >>= shiftL; - } - phaseL = bbs_atan16( ( yL << 16 ) / xL ); - } - else - { - if( xL >= 65536 ) /* avoid overflow (1 << 16) */ - { - uint32 shiftL = bbs_intLog2( xL ) - 15; - xL >>= shiftL; - yL >>= shiftL; - } - phaseL = bbs_M_PI_2_16 - bbs_atan16( ( xL << 16 ) / yL ); - } - - if( xA >= 0 ) - { - if( yA >= 0 ) - { - return phaseL; - } - else - { - return -phaseL; - } - } - else - { - if( yA >= 0 ) - { - return bbs_M_PI_16 - phaseL; - } - else - { - return phaseL - bbs_M_PI_16; - } - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/Phase.h b/Embedded/common/src/b_BasicEm/Phase.h deleted file mode 100644 index 901f260..0000000 --- a/Embedded/common/src/b_BasicEm/Phase.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_PHASE_EM_H -#define bbs_PHASE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -/** - * Phase data type. - * This data type represents a phase or angle value and takes advantage - * of the circular value range when doing arithmetig with an integer - * by ignoring overflow. - * The phase value range lies within [ - PI, PI [; - * The corresponding integer value range is [ MININT, MAXINT + 1 [. - * The phase data type is to be used whereever an angle is needed. - */ - -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** 8 bit phase value */ -typedef int8 phase8; - -/** 16 bit phase value */ -typedef int16 phase16; - -/** 32 bit phase value */ -typedef int32 phase32; - -/* ---- constants ---------------------------------------------------------- */ - -/** value PI in a phase16 expression */ -#define bbs_M_PI_16 32768 - -/** value PI/2 in a phase16 expression */ -#define bbs_M_PI_2_16 16384 - -/** value PI/4 in a phase16 expression */ -#define bbs_M_PI_4_16 8192 - -/** value PI in a phase8 expression */ -#define bbs_M_PI_8 128 - -/** value PI/2 in a phase8 expression */ -#define bbs_M_PI_2_8 64 - -/** value ( 32768 / PI ) in the format 14.1 */ -#define bbs_PHASE_MAX_BY_PI 20861 - -/** sine interpolation method */ -#define bbs_SIN_INTERPOLATION_METHOD_2 - -/* ---- object definition -------------------------------------------------- */ - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** - * Computes sine of a phase - * The return value has the format 8.24 - * The function approximates ( int32 )( sin( ( M_PI * phaseA ) / ( 1<<15 ) ) * ( 1<<24 ) ) - * Max error: 8.5E-5 (METHOD1); 7.0E-5 (METHOD2) - * Std error: 4.4E-5 (METHOD1); 3.2E-5 (METHOD2) - */ -int32 bbs_sin32( phase16 phaseA ); - -/** - * Computes cosine of a phase - * The return value has the format 8.24 - * The function approximates ( int32 )( cos( ( M_PI * phaseA ) / ( 1<<15 ) ) * ( 1<<24 ) ) - * Max error: 8.5E-5 (METHOD1); 7.0E-5 (METHOD2) - * Std error: 4.4E-5 (METHOD1); 3.2E-5 (METHOD2) - */ -int32 bbs_cos32( phase16 phaseA ); - -/** - * Computes sine of a phase - * The return value has the format 2.14 - * see sin32 for details - */ -int16 bbs_sin16( phase16 phaseA ); - -/** - * Computes cosine of a phase - * The return value has the format 2.14 - * see cos32 for details - */ -int16 bbs_cos16( phase16 phaseA ); - -/** - * Computes arcus tangens between [0,1[, where valA has the format 16.16 - * The function approximates ( int16 )( atan( double( valA ) / ( ( 1 << 16 ) ) / M_PI ) * ( 1 << 15 ) ) - * Max error: 5.1E-5 PI - * Std error: 2.7E-5 PI - */ -phase16 bbs_atan16( uint32 valA ); - -/** - * Computes phase from a 2d vector as angle enclosed between vector and (0,0). - * It is vec = ( cos( angle ), sin( angle ) ); - * Max error: 5.4E-5 PI - * Std error: 2.9E-5 PI - */ -phase16 bbs_phase16( int32 xA, int32 yA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -#endif /* bbs_PHASE_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/String.c b/Embedded/common/src/b_BasicEm/String.c deleted file mode 100644 index edd51e0..0000000 --- a/Embedded/common/src/b_BasicEm/String.c +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/String.h" -/* -#include <stdlib.h> -*/ - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -char* bbs_strcpy( char* dstA, const char* srcA ) -{ - const char* srcL = srcA; - char* dstL = dstA; - while( ( *dstL++ = *srcL++ ) != 0 ); - return dstA; -} - -/* ------------------------------------------------------------------------- */ - -char* bbs_strncpy( char* dstA, const char* srcA, uint32 sizeA ) -{ - uint32 iL; - for( iL = 0; iL < sizeA; iL++ ) - { - if( ( dstA[ iL ] = srcA[ iL ] ) == 0 ) break; - } - if( iL == sizeA && sizeA > 0 ) dstA[ iL - 1 ] = 0; - return dstA; -} - -/* ------------------------------------------------------------------------- */ - -char* bbs_strcat( char* dstA, const char* srcA ) -{ - const char* srcL = srcA; - char* dstL = dstA; - while( *dstL != 0 ) dstL++; - while( ( *dstL++ = *srcL++ ) != 0 ); - return dstA; -} - -/* ------------------------------------------------------------------------- */ - -char* bbs_strncat( char* dstA, const char* srcA, uint32 sizeA ) -{ - uint32 iL; - for( iL = 0; iL < sizeA; iL++ ) - { - if( dstA[ iL ] == 0 ) break; - } - - for( ; iL < sizeA; iL++ ) - { - if( ( dstA[ iL ] = srcA[ iL ] ) == 0 ) break; - } - - if( iL == sizeA && sizeA > 0 ) dstA[ iL - 1 ] = 0; - - return dstA; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_strlen( const char* strA ) -{ - uint32 iL = 0; - while( strA[ iL++ ] != 0 ); - return iL - 1; -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_strequal( const char* str1A, const char* str2A ) -{ - const char* str1L = str1A; - const char* str2L = str2A; - - if( str1L == NULL && str2L == NULL ) return TRUE; - if( str1L == NULL || str2L == NULL ) return FALSE; - - while( ( *str1L != 0 ) && ( *str2L != 0 ) ) - { - if( *str1L != *str2L ) break; - str1L++; - str2L++; - } - - return *str1L == *str2L; -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_strmatch( const char* str1A, const char* str2A ) -{ - const char* str1L = str1A; - const char* str2L = str2A; - - if( str1L == NULL || str2L == NULL ) return TRUE; - - while( ( *str1L != 0 ) && ( *str2L != 0 ) ) - { - if( *str1L != *str2L ) break; - str1L++; - str2L++; - } - - if( *str1L == 0 || *str2L == 0 ) return TRUE; - - return *str1L == *str2L; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_snprintf( char* bufA, uint32 bufSizeA, const char* formatA, ... ) -{ - uint32 sizeL; - va_list argsL; - va_start( argsL, formatA ); - sizeL = bbs_vsnprintf( bufA, bufSizeA, formatA, argsL ); - va_end( argsL ); - return sizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* converts number to string without 0 termination - returns number of characters written */ -uint32 bbs_cString( int32 valA, char* dstA, uint32 bufSizeA ) -{ - uint32 valL = ( valA < 0 ) ? -valA : valA; - uint32 iL = 0; - uint32 digitsL = 0; - if( valA < 0 ) - { - if( iL < bufSizeA ) dstA[ iL++ ] = '-'; - } - - /* count #digits */ - if( valL == 0 ) - { - iL++; - } - else - { - while( valL > 0 ) - { - iL++; - valL /= 10; - } - } - - digitsL = ( iL > bufSizeA ) ? bufSizeA : iL; - - valL = ( valA < 0 ) ? -valA : valA; - - if( valL == 0 ) - { - if( iL < bufSizeA ) dstA[ --iL ] = '0'; - } - else - { - while( valL > 0 ) - { - if( iL < bufSizeA ) dstA[ --iL ] = '0' + ( valL % 10 ); - valL /= 10; - } - } - - return digitsL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_vsnprintf( char* bufA, uint32 bufSizeA, const char* formatA, va_list argsA ) -{ - const char* fpL = formatA; - uint32 iL = 0; - - while( *fpL != 0 ) - { - if( *fpL == '%' ) - { - if( *( fpL + 1 ) == 'i' || *( fpL + 1 ) == 'd' ) - { - int valL = va_arg( argsA, int ); - if( iL < bufSizeA ) - { - iL += bbs_cString( valL, bufA + iL, bufSizeA - iL ); - } - fpL += 2; - } - else if( *( fpL + 1 ) == 's' ) - { - const char* stringL = va_arg( argsA, char* ); - if( iL < bufSizeA ) - { - bufA[ iL ] = 0; - bbs_strncat( bufA + iL, stringL, bufSizeA - iL ); - iL += bbs_strlen( stringL ); - } - fpL += 2; - } - else if( *( fpL + 1 ) == '%' ) - { - if( iL < bufSizeA ) bufA[ iL++ ] = '%'; - fpL++; - } - else - { - if( iL < bufSizeA ) bufA[ iL++ ] = *fpL; - fpL++; - } - } - else - { - if( iL < bufSizeA ) bufA[ iL++ ] = *fpL; - fpL++; - } - } - - if( iL < bufSizeA ) - { - bufA[ iL ] = 0; - } - else if( bufSizeA > 0 ) - { - bufA[ bufSizeA - 1 ] = 0; - } - - return iL; -} - -/* ------------------------------------------------------------------------- */ - -int32 bbs_atoi( const char* strA ) -{ - int32 valL = 0; - int16 signL = 1; - uint16 iL = 0, lenL = bbs_strlen( strA ); - - while( iL < lenL && strA[ iL ] == ' ' ) iL++; - if( strA[ iL ] == '-' ) - { - signL = -1; - iL++; - } - while( iL < lenL && strA[ iL ] == ' ' ) iL++; - while( iL < lenL && strA[ iL ] >= '0' && strA[ iL ] <= '9' ) - { - valL = valL * 10 + ( strA[ iL ] - '0' ); - iL++; - } - return valL * signL; -} - -/* ------------------------------------------------------------------------- */ - diff --git a/Embedded/common/src/b_BasicEm/String.h b/Embedded/common/src/b_BasicEm/String.h deleted file mode 100644 index ad2a0a2..0000000 --- a/Embedded/common/src/b_BasicEm/String.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_STRING_EM_H -#define bbs_STRING_EM_H - -/** - * This file contains string related functions. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include <stdarg.h> - -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/** copies a string from srcA to dstA; returns dstA */ -char* bbs_strcpy( char* dstA, const char* srcA ); - -/** copies sizeA caracters from from srcA to dstA; returns dstA */ -char* bbs_strncpy( char* dstA, const char* srcA, uint32 sizeA ); - -/** adds a string srcA to string dstA; returns dstA */ -char* bbs_strcat( char* dstA, const char* srcA ); - -/** adds sizeA characters from srcA to string dstA; returns dstA */ -char* bbs_strncat( char* dstA, const char* srcA, uint32 sizeA ); - -/** returns number of characters in string excluding terminating 0 */ -uint32 bbs_strlen( const char* strA ); - -/** returns true if both strings are equal */ -flag bbs_strequal( const char* str1A, const char* str2A ); - -/** returns true if all characters of the smaller of both string are equal with the other string */ -flag bbs_strmatch( const char* str1A, const char* str2A ); - -/** writes a formated string to buffer with size limitation; returns number of characters written - * Not all possible format types of stdlib function snprintf are handled in this function - */ -uint32 bbs_snprintf( char* dstA, uint32 bufSizeA, const char* formatA, ... ); - -/** writes a formated string to buffer with size limitation; returns number of characters written - * Not all possible format types of stdlib function vsnprintf are handled in this function - */ -uint32 bbs_vsnprintf( char* dstA, uint32 bufSizeA, const char* formatA, va_list argsA ); - -/** converts a string to an integer */ -int32 bbs_atoi( const char* strA ); - -#endif /* bbs_STRING_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/UInt16Arr.c b/Embedded/common/src/b_BasicEm/UInt16Arr.c deleted file mode 100644 index 29bb634..0000000 --- a/Embedded/common/src/b_BasicEm/UInt16Arr.c +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/UInt16Arr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt16Arr_init( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt16Arr_exit( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt16Arr_copy( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - const struct bbs_UInt16Arr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->allocatedSizeE ) - { - bbs_ERROR0( "void bbs_UInt16Arr_copy( ... ):\n" - "Unsufficient allocated memory in destination array." ); - return; - } -#endif - bbs_UInt16Arr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy16( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE * bbs_SIZEOF16( uint16 ) ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_UInt16Arr_equal( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, - const struct bbs_UInt16Arr* srcPtrA ) -{ - uint32 iL; - const uint16* ptr1L = ptrA->arrPtrE; - const uint16* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( *ptr1L++ != *ptr2L++ ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt16Arr_checkSum( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, - uint32 startIndexA, uint32 sizeA ) -{ - uint32 iL; - uint32 sumL = 0; - const uint16* ptrL = ptrA->arrPtrE + startIndexA; - for( iL = sizeA; iL > 0; iL-- ) - { - sumL += *ptrL++; - } - return sumL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt16Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, - uint32 sizeA ) -{ - return sizeA * bbs_SIZEOF16( uint16 ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt16Arr_size( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_UInt16Arr_size( struct bbs_UInt16Arr*, uint32 sizeA ):\n" - "Unsufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt16Arr_create( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->sizeE == sizeA ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_UInt16Arr_size( cpA, ptrA, sizeA ); - } - else - { - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( uint16 ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeA; - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt16Arr_memSize( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE * bbs_SIZEOF16( uint16 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt16Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_UInt16Arr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt16Arr_memRead( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_UInt16Arr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - - if( memSizeL != bbs_UInt16Arr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbs_UInt16Arr_memRead( const struct bbs_UInt16Arr*, const uint16* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt16Arr_fill( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - uint16 valA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - ptrA->arrPtrE[ iL ] = valA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/UInt16Arr.h b/Embedded/common/src/b_BasicEm/UInt16Arr.h deleted file mode 100644 index 0de1a2e..0000000 --- a/Embedded/common/src/b_BasicEm/UInt16Arr.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_UINT16ARR_EM_H -#define bbs_UINT16ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** byte array */ -struct bbs_UInt16Arr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of uint16 */ - uint16* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_UInt16Arr */ -void bbs_UInt16Arr_init( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA ); - -/** frees bbs_UInt16Arr */ -void bbs_UInt16Arr_exit( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_UInt16Arr_copy( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - const struct bbs_UInt16Arr* srcPtrA ); - -/** equal operator */ -flag bbs_UInt16Arr_equal( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, - const struct bbs_UInt16Arr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** computes check sum for bbs_UInt16Arr (for debugging) */ -uint32 bbs_UInt16Arr_checkSum( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, - uint32 startIndexA, uint32 sizeA ); - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_UInt16Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bbs_UInt16Arr */ -void bbs_UInt16Arr_create( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** sets array size */ -void bbs_UInt16Arr_size( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bbs_UInt16Arr_memSize( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bbs_UInt16Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_UInt16Arr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bbs_UInt16Arr_memRead( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** fills array with a value */ -void bbs_UInt16Arr_fill( struct bbs_Context* cpA, - struct bbs_UInt16Arr* ptrA, - uint16 valA ); - -#endif /* bbs_UINT16ARR_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/UInt32Arr.c b/Embedded/common/src/b_BasicEm/UInt32Arr.c deleted file mode 100644 index 90d27c6..0000000 --- a/Embedded/common/src/b_BasicEm/UInt32Arr.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/UInt32Arr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt32Arr_init( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt32Arr_exit( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt32Arr_copy( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - const struct bbs_UInt32Arr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->allocatedSizeE ) - { - bbs_ERROR0( "void bbs_UInt32Arr_copy(...):\n" - "Unsufficient allocated memory in destination array." ); - return; - } -#endif - bbs_UInt32Arr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy32( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE * bbs_SIZEOF32( uint32 ) ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_UInt32Arr_equal( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA, - const struct bbs_UInt32Arr* srcPtrA ) -{ - uint32 iL; - const uint32* ptr1L = ptrA->arrPtrE; - const uint32* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( *ptr1L++ != *ptr2L++ ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt32Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA, - uint32 sizeA ) -{ - return sizeA * bbs_SIZEOF16( uint32 ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt32Arr_create( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->sizeE == sizeA ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_UInt32Arr_size( cpA, ptrA, sizeA ); - } - else - { - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( uint32 ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeA; - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt32Arr_size( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_UInt32Arr_size( struct bbs_UInt32Arr*, uint32 ):\n" - "Unsufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt32Arr_memSize( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE * bbs_SIZEOF16( uint32 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt32Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_UInt32Arr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite32Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt32Arr_memRead( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_UInt32Arr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead32Arr( cpA, ptrA->arrPtrE, ptrA->sizeE, memPtrA ); - - if( memSizeL != bbs_UInt32Arr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbs_UInt32Arr_memRead( const struct bbs_UInt32Arr*, const uint16* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt32Arr_fill( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - uint32 valA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - ptrA->arrPtrE[ iL ] = valA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/UInt32Arr.h b/Embedded/common/src/b_BasicEm/UInt32Arr.h deleted file mode 100644 index f87875f..0000000 --- a/Embedded/common/src/b_BasicEm/UInt32Arr.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_UINT32ARR_EM_H -#define bbs_UINT32ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** byte array */ -struct bbs_UInt32Arr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of uint32 */ - uint32* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_UInt32Arr */ -void bbs_UInt32Arr_init( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA ); - -/** frees bbs_UInt32Arr */ -void bbs_UInt32Arr_exit( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_UInt32Arr_copy( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - const struct bbs_UInt32Arr* srcPtrA ); - -/** equal operator */ -flag bbs_UInt32Arr_equal( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA, - const struct bbs_UInt32Arr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_UInt32Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bbs_UInt32Arr */ -void bbs_UInt32Arr_create( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** sets array size */ -void bbs_UInt32Arr_size( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bbs_UInt32Arr_memSize( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bbs_UInt32Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_UInt32Arr* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bbs_UInt32Arr_memRead( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** fills array with a value */ -void bbs_UInt32Arr_fill( struct bbs_Context* cpA, - struct bbs_UInt32Arr* ptrA, - uint32 valA ); - -#endif /* bbs_UINT32ARR_EM_H */ - diff --git a/Embedded/common/src/b_BasicEm/UInt8Arr.c b/Embedded/common/src/b_BasicEm/UInt8Arr.c deleted file mode 100644 index 45ef97c..0000000 --- a/Embedded/common/src/b_BasicEm/UInt8Arr.c +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/UInt8Arr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt8Arr_init( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA ) -{ - ptrA->arrPtrE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->mspE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt8Arr_exit( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->arrPtrE ); - ptrA->arrPtrE = NULL; - ptrA->mspE = NULL; - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt8Arr_copy( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - const struct bbs_UInt8Arr* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->allocatedSizeE ) - { - bbs_ERROR0( "void bbs_UInt8Arr_copy(...):\n" - "Unsufficient allocated memory in destination array." ); - return; - } -#endif - bbs_UInt8Arr_size( cpA, ptrA, srcPtrA->sizeE ); - bbs_memcpy16( ptrA->arrPtrE, srcPtrA->arrPtrE, srcPtrA->sizeE >> 1 ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbs_UInt8Arr_equal( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA, - const struct bbs_UInt8Arr* srcPtrA ) -{ - long iL; - const uint8* ptr1L = ptrA->arrPtrE; - const uint8* ptr2L = srcPtrA->arrPtrE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( *ptr1L++ != *ptr2L++ ) return FALSE; - } - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt8Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA, - uint32 sizeA ) -{ - return ( sizeA >> 1 ) + bbs_MEM_BLOCK_OVERHD; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt8Arr_create( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->sizeE == sizeA ) return; - if( ptrA->arrPtrE != 0 ) - { - bbs_UInt8Arr_size( cpA, ptrA, sizeA ); - } - else - { - /* if size is odd increase by 1 byte */ - uint32 sizeL = sizeA; - if( ( sizeL & 1 ) != 0 ) sizeL++; - - ptrA->arrPtrE = bbs_MemSeg_alloc( cpA, mspA, sizeL >> 1 ); - if( bbs_Context_error( cpA ) ) return; - ptrA->allocatedSizeE = sizeL; - - ptrA->sizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt8Arr_size( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR1( "void bbs_UInt8Arr_size( struct bbs_UInt8Arr*, uint32 ):\n" - "Unsufficient allocated memory (allocatedSizeE = '%i')", - ptrA->allocatedSizeE ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt8Arr_memSize( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) + bbs_SIZEOF16( ptrA->sizeE ) + - ptrA->sizeE / 2; /* int8 = 0.5 word size*/ -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt8Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbs_UInt8Arr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE / 2, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbs_UInt8Arr_memRead( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, sizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - bbs_UInt8Arr_create( cpA, ptrA, sizeL, mspA ); - memPtrA += bbs_memRead16Arr( cpA, ptrA->arrPtrE, ptrA->sizeE / 2, memPtrA ); - - if( memSizeL != bbs_UInt8Arr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbs_UInt8Arr_memRead( const struct bbs_UInt8Arr*, const uint16* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbs_UInt8Arr_fill( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - uint8 valA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - ptrA->arrPtrE[ iL ] = valA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_BasicEm/UInt8Arr.h b/Embedded/common/src/b_BasicEm/UInt8Arr.h deleted file mode 100644 index 01bdc88..0000000 --- a/Embedded/common/src/b_BasicEm/UInt8Arr.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbs_UINT8ARR_EM_H -#define bbs_UINT8ARR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** byte array */ -struct bbs_UInt8Arr -{ - - /* ---- private data --------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to array of bytes */ - uint8* arrPtrE; - - /** current size */ - uint32 sizeE; - - /** allocated size */ - uint32 allocatedSizeE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbs_UInt8Arr */ -void bbs_UInt8Arr_init( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA ); - -/** destructs bbs_UInt8Arr */ -void bbs_UInt8Arr_exit( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbs_UInt8Arr_copy( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - const struct bbs_UInt8Arr* srcPtrA ); - -/** equal operator */ -flag bbs_UInt8Arr_equal( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA, - const struct bbs_UInt8Arr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bbs_UInt8Arr_heapSize( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bbs_UInt8Arr */ -void bbs_UInt8Arr_create( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** sets array size */ -void bbs_UInt8Arr_size( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bbs_UInt8Arr_memSize( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bbs_UInt8Arr_memWrite( struct bbs_Context* cpA, - const struct bbs_UInt8Arr* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bbs_UInt8Arr_memRead( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** fills array with a value */ -void bbs_UInt8Arr_fill( struct bbs_Context* cpA, - struct bbs_UInt8Arr* ptrA, - uint8 valA ); - -#endif /* bbs_UINT8ARR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/BitParam.c b/Embedded/common/src/b_BitFeatureEm/BitParam.c deleted file mode 100644 index e8997b1..0000000 --- a/Embedded/common/src/b_BitFeatureEm/BitParam.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BitFeatureEm/BitParam.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_BitParam_init( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA ) -{ - ptrA->innerRadiusE = 0; - ptrA->outerRadiusE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_BitParam_exit( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA ) -{ - ptrA->innerRadiusE = 0; - ptrA->outerRadiusE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_BitParam_copy( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA, - const struct bbf_BitParam* srcPtrA ) -{ - ptrA->innerRadiusE = srcPtrA->innerRadiusE; - ptrA->outerRadiusE = srcPtrA->outerRadiusE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_BitParam_equal( struct bbs_Context* cpA, - const struct bbf_BitParam* ptrA, - const struct bbf_BitParam* srcPtrA ) -{ - if( ptrA->innerRadiusE != srcPtrA->innerRadiusE ) return FALSE; - if( ptrA->outerRadiusE != srcPtrA->outerRadiusE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_BitParam_memSize( struct bbs_Context* cpA, - const struct bbf_BitParam* ptrA ) -{ - uint32 memSizeL = 0; - memSizeL += bbs_SIZEOF16( ptrA->innerRadiusE ); - memSizeL += bbs_SIZEOF16( ptrA->outerRadiusE ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_BitParam_memWrite( struct bbs_Context* cpA, - const struct bbf_BitParam* ptrA, - uint16* memPtrA ) -{ - memPtrA += bbs_memWrite32( &ptrA->innerRadiusE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->outerRadiusE, memPtrA ); - return bbf_BitParam_memSize( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_BitParam_memRead( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA, - const uint16* memPtrA ) -{ - memPtrA += bbs_memRead32( &ptrA->innerRadiusE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->outerRadiusE, memPtrA ); - return bbf_BitParam_memSize( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/BitParam.h b/Embedded/common/src/b_BitFeatureEm/BitParam.h deleted file mode 100644 index c138b2a..0000000 --- a/Embedded/common/src/b_BitFeatureEm/BitParam.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_BIT_PARAM_EM_H -#define bbf_BIT_PARAM_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** parameters for bit generation. */ -struct bbf_BitParam -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** outer radius of filter block */ - uint32 outerRadiusE; - - /** inner radius of filter block */ - uint32 innerRadiusE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_BitParam */ -void bbf_BitParam_init( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA ); - -/** resets bbf_BitParam */ -void bbf_BitParam_exit( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_BitParam_copy( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA, - const struct bbf_BitParam* srcPtrA ); - -/** equal operator */ -flag bbf_BitParam_equal( struct bbs_Context* cpA, - const struct bbf_BitParam* ptrA, - const struct bbf_BitParam* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_BitParam_memSize( struct bbs_Context* cpA, - const struct bbf_BitParam* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_BitParam_memWrite( struct bbs_Context* cpA, - const struct bbf_BitParam* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_BitParam_memRead( struct bbs_Context* cpA, - struct bbf_BitParam* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -#endif /* bbf_BIT_PARAM_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/Feature.c b/Embedded/common/src/b_BitFeatureEm/Feature.c deleted file mode 100644 index 2185e90..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Feature.c +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BitFeatureEm/Feature.h" - -#include "b_BitFeatureEm/Sequence.h" -#include "b_BitFeatureEm/I04Dns2x2Ftr.h" -#include "b_BitFeatureEm/I04Tld2x4Ftr.h" -#include "b_BitFeatureEm/I04Dns2x4Ftr.h" -#include "b_BitFeatureEm/L01Tld2x4Ftr.h" -#include "b_BitFeatureEm/L01Dns2x4Ftr.h" -#include "b_BitFeatureEm/L04Dns2x4Ftr.h" -#include "b_BitFeatureEm/L04Dns3x3Ftr.h" -#include "b_BitFeatureEm/L06Dns3x3Ftr.h" -#include "b_BitFeatureEm/L06Dns4x4Ftr.h" -#include "b_BitFeatureEm/L06DnsNx4x4Ftr.h" -#include "b_BitFeatureEm/L01Tld1x1Ftr.h" -#include "b_BitFeatureEm/L04Tld2x4Ftr.h" -#include "b_BitFeatureEm/L04Dns2x2Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Feature_init( struct bbs_Context* cpA, - struct bbf_Feature* ptrA ) -{ - ptrA->typeE = 0; - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->vpActivityE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Feature_exit( struct bbs_Context* cpA, - struct bbf_Feature* ptrA ) -{ - ptrA->typeE = 0; - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->vpActivityE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Feature_copy( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, - const struct bbf_Feature* srcPtrA ) -{ - ptrA->typeE = srcPtrA->typeE; - ptrA->patchWidthE = srcPtrA->patchWidthE; - ptrA->patchHeightE = srcPtrA->patchHeightE; - ptrA->vpActivityE = srcPtrA->vpActivityE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_Feature_equal( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA, - const struct bbf_Feature* srcPtrA ) -{ - - if( ptrA->typeE != srcPtrA->typeE ) return FALSE; - if( ptrA->patchWidthE != srcPtrA->patchWidthE ) return FALSE; - if( ptrA->patchHeightE != srcPtrA->patchHeightE ) return FALSE; - if( ptrA->vpActivityE != srcPtrA->vpActivityE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Feature_memSize( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA ) -{ - uint32 memSizeL = 0; - memSizeL += bbs_SIZEOF16( ptrA->typeE ); - memSizeL += bbs_SIZEOF16( ptrA->patchWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->patchHeightE ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Feature_memWrite( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_Feature_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &ptrA->typeE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Feature_memRead( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &ptrA->typeE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA ); - return bbf_Feature_memSize( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_featureInit( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, - enum bbf_FeatureType typeA ) -{ - switch( typeA ) - { - case bbf_FT_SEQUENCE: bbf_Sequence_init( cpA, ( struct bbf_Sequence* )ptrA ); return; - case bbf_FT_I04_DNS_2X2_FTR: bbf_I04Dns2x2Ftr_init( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA ); return; - case bbf_FT_I04_TLD_2X4_FTR: bbf_I04Tld2x4Ftr_init( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA ); return; - case bbf_FT_I04_DNS_2X4_FTR: bbf_I04Dns2x4Ftr_init( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA ); return; - case bbf_FT_L01_TLD_2X4_FTR: bbf_L01Tld2x4Ftr_init( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA ); return; - case bbf_FT_L01_DNS_2X4_FTR: bbf_L01Dns2x4Ftr_init( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA ); return; - case bbf_FT_L04_DNS_2X4_FTR: bbf_L04Dns2x4Ftr_init( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA ); return; - case bbf_FT_L04_DNS_3X3_FTR: bbf_L04Dns3x3Ftr_init( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA ); return; - case bbf_FT_L06_DNS_3X3_FTR: bbf_L06Dns3x3Ftr_init( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA ); return; - case bbf_FT_L06_DNS_4X4_FTR: bbf_L06Dns4x4Ftr_init( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA ); return; - case bbf_FT_L06_DNS_NX4X4_FTR: bbf_L06DnsNx4x4Ftr_init( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA ); return; - case bbf_FT_L01_TLD_1X1_FTR: bbf_L01Tld1x1Ftr_init( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA ); return; - case bbf_FT_L04_TLD_2X4_FTR: bbf_L04Tld2x4Ftr_init( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA ); return; - case bbf_FT_L04_DNS_2X2_FTR: bbf_L04Dns2x2Ftr_init( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA ); return; - - default: bbs_ERROR0( "bbf_featureInit: invalid type" ); - } -} - -/* ------------------------------------------------------------------------- */ - -void bbf_featureExit( struct bbs_Context* cpA, - struct bbf_Feature* ptrA ) -{ - switch( ptrA->typeE ) - { - case bbf_FT_SEQUENCE: bbf_Sequence_exit( cpA, ( struct bbf_Sequence* )ptrA ); return; - case bbf_FT_I04_DNS_2X2_FTR: bbf_I04Dns2x2Ftr_exit( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA ); return; - case bbf_FT_I04_TLD_2X4_FTR: bbf_I04Tld2x4Ftr_exit( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA ); return; - case bbf_FT_I04_DNS_2X4_FTR: bbf_I04Dns2x4Ftr_exit( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA ); return; - case bbf_FT_L01_TLD_2X4_FTR: bbf_L01Tld2x4Ftr_exit( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA ); return; - case bbf_FT_L01_DNS_2X4_FTR: bbf_L01Dns2x4Ftr_exit( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA ); return; - case bbf_FT_L04_DNS_2X4_FTR: bbf_L04Dns2x4Ftr_exit( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA ); return; - case bbf_FT_L04_DNS_3X3_FTR: bbf_L04Dns3x3Ftr_exit( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA ); return; - case bbf_FT_L06_DNS_3X3_FTR: bbf_L06Dns3x3Ftr_exit( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA ); return; - case bbf_FT_L06_DNS_4X4_FTR: bbf_L06Dns4x4Ftr_exit( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA ); return; - case bbf_FT_L06_DNS_NX4X4_FTR: bbf_L06DnsNx4x4Ftr_exit( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA ); return; - case bbf_FT_L01_TLD_1X1_FTR: bbf_L01Tld1x1Ftr_exit( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA ); return; - case bbf_FT_L04_TLD_2X4_FTR: bbf_L04Tld2x4Ftr_exit( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA ); return; - case bbf_FT_L04_DNS_2X2_FTR: bbf_L04Dns2x2Ftr_exit( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA ); return; - default: bbs_ERROR0( "bbf_featureExit: invalid type" ); - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_featureMemSize( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA ) -{ - switch( ptrA->typeE ) - { - case bbf_FT_SEQUENCE: return bbf_Sequence_memSize( cpA, ( struct bbf_Sequence* )ptrA ); - case bbf_FT_I04_DNS_2X2_FTR: return bbf_I04Dns2x2Ftr_memSize( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA ); - case bbf_FT_I04_TLD_2X4_FTR: return bbf_I04Tld2x4Ftr_memSize( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA ); - case bbf_FT_I04_DNS_2X4_FTR: return bbf_I04Dns2x4Ftr_memSize( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA ); - case bbf_FT_L01_TLD_2X4_FTR: return bbf_L01Tld2x4Ftr_memSize( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA ); - case bbf_FT_L01_DNS_2X4_FTR: return bbf_L01Dns2x4Ftr_memSize( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA ); - case bbf_FT_L04_DNS_2X4_FTR: return bbf_L04Dns2x4Ftr_memSize( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA ); - case bbf_FT_L04_DNS_3X3_FTR: return bbf_L04Dns3x3Ftr_memSize( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA ); - case bbf_FT_L06_DNS_3X3_FTR: return bbf_L06Dns3x3Ftr_memSize( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA ); - case bbf_FT_L06_DNS_4X4_FTR: return bbf_L06Dns4x4Ftr_memSize( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA ); - case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memSize( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA ); - case bbf_FT_L01_TLD_1X1_FTR: return bbf_L01Tld1x1Ftr_memSize( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA ); - case bbf_FT_L04_TLD_2X4_FTR: return bbf_L04Tld2x4Ftr_memSize( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA ); - case bbf_FT_L04_DNS_2X2_FTR: return bbf_L04Dns2x2Ftr_memSize( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA ); - default: bbs_ERROR0( "bbf_featureExit: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_featureMemWrite( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA, uint16* memPtrA ) -{ - switch( ptrA->typeE ) - { - case bbf_FT_SEQUENCE: return bbf_Sequence_memWrite( cpA, ( struct bbf_Sequence* )ptrA, memPtrA ); - case bbf_FT_I04_DNS_2X2_FTR: return bbf_I04Dns2x2Ftr_memWrite( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA, memPtrA ); - case bbf_FT_I04_TLD_2X4_FTR: return bbf_I04Tld2x4Ftr_memWrite( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA, memPtrA ); - case bbf_FT_I04_DNS_2X4_FTR: return bbf_I04Dns2x4Ftr_memWrite( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA, memPtrA ); - case bbf_FT_L01_TLD_2X4_FTR: return bbf_L01Tld2x4Ftr_memWrite( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA, memPtrA ); - case bbf_FT_L01_DNS_2X4_FTR: return bbf_L01Dns2x4Ftr_memWrite( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA, memPtrA ); - case bbf_FT_L04_DNS_2X4_FTR: return bbf_L04Dns2x4Ftr_memWrite( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA, memPtrA ); - case bbf_FT_L04_DNS_3X3_FTR: return bbf_L04Dns3x3Ftr_memWrite( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA, memPtrA ); - case bbf_FT_L06_DNS_3X3_FTR: return bbf_L06Dns3x3Ftr_memWrite( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA, memPtrA ); - case bbf_FT_L06_DNS_4X4_FTR: return bbf_L06Dns4x4Ftr_memWrite( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA, memPtrA ); - case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memWrite( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA, memPtrA ); - case bbf_FT_L01_TLD_1X1_FTR: return bbf_L01Tld1x1Ftr_memWrite( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA, memPtrA ); - case bbf_FT_L04_TLD_2X4_FTR: return bbf_L04Tld2x4Ftr_memWrite( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA, memPtrA ); - case bbf_FT_L04_DNS_2X2_FTR: return bbf_L04Dns2x2Ftr_memWrite( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA, memPtrA ); - default: bbs_ERROR0( "bbf_featureMemWrite: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_featureMemRead( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - switch( ptrA->typeE ) - { - case bbf_FT_SEQUENCE: return bbf_Sequence_memRead( cpA, ( struct bbf_Sequence* )ptrA, memPtrA, mtpA ); - case bbf_FT_I04_DNS_2X2_FTR: return bbf_I04Dns2x2Ftr_memRead( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_I04_TLD_2X4_FTR: return bbf_I04Tld2x4Ftr_memRead( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_I04_DNS_2X4_FTR: return bbf_I04Dns2x4Ftr_memRead( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L01_TLD_2X4_FTR: return bbf_L01Tld2x4Ftr_memRead( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L01_DNS_2X4_FTR: return bbf_L01Dns2x4Ftr_memRead( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L04_DNS_2X4_FTR: return bbf_L04Dns2x4Ftr_memRead( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L04_DNS_3X3_FTR: return bbf_L04Dns3x3Ftr_memRead( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L06_DNS_3X3_FTR: return bbf_L06Dns3x3Ftr_memRead( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L06_DNS_4X4_FTR: return bbf_L06Dns4x4Ftr_memRead( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memRead( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L01_TLD_1X1_FTR: return bbf_L01Tld1x1Ftr_memRead( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L04_TLD_2X4_FTR: return bbf_L04Tld2x4Ftr_memRead( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA, memPtrA, mtpA ); - case bbf_FT_L04_DNS_2X2_FTR: return bbf_L04Dns2x2Ftr_memRead( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA, memPtrA, mtpA ); - default: bbs_ERROR0( "bbf_featureMemRead: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_featureSizeOf16( struct bbs_Context* cpA, enum bbf_FeatureType typeA ) -{ - switch( typeA ) - { - case bbf_FT_SEQUENCE: return bbs_SIZEOF16( struct bbf_Sequence ); - case bbf_FT_I04_DNS_2X2_FTR: return bbs_SIZEOF16( struct bbf_I04Dns2x2Ftr ); - case bbf_FT_I04_TLD_2X4_FTR: return bbs_SIZEOF16( struct bbf_I04Tld2x4Ftr ); - case bbf_FT_I04_DNS_2X4_FTR: return bbs_SIZEOF16( struct bbf_I04Dns2x4Ftr ); - case bbf_FT_L01_TLD_2X4_FTR: return bbs_SIZEOF16( struct bbf_L01Tld2x4Ftr ); - case bbf_FT_L01_DNS_2X4_FTR: return bbs_SIZEOF16( struct bbf_L01Dns2x4Ftr ); - case bbf_FT_L04_DNS_2X4_FTR: return bbs_SIZEOF16( struct bbf_L04Dns2x4Ftr ); - case bbf_FT_L04_DNS_3X3_FTR: return bbs_SIZEOF16( struct bbf_L04Dns3x3Ftr ); - case bbf_FT_L06_DNS_3X3_FTR: return bbs_SIZEOF16( struct bbf_L06Dns3x3Ftr ); - case bbf_FT_L06_DNS_4X4_FTR: return bbs_SIZEOF16( struct bbf_L06Dns4x4Ftr ); - case bbf_FT_L06_DNS_NX4X4_FTR: return bbs_SIZEOF16( struct bbf_L06DnsNx4x4Ftr ); - case bbf_FT_L01_TLD_1X1_FTR: return bbs_SIZEOF16( struct bbf_L01Tld1x1Ftr ); - case bbf_FT_L04_TLD_2X4_FTR: return bbs_SIZEOF16( struct bbf_L04Tld2x4Ftr ); - case bbf_FT_L04_DNS_2X2_FTR: return bbs_SIZEOF16( struct bbf_L04Dns2x2Ftr ); - default: bbs_ERROR0( "bbf_featureSizeOf16: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/Feature.h b/Embedded/common/src/b_BitFeatureEm/Feature.h deleted file mode 100644 index dd77ede..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Feature.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_FEATURE_EM_H -#define bbf_FEATURE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Functions.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -enum bbf_FeatureType -{ - bbf_FT_UNDEFINED = 0, - bbf_FT_SEQUENCE, - bbf_FT_I04_DNS_2X2_FTR, - bbf_FT_I04_TLD_2X4_FTR, - bbf_FT_I04_DNS_2X4_FTR, - bbf_FT_L01_TLD_2X4_FTR, - bbf_FT_L01_DNS_2X4_FTR, - bbf_FT_L04_DNS_2X4_FTR, - bbf_FT_L04_DNS_3X3_FTR, - bbf_FT_L06_DNS_3X3_FTR, - bbf_FT_L06_DNS_4X4_FTR, - bbf_FT_L06_DNS_NX4X4_FTR, - - bbf_FT_L01_TLD_1X1_FTR, - bbf_FT_L04_TLD_2X4_FTR, - bbf_FT_L04_DNS_2X2_FTR -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** base object for features (occurs as first element in all feature objects) */ -struct bbf_Feature -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** feature type */ - uint32 typeE; - - /** width of patch */ - uint32 patchWidthE; - - /** height of patch */ - uint32 patchHeightE; - - /* ---- virtual functions ---------------------------------------------- */ - - /** computes feature's activity (4.28) on the given patch */ - int32 ( *vpActivityE )( const struct bbf_Feature* ptrA, const uint32* patchA ); -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_Feature */ -void bbf_Feature_init( struct bbs_Context* cpA, - struct bbf_Feature* ptrA ); - -/** resets bbf_Feature */ -void bbf_Feature_exit( struct bbs_Context* cpA, - struct bbf_Feature* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_Feature_copy( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, - const struct bbf_Feature* srcPtrA ); - -/** equal operator */ -flag bbf_Feature_equal( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA, - const struct bbf_Feature* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_Feature_memSize( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_Feature_memWrite( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_Feature_memRead( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** virtual init function */ -void bbf_featureInit( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, - enum bbf_FeatureType typeA ); - -/** virtual exit function */ -void bbf_featureExit( struct bbs_Context* cpA, - struct bbf_Feature* ptrA ); - -/** virtual mem size function */ -uint32 bbf_featureMemSize( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA ); - -/** virtual mem write function */ -uint32 bbf_featureMemWrite( struct bbs_Context* cpA, - const struct bbf_Feature* ptrA, uint16* memPtrA ); - -/** virtual mem read function */ -uint32 bbf_featureMemRead( struct bbs_Context* cpA, - struct bbf_Feature* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/** virtual sizeof operator for 16bit units */ -uint32 bbf_featureSizeOf16( struct bbs_Context* cpA, enum bbf_FeatureType typeA ); - -#endif /* bbf_FEATURE_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/Functions.c b/Embedded/common/src/b_BitFeatureEm/Functions.c deleted file mode 100644 index b4d7051..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Functions.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BitFeatureEm/Functions.h" -#include "b_ImageEm/Functions.h" -#include "b_BasicEm/Math.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -const uint16 bbf_bit8TblG[ 256 ] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 }; - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - diff --git a/Embedded/common/src/b_BitFeatureEm/Functions.h b/Embedded/common/src/b_BitFeatureEm/Functions.h deleted file mode 100644 index eda972d..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Functions.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_FUNCTIONS_EM_H -#define bbf_FUNCTIONS_EM_H - -/** - * This files contains gerneral purpose functions. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_ImageEm/UInt32Image.h" -#include "b_ImageEm/UInt16ByteImage.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** table to quickly determine the number of set bits in an 8 bit variable */ -extern const uint16 bbf_bit8TblG[ 256 ]; - -/* ---- external functions ------------------------------------------------- */ - -/** sums up bits in 8 bit variable */ -#define bbf_BIT_SUM_8( vA ) ( bbf_bit8TblG[ vA ] ) - -/** sums up bits in 16 bit variable */ -#define bbf_BIT_SUM_16( vA ) ( bbf_bit8TblG[ vA & 0x00FF ] + bbf_bit8TblG[ ( vA >> 8 ) & 0x00FF ] ) - -/** sums up bits in 16 bit variable */ -#define bbf_BIT_SUM_32( vA ) ( bbf_bit8TblG[ vA & 0x00FF ] + bbf_bit8TblG[ ( vA >> 8 ) & 0x00FF ] + bbf_bit8TblG[ ( vA >> 16 ) & 0x00FF ] + bbf_bit8TblG[ ( vA >> 24 ) & 0x00FF ] ) - - -#endif /* bbf_FUNCTIONS_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/I04Dns2x2Ftr.c b/Embedded/common/src/b_BitFeatureEm/I04Dns2x2Ftr.c deleted file mode 100644 index 835833a..0000000 --- a/Embedded/common/src/b_BitFeatureEm/I04Dns2x2Ftr.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/I04Dns2x2Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Dns2x2Ftr_init( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_I04_DNS_2X2_FTR; - ptrA->baseE.vpActivityE = bbf_I04Dns2x2Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->ptnArrE ); - bbs_Int16Arr_init( cpA, &ptrA->tableE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Dns2x2Ftr_exit( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->ptnArrE ); - bbs_Int16Arr_exit( cpA, &ptrA->tableE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Dns2x2Ftr_copy( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA, - const struct bbf_I04Dns2x2Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->ptnArrE, &srcPtrA->ptnArrE ); - bbs_Int16Arr_copy( cpA, &ptrA->tableE, &srcPtrA->tableE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_I04Dns2x2Ftr_equal( struct bbs_Context* cpA, - const struct bbf_I04Dns2x2Ftr* ptrA, - const struct bbf_I04Dns2x2Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->ptnArrE, &srcPtrA->ptnArrE ) ) return FALSE; - if( !bbs_Int16Arr_equal( cpA, &ptrA->tableE, &srcPtrA->tableE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Dns2x2Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_I04Dns2x2Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->ptnArrE ); - memSizeL += bbs_Int16Arr_memSize( cpA, &ptrA->tableE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Dns2x2Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_I04Dns2x2Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_I04Dns2x2Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_I04_DNS_2X2_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->ptnArrE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->tableE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Dns2x2Ftr_memRead( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_I04_DNS_2X2_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->ptnArrE, memPtrA, espL ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->tableE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_I04Dns2x2Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_I04Dns2x2Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_I04Dns2x2Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_I04Dns2x2Ftr* ptrL = ( struct bbf_I04Dns2x2Ftr* )ptrA; - - uint32 iL; - - const uint32* ptnPtrL = ptrL->ptnArrE.arrPtrE; - const int16* tableL = ptrL->tableE.arrPtrE; - const uint32* patchL = patchA; - - int32 sumL = 0; - - uint32 wL = ptrL->baseE.patchWidthE - 1; - uint32 hL = ptrL->baseE.patchHeightE - 1; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - uint32 blocksL = ptrL->baseE.patchHeightE >> 2; /* number of 4 bit blocks */ - - if( hL == 31 ) - { - for( iL = 0; iL < wL; iL++ ) - { - uint32 vL = ( patchL[ 0 ] ^ ptnPtrL[ 0 ] ) & - ( ( patchL[ 0 ] >> 1 ) ^ ptnPtrL[ 1 ] ) & - ( ( patchL[ 1 ] ) ^ ptnPtrL[ 2 ] ) & - ( ( patchL[ 1 ] >> 1 ) ^ ptnPtrL[ 3 ] ) & borderMaskL; - - patchL++; - - ptnPtrL += 4; - - sumL += tableL[ ( vL ) & 0x0F ]; - sumL += tableL[ 16 + ( ( vL >> 4 ) & 0x0F ) ]; - sumL += tableL[ 32 + ( ( vL >> 8 ) & 0x0F ) ]; - sumL += tableL[ 48 + ( ( vL >> 12 ) & 0x0F ) ]; - sumL += tableL[ 64 + ( ( vL >> 16 ) & 0x0F ) ]; - sumL += tableL[ 80 + ( ( vL >> 20 ) & 0x0F ) ]; - sumL += tableL[ 96 + ( ( vL >> 24 ) & 0x0F ) ]; - sumL += tableL[ 112 + ( ( vL >> 28 ) & 0x0F ) ]; - tableL += 128; - } - } - else - { - for( iL = 0; iL < wL; iL++ ) - { - uint32 jL; - uint32 vL = ( patchL[ 0 ] ^ ptnPtrL[ 0 ] ) & - ( ( patchL[ 0 ] >> 1 ) ^ ptnPtrL[ 1 ] ) & - ( ( patchL[ 1 ] ) ^ ptnPtrL[ 2 ] ) & - ( ( patchL[ 1 ] >> 1 ) ^ ptnPtrL[ 3 ] ) & borderMaskL; - - patchL++; - ptnPtrL += 4; - - for( jL = 0; jL < blocksL; jL++ ) - { - sumL += tableL[ vL & 0x0F ]; - vL >>= 4; - tableL += 16; - } - } - } - - return sumL * ( ptrL->activityFactorE >> 8 ) + ( ( sumL * ( int32 )( ptrL->activityFactorE & 0x0FF ) ) >> 8 ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/I04Dns2x2Ftr.h b/Embedded/common/src/b_BitFeatureEm/I04Dns2x2Ftr.h deleted file mode 100644 index f8888ae..0000000 --- a/Embedded/common/src/b_BitFeatureEm/I04Dns2x2Ftr.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_I04_DNS_2X2_FTR_EM_H -#define bbf_I04_DNS_2X2_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_I04_DNS_2X2_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_I04Dns2x2Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** pattern array */ - struct bbs_UInt32Arr ptnArrE; - - /** look up table of weights */ - struct bbs_Int16Arr tableE; - - /** factor to convert activity to proper range (.36) */ - int32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_I04Dns2x2Ftr */ -void bbf_I04Dns2x2Ftr_init( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA ); - -/** resets bbf_I04Dns2x2Ftr */ -void bbf_I04Dns2x2Ftr_exit( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_I04Dns2x2Ftr_copy( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA, - const struct bbf_I04Dns2x2Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_I04Dns2x2Ftr_equal( struct bbs_Context* cpA, - const struct bbf_I04Dns2x2Ftr* ptrA, - const struct bbf_I04Dns2x2Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_I04Dns2x2Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_I04Dns2x2Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_I04Dns2x2Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_I04Dns2x2Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_I04Dns2x2Ftr_memRead( struct bbs_Context* cpA, - struct bbf_I04Dns2x2Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_I04Dns2x2Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_I04_DNS_2X2_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/I04Dns2x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/I04Dns2x4Ftr.c deleted file mode 100644 index d9eab5e..0000000 --- a/Embedded/common/src/b_BitFeatureEm/I04Dns2x4Ftr.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/I04Dns2x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Dns2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_I04_DNS_2X4_FTR; - ptrA->baseE.vpActivityE = bbf_I04Dns2x4Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - bbs_Int16Arr_init( cpA, &ptrA->tableE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Dns2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - bbs_Int16Arr_exit( cpA, &ptrA->tableE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Dns2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA, - const struct bbf_I04Dns2x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - bbs_Int16Arr_copy( cpA, &ptrA->tableE, &srcPtrA->tableE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_I04Dns2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_I04Dns2x4Ftr* ptrA, - const struct bbf_I04Dns2x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( !bbs_Int16Arr_equal( cpA, &ptrA->tableE, &srcPtrA->tableE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Dns2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_I04Dns2x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_Int16Arr_memSize( cpA, &ptrA->tableE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Dns2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_I04Dns2x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_I04Dns2x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_I04_DNS_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->tableE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Dns2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_I04_DNS_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->tableE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_I04Dns2x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_I04Dns2x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_I04Dns2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_I04Dns2x4Ftr* ptrL = ( struct bbf_I04Dns2x4Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 1; - uint32 hL = ptrL->baseE.patchHeightE - 3; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - const int16* tableL = ptrL->tableE.arrPtrE; - - uint32 blocksL = ptrL->baseE.patchHeightE >> 2; - uint32 iL; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - int32 sumL = 0; - - uint32 sL[ 8 ]; - uint32 mL[ 4 ]; - - for( iL = 0; iL < wL; iL++ ) - { - uint32 vL = 0; - - uint32 s1L = patchA[ iL ]; - uint32 s2L = patchA[ iL + 1 ]; - - /* comparison of pixels with patchHeightE - 3 features */ - sL[ 0 ] = ( ( s1L ) ^ dataPtrL[ 0 ] ) & borderMaskL; - sL[ 1 ] = ( ( s1L >> 1 ) ^ dataPtrL[ 1 ] ) & borderMaskL; - sL[ 2 ] = ( ( s1L >> 2 ) ^ dataPtrL[ 2 ] ) & borderMaskL; - sL[ 3 ] = ( ( s1L >> 3 ) ^ dataPtrL[ 3 ] ) & borderMaskL; - - sL[ 4 ] = ( ( s2L ) ^ dataPtrL[ 4 ] ) & borderMaskL; - sL[ 5 ] = ( ( s2L >> 1 ) ^ dataPtrL[ 5 ] ) & borderMaskL; - sL[ 6 ] = ( ( s2L >> 2 ) ^ dataPtrL[ 6 ] ) & borderMaskL; - sL[ 7 ] = ( ( s2L >> 3 ) ^ dataPtrL[ 7 ] ) & borderMaskL; - - /* parallel bit counting of patchHeightE - 3 features */ - mL[ 0 ] = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + - ( sL[ 2 ] & 0x11111111 ) + ( sL[ 3 ] & 0x11111111 ) + - ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) ); - - mL[ 1 ] = ( ( sL[ 0 ] & 0x22222222 ) + ( sL[ 1 ] & 0x22222222 ) + - ( sL[ 2 ] & 0x22222222 ) + ( sL[ 3 ] & 0x22222222 ) + - ( sL[ 4 ] & 0x22222222 ) + ( sL[ 5 ] & 0x22222222 ) + - ( sL[ 6 ] & 0x22222222 ) + ( sL[ 7 ] & 0x22222222 ) ) >> 1; - - mL[ 2 ] = ( ( sL[ 0 ] & 0x44444444 ) + ( sL[ 1 ] & 0x44444444 ) + - ( sL[ 2 ] & 0x44444444 ) + ( sL[ 3 ] & 0x44444444 ) + - ( sL[ 4 ] & 0x44444444 ) + ( sL[ 5 ] & 0x44444444 ) + - ( sL[ 6 ] & 0x44444444 ) + ( sL[ 7 ] & 0x44444444 ) ) >> 2; - - mL[ 3 ] = ( ( sL[ 0 ] & 0x88888888 ) + ( sL[ 1 ] & 0x88888888 ) + - ( sL[ 2 ] & 0x88888888 ) + ( sL[ 3 ] & 0x88888888 ) + - ( sL[ 4 ] & 0x88888888 ) + ( sL[ 5 ] & 0x88888888 ) + - ( sL[ 6 ] & 0x88888888 ) + ( sL[ 7 ] & 0x88888888 ) ) >> 3; - - /* parallel comparison with thresholds and packing of results into bit array of size patchHeightE - 3 */ - vL |= ( ( mL[ 0 ] + dataPtrL[ 8 ] ) & 0x88888888 ) >> 3; - vL |= ( ( mL[ 1 ] + dataPtrL[ 9 ] ) & 0x88888888 ) >> 2; - vL |= ( ( mL[ 2 ] + dataPtrL[ 10 ] ) & 0x88888888 ) >> 1; - vL |= ( ( mL[ 3 ] + dataPtrL[ 11 ] ) & 0x88888888 ); - - vL = ( ~vL ) & 0x1FFFFFFF; - - /* parallel processing of weights (4 weights at a time) */ - if( hL == 29 ) - { - sumL += tableL[ ( vL ) & 0x0F ]; - sumL += tableL[ 16 + ( ( vL >> 4 ) & 0x0F ) ]; - sumL += tableL[ 32 + ( ( vL >> 8 ) & 0x0F ) ]; - sumL += tableL[ 48 + ( ( vL >> 12 ) & 0x0F ) ]; - sumL += tableL[ 64 + ( ( vL >> 16 ) & 0x0F ) ]; - sumL += tableL[ 80 + ( ( vL >> 20 ) & 0x0F ) ]; - sumL += tableL[ 96 + ( ( vL >> 24 ) & 0x0F ) ]; - sumL += tableL[ 112 + ( ( vL >> 28 ) & 0x0F ) ]; - tableL += 128; - } - else - { - uint32 jL; - for( jL = 0; jL < blocksL; jL++ ) - { - sumL += tableL[ vL & 0x0F ]; - vL >>= 4; - tableL += 16; - } - } - - dataPtrL += 12; - } - - return sumL * ( ptrL->activityFactorE >> 8 ) + ( ( sumL * ( int32 )( ptrL->activityFactorE & 0x0FF ) ) >> 8 ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/I04Dns2x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/I04Dns2x4Ftr.h deleted file mode 100644 index 6fccc44..0000000 --- a/Embedded/common/src/b_BitFeatureEm/I04Dns2x4Ftr.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_I04_DNS_2X4_FTR_EM_H -#define bbf_I04_DNS_2X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_I04_DNS_2X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_I04Dns2x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** look up table of weights */ - struct bbs_Int16Arr tableE; - - /** factor to convert activity to proper range (.36) */ - int32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_I04Dns2x4Ftr */ -void bbf_I04Dns2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA ); - -/** resets bbf_I04Dns2x4Ftr */ -void bbf_I04Dns2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_I04Dns2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA, - const struct bbf_I04Dns2x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_I04Dns2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_I04Dns2x4Ftr* ptrA, - const struct bbf_I04Dns2x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_I04Dns2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_I04Dns2x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_I04Dns2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_I04Dns2x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_I04Dns2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_I04Dns2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_I04Dns2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_I04_DNS_2X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/I04Tld2x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/I04Tld2x4Ftr.c deleted file mode 100644 index fcbbae7..0000000 --- a/Embedded/common/src/b_BitFeatureEm/I04Tld2x4Ftr.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/I04Tld2x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Tld2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_I04_TLD_2X4_FTR; - ptrA->baseE.vpActivityE = bbf_I04Tld2x4Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - bbs_Int16Arr_init( cpA, &ptrA->tableE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Tld2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - bbs_Int16Arr_exit( cpA, &ptrA->tableE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_I04Tld2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA, - const struct bbf_I04Tld2x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - bbs_Int16Arr_copy( cpA, &ptrA->tableE, &srcPtrA->tableE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_I04Tld2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_I04Tld2x4Ftr* ptrA, - const struct bbf_I04Tld2x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( !bbs_Int16Arr_equal( cpA, &ptrA->tableE, &srcPtrA->tableE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Tld2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_I04Tld2x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_Int16Arr_memSize( cpA, &ptrA->tableE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Tld2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_I04Tld2x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_I04Tld2x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_I04_TLD_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->tableE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_I04Tld2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_I04_TLD_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->tableE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_I04Tld2x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_I04Tld2x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_I04Tld2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_I04Tld2x4Ftr* ptrL = ( struct bbf_I04Tld2x4Ftr* )ptrA; - - uint32 iL; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - const int16* tableL = ptrL->tableE.arrPtrE; - const uint32* patchL = patchA; - - int32 sumL = 0; - - for( iL = ptrL->baseE.patchWidthE >> 3; iL > 0; iL-- ) - { - uint32 vL; - - /* compare with pattern */ - uint32 s1L = patchL[ 0 ] ^ dataPtrL[ 0 ]; - uint32 s2L = patchL[ 1 ] ^ dataPtrL[ 1 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL = ( ( s1L + s2L + dataPtrL[ 2 ] ) & 0x88888888 ) >> 3; - - /* compare with pattern */ - s1L = patchL[ 2 ] ^ dataPtrL[ 3 ]; - s2L = patchL[ 3 ] ^ dataPtrL[ 4 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 5 ] ) & 0x88888888 ) >> 2; - - /* compare with pattern */ - s1L = patchL[ 4 ] ^ dataPtrL[ 6 ]; - s2L = patchL[ 5 ] ^ dataPtrL[ 7 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 8 ] ) & 0x88888888 ) >> 1; - - /* compare with pattern */ - s1L = patchL[ 6 ] ^ dataPtrL[ 9 ]; - s2L = patchL[ 7 ] ^ dataPtrL[ 10 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 11 ] ) & 0x88888888 ); - - /* invert bits */ - vL = ~vL; - - /* evaluate vL */ - /* parallel processing of weights (4 weights at a time) */ - sumL += tableL[ ( vL ) & 0x0F ]; - sumL += tableL[ 16 + ( ( vL >> 4 ) & 0x0F ) ]; - sumL += tableL[ 32 + ( ( vL >> 8 ) & 0x0F ) ]; - sumL += tableL[ 48 + ( ( vL >> 12 ) & 0x0F ) ]; - sumL += tableL[ 64 + ( ( vL >> 16 ) & 0x0F ) ]; - sumL += tableL[ 80 + ( ( vL >> 20 ) & 0x0F ) ]; - sumL += tableL[ 96 + ( ( vL >> 24 ) & 0x0F ) ]; - sumL += tableL[ 112 + ( ( vL >> 28 ) & 0x0F ) ]; - - tableL += 128; - dataPtrL += 12; - patchL += 8; - } - - return sumL * ( ptrL->activityFactorE >> 8 ) + ( ( sumL * ( int32 )( ptrL->activityFactorE & 0x0FF ) ) >> 8 ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/I04Tld2x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/I04Tld2x4Ftr.h deleted file mode 100644 index db7bc8d..0000000 --- a/Embedded/common/src/b_BitFeatureEm/I04Tld2x4Ftr.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_I04_TLD_2X4_FTR_EM_H -#define bbf_I04_TLD_2X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_I04_TLD_2X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_I04Tld2x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** look up table of weights */ - struct bbs_Int16Arr tableE; - - /** factor to convert activity to proper range (.36) */ - int32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_I04Tld2x4Ftr */ -void bbf_I04Tld2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA ); - -/** resets bbf_I04Tld2x4Ftr */ -void bbf_I04Tld2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_I04Tld2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA, - const struct bbf_I04Tld2x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_I04Tld2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_I04Tld2x4Ftr* ptrA, - const struct bbf_I04Tld2x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_I04Tld2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_I04Tld2x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_I04Tld2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_I04Tld2x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_I04Tld2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_I04Tld2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_I04Tld2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_I04_TLD_2X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L01Dns2x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/L01Dns2x4Ftr.c deleted file mode 100644 index 5198c65..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L01Dns2x4Ftr.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L01Dns2x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Dns2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L01_DNS_2X4_FTR; - ptrA->baseE.vpActivityE = bbf_L01Dns2x4Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Dns2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Dns2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA, - const struct bbf_L01Dns2x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L01Dns2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L01Dns2x4Ftr* ptrA, - const struct bbf_L01Dns2x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Dns2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L01Dns2x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Dns2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L01Dns2x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L01Dns2x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L01_DNS_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Dns2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L01_DNS_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L01Dns2x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L01Dns2x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L01Dns2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L01Dns2x4Ftr* ptrL = ( struct bbf_L01Dns2x4Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 1; - uint32 hL = ptrL->baseE.patchHeightE - 3; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - - uint32 iL; - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - /* partial bit sums */ - uint32 bsL = 0; - - uint32 sL[ 8 ]; - uint32 mL[ 4 ]; - - for( iL = 0; iL < wL; iL++ ) - { - uint32 s1L = patchA[ iL ]; - uint32 s2L = patchA[ iL + 1 ]; - - /* comparison of pixels with patchHeightE - 3 features */ - sL[ 0 ] = ( ( s1L ) ^ dataPtrL[ 0 ] ) & borderMaskL; - sL[ 1 ] = ( ( s1L >> 1 ) ^ dataPtrL[ 1 ] ) & borderMaskL; - sL[ 2 ] = ( ( s1L >> 2 ) ^ dataPtrL[ 2 ] ) & borderMaskL; - sL[ 3 ] = ( ( s1L >> 3 ) ^ dataPtrL[ 3 ] ) & borderMaskL; - - sL[ 4 ] = ( ( s2L ) ^ dataPtrL[ 4 ] ) & borderMaskL; - sL[ 5 ] = ( ( s2L >> 1 ) ^ dataPtrL[ 5 ] ) & borderMaskL; - sL[ 6 ] = ( ( s2L >> 2 ) ^ dataPtrL[ 6 ] ) & borderMaskL; - sL[ 7 ] = ( ( s2L >> 3 ) ^ dataPtrL[ 7 ] ) & borderMaskL; - - /* parallel bit counting of patchHeightE - 3 features */ - mL[ 0 ] = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + - ( sL[ 2 ] & 0x11111111 ) + ( sL[ 3 ] & 0x11111111 ) + - ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) ); - - mL[ 1 ] = ( ( sL[ 0 ] & 0x22222222 ) + ( sL[ 1 ] & 0x22222222 ) + - ( sL[ 2 ] & 0x22222222 ) + ( sL[ 3 ] & 0x22222222 ) + - ( sL[ 4 ] & 0x22222222 ) + ( sL[ 5 ] & 0x22222222 ) + - ( sL[ 6 ] & 0x22222222 ) + ( sL[ 7 ] & 0x22222222 ) ) >> 1; - - mL[ 2 ] = ( ( sL[ 0 ] & 0x44444444 ) + ( sL[ 1 ] & 0x44444444 ) + - ( sL[ 2 ] & 0x44444444 ) + ( sL[ 3 ] & 0x44444444 ) + - ( sL[ 4 ] & 0x44444444 ) + ( sL[ 5 ] & 0x44444444 ) + - ( sL[ 6 ] & 0x44444444 ) + ( sL[ 7 ] & 0x44444444 ) ) >> 2; - - mL[ 3 ] = ( ( sL[ 0 ] & 0x88888888 ) + ( sL[ 1 ] & 0x88888888 ) + - ( sL[ 2 ] & 0x88888888 ) + ( sL[ 3 ] & 0x88888888 ) + - ( sL[ 4 ] & 0x88888888 ) + ( sL[ 5 ] & 0x88888888 ) + - ( sL[ 6 ] & 0x88888888 ) + ( sL[ 7 ] & 0x88888888 ) ) >> 3; - - /* parallel comparison with thresholds and packing of results into bit array of size patchHeightE - 3 */ - { - uint32 vL = ~dataPtrL[ 8 ]; - vL |= ( ( mL[ 0 ] + dataPtrL[ 9 ] ) & 0x88888888 ) >> 3; - vL |= ( ( mL[ 1 ] + dataPtrL[ 10 ] ) & 0x88888888 ) >> 2; - vL |= ( ( mL[ 2 ] + dataPtrL[ 11 ] ) & 0x88888888 ) >> 1; - vL |= ( ( mL[ 3 ] + dataPtrL[ 12 ] ) & 0x88888888 ); - vL = ( ~vL ) & 0x1FFFFFFF; - - /* compute partial bit sums */ - vL = ( vL & 0x55555555 ) + ( ( vL >> 1 ) & 0x55555555 ); - vL = ( vL & 0x33333333 ) + ( ( vL >> 2 ) & 0x33333333 ); - bsL += ( vL & 0x0F0F0F0F ) + ( ( vL >> 4 ) & 0x0F0F0F0F ); - } - - dataPtrL += 13; - } - - bsL = ( bsL & 0x00FF00FF ) + ( ( bsL >> 8 ) & 0x00FF00FF ); - bsL += bsL >> 16; - - /* compute final activity */ - { - uint32 actL = ( bsL & 0x0FFFF ); - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L01Dns2x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/L01Dns2x4Ftr.h deleted file mode 100644 index 6892463..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L01Dns2x4Ftr.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L01_DNS_2X4_FTR_EM_H -#define bbf_L01_DNS_2X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L01_DNS_2X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L01Dns2x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L01Dns2x4Ftr */ -void bbf_L01Dns2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA ); - -/** resets bbf_L01Dns2x4Ftr */ -void bbf_L01Dns2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L01Dns2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA, - const struct bbf_L01Dns2x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L01Dns2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L01Dns2x4Ftr* ptrA, - const struct bbf_L01Dns2x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L01Dns2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L01Dns2x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L01Dns2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L01Dns2x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L01Dns2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L01Dns2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L01Dns2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L01_DNS_2X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L01Tld1x1Ftr.c b/Embedded/common/src/b_BitFeatureEm/L01Tld1x1Ftr.c deleted file mode 100644 index 896002c..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L01Tld1x1Ftr.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L01Tld1x1Ftr.h" -#include "b_BitFeatureEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Tld1x1Ftr_init( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L01_TLD_1X1_FTR; - ptrA->baseE.vpActivityE = bbf_L01Tld1x1Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Tld1x1Ftr_exit( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Tld1x1Ftr_copy( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA, - const struct bbf_L01Tld1x1Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L01Tld1x1Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L01Tld1x1Ftr* ptrA, - const struct bbf_L01Tld1x1Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Tld1x1Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L01Tld1x1Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Tld1x1Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L01Tld1x1Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L01Tld1x1Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L01_TLD_1X1_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Tld1x1Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L01_TLD_1X1_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L01Tld1x1Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L01Tld1x1Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L01Tld1x1Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L01Tld1x1Ftr* ptrL = ( struct bbf_L01Tld1x1Ftr* )ptrA; - - int32 iL; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - const uint32* patchL = patchA; - - uint32 bsL = 0; - - for( iL = ptrL->baseE.patchWidthE >> 2; iL > 0; iL-- ) - { - uint32 vL; - vL = ( patchL[ 0 ] ^ dataPtrL[ 0 ] ) & dataPtrL[ 1 ]; - bsL += bbf_BIT_SUM_32( vL ); - - vL = ( patchL[ 1 ] ^ dataPtrL[ 2 ] ) & dataPtrL[ 3 ]; - bsL += bbf_BIT_SUM_32( vL ); - - vL = ( patchL[ 2 ] ^ dataPtrL[ 4 ] ) & dataPtrL[ 5 ]; - bsL += bbf_BIT_SUM_32( vL ); - - vL = ( patchL[ 3 ] ^ dataPtrL[ 6 ] ) & dataPtrL[ 7 ]; - bsL += bbf_BIT_SUM_32( vL ); - - dataPtrL += 8; - patchL += 4; - } - - return bsL * ptrL->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L01Tld1x1Ftr.h b/Embedded/common/src/b_BitFeatureEm/L01Tld1x1Ftr.h deleted file mode 100644 index 6f59a7c..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L01Tld1x1Ftr.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L01_TLD_1X1_FTR_EM_H -#define bbf_L01_TLD_1X1_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L01_TLD_1X1_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L01Tld1x1Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L01Tld1x1Ftr */ -void bbf_L01Tld1x1Ftr_init( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA ); - -/** resets bbf_L01Tld1x1Ftr */ -void bbf_L01Tld1x1Ftr_exit( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L01Tld1x1Ftr_copy( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA, - const struct bbf_L01Tld1x1Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L01Tld1x1Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L01Tld1x1Ftr* ptrA, - const struct bbf_L01Tld1x1Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L01Tld1x1Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L01Tld1x1Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L01Tld1x1Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L01Tld1x1Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L01Tld1x1Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L01Tld1x1Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L01Tld1x1Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L01_TLD_1X1_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L01Tld2x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/L01Tld2x4Ftr.c deleted file mode 100644 index 62758c1..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L01Tld2x4Ftr.c +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L01Tld2x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Tld2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L01_TLD_2X4_FTR; - ptrA->baseE.vpActivityE = bbf_L01Tld2x4Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Tld2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L01Tld2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA, - const struct bbf_L01Tld2x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L01Tld2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L01Tld2x4Ftr* ptrA, - const struct bbf_L01Tld2x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Tld2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L01Tld2x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Tld2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L01Tld2x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L01Tld2x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L01_TLD_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L01Tld2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L01_TLD_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L01Tld2x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L01Tld2x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L01Tld2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L01Tld2x4Ftr* ptrL = ( struct bbf_L01Tld2x4Ftr* )ptrA; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - const uint32* patchL = patchA; - - uint32 iL; - - uint32 bs1L = 0; - uint32 bs2L = 0; - - for( iL = ptrL->baseE.patchWidthE >> 3; iL > 0; iL-- ) - { - uint32 vL = ~dataPtrL[ 0 ]; - - /* compare with pattern */ - uint32 s1L = patchL[ 0 ] ^ dataPtrL[ 1 ]; - uint32 s2L = patchL[ 1 ] ^ dataPtrL[ 2 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 3 ] ) & 0x88888888 ) >> 3; - - /* compare with pattern */ - s1L = patchL[ 2 ] ^ dataPtrL[ 4 ]; - s2L = patchL[ 3 ] ^ dataPtrL[ 5 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 6 ] ) & 0x88888888 ) >> 2; - - /* compare with pattern */ - s1L = patchL[ 4 ] ^ dataPtrL[ 7 ]; - s2L = patchL[ 5 ] ^ dataPtrL[ 8 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 9 ] ) & 0x88888888 ) >> 1; - - /* compare with pattern */ - s1L = patchL[ 6 ] ^ dataPtrL[ 10 ]; - s2L = patchL[ 7 ] ^ dataPtrL[ 11 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 12 ] ) & 0x88888888 ); - - vL = ~vL; - - /* add bits */ - bs1L += vL & 0x55555555; - bs2L += ( vL >> 1 ) & 0x55555555; - - dataPtrL += 13; - patchL += 8; - } - - /* complete partial sums and compute final confidence */ - bs1L = ( bs1L & 0x33333333 ) + ( ( bs1L >> 2 ) & 0x33333333 ) + ( bs2L & 0x33333333 ) + ( ( bs2L >> 2 ) & 0x33333333 ); - bs1L = ( bs1L & 0x0F0F0F0F ) + ( ( bs1L >> 4 ) & 0x0F0F0F0F ); - bs1L += bs1L >> 8; - - /* compute final activity */ - { - uint32 actL = ( bs1L + ( bs1L >> 16 ) ) & 0x0FF; - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L01Tld2x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/L01Tld2x4Ftr.h deleted file mode 100644 index 5f33eb2..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L01Tld2x4Ftr.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L01_TLD_2X4_FTR_EM_H -#define bbf_L01_TLD_2X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L01_TLD_2X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L01Tld2x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L01Tld2x4Ftr */ -void bbf_L01Tld2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA ); - -/** resets bbf_L01Tld2x4Ftr */ -void bbf_L01Tld2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L01Tld2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA, - const struct bbf_L01Tld2x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L01Tld2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L01Tld2x4Ftr* ptrA, - const struct bbf_L01Tld2x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L01Tld2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L01Tld2x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L01Tld2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L01Tld2x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L01Tld2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L01Tld2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L01Tld2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L01_TLD_2X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Dns2x2Ftr.c b/Embedded/common/src/b_BitFeatureEm/L04Dns2x2Ftr.c deleted file mode 100644 index c06ccd4..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Dns2x2Ftr.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L04Dns2x2Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns2x2Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L04_DNS_2X2_FTR; - ptrA->baseE.vpActivityE = bbf_L04Dns2x2Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->wShiftE = 0; - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns2x2Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->wShiftE = 0; - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns2x2Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA, - const struct bbf_L04Dns2x2Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->wShiftE = srcPtrA->wShiftE; - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L04Dns2x2Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Dns2x2Ftr* ptrA, - const struct bbf_L04Dns2x2Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->wShiftE != srcPtrA->wShiftE ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns2x2Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Dns2x2Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->wShiftE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns2x2Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Dns2x2Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L04Dns2x2Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L04_DNS_2X2_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->wShiftE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns2x2Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L04_DNS_2X2_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->wShiftE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L04Dns2x2Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L04Dns2x2Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L04Dns2x2Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L04Dns2x2Ftr* ptrL = ( struct bbf_L04Dns2x2Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 1; - uint32 hL = ptrL->baseE.patchHeightE - 1; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - uint32 iL; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - const uint32* patchL = patchA; - int32 sumL = 0; - - uint32 bL[ 4 ] = { 0, 0, 0, 0 }; /* bit sum */ - - for( iL = 0; iL < wL; iL++ ) - { - uint32 vL = ( patchL[ 0 ] ^ dataPtrL[ 0 ] ) & - ( ( patchL[ 0 ] >> 1 ) ^ dataPtrL[ 1 ] ) & - ( ( patchL[ 1 ] ) ^ dataPtrL[ 2 ] ) & - ( ( patchL[ 1 ] >> 1 ) ^ dataPtrL[ 3 ] ) & borderMaskL; - - - { - uint32 vmL; - vmL = vL & dataPtrL[ 4 ]; - bL[ 0 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 5 ]; - bL[ 1 ] += bbf_BIT_SUM_32( vmL); - vmL = vL & dataPtrL[ 6 ]; - bL[ 2 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 7 ]; - bL[ 3 ] += bbf_BIT_SUM_32( vmL ); - } - - sumL += bbf_BIT_SUM_32( vL ); - - patchL++; - dataPtrL += 8; - } - - /* compute final activity */ - { - uint32 actL = ( ( bL[ 0 ] << 3 ) + ( bL[ 1 ] << 2 ) + ( bL[ 2 ] << 1 ) + bL[ 3 ] ); - return actL * ptrL->activityFactorE + sumL * ptrL->wShiftE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Dns2x2Ftr.h b/Embedded/common/src/b_BitFeatureEm/L04Dns2x2Ftr.h deleted file mode 100644 index 339be50..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Dns2x2Ftr.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L04_DNS_2X2_FTR_EM_H -#define bbf_L04_DNS_2X2_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L04_DNS_2X2_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L04Dns2x2Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** weight shift */ - int32 wShiftE; - - /** factor to convert activity to proper range */ - int32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L04Dns2x2Ftr */ -void bbf_L04Dns2x2Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA ); - -/** resets bbf_L04Dns2x2Ftr */ -void bbf_L04Dns2x2Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L04Dns2x2Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA, - const struct bbf_L04Dns2x2Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L04Dns2x2Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Dns2x2Ftr* ptrA, - const struct bbf_L04Dns2x2Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L04Dns2x2Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Dns2x2Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L04Dns2x2Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Dns2x2Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L04Dns2x2Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Dns2x2Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L04Dns2x2Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L04_DNS_2X2_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Dns2x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/L04Dns2x4Ftr.c deleted file mode 100644 index 87e3e2d..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Dns2x4Ftr.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L04Dns2x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L04_DNS_2X4_FTR; - ptrA->baseE.vpActivityE = bbf_L04Dns2x4Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA, - const struct bbf_L04Dns2x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L04Dns2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Dns2x4Ftr* ptrA, - const struct bbf_L04Dns2x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Dns2x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Dns2x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L04Dns2x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L04_DNS_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L04_DNS_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L04Dns2x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L04Dns2x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L04Dns2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L04Dns2x4Ftr* ptrL = ( struct bbf_L04Dns2x4Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 1; - uint32 hL = ptrL->baseE.patchHeightE - 3; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - - uint32 iL; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - uint32 sL[ 8 ]; - uint32 mL[ 4 ]; - uint32 bL[ 4 ] = { 0, 0, 0, 0 }; /* bit sum */ - - for( iL = 0; iL < wL; iL++ ) - { - uint32 s1L = patchA[ iL ]; - uint32 s2L = patchA[ iL + 1 ]; - - /* comparison of pixels with patchHeightE - 3 features */ - sL[ 0 ] = ( ( s1L ) ^ dataPtrL[ 0 ] ) & borderMaskL; - sL[ 1 ] = ( ( s1L >> 1 ) ^ dataPtrL[ 1 ] ) & borderMaskL; - sL[ 2 ] = ( ( s1L >> 2 ) ^ dataPtrL[ 2 ] ) & borderMaskL; - sL[ 3 ] = ( ( s1L >> 3 ) ^ dataPtrL[ 3 ] ) & borderMaskL; - - sL[ 4 ] = ( ( s2L ) ^ dataPtrL[ 4 ] ) & borderMaskL; - sL[ 5 ] = ( ( s2L >> 1 ) ^ dataPtrL[ 5 ] ) & borderMaskL; - sL[ 6 ] = ( ( s2L >> 2 ) ^ dataPtrL[ 6 ] ) & borderMaskL; - sL[ 7 ] = ( ( s2L >> 3 ) ^ dataPtrL[ 7 ] ) & borderMaskL; - - /* parallel bit counting of patchHeightE - 3 features */ - mL[ 0 ] = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + - ( sL[ 2 ] & 0x11111111 ) + ( sL[ 3 ] & 0x11111111 ) + - ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) ); - - mL[ 1 ] = ( ( sL[ 0 ] & 0x22222222 ) + ( sL[ 1 ] & 0x22222222 ) + - ( sL[ 2 ] & 0x22222222 ) + ( sL[ 3 ] & 0x22222222 ) + - ( sL[ 4 ] & 0x22222222 ) + ( sL[ 5 ] & 0x22222222 ) + - ( sL[ 6 ] & 0x22222222 ) + ( sL[ 7 ] & 0x22222222 ) ) >> 1; - - mL[ 2 ] = ( ( sL[ 0 ] & 0x44444444 ) + ( sL[ 1 ] & 0x44444444 ) + - ( sL[ 2 ] & 0x44444444 ) + ( sL[ 3 ] & 0x44444444 ) + - ( sL[ 4 ] & 0x44444444 ) + ( sL[ 5 ] & 0x44444444 ) + - ( sL[ 6 ] & 0x44444444 ) + ( sL[ 7 ] & 0x44444444 ) ) >> 2; - - mL[ 3 ] = ( ( sL[ 0 ] & 0x88888888 ) + ( sL[ 1 ] & 0x88888888 ) + - ( sL[ 2 ] & 0x88888888 ) + ( sL[ 3 ] & 0x88888888 ) + - ( sL[ 4 ] & 0x88888888 ) + ( sL[ 5 ] & 0x88888888 ) + - ( sL[ 6 ] & 0x88888888 ) + ( sL[ 7 ] & 0x88888888 ) ) >> 3; - - /* parallel comparison with thresholds and packing of results into bit array of size patchHeightE - 3 */ - { - uint32 vL = 0; - vL |= ( ( mL[ 0 ] + dataPtrL[ 8 ] ) & 0x88888888 ) >> 3; - vL |= ( ( mL[ 1 ] + dataPtrL[ 9 ] ) & 0x88888888 ) >> 2; - vL |= ( ( mL[ 2 ] + dataPtrL[ 10 ] ) & 0x88888888 ) >> 1; - vL |= ( ( mL[ 3 ] + dataPtrL[ 11 ] ) & 0x88888888 ); - - vL = ( ~vL ) & 0x1FFFFFFF; - - /* mask out and count bits */ - { - uint32 vmL; - vmL = vL & dataPtrL[ 12 ]; - bL[ 0 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 13 ]; - bL[ 1 ] += bbf_BIT_SUM_32( vmL); - vmL = vL & dataPtrL[ 14 ]; - bL[ 2 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 15 ]; - bL[ 3 ] += bbf_BIT_SUM_32( vmL ); - } - - dataPtrL += 16; - } - } - - /* compute final activity */ - { - uint32 actL = ( ( bL[ 0 ] << 3 ) + ( bL[ 1 ] << 2 ) + ( bL[ 2 ] << 1 ) + bL[ 3 ] ); - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Dns2x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/L04Dns2x4Ftr.h deleted file mode 100644 index bf210e7..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Dns2x4Ftr.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L04_DNS_2X4_FTR_EM_H -#define bbf_L04_DNS_2X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L04_DNS_2X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L04Dns2x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L04Dns2x4Ftr */ -void bbf_L04Dns2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA ); - -/** resets bbf_L04Dns2x4Ftr */ -void bbf_L04Dns2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L04Dns2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA, - const struct bbf_L04Dns2x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L04Dns2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Dns2x4Ftr* ptrA, - const struct bbf_L04Dns2x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L04Dns2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Dns2x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L04Dns2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Dns2x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L04Dns2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Dns2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L04Dns2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L04_DNS_2X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Dns3x3Ftr.c b/Embedded/common/src/b_BitFeatureEm/L04Dns3x3Ftr.c deleted file mode 100644 index edb5553..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Dns3x3Ftr.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L04Dns3x3Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns3x3Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L04_DNS_3X3_FTR; - ptrA->baseE.vpActivityE = bbf_L04Dns3x3Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns3x3Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Dns3x3Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA, - const struct bbf_L04Dns3x3Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L04Dns3x3Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Dns3x3Ftr* ptrA, - const struct bbf_L04Dns3x3Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns3x3Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Dns3x3Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns3x3Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Dns3x3Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L04Dns3x3Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L04_DNS_3X3_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Dns3x3Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L04_DNS_3X3_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L04Dns3x3Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L04Dns3x3Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L04Dns3x3Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L04Dns3x3Ftr* ptrL = ( struct bbf_L04Dns3x3Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 2; - uint32 hL = ptrL->baseE.patchHeightE - 2; - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - uint32 iL; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - uint32 sL[ 9 ]; - uint32 bL[ 4 ] = { 0, 0, 0, 0 }; /* bit sum */ - - for( iL = 0; iL < wL; iL++ ) - { - uint32 vL, mL, tL; /* bit sum and thresholds */ - - uint32 s1L = patchA[ iL ]; - uint32 s2L = patchA[ iL + 1 ]; - uint32 s3L = patchA[ iL + 2 ]; - - /* comparison of pixels with patchHeightE - 3 features */ - sL[ 0 ] = ( ( s1L ) ^ dataPtrL[ 0 ] ) & borderMaskL; - sL[ 1 ] = ( ( s1L >> 1 ) ^ dataPtrL[ 1 ] ) & borderMaskL; - sL[ 2 ] = ( ( s1L >> 2 ) ^ dataPtrL[ 2 ] ) & borderMaskL; - - sL[ 3 ] = ( ( s2L ) ^ dataPtrL[ 3 ] ) & borderMaskL; - sL[ 4 ] = ( ( s2L >> 1 ) ^ dataPtrL[ 4 ] ) & borderMaskL; - sL[ 5 ] = ( ( s2L >> 2 ) ^ dataPtrL[ 5 ] ) & borderMaskL; - - sL[ 6 ] = ( ( s3L ) ^ dataPtrL[ 6 ] ) & borderMaskL; - sL[ 7 ] = ( ( s3L >> 1 ) ^ dataPtrL[ 7 ] ) & borderMaskL; - sL[ 8 ] = ( ( s3L >> 2 ) ^ dataPtrL[ 8 ] ) & borderMaskL; - - /* parallel bit counting of patchHeightE - 2 features */ - vL = 0; - - mL = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + ( sL[ 2 ] & 0x11111111 ) + - ( sL[ 3 ] & 0x11111111 ) + ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) + ( sL[ 8 ] & 0x11111111 ) ); - - tL = dataPtrL[ 9 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 4; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ); - - /* shift values to prevent overflow in next summation */ - sL[ 0 ] >>= 1; sL[ 1 ] >>= 1; sL[ 2 ] >>= 1; - sL[ 3 ] >>= 1; sL[ 4 ] >>= 1; sL[ 5 ] >>= 1; - sL[ 6 ] >>= 1; sL[ 7 ] >>= 1; sL[ 8 ] >>= 1; - - mL = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + ( sL[ 2 ] & 0x11111111 ) + - ( sL[ 3 ] & 0x11111111 ) + ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) + ( sL[ 8 ] & 0x11111111 ) ); - - tL = dataPtrL[ 10 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 3; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ) << 1; - - mL = ( ( sL[ 0 ] & 0x02222222 ) + ( sL[ 1 ] & 0x02222222 ) + ( sL[ 2 ] & 0x02222222 ) + - ( sL[ 3 ] & 0x02222222 ) + ( sL[ 4 ] & 0x02222222 ) + ( sL[ 5 ] & 0x02222222 ) + - ( sL[ 6 ] & 0x02222222 ) + ( sL[ 7 ] & 0x02222222 ) + ( sL[ 8 ] & 0x02222222 ) ) >> 1; - - tL = dataPtrL[ 11 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 2; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ) << 2; - - mL = ( ( sL[ 0 ] & 0x04444444 ) + ( sL[ 1 ] & 0x04444444 ) + ( sL[ 2 ] & 0x04444444 ) + - ( sL[ 3 ] & 0x04444444 ) + ( sL[ 4 ] & 0x04444444 ) + ( sL[ 5 ] & 0x04444444 ) + - ( sL[ 6 ] & 0x04444444 ) + ( sL[ 7 ] & 0x04444444 ) + ( sL[ 8 ] & 0x04444444 ) ) >> 2; - - tL = dataPtrL[ 12 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 1; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ) << 3; - - vL = ~vL; - - /* mask out and count bits */ - { - uint32 vmL; - vmL = vL & dataPtrL[ 13 ]; - bL[ 0 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 14 ]; - bL[ 1 ] += bbf_BIT_SUM_32( vmL); - vmL = vL & dataPtrL[ 15 ]; - bL[ 2 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 16 ]; - bL[ 3 ] += bbf_BIT_SUM_32( vmL ); - } - - dataPtrL += 17; - } - - /* compute final activity */ - { - uint32 actL = ( ( bL[ 0 ] << 3 ) + ( bL[ 1 ] << 2 ) + ( bL[ 2 ] << 1 ) + bL[ 3 ] ); - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Dns3x3Ftr.h b/Embedded/common/src/b_BitFeatureEm/L04Dns3x3Ftr.h deleted file mode 100644 index cfc691b..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Dns3x3Ftr.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L04_DNS_3X3_FTR_EM_H -#define bbf_L04_DNS_3X3_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L04_DNS_3X3_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L04Dns3x3Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L04Dns3x3Ftr */ -void bbf_L04Dns3x3Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA ); - -/** resets bbf_L04Dns3x3Ftr */ -void bbf_L04Dns3x3Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L04Dns3x3Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA, - const struct bbf_L04Dns3x3Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L04Dns3x3Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Dns3x3Ftr* ptrA, - const struct bbf_L04Dns3x3Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L04Dns3x3Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Dns3x3Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L04Dns3x3Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Dns3x3Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L04Dns3x3Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Dns3x3Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L04Dns3x3Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L04_DNS_3X3_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Tld2x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/L04Tld2x4Ftr.c deleted file mode 100644 index 2eeec73..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Tld2x4Ftr.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L04Tld2x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Tld2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L04_TLD_2X4_FTR; - ptrA->baseE.vpActivityE = bbf_L04Tld2x4Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Tld2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L04Tld2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA, - const struct bbf_L04Tld2x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L04Tld2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Tld2x4Ftr* ptrA, - const struct bbf_L04Tld2x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Tld2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Tld2x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Tld2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Tld2x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L04Tld2x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L04_TLD_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L04Tld2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L04_TLD_2X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L04Tld2x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L04Tld2x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L04Tld2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L04Tld2x4Ftr* ptrL = ( struct bbf_L04Tld2x4Ftr* )ptrA; - - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - const uint32* patchL = patchA; - - uint32 iL; - - uint32 bL[ 4 ] = { 0, 0, 0, 0 }; /* bit sum */ - - for( iL = ptrL->baseE.patchWidthE >> 3; iL > 0; iL-- ) - { - uint32 vL; - - /* compare with pattern */ - uint32 s1L = patchL[ 0 ] ^ dataPtrL[ 0 ]; - uint32 s2L = patchL[ 1 ] ^ dataPtrL[ 1 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL = ( ( s1L + s2L + dataPtrL[ 2 ] ) & 0x88888888 ) >> 3; - - /* compare with pattern */ - s1L = patchL[ 2 ] ^ dataPtrL[ 3 ]; - s2L = patchL[ 3 ] ^ dataPtrL[ 4 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 5 ] ) & 0x88888888 ) >> 2; - - /* compare with pattern */ - s1L = patchL[ 4 ] ^ dataPtrL[ 6 ]; - s2L = patchL[ 5 ] ^ dataPtrL[ 7 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 8 ] ) & 0x88888888 ) >> 1; - - /* compare with pattern */ - s1L = patchL[ 6 ] ^ dataPtrL[ 9 ]; - s2L = patchL[ 7 ] ^ dataPtrL[ 10 ]; - - /* bit count */ - s1L = ( s1L & 0x55555555 ) + ( ( s1L >> 1 ) & 0x55555555 ); - s1L = ( s1L & 0x33333333 ) + ( ( s1L >> 2 ) & 0x33333333 ); - s2L = ( s2L & 0x55555555 ) + ( ( s2L >> 1 ) & 0x55555555 ); - s2L = ( s2L & 0x33333333 ) + ( ( s2L >> 2 ) & 0x33333333 ); - - /* compare with threshold and store results in vL */ - vL |= ( ( s1L + s2L + dataPtrL[ 11 ] ) & 0x88888888 ); - - /* invert bits */ - vL = ~vL; - - { - uint32 vmL; - vmL = vL & dataPtrL[ 12 ]; - bL[ 0 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 13 ]; - bL[ 1 ] += bbf_BIT_SUM_32( vmL); - vmL = vL & dataPtrL[ 14 ]; - bL[ 2 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 15 ]; - bL[ 3 ] += bbf_BIT_SUM_32( vmL ); - } - - dataPtrL += 16; - patchL += 8; - } - - /* compute final activity */ - { - uint32 actL = ( ( bL[ 0 ] << 3 ) + ( bL[ 1 ] << 2 ) + ( bL[ 2 ] << 1 ) + bL[ 3 ] ); - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L04Tld2x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/L04Tld2x4Ftr.h deleted file mode 100644 index 4033753..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L04Tld2x4Ftr.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L04_TLD_2X4_FTR_EM_H -#define bbf_L04_TLD_2X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L04_TLD_2X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L04Tld2x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range (.36) */ - int32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L04Tld2x4Ftr */ -void bbf_L04Tld2x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA ); - -/** resets bbf_L04Tld2x4Ftr */ -void bbf_L04Tld2x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L04Tld2x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA, - const struct bbf_L04Tld2x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L04Tld2x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L04Tld2x4Ftr* ptrA, - const struct bbf_L04Tld2x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L04Tld2x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L04Tld2x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L04Tld2x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L04Tld2x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L04Tld2x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L04Tld2x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L04Tld2x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L04_TLD_2X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L06Dns3x3Ftr.c b/Embedded/common/src/b_BitFeatureEm/L06Dns3x3Ftr.c deleted file mode 100644 index 438c8ac..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L06Dns3x3Ftr.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L06Dns3x3Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L06Dns3x3Ftr_init( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L06_DNS_3X3_FTR; - ptrA->baseE.vpActivityE = bbf_L06Dns3x3Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L06Dns3x3Ftr_exit( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L06Dns3x3Ftr_copy( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA, - const struct bbf_L06Dns3x3Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L06Dns3x3Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L06Dns3x3Ftr* ptrA, - const struct bbf_L06Dns3x3Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06Dns3x3Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L06Dns3x3Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06Dns3x3Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L06Dns3x3Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L06Dns3x3Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L06_DNS_3X3_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06Dns3x3Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L06_DNS_3X3_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L06Dns3x3Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L06Dns3x3Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L06Dns3x3Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L06Dns3x3Ftr* ptrL = ( struct bbf_L06Dns3x3Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 2; - uint32 hL = ptrL->baseE.patchHeightE - 2; - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - uint32 iL; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - uint32 sL[ 9 ]; - uint32 bL[ 6 ] = { 0, 0, 0, 0, 0, 0 }; /* bit sum */ - - for( iL = 0; iL < wL; iL++ ) - { - uint32 vL, mL, tL; /* bit sum and thresholds */ - - uint32 s1L = patchA[ iL ]; - uint32 s2L = patchA[ iL + 1 ]; - uint32 s3L = patchA[ iL + 2 ]; - - /* comparison of pixels with patchHeightE - 3 features */ - sL[ 0 ] = ( ( s1L ) ^ dataPtrL[ 0 ] ) & borderMaskL; - sL[ 1 ] = ( ( s1L >> 1 ) ^ dataPtrL[ 1 ] ) & borderMaskL; - sL[ 2 ] = ( ( s1L >> 2 ) ^ dataPtrL[ 2 ] ) & borderMaskL; - - sL[ 3 ] = ( ( s2L ) ^ dataPtrL[ 3 ] ) & borderMaskL; - sL[ 4 ] = ( ( s2L >> 1 ) ^ dataPtrL[ 4 ] ) & borderMaskL; - sL[ 5 ] = ( ( s2L >> 2 ) ^ dataPtrL[ 5 ] ) & borderMaskL; - - sL[ 6 ] = ( ( s3L ) ^ dataPtrL[ 6 ] ) & borderMaskL; - sL[ 7 ] = ( ( s3L >> 1 ) ^ dataPtrL[ 7 ] ) & borderMaskL; - sL[ 8 ] = ( ( s3L >> 2 ) ^ dataPtrL[ 8 ] ) & borderMaskL; - - /* parallel bit counting of patchHeightE - 2 features */ - - vL = 0; - - mL = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + ( sL[ 2 ] & 0x11111111 ) + - ( sL[ 3 ] & 0x11111111 ) + ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) + ( sL[ 8 ] & 0x11111111 ) ); - - tL = dataPtrL[ 9 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 4; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ); - - /* shift values to prevent overflow in next summation */ - sL[ 0 ] >>= 1; sL[ 1 ] >>= 1; sL[ 2 ] >>= 1; - sL[ 3 ] >>= 1; sL[ 4 ] >>= 1; sL[ 5 ] >>= 1; - sL[ 6 ] >>= 1; sL[ 7 ] >>= 1; sL[ 8 ] >>= 1; - - mL = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + ( sL[ 2 ] & 0x11111111 ) + - ( sL[ 3 ] & 0x11111111 ) + ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) + ( sL[ 8 ] & 0x11111111 ) ); - - tL = dataPtrL[ 10 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 3; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ) << 1; - - mL = ( ( sL[ 0 ] & 0x02222222 ) + ( sL[ 1 ] & 0x02222222 ) + ( sL[ 2 ] & 0x02222222 ) + - ( sL[ 3 ] & 0x02222222 ) + ( sL[ 4 ] & 0x02222222 ) + ( sL[ 5 ] & 0x02222222 ) + - ( sL[ 6 ] & 0x02222222 ) + ( sL[ 7 ] & 0x02222222 ) + ( sL[ 8 ] & 0x02222222 ) ) >> 1; - - tL = dataPtrL[ 11 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 2; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ) << 2; - - mL = ( ( sL[ 0 ] & 0x04444444 ) + ( sL[ 1 ] & 0x04444444 ) + ( sL[ 2 ] & 0x04444444 ) + - ( sL[ 3 ] & 0x04444444 ) + ( sL[ 4 ] & 0x04444444 ) + ( sL[ 5 ] & 0x04444444 ) + - ( sL[ 6 ] & 0x04444444 ) + ( sL[ 7 ] & 0x04444444 ) + ( sL[ 8 ] & 0x04444444 ) ) >> 2; - - tL = dataPtrL[ 12 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) ) & 0x10101010 ) >> 1; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) ) & 0x10101010 ) << 3; - - vL = ~vL; - - /* mask out and count bits */ - { - uint32 vmL; - vmL = vL & dataPtrL[ 13 ]; - bL[ 0 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 14 ]; - bL[ 1 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 15 ]; - bL[ 2 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 16 ]; - bL[ 3 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 17 ]; - bL[ 4 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 18 ]; - bL[ 5 ] += bbf_BIT_SUM_32( vmL ); - } - - dataPtrL += 19; - } - - /* compute final activity */ - { - uint32 actL = ( ( bL[ 0 ] << 5 ) + ( bL[ 1 ] << 4 ) + ( bL[ 2 ] << 3 ) + - ( bL[ 3 ] << 2 ) + ( bL[ 4 ] << 1 ) + ( bL[ 5 ] ) ); - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L06Dns3x3Ftr.h b/Embedded/common/src/b_BitFeatureEm/L06Dns3x3Ftr.h deleted file mode 100644 index bd4ace4..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L06Dns3x3Ftr.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L06_DNS_3X3_FTR_EM_H -#define bbf_L06_DNS_3X3_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L06_DNS_3X3_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L06Dns3x3Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L06Dns3x3Ftr */ -void bbf_L06Dns3x3Ftr_init( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA ); - -/** resets bbf_L06Dns3x3Ftr */ -void bbf_L06Dns3x3Ftr_exit( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L06Dns3x3Ftr_copy( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA, - const struct bbf_L06Dns3x3Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L06Dns3x3Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L06Dns3x3Ftr* ptrA, - const struct bbf_L06Dns3x3Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L06Dns3x3Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L06Dns3x3Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L06Dns3x3Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L06Dns3x3Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L06Dns3x3Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L06Dns3x3Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L06Dns3x3Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L06_DNS_3X3_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L06Dns4x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/L06Dns4x4Ftr.c deleted file mode 100644 index bb33edc..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L06Dns4x4Ftr.c +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L06Dns4x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L06Dns4x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L06_DNS_4X4_FTR; - ptrA->baseE.vpActivityE = bbf_L06Dns4x4Ftr_activity; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L06Dns4x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L06Dns4x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA, - const struct bbf_L06Dns4x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L06Dns4x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L06Dns4x4Ftr* ptrA, - const struct bbf_L06Dns4x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06Dns4x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L06Dns4x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06Dns4x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L06Dns4x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L06Dns4x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L06_DNS_4X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06Dns4x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L06_DNS_4X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L06Dns4x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L06Dns4x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L06Dns4x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L06Dns4x4Ftr* ptrL = ( struct bbf_L06Dns4x4Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 3; - uint32 hL = ptrL->baseE.patchHeightE - 3; - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - uint32 iL; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - uint32 sL[ 16 ]; - uint32 bL[ 6 ] = { 0, 0, 0, 0, 0, 0 }; /* bit sum */ - - for( iL = 0; iL < wL; iL++ ) - { - uint32 vL, mL, tL; /* bit sum and thresholds */ - - uint32 s1L = patchA[ iL ]; - uint32 s2L = patchA[ iL + 1 ]; - uint32 s3L = patchA[ iL + 2 ]; - uint32 s4L = patchA[ iL + 3 ]; - - /* comparison of pixels with patchHeightE - 3 features */ - sL[ 0 ] = ( ( s1L ) ^ dataPtrL[ 0 ] ) & borderMaskL; - sL[ 1 ] = ( ( s1L >> 1 ) ^ dataPtrL[ 1 ] ) & borderMaskL; - sL[ 2 ] = ( ( s1L >> 2 ) ^ dataPtrL[ 2 ] ) & borderMaskL; - sL[ 3 ] = ( ( s1L >> 3 ) ^ dataPtrL[ 3 ] ) & borderMaskL; - - sL[ 4 ] = ( ( s2L ) ^ dataPtrL[ 4 ] ) & borderMaskL; - sL[ 5 ] = ( ( s2L >> 1 ) ^ dataPtrL[ 5 ] ) & borderMaskL; - sL[ 6 ] = ( ( s2L >> 2 ) ^ dataPtrL[ 6 ] ) & borderMaskL; - sL[ 7 ] = ( ( s2L >> 3 ) ^ dataPtrL[ 7 ] ) & borderMaskL; - - sL[ 8 ] = ( ( s3L ) ^ dataPtrL[ 8 ] ) & borderMaskL; - sL[ 9 ] = ( ( s3L >> 1 ) ^ dataPtrL[ 9 ] ) & borderMaskL; - sL[ 10 ] = ( ( s3L >> 2 ) ^ dataPtrL[ 10 ] ) & borderMaskL; - sL[ 11 ] = ( ( s3L >> 3 ) ^ dataPtrL[ 11 ] ) & borderMaskL; - - sL[ 12 ] = ( ( s4L ) ^ dataPtrL[ 12 ] ) & borderMaskL; - sL[ 13 ] = ( ( s4L >> 1 ) ^ dataPtrL[ 13 ] ) & borderMaskL; - sL[ 14 ] = ( ( s4L >> 2 ) ^ dataPtrL[ 14 ] ) & borderMaskL; - sL[ 15 ] = ( ( s4L >> 3 ) ^ dataPtrL[ 15 ] ) & borderMaskL; - - /* parallel bit counting of patchHeightE - 2 features */ - - vL = 0; - - mL = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + ( sL[ 2 ] & 0x11111111 ) + - ( sL[ 3 ] & 0x11111111 ) + ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) + ( sL[ 8 ] & 0x11111111 ) + - ( sL[ 9 ] & 0x11111111 ) + ( sL[ 10 ] & 0x11111111 ) + ( sL[ 11 ] & 0x11111111 ) + - ( sL[ 12 ] & 0x11111111 ) + ( sL[ 13 ] & 0x11111111 ) + ( sL[ 14 ] & 0x11111111 ) ); - - tL = dataPtrL[ 16 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 4; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ); - - mL = ( ( sL[ 0 ] & 0x02222222 ) + ( sL[ 1 ] & 0x02222222 ) + ( sL[ 2 ] & 0x02222222 ) + - ( sL[ 3 ] & 0x02222222 ) + ( sL[ 4 ] & 0x02222222 ) + ( sL[ 5 ] & 0x02222222 ) + - ( sL[ 6 ] & 0x02222222 ) + ( sL[ 7 ] & 0x02222222 ) + ( sL[ 8 ] & 0x02222222 ) + - ( sL[ 9 ] & 0x02222222 ) + ( sL[ 10 ] & 0x02222222 ) + ( sL[ 11 ] & 0x02222222 ) + - ( sL[ 12 ] & 0x02222222 ) + ( sL[ 13 ] & 0x02222222 ) + ( sL[ 14 ] & 0x02222222 ) ) >> 1; - - sL[ 15 ] >>= 1; - tL = dataPtrL[ 17 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 3; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ) << 1; - - mL = ( ( sL[ 0 ] & 0x04444444 ) + ( sL[ 1 ] & 0x04444444 ) + ( sL[ 2 ] & 0x04444444 ) + - ( sL[ 3 ] & 0x04444444 ) + ( sL[ 4 ] & 0x04444444 ) + ( sL[ 5 ] & 0x04444444 ) + - ( sL[ 6 ] & 0x04444444 ) + ( sL[ 7 ] & 0x04444444 ) + ( sL[ 8 ] & 0x04444444 ) + - ( sL[ 9 ] & 0x04444444 ) + ( sL[ 10 ] & 0x04444444 ) + ( sL[ 11 ] & 0x04444444 ) + - ( sL[ 12 ] & 0x04444444 ) + ( sL[ 13 ] & 0x04444444 ) + ( sL[ 14 ] & 0x04444444 ) ) >> 2; - - sL[ 15 ] >>= 1; - tL = dataPtrL[ 18 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 2; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ) << 2; - - mL = ( ( sL[ 0 ] & 0x08888888 ) + ( sL[ 1 ] & 0x08888888 ) + ( sL[ 2 ] & 0x08888888 ) + - ( sL[ 3 ] & 0x08888888 ) + ( sL[ 4 ] & 0x08888888 ) + ( sL[ 5 ] & 0x08888888 ) + - ( sL[ 6 ] & 0x08888888 ) + ( sL[ 7 ] & 0x08888888 ) + ( sL[ 8 ] & 0x08888888 ) + - ( sL[ 9 ] & 0x08888888 ) + ( sL[ 10 ] & 0x08888888 ) + ( sL[ 11 ] & 0x08888888 ) + - ( sL[ 12 ] & 0x08888888 ) + ( sL[ 13 ] & 0x08888888 ) + ( sL[ 14 ] & 0x08888888 ) ) >> 3; - - sL[ 15 ] >>= 1; - tL = dataPtrL[ 19 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 1; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ) << 3; - - vL = ~vL; - - /* mask out and count bits */ - { - uint32 vmL; - vmL = vL & dataPtrL[ 20 ]; - bL[ 0 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 21 ]; - bL[ 1 ] += bbf_BIT_SUM_32( vmL); - vmL = vL & dataPtrL[ 22 ]; - bL[ 2 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 23 ]; - bL[ 3 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 24 ]; - bL[ 4 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 25 ]; - bL[ 5 ] += bbf_BIT_SUM_32( vmL ); - } - - dataPtrL += 26; - } - - /* compute final activity */ - { - uint32 actL = ( ( bL[ 0 ] << 5 ) + ( bL[ 1 ] << 4 ) + ( bL[ 2 ] << 3 ) + - ( bL[ 3 ] << 2 ) + ( bL[ 4 ] << 1 ) + ( bL[ 5 ] ) ); - - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L06Dns4x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/L06Dns4x4Ftr.h deleted file mode 100644 index 4085dd5..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L06Dns4x4Ftr.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L06_DNS_4X4_FTR_EM_H -#define bbf_L06_DNS_4X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L06_DNS_4X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L06Dns4x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L06Dns4x4Ftr */ -void bbf_L06Dns4x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA ); - -/** resets bbf_L06Dns4x4Ftr */ -void bbf_L06Dns4x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L06Dns4x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA, - const struct bbf_L06Dns4x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L06Dns4x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L06Dns4x4Ftr* ptrA, - const struct bbf_L06Dns4x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L06Dns4x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L06Dns4x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L06Dns4x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L06Dns4x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L06Dns4x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L06Dns4x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L06Dns4x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L06_DNS_4X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L06DnsNx4x4Ftr.c b/Embedded/common/src/b_BitFeatureEm/L06DnsNx4x4Ftr.c deleted file mode 100644 index 0077ee2..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L06DnsNx4x4Ftr.c +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/L06DnsNx4x4Ftr.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L06DnsNx4x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA ) -{ - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_L06_DNS_NX4X4_FTR; - ptrA->baseE.vpActivityE = bbf_L06DnsNx4x4Ftr_activity; - ptrA->layersE = 0; - bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_L06DnsNx4x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA ) -{ - bbf_Feature_exit( cpA, &ptrA->baseE ); - ptrA->layersE = 0; - bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); - ptrA->activityFactorE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_L06DnsNx4x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA, - const struct bbf_L06DnsNx4x4Ftr* srcPtrA ) -{ - bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); - ptrA->layersE = srcPtrA->layersE; - bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); - ptrA->activityFactorE = srcPtrA->activityFactorE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_L06DnsNx4x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L06DnsNx4x4Ftr* ptrA, - const struct bbf_L06DnsNx4x4Ftr* srcPtrA ) -{ - if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; - if( ptrA->layersE != srcPtrA->layersE ) return FALSE; - if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; - if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06DnsNx4x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L06DnsNx4x4Ftr* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_SIZEOF16( ptrA->layersE ); - memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); - memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06DnsNx4x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L06DnsNx4x4Ftr* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_L06DnsNx4x4Ftr_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_L06_DNS_NX4X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->layersE, memPtrA ); - memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_L06DnsNx4x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L06_DNS_NX4X4_FTR_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->layersE, memPtrA ); - memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); - if( memSizeL != bbf_L06DnsNx4x4Ftr_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L06DnsNx4x4Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_L06DnsNx4x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_L06DnsNx4x4Ftr* ptrL = ( struct bbf_L06DnsNx4x4Ftr* )ptrA; - - uint32 wL = ptrL->baseE.patchWidthE - 3; - uint32 hL = ptrL->baseE.patchHeightE - 3; - const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; - uint32 iL, jL; - - uint32 borderMaskL = ( ( uint32 )1 << hL ) - 1; - - uint32 sL[ 16 ]; - uint32 bL[ 6 ] = { 0, 0, 0, 0, 0, 0 }; /* bit sum */ - - for( jL = 0 ; jL < ptrL->layersE; jL++ ) - { - for( iL = 0; iL < wL; iL++ ) - { - uint32 vL, mL, tL; /* bit sum and thresholds */ - - uint32 s1L = patchA[ iL ]; - uint32 s2L = patchA[ iL + 1 ]; - uint32 s3L = patchA[ iL + 2 ]; - uint32 s4L = patchA[ iL + 3 ]; - - /* comparison of pixels with patchHeightE - 3 features */ - sL[ 0 ] = ( ( s1L ) ^ dataPtrL[ 0 ] ) & borderMaskL; - sL[ 1 ] = ( ( s1L >> 1 ) ^ dataPtrL[ 1 ] ) & borderMaskL; - sL[ 2 ] = ( ( s1L >> 2 ) ^ dataPtrL[ 2 ] ) & borderMaskL; - sL[ 3 ] = ( ( s1L >> 3 ) ^ dataPtrL[ 3 ] ) & borderMaskL; - - sL[ 4 ] = ( ( s2L ) ^ dataPtrL[ 4 ] ) & borderMaskL; - sL[ 5 ] = ( ( s2L >> 1 ) ^ dataPtrL[ 5 ] ) & borderMaskL; - sL[ 6 ] = ( ( s2L >> 2 ) ^ dataPtrL[ 6 ] ) & borderMaskL; - sL[ 7 ] = ( ( s2L >> 3 ) ^ dataPtrL[ 7 ] ) & borderMaskL; - - sL[ 8 ] = ( ( s3L ) ^ dataPtrL[ 8 ] ) & borderMaskL; - sL[ 9 ] = ( ( s3L >> 1 ) ^ dataPtrL[ 9 ] ) & borderMaskL; - sL[ 10 ] = ( ( s3L >> 2 ) ^ dataPtrL[ 10 ] ) & borderMaskL; - sL[ 11 ] = ( ( s3L >> 3 ) ^ dataPtrL[ 11 ] ) & borderMaskL; - - sL[ 12 ] = ( ( s4L ) ^ dataPtrL[ 12 ] ) & borderMaskL; - sL[ 13 ] = ( ( s4L >> 1 ) ^ dataPtrL[ 13 ] ) & borderMaskL; - sL[ 14 ] = ( ( s4L >> 2 ) ^ dataPtrL[ 14 ] ) & borderMaskL; - sL[ 15 ] = ( ( s4L >> 3 ) ^ dataPtrL[ 15 ] ) & borderMaskL; - - /* parallel bit counting of patchHeightE - 2 features */ - - vL = 0; - - mL = ( ( sL[ 0 ] & 0x11111111 ) + ( sL[ 1 ] & 0x11111111 ) + ( sL[ 2 ] & 0x11111111 ) + - ( sL[ 3 ] & 0x11111111 ) + ( sL[ 4 ] & 0x11111111 ) + ( sL[ 5 ] & 0x11111111 ) + - ( sL[ 6 ] & 0x11111111 ) + ( sL[ 7 ] & 0x11111111 ) + ( sL[ 8 ] & 0x11111111 ) + - ( sL[ 9 ] & 0x11111111 ) + ( sL[ 10 ] & 0x11111111 ) + ( sL[ 11 ] & 0x11111111 ) + - ( sL[ 12 ] & 0x11111111 ) + ( sL[ 13 ] & 0x11111111 ) + ( sL[ 14 ] & 0x11111111 ) ); - - tL = dataPtrL[ 16 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 4; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ); - - mL = ( ( sL[ 0 ] & 0x02222222 ) + ( sL[ 1 ] & 0x02222222 ) + ( sL[ 2 ] & 0x02222222 ) + - ( sL[ 3 ] & 0x02222222 ) + ( sL[ 4 ] & 0x02222222 ) + ( sL[ 5 ] & 0x02222222 ) + - ( sL[ 6 ] & 0x02222222 ) + ( sL[ 7 ] & 0x02222222 ) + ( sL[ 8 ] & 0x02222222 ) + - ( sL[ 9 ] & 0x02222222 ) + ( sL[ 10 ] & 0x02222222 ) + ( sL[ 11 ] & 0x02222222 ) + - ( sL[ 12 ] & 0x02222222 ) + ( sL[ 13 ] & 0x02222222 ) + ( sL[ 14 ] & 0x02222222 ) ) >> 1; - - sL[ 15 ] >>= 1; - tL = dataPtrL[ 17 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 3; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ) << 1; - - mL = ( ( sL[ 0 ] & 0x04444444 ) + ( sL[ 1 ] & 0x04444444 ) + ( sL[ 2 ] & 0x04444444 ) + - ( sL[ 3 ] & 0x04444444 ) + ( sL[ 4 ] & 0x04444444 ) + ( sL[ 5 ] & 0x04444444 ) + - ( sL[ 6 ] & 0x04444444 ) + ( sL[ 7 ] & 0x04444444 ) + ( sL[ 8 ] & 0x04444444 ) + - ( sL[ 9 ] & 0x04444444 ) + ( sL[ 10 ] & 0x04444444 ) + ( sL[ 11 ] & 0x04444444 ) + - ( sL[ 12 ] & 0x04444444 ) + ( sL[ 13 ] & 0x04444444 ) + ( sL[ 14 ] & 0x04444444 ) ) >> 2; - - sL[ 15 ] >>= 1; - tL = dataPtrL[ 18 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 2; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ) << 2; - - mL = ( ( sL[ 0 ] & 0x08888888 ) + ( sL[ 1 ] & 0x08888888 ) + ( sL[ 2 ] & 0x08888888 ) + - ( sL[ 3 ] & 0x08888888 ) + ( sL[ 4 ] & 0x08888888 ) + ( sL[ 5 ] & 0x08888888 ) + - ( sL[ 6 ] & 0x08888888 ) + ( sL[ 7 ] & 0x08888888 ) + ( sL[ 8 ] & 0x08888888 ) + - ( sL[ 9 ] & 0x08888888 ) + ( sL[ 10 ] & 0x08888888 ) + ( sL[ 11 ] & 0x08888888 ) + - ( sL[ 12 ] & 0x08888888 ) + ( sL[ 13 ] & 0x08888888 ) + ( sL[ 14 ] & 0x08888888 ) ) >> 3; - - sL[ 15 ] >>= 1; - tL = dataPtrL[ 19 ]; - - /* compare with thresholds and store results in vL */ - vL |= ( ( ( mL & 0x0F0F0F0F ) + ( tL & 0x0F0F0F0F ) + ( sL[ 15 ] & 0x01010101 ) ) & 0x10101010 ) >> 1; - vL |= ( ( ( ( mL >> 4 ) & 0x0F0F0F0F ) + ( ( tL >> 4 ) & 0x0F0F0F0F ) + ( ( sL[ 15 ] >> 4 ) & 0x01010101 ) ) & 0x10101010 ) << 3; - - vL = ~vL; - - { - uint32 vmL; - vmL = vL & dataPtrL[ 20 ]; - bL[ 0 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 21 ]; - bL[ 1 ] += bbf_BIT_SUM_32( vmL); - vmL = vL & dataPtrL[ 22 ]; - bL[ 2 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 23 ]; - bL[ 3 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 24 ]; - bL[ 4 ] += bbf_BIT_SUM_32( vmL ); - vmL = vL & dataPtrL[ 25 ]; - bL[ 5 ] += bbf_BIT_SUM_32( vmL ); - } - - dataPtrL += 26; - } - } - - /* compute final activity */ - { - uint32 actL = ( ( bL[ 0 ] << 5 ) + ( bL[ 1 ] << 4 ) + ( bL[ 2 ] << 3 ) + - ( bL[ 3 ] << 2 ) + ( bL[ 4 ] << 1 ) + ( bL[ 5 ] ) ); - - return actL * ptrL->activityFactorE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/L06DnsNx4x4Ftr.h b/Embedded/common/src/b_BitFeatureEm/L06DnsNx4x4Ftr.h deleted file mode 100644 index a3d0677..0000000 --- a/Embedded/common/src/b_BitFeatureEm/L06DnsNx4x4Ftr.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_L06_DNS_NX4X4_FTR_EM_H -#define bbf_L06_DNS_NX4X4_FTR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_L06_DNS_NX4X4_FTR_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_L06DnsNx4x4Ftr -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** base element */ - struct bbf_Feature baseE; - - /** number of layers */ - uint32 layersE; - - /** data array */ - struct bbs_UInt32Arr dataArrE; - - /** factor to convert activity to proper range */ - uint32 activityFactorE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_L06DnsNx4x4Ftr */ -void bbf_L06DnsNx4x4Ftr_init( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA ); - -/** resets bbf_L06DnsNx4x4Ftr */ -void bbf_L06DnsNx4x4Ftr_exit( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_L06DnsNx4x4Ftr_copy( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA, - const struct bbf_L06DnsNx4x4Ftr* srcPtrA ); - -/** equal operator */ -flag bbf_L06DnsNx4x4Ftr_equal( struct bbs_Context* cpA, - const struct bbf_L06DnsNx4x4Ftr* ptrA, - const struct bbf_L06DnsNx4x4Ftr* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_L06DnsNx4x4Ftr_memSize( struct bbs_Context* cpA, - const struct bbf_L06DnsNx4x4Ftr* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_L06DnsNx4x4Ftr_memWrite( struct bbs_Context* cpA, - const struct bbf_L06DnsNx4x4Ftr* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_L06DnsNx4x4Ftr_memRead( struct bbs_Context* cpA, - struct bbf_L06DnsNx4x4Ftr* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_L06DnsNx4x4Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_L06_DNS_NX4X4_FTR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/LocalScanDetector.c b/Embedded/common/src/b_BitFeatureEm/LocalScanDetector.c deleted file mode 100644 index 880dba3..0000000 --- a/Embedded/common/src/b_BitFeatureEm/LocalScanDetector.c +++ /dev/null @@ -1,745 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_ImageEm/Functions.h" -#include "b_BitFeatureEm/LocalScanDetector.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/** applies PCA mapping - * Input and output clusters may be identical - */ -void bbf_LocalScanDetector_pcaMap( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA, - const struct bts_IdCluster2D* inClusterPtrA, - struct bts_IdCluster2D* outClusterPtrA ) -{ - bbs_DEF_fNameL( "bbf_LocalScanDetector_pcaMap" ) - - struct bts_Cluster2D* tmpCl1PtrL = ( struct bts_Cluster2D* )&ptrA->tmpCluster1E; - struct bts_Cluster2D* tmpCl2PtrL = ( struct bts_Cluster2D* )&ptrA->tmpCluster2E; - struct bts_RBFMap2D* rbfPtrL = ( struct bts_RBFMap2D* )&ptrA->rbfMapE; - struct bts_Flt16Alt2D altL; - uint32 outBbpL = inClusterPtrA->clusterE.bbpE; - uint32 iL, jL; - - /* setup two equivalent clusters holding the essential (alt-free) moves to be handled by PCA */ - bts_IdCluster2D_convertToEqivalentClusters( cpA, - inClusterPtrA, - &ptrA->pcaClusterE, - tmpCl1PtrL, - tmpCl2PtrL ); - - altL = bts_Cluster2D_alt( cpA, tmpCl1PtrL, tmpCl2PtrL, bts_ALT_RIGID ); - bts_Cluster2D_transform( cpA, tmpCl1PtrL, altL ); - bts_RBFMap2D_compute( cpA, rbfPtrL, tmpCl2PtrL, tmpCl1PtrL ); - bts_RBFMap2D_mapCluster( cpA, rbfPtrL, &ptrA->pcaClusterE.clusterE, tmpCl1PtrL, 6/* ! */ ); - - /* PCA projection: cluster1 -> cluster1 */ - { - /* mat elements: 8.8 */ - const int16* matPtrL = ptrA->pcaMatE.arrPtrE; - - /* same bbp as pca cluster */ - const int16* avgPtrL = ptrA->pcaAvgE.arrPtrE; - - struct bts_Int16Vec2D* vecArrL = tmpCl1PtrL->vecArrE; - - /* projected vector */ - int32 prjVecL[ bpi_LOCAL_SCAN_DETECTOR_MAX_PCA_DIM ]; - - /* width of matrix */ - uint16 matWidthL = tmpCl1PtrL->sizeE * 2; - - if( ptrA->pcaDimSubSpaceE > bpi_LOCAL_SCAN_DETECTOR_MAX_PCA_DIM ) - { - bbs_ERROR1( "%s:\nbpi_RF_LANDMARKER_MAX_PCA_DIM exceeded", fNameL ); - return; - } - - /* forward trafo */ - for( iL = 0; iL < ptrA->pcaDimSubSpaceE; iL++ ) - { - int32 sumL = 0; - avgPtrL = ptrA->pcaAvgE.arrPtrE; - for( jL = 0; jL < tmpCl1PtrL->sizeE; jL++ ) - { - sumL += matPtrL[ 0 ] * ( vecArrL[ jL ].xE - avgPtrL[ 0 ] ); - sumL += matPtrL[ 1 ] * ( vecArrL[ jL ].yE - avgPtrL[ 1 ] ); - avgPtrL += 2; - matPtrL += 2; - } - prjVecL[ iL ] = ( sumL + 128 ) >> 8; - } - - matPtrL = ptrA->pcaMatE.arrPtrE; - avgPtrL = ptrA->pcaAvgE.arrPtrE; - vecArrL = tmpCl1PtrL->vecArrE; - - /* backward trafo */ - for( jL = 0; jL < tmpCl1PtrL->sizeE; jL++ ) - { - int32 sumL = 0; - for( iL = 0; iL < ptrA->pcaDimSubSpaceE; iL++ ) - { - sumL += matPtrL[ iL * matWidthL + 0 ] * prjVecL[ iL ]; - } - - vecArrL[ jL ].xE = ( ( sumL + 128 ) >> 8 ) + avgPtrL[ 0 ]; - - sumL = 0; - for( iL = 0; iL < ptrA->pcaDimSubSpaceE; iL++ ) - { - sumL += matPtrL[ iL * matWidthL + 1 ] * prjVecL[ iL ]; - } - - vecArrL[ jL ].yE = ( ( sumL + 128 ) >> 8 ) + avgPtrL[ 1 ]; - - matPtrL += 2; - avgPtrL += 2; - } - } - - /* ALT backtransformation */ - bts_IdCluster2D_copy( cpA, outClusterPtrA, &ptrA->pcaClusterE ); - bts_Cluster2D_copyTransform( cpA, &outClusterPtrA->clusterE, tmpCl1PtrL, bts_Flt16Alt2D_inverted( &altL ), outBbpL ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanDetector_init( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA ) -{ - bbs_memset16( ptrA->ftrPtrArrE, 0, bbs_SIZEOF16( ptrA->ftrPtrArrE ) ); - bts_RBFMap2D_init( cpA, &ptrA->rbfMapE ); - bts_Cluster2D_init( cpA, &ptrA->tmpCluster1E ); - bts_Cluster2D_init( cpA, &ptrA->tmpCluster2E ); - bts_Cluster2D_init( cpA, &ptrA->tmpCluster3E ); - bts_Cluster2D_init( cpA, &ptrA->tmpCluster4E ); - bbf_LocalScanner_init( cpA, &ptrA->scannerE ); - bbs_Int32Arr_init( cpA, &ptrA->actArrE ); - bbs_Int16Arr_init( cpA, &ptrA->idxArrE ); - bbs_UInt8Arr_init( cpA, &ptrA->workImageBufE ); - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->scanWidthE = 0; - ptrA->scanHeightE = 0; - ptrA->scaleExpE = 0; - ptrA->interpolatedWarpingE = TRUE; - ptrA->warpScaleThresholdE = 0; - bts_IdCluster2D_init( cpA, &ptrA->refClusterE ); - bts_Cluster2D_init( cpA, &ptrA->scanClusterE ); - bbs_UInt16Arr_init( cpA, &ptrA->ftrDataArrE ); - bbf_BitParam_init( cpA, &ptrA->bitParamE ); - ptrA->outlierDistanceE = 0; - bts_IdCluster2D_init( cpA, &ptrA->pcaClusterE ); - bbs_Int16Arr_init( cpA, &ptrA->pcaAvgE ); - bbs_Int16Arr_init( cpA, &ptrA->pcaMatE ); - ptrA->pcaDimSubSpaceE = 0; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanDetector_exit( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA ) -{ - uint16 iL; - for( iL = 0; iL < ptrA->scanClusterE.sizeE; iL++ ) bbf_featureExit( cpA, ptrA->ftrPtrArrE[ iL ] ); - bbs_memset16( ptrA->ftrPtrArrE, 0, bbs_SIZEOF16( ptrA->ftrPtrArrE ) ); - - bts_RBFMap2D_exit( cpA, &ptrA->rbfMapE ); - bts_Cluster2D_exit( cpA, &ptrA->tmpCluster1E ); - bts_Cluster2D_exit( cpA, &ptrA->tmpCluster2E ); - bts_Cluster2D_exit( cpA, &ptrA->tmpCluster3E ); - bts_Cluster2D_exit( cpA, &ptrA->tmpCluster4E ); - bbf_LocalScanner_exit( cpA, &ptrA->scannerE ); - bbs_Int32Arr_exit( cpA, &ptrA->actArrE ); - bbs_Int16Arr_exit( cpA, &ptrA->idxArrE ); - bbs_UInt8Arr_exit( cpA, &ptrA->workImageBufE ); - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->scanWidthE = 0; - ptrA->scanHeightE = 0; - ptrA->scaleExpE = 0; - ptrA->interpolatedWarpingE = TRUE; - ptrA->warpScaleThresholdE = 0; - bts_IdCluster2D_exit( cpA, &ptrA->refClusterE ); - bts_Cluster2D_exit( cpA, &ptrA->scanClusterE ); - bbs_UInt16Arr_exit( cpA, &ptrA->ftrDataArrE ); - bbf_BitParam_exit( cpA, &ptrA->bitParamE ); - ptrA->outlierDistanceE = 0; - bts_IdCluster2D_exit( cpA, &ptrA->pcaClusterE ); - bbs_Int16Arr_exit( cpA, &ptrA->pcaAvgE ); - bbs_Int16Arr_exit( cpA, &ptrA->pcaMatE ); - ptrA->pcaDimSubSpaceE = 0; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanDetector_copy( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA, - const struct bbf_LocalScanDetector* srcPtrA ) -{ - bbs_ERROR0( "bbf_LocalScanDetector_copy:\n Function is not available" ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_LocalScanDetector_equal( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA, - const struct bbf_LocalScanDetector* srcPtrA ) -{ - bbs_ERROR0( "bbf_LocalScanDetector_equal:\n Function is not available" ); - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanDetector_memSize( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA ) -{ - uint32 iL; - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbs_SIZEOF16( ptrA->patchWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->patchHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->scanWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->scanHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->scaleExpE ); - memSizeL += bbs_SIZEOF16( ptrA->interpolatedWarpingE ); - memSizeL += bbs_SIZEOF16( ptrA->warpScaleThresholdE ); - memSizeL += bts_IdCluster2D_memSize( cpA, &ptrA->refClusterE ); - memSizeL += bts_Cluster2D_memSize( cpA, &ptrA->scanClusterE ); - memSizeL += bbf_BitParam_memSize( cpA, &ptrA->bitParamE ); - memSizeL += bbs_SIZEOF16( ptrA->outlierDistanceE ); - memSizeL += bts_IdCluster2D_memSize( cpA, &ptrA->pcaClusterE ); - memSizeL += bbs_Int16Arr_memSize( cpA, &ptrA->pcaAvgE ); - memSizeL += bbs_Int16Arr_memSize( cpA, &ptrA->pcaMatE ); - memSizeL += bbs_SIZEOF16( ptrA->pcaDimSubSpaceE ); - memSizeL += bbs_SIZEOF16( ptrA->maxImageWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->maxImageHeightE ); - for( iL = 0; iL < ptrA->scanClusterE.sizeE; iL++ ) memSizeL += bbf_featureMemSize( cpA, ptrA->ftrPtrArrE[ iL ] ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanDetector_memWrite( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA, - uint16* memPtrA ) -{ - uint32 iL; - uint32 memSizeL = bbf_LocalScanDetector_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_LOCAL_SCAN_DETECTOR_VERSION, memPtrA ); - - memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->scanWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->scanHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->scaleExpE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->interpolatedWarpingE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->warpScaleThresholdE, memPtrA ); - memPtrA += bts_IdCluster2D_memWrite( cpA, &ptrA->refClusterE, memPtrA ); - memPtrA += bts_Cluster2D_memWrite( cpA, &ptrA->scanClusterE, memPtrA ); - memPtrA += bbf_BitParam_memWrite( cpA, &ptrA->bitParamE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->outlierDistanceE, memPtrA ); - memPtrA += bts_IdCluster2D_memWrite( cpA, &ptrA->pcaClusterE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->pcaAvgE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->pcaMatE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->pcaDimSubSpaceE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxImageWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxImageHeightE, memPtrA ); - - for( iL = 0; iL < ptrA->scanClusterE.sizeE; iL++ ) memPtrA += bbf_featureMemWrite( cpA, ptrA->ftrPtrArrE[ iL ], memPtrA ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanDetector_memRead( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 iL; - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - struct bbs_MemSeg* sspL = bbs_MemTbl_sharedSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_LOCAL_SCAN_DETECTOR_VERSION, memPtrA ); - - - memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->scanWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->scanHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->scaleExpE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->interpolatedWarpingE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->warpScaleThresholdE, memPtrA ); - memPtrA += bts_IdCluster2D_memRead( cpA, &ptrA->refClusterE, memPtrA, espL ); - memPtrA += bts_Cluster2D_memRead( cpA, &ptrA->scanClusterE, memPtrA, espL ); - memPtrA += bbf_BitParam_memRead( cpA, &ptrA->bitParamE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->outlierDistanceE, memPtrA ); - memPtrA += bts_IdCluster2D_memRead( cpA, &ptrA->pcaClusterE, memPtrA, espL ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->pcaAvgE, memPtrA, espL ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->pcaMatE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->pcaDimSubSpaceE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxImageWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxImageHeightE, memPtrA ); - - /* check features & allocate data buffer */ - { - const uint16* memPtrL = memPtrA; - uint32 dataSizeL = 0; - for( iL = 0; iL < ptrA->scanClusterE.sizeE; iL++ ) - { - enum bbf_FeatureType typeL = ( enum bbf_FeatureType )bbs_memPeek32( memPtrL + 4 ); - dataSizeL += bbf_featureSizeOf16( cpA, typeL ); - memPtrL += bbs_memPeek32( memPtrL ); - } - bbs_UInt16Arr_create( cpA, &ptrA->ftrDataArrE, dataSizeL, espL ); - } - - /* load features & initialize pointers */ - { - uint16* dataPtrL = ptrA->ftrDataArrE.arrPtrE; - for( iL = 0; iL < ptrA->scanClusterE.sizeE; iL++ ) - { - enum bbf_FeatureType typeL = ( enum bbf_FeatureType )bbs_memPeek32( memPtrA + 4 ); - ptrA->ftrPtrArrE[ iL ] = ( struct bbf_Feature* )dataPtrL; - bbf_featureInit( cpA, ptrA->ftrPtrArrE[ iL ], typeL ); - memPtrA += bbf_featureMemRead( cpA, ptrA->ftrPtrArrE[ iL ], memPtrA, &memTblL ); - dataPtrL += bbf_featureSizeOf16( cpA, typeL ); - } - } - - if( memSizeL != bbf_LocalScanDetector_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_LocalScanDetector_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - if( ptrA->maxImageWidthE * ptrA->maxImageHeightE == 0 ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_LocalScanDetector_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "maximum image width/height not set" ); - return 0; - } - - /* initialize internal data */ - - /* ought to be placed on shared memory later */ - bts_RBFMap2D_create( cpA, &ptrA->rbfMapE, bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE, sspL ); - ptrA->rbfMapE.RBFTypeE = bts_RBF_LINEAR; - ptrA->rbfMapE.altTypeE = bts_ALT_RIGID; - - bts_Cluster2D_create( cpA, &ptrA->tmpCluster1E, bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE, sspL ); - bts_Cluster2D_create( cpA, &ptrA->tmpCluster2E, bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE, sspL ); - bts_Cluster2D_create( cpA, &ptrA->tmpCluster3E, bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE, sspL ); - bts_Cluster2D_create( cpA, &ptrA->tmpCluster4E, bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE, sspL ); - - bbs_Int32Arr_create( cpA, &ptrA->actArrE, bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE, sspL ); - bbs_Int16Arr_create( cpA, &ptrA->idxArrE, bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE, sspL ); - - /* working image memory */ - /* ought to be placed on shared memory later */ - bbs_UInt8Arr_create( cpA, &ptrA->workImageBufE, ptrA->maxImageWidthE * ptrA->maxImageHeightE, sspL ); - - /* initialize local scanner (be aware of shared memory usage when moving this create function) */ - bbf_LocalScanner_create( cpA, &ptrA->scannerE, - ptrA->patchWidthE, - ptrA->patchHeightE, - ptrA->scaleExpE, - ptrA->maxImageWidthE, - ptrA->maxImageHeightE, - ptrA->scaleExpE, - ptrA->bitParamE.outerRadiusE, - &memTblL ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_LocalScanDetector_process( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA, - uint8* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_IdCluster2D* inClusterPtrA, - struct bts_IdCluster2D* outClusterPtrA ) -{ - bbs_DEF_fNameL( "bbf_LocalScanDetector_process" ) - - int32 pw0L = ptrA->patchWidthE; - int32 ph0L = ptrA->patchHeightE; - int32 pw1L = pw0L << ptrA->scaleExpE; - int32 ph1L = ph0L << ptrA->scaleExpE; - - struct bts_Cluster2D* wrkClPtrL = ( struct bts_Cluster2D* )&ptrA->tmpCluster1E; - struct bts_Cluster2D* refClPtrL = ( struct bts_Cluster2D* )&ptrA->tmpCluster2E; - struct bts_Cluster2D* dstClPtrL = ( struct bts_Cluster2D* )&ptrA->tmpCluster3E; - struct bts_Cluster2D* tmpClPtrL = ( struct bts_Cluster2D* )&ptrA->tmpCluster4E; - struct bts_RBFMap2D* rbfPtrL = ( struct bts_RBFMap2D* )&ptrA->rbfMapE; - struct bbf_LocalScanner* scnPtrL = ( struct bbf_LocalScanner* )&ptrA->scannerE; - - int32* actArrL = ( int32* )ptrA->actArrE.arrPtrE; - int16* idxArrL = ( int16* )ptrA->idxArrE.arrPtrE; - - uint32 workImageWidthL, workImageHeightL; - - struct bts_Flt16Alt2D altL; - - int32 confidenceL; - uint32 iL; - uint32 sizeL = ptrA->scanClusterE.sizeE; - - if( sizeL > bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE ) - { - bbs_ERROR1( "%s:\nScan cluster size exceeds bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE", fNameL ); - return 0; - } - - /* compute equivalent clusters (matching ids) from input and reference cluster */ - bts_IdCluster2D_convertToEqivalentClusters( cpA, inClusterPtrA, &ptrA->refClusterE, wrkClPtrL, refClPtrL ); - - /* altL: orig image -> normalized image */ - altL = bts_Cluster2D_alt( cpA, wrkClPtrL, refClPtrL, bts_ALT_RIGID ); - - /* transorm work cluster to normalized image */ - bts_Cluster2D_transformBbp( cpA, wrkClPtrL, altL, 6 ); - - /* map: ref cluster -> work cluster */ - bts_RBFMap2D_compute( cpA, rbfPtrL, refClPtrL, wrkClPtrL ); - - /* copy: scanClusterE -> work cluster */ - bts_Cluster2D_copy( cpA, wrkClPtrL, &ptrA->scanClusterE ); - - /* copy: refClusterE -> ref cluster */ - bts_Cluster2D_copy( cpA, refClPtrL, &ptrA->refClusterE.clusterE ); - - /* apply map to work cluster */ - bts_Cluster2D_rbfTransform( cpA, wrkClPtrL, rbfPtrL ); - - /* apply map to ref cluster */ - bts_Cluster2D_rbfTransform( cpA, refClPtrL, rbfPtrL ); - - { - /* analyze boundaries; get exact dimensions of working image */ - int32 workBorderWL = ( ( ptrA->scanWidthE + pw1L + 1 ) >> 1 ) + 1; /* add a pixel to ensure full search area */ - int32 workBorderHL = ( ( ptrA->scanHeightE + ph1L + 1 ) >> 1 ) + 1; /* add a pixel to ensure full search area */ - struct bts_Int16Rect workAreaL = bts_Cluster2D_boundingBox( cpA, wrkClPtrL ); - workAreaL.x1E = workAreaL.x1E >> wrkClPtrL->bbpE; - workAreaL.y1E = workAreaL.y1E >> wrkClPtrL->bbpE; - workAreaL.x2E = workAreaL.x2E >> wrkClPtrL->bbpE; - workAreaL.y2E = workAreaL.y2E >> wrkClPtrL->bbpE; - workAreaL.x1E -= workBorderWL; - workAreaL.y1E -= workBorderHL; - workAreaL.x2E += workBorderWL; - workAreaL.y2E += workBorderHL; - - workImageWidthL = workAreaL.x2E - workAreaL.x1E; - workImageHeightL = workAreaL.y2E - workAreaL.y1E; - - /* truncate if necessary (should not occur in normal operation) */ - workImageWidthL = workImageWidthL > ptrA->maxImageWidthE ? ptrA->maxImageWidthE : workImageWidthL; - workImageHeightL = workImageHeightL > ptrA->maxImageHeightE ? ptrA->maxImageHeightE : workImageHeightL; - - /* adjust ALT */ - altL.vecE.xE -= workAreaL.x1E << altL.vecE.bbpE; - altL.vecE.yE -= workAreaL.y1E << altL.vecE.bbpE; - - /* adjust work cluster */ - for( iL = 0; iL < wrkClPtrL->sizeE; iL++ ) - { - wrkClPtrL->vecArrE[ iL ].xE -= workAreaL.x1E << wrkClPtrL->bbpE; - wrkClPtrL->vecArrE[ iL ].yE -= workAreaL.y1E << wrkClPtrL->bbpE; - } - - /* adjust ref cluster */ - for( iL = 0; iL < wrkClPtrL->sizeE; iL++ ) - { - refClPtrL->vecArrE[ iL ].xE -= workAreaL.x1E << refClPtrL->bbpE; - refClPtrL->vecArrE[ iL ].yE -= workAreaL.y1E << refClPtrL->bbpE; - } - - /* transform image */ - bim_filterWarp( cpA, - ptrA->workImageBufE.arrPtrE, - imagePtrA, imageWidthA, imageHeightA, - offsPtrA, - &altL, - workImageWidthL, workImageHeightL, - NULL, - ptrA->warpScaleThresholdE, - ptrA->interpolatedWarpingE ); - - } - - /* scan over all positions of work cluster; target positions are stored in *dstClPtrL*/ - { - int32 regionWHL = ( ptrA->scanWidthE + pw1L + 1 ) >> 1; - int32 regionHHL = ( ptrA->scanHeightE + ph1L + 1 ) >> 1; - struct bts_Int16Vec2D* srcVecArrL = wrkClPtrL->vecArrE; - struct bts_Int16Vec2D* dstVecArrL = dstClPtrL->vecArrE; - int32 vecBbpL = wrkClPtrL->bbpE; - bts_Cluster2D_size( cpA, dstClPtrL, sizeL ); - dstClPtrL->bbpE = vecBbpL; - - /* initialize scanner */ - scnPtrL->patchWidthE = ptrA->patchWidthE; - scnPtrL->patchHeightE = ptrA->patchWidthE; - scnPtrL->scaleExpE = ptrA->scaleExpE; - - bbf_LocalScanner_assign( cpA, scnPtrL, ptrA->workImageBufE.arrPtrE, workImageWidthL, workImageHeightL, &ptrA->bitParamE ); - - bbs_memset32( actArrL, 0x80000000, sizeL ); - - do - { - for( iL = 0; iL < sizeL; iL++ ) - { - int32 bestActL = 0x80000000; - uint32 bestIdxL = 0; - struct bbf_Feature* ftrPtrL = ptrA->ftrPtrArrE[ iL ]; - - /* set scan region */ - { - int32 x0L = ( ( wrkClPtrL->vecArrE[ iL ].xE >> ( wrkClPtrL->bbpE - 1 ) ) + 1 ) >> 1; - int32 y0L = ( ( wrkClPtrL->vecArrE[ iL ].yE >> ( wrkClPtrL->bbpE - 1 ) ) + 1 ) >> 1; - struct bts_Int16Rect scanRegionL = bts_Int16Rect_create( x0L - regionWHL, y0L - regionHHL, x0L + regionWHL, y0L + regionHHL ); - bbf_LocalScanner_origScanRegion( cpA, scnPtrL, &scanRegionL ); - } - - do - { - int32 actL = ftrPtrL->vpActivityE( ftrPtrL, bbf_LocalScanner_getPatch( scnPtrL ) ); - - if( actL > bestActL ) - { - bestActL = actL; - bestIdxL = bbf_LocalScanner_scanIndex( scnPtrL ); - } - } - while( bbf_LocalScanner_next( cpA, scnPtrL ) ); - - { - int32 xL, yL; /* 16.16 */ - bbf_LocalScanner_idxPos( scnPtrL, bestIdxL, &xL, &yL ); - xL += pw1L << 15; - yL += ph1L << 15; - if( bestActL > actArrL[ iL ] ) - { - dstVecArrL[ iL ].xE = ( ( xL >> ( 15 - vecBbpL ) ) + 1 ) >> 1; - dstVecArrL[ iL ].yE = ( ( yL >> ( 15 - vecBbpL ) ) + 1 ) >> 1; - actArrL[ iL ] = bestActL; - } - } - } - } - while( bbf_LocalScanner_nextOffset( cpA, scnPtrL ) ); - - /* outlier analysis: outliers are disabled by setting their similarity to -1 */ - if( ptrA->outlierDistanceE > 0 ) - { - /* altL: work cluster -> ref cluster */ - struct bts_Flt16Alt2D localAltL = bts_Cluster2D_alt( cpA, wrkClPtrL, dstClPtrL, bts_ALT_RIGID ); - - /* squared distance 16.16 */ - uint32 dist2L = ( ptrA->outlierDistanceE >> 8 ) * ( ptrA->outlierDistanceE >> 8 ); - - /* analyze deviations */ - for( iL = 0; iL < sizeL; iL++ ) - { - struct bts_Flt16Vec2D vecL = bts_Flt16Vec2D_create32( srcVecArrL[ iL ].xE, srcVecArrL[ iL ].yE, vecBbpL ); - uint32 dev2L; /* squared deviation 16.16 */ - vecL = bts_Flt16Alt2D_mapFlt( &localAltL, &vecL ); - vecL = bts_Flt16Vec2D_sub( vecL, bts_Flt16Vec2D_create32( dstVecArrL[ iL ].xE, dstVecArrL[ iL ].yE, vecBbpL ) ); - dev2L = bbs_convertU32( bts_Flt16Vec2D_norm2( &vecL ), vecL.bbpE << 1, 16 ); - if( dev2L > dist2L ) actArrL[ iL ] = 0xF0000000; - } - } - - /* remove undetected positions but keep at least 1/2 best positions */ - { - flag sortedL; - - /* bubble sort (no speed issue in this case) */ - for( iL = 0; iL < sizeL; iL++ ) idxArrL[ iL ] = iL; - - do - { - sortedL = TRUE; - for( iL = 1; iL < sizeL; iL++ ) - { - if( actArrL[ idxArrL[ iL - 1 ] ] < actArrL[ idxArrL[ iL ] ] ) - { - int16 tmpL = idxArrL[ iL - 1 ]; - idxArrL[ iL - 1 ] = idxArrL[ iL ]; - idxArrL[ iL ] = tmpL; - sortedL = FALSE; - } - } - } - while( !sortedL ); - - for( iL = ( sizeL >> 1 ); iL < sizeL && actArrL[ idxArrL[ iL ] ] >= 0; iL++ ); - - { - uint32 subSizeL = iL; - - /* reorder clusters */ - bts_Cluster2D_size( cpA, tmpClPtrL, subSizeL ); - { - struct bts_Int16Vec2D* tmpVecArrL = tmpClPtrL->vecArrE; - for( iL = 0; iL < subSizeL; iL++ ) tmpVecArrL[ iL ] = srcVecArrL[ idxArrL[ iL ] ]; - for( iL = 0; iL < subSizeL; iL++ ) srcVecArrL[ iL ] = tmpVecArrL[ iL ]; - for( iL = 0; iL < subSizeL; iL++ ) tmpVecArrL[ iL ] = dstVecArrL[ idxArrL[ iL ] ]; - for( iL = 0; iL < subSizeL; iL++ ) dstVecArrL[ iL ] = tmpVecArrL[ iL ]; - } - bts_Cluster2D_size( cpA, wrkClPtrL, subSizeL ); - bts_Cluster2D_size( cpA, dstClPtrL, subSizeL ); - } - } - - /* compute confidence */ - { - int16* idxArrL = ptrA->idxArrE.arrPtrE; - int32* actArrL = ptrA->actArrE.arrPtrE; - int32 actSumL = 0; /* .20 */ - for( iL = 0; iL < sizeL; iL++ ) - { - float actL = ( actArrL[ idxArrL[ iL ] ] + 128 ) >> 8; - if( actL < 0 ) break; - actSumL += actL; - } - - /* actSumL = average positive activity */ - actSumL = ( iL > 0 ) ? actSumL / iL : 0; - - confidenceL = ( ( ( int32 )iL << 20 ) - ( ( ( int32 )1 << 20 ) - actSumL ) ) / sizeL; - - /* adjust to 4.28 */ - confidenceL <<= 8; - } - - } - - /* map: wrkCluster -> dstCluster */ - bts_RBFMap2D_compute( cpA, rbfPtrL, wrkClPtrL, dstClPtrL ); - - /* apply map to ref cluster */ - bts_Cluster2D_rbfTransform( cpA, refClPtrL, rbfPtrL ); - - /* copy ref cluster to outCluster */ - bts_Cluster2D_copy( cpA, &outClusterPtrA->clusterE, refClPtrL ); - bbs_Int16Arr_copy( cpA, &outClusterPtrA->idArrE, &ptrA->refClusterE.idArrE ); - - /* PCA Mapping */ - if( ptrA->pcaDimSubSpaceE > 0 ) - { - bbf_LocalScanDetector_pcaMap( cpA, ptrA, outClusterPtrA, outClusterPtrA ); - } - - /* backtransform out cluster to original image */ - bts_Cluster2D_transformBbp( cpA, &outClusterPtrA->clusterE, bts_Flt16Alt2D_inverted( &altL ), inClusterPtrA->clusterE.bbpE ); - - return confidenceL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/LocalScanDetector.h b/Embedded/common/src/b_BitFeatureEm/LocalScanDetector.h deleted file mode 100644 index a4408f4..0000000 --- a/Embedded/common/src/b_BitFeatureEm/LocalScanDetector.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_LOCAL_SCAN_DETECTOR_EM_H -#define bbf_LOCAL_SCAN_DETECTOR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/IdCluster2D.h" -#include "b_BitFeatureEm/Sequence.h" -#include "b_BitFeatureEm/BitParam.h" -#include "b_BitFeatureEm/LocalScanner.h" -#include "b_TensorEm/RBFMap2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_LOCAL_SCAN_DETECTOR_VERSION 100 - -/* maximum number of features in scan detector */ -#define bbf_LOCAL_SCAN_DETECTOR_MAX_FEATURES 16 - -/* maximum size of any cluster in all processing stages of landmarker */ -#define bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE 24 - -/* maximum dimension of PCA subspace */ -#define bpi_LOCAL_SCAN_DETECTOR_MAX_PCA_DIM 12 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_LocalScanDetector -{ - /* ---- private data --------------------------------------------------- */ - - /** feature pointer arrray */ - struct bbf_Feature* ftrPtrArrE[ bbf_LOCAL_SCAN_DETECTOR_MAX_FEATURES ]; - - /** multiple purpose rbf map */ - struct bts_RBFMap2D rbfMapE; - - /** temporary cluster */ - struct bts_Cluster2D tmpCluster1E; - - /** temporary cluster */ - struct bts_Cluster2D tmpCluster2E; - - /** temporary cluster */ - struct bts_Cluster2D tmpCluster3E; - - /** temporary cluster */ - struct bts_Cluster2D tmpCluster4E; - - /** local scanner */ - struct bbf_LocalScanner scannerE; - - /** activity array */ - struct bbs_Int32Arr actArrE; - - /** index array */ - struct bbs_Int16Arr idxArrE; - - /** working image buffer */ - struct bbs_UInt8Arr workImageBufE; - - /* ---- public data ---------------------------------------------------- */ - - /** patch width */ - uint32 patchWidthE; - - /** patch height*/ - uint32 patchHeightE; - - /** width of scan area */ - uint32 scanWidthE; - - /** height of scan area */ - uint32 scanHeightE; - - /** scanner scale exponent */ - uint32 scaleExpE; - - /** interpolated image warping */ - flag interpolatedWarpingE; - - /** image downscale threshold (part of image warping) (16.16) */ - uint32 warpScaleThresholdE; - - /** reference cluster */ - struct bts_IdCluster2D refClusterE; - - /** cluster with scan positions */ - struct bts_Cluster2D scanClusterE; - - /** feature data array (contains feature elements) */ - struct bbs_UInt16Arr ftrDataArrE; - - /** parameter for bit generation */ - struct bbf_BitParam bitParamE; - - /** outlier distance in pixels (16.16); ( >0: activates outlier analysis ) */ - uint32 outlierDistanceE; - - /** pca reference cluster */ - struct bts_IdCluster2D pcaClusterE; - - /** pca average vector (10.6) */ - struct bbs_Int16Arr pcaAvgE; - - /** pca projection matrix (8.8) */ - struct bbs_Int16Arr pcaMatE; - - /** pcs subspace dimensions */ - uint32 pcaDimSubSpaceE; - - /** max width of working image */ - uint32 maxImageWidthE; - - /** max height of working image */ - uint32 maxImageHeightE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_LocalScanDetector */ -void bbf_LocalScanDetector_init( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA ); - -/** resets bbf_LocalScanDetector */ -void bbf_LocalScanDetector_exit( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_LocalScanDetector_copy( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA, - const struct bbf_LocalScanDetector* srcPtrA ); - -/** equal operator */ -flag bbf_LocalScanDetector_equal( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA, - const struct bbf_LocalScanDetector* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_LocalScanDetector_memSize( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_LocalScanDetector_memWrite( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_LocalScanDetector_memRead( struct bbs_Context* cpA, - struct bbf_LocalScanDetector* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** processes image with cluster; produces output cluster and returns confidence (8.24) - * offsPtrA specifies pixel position (0,0) in input image - */ -int32 bbf_LocalScanDetector_process( struct bbs_Context* cpA, - const struct bbf_LocalScanDetector* ptrA, - uint8* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_IdCluster2D* inClusterPtrA, - struct bts_IdCluster2D* outClusterPtrA ); - -#endif /* bbf_LOCAL_SCAN_DETECTOR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/LocalScanner.c b/Embedded/common/src/b_BitFeatureEm/LocalScanner.c deleted file mode 100644 index ed0c0e1..0000000 --- a/Embedded/common/src/b_BitFeatureEm/LocalScanner.c +++ /dev/null @@ -1,807 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/LocalScanner.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/** allocates arays */ -void bbf_LocalScanner_alloc( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - struct bbs_MemTbl* mtpA ) -{ - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - struct bbs_MemSeg* sspL = bbs_MemTbl_sharedSegPtr( cpA, &memTblL, 0 ); - - /* filter patch dimension */ - uint32 proL = ptrA->maxRadiusE; - uint32 pwoL = ( proL << 1 ) + 1; - - /* output image size (bit image) */ - uint32 woL = ptrA->maxImageWidthE; - uint32 hoL = ptrA->maxImageHeightE; - - if( ptrA->minScaleExpE > 0 ) - { - /* allocate working image */ - bbs_UInt8Arr_create( cpA, &ptrA->workImageBufferE, ( woL >> 1 ) * ( hoL >> 1 ), espL ); - bbs_UInt8Arr_fill( cpA, &ptrA->workImageBufferE, 0 ); - } - - /* allocate bit image */ - bim_UInt32Image_create( cpA, &ptrA->bitImageE, woL, ( hoL >> 5 ) + ( ( ( hoL & 0x1F ) != 0 ) ? 1 : 0 ), espL ); - bim_UInt32Image_setAllPixels( cpA, &ptrA->bitImageE, 0, 0 ); - - /* allocate patch buffer */ - bbs_UInt32Arr_create( cpA, &ptrA->patchBufferE, ptrA->bitImageE.widthE, espL ); - bbs_UInt32Arr_fill( cpA, &ptrA->patchBufferE, 0 ); - - /* allocate table */ - bim_UInt32Image_create( cpA, &ptrA->satE, woL + pwoL, pwoL + 1, sspL ); -} - -/* ------------------------------------------------------------------------- */ - -/** downscales original image by factor 2 */ -void bbf_LocalScanner_downscale0( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - int32 w0L = ptrA->origWidthE; - int32 h0L = ptrA->origHeightE; - - int32 w1L = ( w0L - ptrA->xOffE ) >> 1; - int32 h1L = ( h0L - ptrA->yOffE ) >> 1; - - const uint8* iArrL = ptrA->origImagePtrE + ptrA->xOffE + ptrA->yOffE * w0L; - uint8* oArrL = ptrA->workImageBufferE.arrPtrE; - - int32 iL, jL; - int32 kL = 0; - - bbs_UInt8Arr_size( cpA, &ptrA->workImageBufferE, w1L * h1L ); - ptrA->workImagePtrE = ptrA->workImageBufferE.arrPtrE; - ptrA->workWidthE = w1L; - ptrA->workHeightE = h1L; - - for( jL = 0; jL < h1L; jL++ ) - { - for( iL = 0; iL < w1L; iL++ ) - { - int32 idxL = jL * 2 * w0L + iL * 2; - oArrL[ kL++ ] = ( ( uint32 )iArrL[ idxL ] + - iArrL[ idxL + 1 ] + - iArrL[ idxL + w0L ] + - iArrL[ idxL + w0L + 1 ] + 2 ) >> 2; - } - } -} - -/* ------------------------------------------------------------------------- */ - -/** downscales work image by factor 2 */ -void bbf_LocalScanner_downscale1( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - int32 w0L = ptrA->workWidthE; - int32 h0L = ptrA->workHeightE; - int32 w1L = w0L >> 1; - int32 h1L = h0L >> 1; - - uint8* arrL = ptrA->workImageBufferE.arrPtrE; - - int32 iL, jL; - int32 kL = 0; - - for( jL = 0; jL < h1L; jL++ ) - { - for( iL = 0; iL < w1L; iL++ ) - { - int32 idxL = jL * 2 * w0L + iL * 2; - arrL[ kL++ ] = ( ( uint32 )arrL[ idxL ] + - arrL[ idxL + 1 ] + - arrL[ idxL + w0L ] + - arrL[ idxL + w0L + 1 ] + 2 ) >> 2; - } - } - - ptrA->workWidthE = w1L; - ptrA->workHeightE = h1L; -} - -/* ------------------------------------------------------------------------- */ - -/** downscales by factor 2 */ -void bbf_LocalScanner_downscale( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - uint32 iL; - if( ptrA->scaleExpE > 0 ) bbf_LocalScanner_downscale0( cpA, ptrA ); - for( iL = 1; iL < ptrA->scaleExpE; iL++ ) bbf_LocalScanner_downscale1( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/** computes bit image */ -void bbf_LocalScanner_createBitImage( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - bbs_DEF_fNameL( "void bbf_LocalScanner_createBitImage( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA )" ) - - uint32 iL, jL; - - uint32 proL = ptrA->bitParamE.outerRadiusE; - uint32 priL = ptrA->bitParamE.innerRadiusE; - uint32 pwoL = ( proL << 1 ) + 1; - uint32 pwiL = ( priL << 1 ) + 1; - - /* areas of inner and outer rectangles */ - uint32 poAreaL = pwoL * pwoL; - uint32 piAreaL = pwiL * pwiL; - - uint32 wL, hL; /* input image size */ - - uint32 wsL, hsL; - uint32* satL; - uint32 satSizeL; - uint32 swi1L = 0; /* writing index */ - uint32 swi2L = 0; /* writing index */ - uint32 sriL = 0; /* reading index */ - uint32 siL[ 8 ]; - - uint32 bitMaskL; - uint32* bitRowL; - - - if( proL <= priL ) - { - bbs_ERROR1( "%s:\n outer radius <= inner radius", fNameL ); - return; - } - - /* input image size */ - wL = ptrA->workWidthE; - hL = ptrA->workHeightE; - - if( wL <= pwoL || hL <= pwoL ) - { - bbs_ERROR1( "%s:\n image is too small", fNameL ); - return; - } - - ptrA->currentWidthE = wL; - ptrA->currentHeightE = hL; - - /* reset scan region */ - ptrA->workScanRegionE = bts_Int16Rect_create( 0, 0, ptrA->currentWidthE, ptrA->currentHeightE ); - - /* initialize bit image */ - bim_UInt32Image_size( cpA, &ptrA->bitImageE, wL, ( hL >> 5 ) + ( ( ( hL & 0x1F ) != 0 ) ? 1 : 0 ) ); - bim_UInt32Image_setAllPixels( cpA, &ptrA->bitImageE, 0, 0 ); - - bitMaskL = 1; - bitRowL = ( uint32* )ptrA->bitImageE.arrE.arrPtrE; - - /* width of table */ - wsL = wL + pwoL; - - /* height of table */ - hsL = pwoL + 1; - - bim_UInt32Image_size( cpA, &ptrA->satE, wsL, hsL ); - - satL = ( uint32* )ptrA->satE.arrE.arrPtrE; - satSizeL = ptrA->satE.arrE.sizeE; - - /* compute table and bit image */ - for( iL = wsL * ( proL + 1 ); iL > 0; iL-- ) satL[ swi1L++ ] = 0; - swi2L = swi1L - wsL; - - for( jL = 0; jL < hL + proL; jL++ ) - { - if( jL < hL ) /* rescale area */ - { - const uint8* arr0L = &ptrA->workImagePtrE[ jL * wL ]; - uint32 hSumL = 0; - for( iL = 0; iL <= proL; iL++ ) satL[ swi1L++ ] = 0; - swi2L += iL; - for( iL = 0; iL < wL; iL++ ) satL[ swi1L++ ] = ( hSumL += arr0L[ iL ] ) + satL[ swi2L++ ]; - for( iL = 0; iL < proL; iL++ ) satL[ swi1L++ ] = hSumL + satL[ swi2L++ ]; - } - else /* image is processed - fill in 0s */ - { - for( iL = 0; iL < wsL; iL++ ) satL[ swi1L++ ] = satL[ swi2L++ ]; - } - - swi1L = ( swi1L < satSizeL ) ? swi1L : 0; - swi2L = ( swi2L < satSizeL ) ? swi2L : 0; - - /* fill line in bit image */ - if( jL >= proL ) - { - const uint32* rSatL = satL; - - /* table coordinate indices for outer rectangle */ - siL[ 0 ] = sriL; - siL[ 1 ] = siL[ 0 ] + pwoL; - siL[ 2 ] = siL[ 0 ] + pwoL * wsL; - siL[ 2 ] -= ( siL[ 2 ] >= satSizeL ) ? satSizeL : 0; - siL[ 3 ] = siL[ 2 ] + pwoL; - - /* table coordinate indices for inner rectangle */ - siL[ 4 ] = siL[ 0 ] + ( proL - priL ) * wsL + ( proL - priL ); - siL[ 4 ] -= ( siL[ 4 ] >= satSizeL ) ? satSizeL : 0; - siL[ 5 ] = siL[ 4 ] + pwiL; - siL[ 6 ] = siL[ 4 ] + pwiL * wsL; - siL[ 6 ] -= ( siL[ 6 ] >= satSizeL ) ? satSizeL : 0; - siL[ 7 ] = siL[ 6 ] + pwiL; - sriL += wsL; - if( sriL == satSizeL ) sriL = 0; - - for( iL = 0; iL < wL; iL++ ) - { - uint32 oAvgL = ( rSatL[ siL[ 0 ] ] - rSatL[ siL[ 1 ] ] - rSatL[ siL[ 2 ] ] + rSatL[ siL[ 3 ] ] ) * piAreaL; - uint32 iAvgL = ( rSatL[ siL[ 4 ] ] - rSatL[ siL[ 5 ] ] - rSatL[ siL[ 6 ] ] + rSatL[ siL[ 7 ] ] ) * poAreaL; - bitRowL[ iL ] |= ( iAvgL > oAvgL ) ? bitMaskL : 0; - rSatL++; - } - if( ( bitMaskL <<= 1 ) == 0 ) - { - bitRowL += wL; - bitMaskL = 1; - } - } - } -} - -/* -------------------------------------------------------------------------- */ - -/** inilialize patch buffer */ -void bbf_LocalScanner_initPatchBuffer( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - int32 ybL = ptrA->workScanRegionE.y1E >> 5; - int32 yoL = ptrA->workScanRegionE.y1E & 0x1F; - int32 xbL = ptrA->workScanRegionE.x1E; - uint32 wsrWidthL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E; - - bbs_UInt32Arr_size( cpA, &ptrA->patchBufferE, ptrA->bitImageE.widthE ); - - if( yoL == 0 ) - { - bbs_memcpy32( ptrA->patchBufferE.arrPtrE + xbL, - ptrA->bitImageE.arrE.arrPtrE + ybL * ptrA->bitImageE.widthE + xbL, - wsrWidthL ); - } - else if( ybL == ( int32 )ptrA->bitImageE.heightE - 1 ) - { - uint32* dstL = ptrA->patchBufferE.arrPtrE + xbL; - const uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + ybL * ptrA->bitImageE.widthE + xbL; - uint32 iL; - for( iL = 0; iL < wsrWidthL; iL++ ) dstL[ iL ] = srcL[ iL ] >> yoL; - } - else - { - uint32* dstL = ptrA->patchBufferE.arrPtrE + xbL; - const uint32* src0L = ptrA->bitImageE.arrE.arrPtrE + ybL * ptrA->bitImageE.widthE + xbL; - const uint32* src1L = src0L + ptrA->bitImageE.widthE; - uint32 iL; - uint32 slL = 32 - yoL; - for( iL = 0; iL < wsrWidthL; iL++ ) dstL[ iL ] = ( src0L[ iL ] >> yoL ) | ( src1L[ iL ] << slL ); - } -} - -/* ------------------------------------------------------------------------- */ - -/* sets work scan region from original scan region according to scale exponent */ -void bbf_LocalScanner_setWorkScanRegion( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - int32 xMinL = ptrA->origScanRegionE.x1E >> ptrA->scaleExpE; - int32 yMinL = ptrA->origScanRegionE.y1E >> ptrA->scaleExpE; - int32 xMaxL = ptrA->origScanRegionE.x2E >> ptrA->scaleExpE; - int32 yMaxL = ptrA->origScanRegionE.y2E >> ptrA->scaleExpE; - ptrA->workScanRegionE.x1E = ( xMinL < 0 ) ? 0 : xMinL; - ptrA->workScanRegionE.y1E = ( yMinL < 0 ) ? 0 : yMinL; - ptrA->workScanRegionE.x2E = ( xMaxL > ( int32 )ptrA->currentWidthE ) ? ptrA->currentWidthE : xMaxL; - ptrA->workScanRegionE.y2E = ( yMaxL > ( int32 )ptrA->currentHeightE ) ? ptrA->currentHeightE : yMaxL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_init( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->xOffE = 0; - ptrA->yOffE = 0; - ptrA->currentWidthE = 0; - ptrA->currentHeightE = 0; - ptrA->workWidthE = 0; - ptrA->workHeightE = 0; - ptrA->workImagePtrE = NULL; - ptrA->origWidthE = 0; - ptrA->origHeightE = 0; - ptrA->origImagePtrE = NULL; - bbf_BitParam_init( cpA, &ptrA->bitParamE ); - bbs_UInt8Arr_init( cpA, &ptrA->workImageBufferE ); - bim_UInt32Image_init( cpA, &ptrA->satE ); - bim_UInt32Image_init( cpA, &ptrA->bitImageE ); - bbs_UInt32Arr_init( cpA, &ptrA->patchBufferE ); - bts_Int16Rect_init( cpA, &ptrA->origScanRegionE ); - bts_Int16Rect_init( cpA, &ptrA->workScanRegionE ); - - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->scaleExpE = 0; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - ptrA->minScaleExpE = 0; - ptrA->maxRadiusE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_exit( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->xOffE = 0; - ptrA->yOffE = 0; - ptrA->currentWidthE = 0; - ptrA->currentHeightE = 0; - ptrA->workWidthE = 0; - ptrA->workHeightE = 0; - ptrA->workImagePtrE = NULL; - ptrA->origWidthE = 0; - ptrA->origHeightE = 0; - ptrA->origImagePtrE = NULL; - bbf_BitParam_exit( cpA, &ptrA->bitParamE ); - bbs_UInt8Arr_exit( cpA, &ptrA->workImageBufferE ); - bim_UInt32Image_exit( cpA, &ptrA->satE ); - bim_UInt32Image_exit( cpA, &ptrA->bitImageE ); - bbs_UInt32Arr_exit( cpA, &ptrA->patchBufferE ); - bts_Int16Rect_exit( cpA, &ptrA->origScanRegionE ); - bts_Int16Rect_exit( cpA, &ptrA->workScanRegionE ); - - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->scaleExpE = 0; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - ptrA->minScaleExpE = 0; - ptrA->maxRadiusE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_copy( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const struct bbf_LocalScanner* srcPtrA ) -{ - bbs_ERROR0( "bbf_LocalScanner_copy:\n Function is not available" ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_LocalScanner_equal( struct bbs_Context* cpA, - const struct bbf_LocalScanner* ptrA, - const struct bbf_LocalScanner* srcPtrA ) -{ - bbs_ERROR0( "bbf_LocalScanner_equal:\n Function is not available" ); - return FALSE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanner_positions( const struct bbf_LocalScanner* ptrA ) -{ - int32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; - int32 hL = ptrA->workScanRegionE.y2E - ptrA->workScanRegionE.y1E - ptrA->patchHeightE; - return ( ( wL < 0 ) ? 0 : wL ) * ( ( hL < 0 ) ? 0 : hL ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanner_scanIndex( const struct bbf_LocalScanner* ptrA ) -{ - int32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; - return ( ptrA->yE - ptrA->workScanRegionE.y1E ) * wL + ( ptrA->xE - ptrA->workScanRegionE.x1E ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_pos( const struct bbf_LocalScanner* ptrA, int32* xPtrA, int32* yPtrA ) -{ - *xPtrA = ( ( ptrA->xE << ptrA->scaleExpE ) + ptrA->xOffE ) << 16; - *yPtrA = ( ( ptrA->yE << ptrA->scaleExpE ) + ptrA->yOffE ) << 16; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_idxPos( const struct bbf_LocalScanner* ptrA, uint32 scanIndexA, int32* xPtrA, int32* yPtrA ) -{ - uint32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; - int32 xL = ( scanIndexA % wL ) + ptrA->workScanRegionE.x1E; - int32 yL = ( scanIndexA / wL ) + ptrA->workScanRegionE.y1E; - *xPtrA = ( ( xL << ptrA->scaleExpE ) + ptrA->xOffE ) << 16; - *yPtrA = ( ( yL << ptrA->scaleExpE ) + ptrA->yOffE ) << 16; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_create( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - uint32 patchWidthA, - uint32 patchHeightA, - uint32 scaleExpA, - uint32 maxImageWidthA, - uint32 maxImageHeightA, - uint32 minScaleExpA, - uint32 maxRadiusA, - struct bbs_MemTbl* mtpA ) -{ - ptrA->patchWidthE = patchWidthA; - ptrA->patchHeightE = patchHeightA; - ptrA->scaleExpE = scaleExpA; - ptrA->maxImageWidthE = maxImageWidthA; - ptrA->maxImageHeightE = maxImageHeightA; - ptrA->minScaleExpE = minScaleExpA; - ptrA->maxRadiusE = maxRadiusA; - bbf_LocalScanner_alloc( cpA, ptrA, mtpA ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_bitParam( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const struct bbf_BitParam* bitParamPtrA ) -{ - if( !bbf_BitParam_equal( cpA, &ptrA->bitParamE, bitParamPtrA ) ) - { - bbf_BitParam_copy( cpA, &ptrA->bitParamE, bitParamPtrA ); - bbf_LocalScanner_createBitImage( cpA, ptrA ); - } - - bbf_LocalScanner_resetScan( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_origScanRegion( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const struct bts_Int16Rect* scanRegionPtrA ) -{ - ptrA->origScanRegionE = *scanRegionPtrA; - bbf_LocalScanner_setWorkScanRegion( cpA, ptrA ); - bbf_LocalScanner_resetScan( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanner_memSize( struct bbs_Context* cpA, - const struct bbf_LocalScanner* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbs_SIZEOF16( ptrA->patchWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->patchHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->scaleExpE ); - memSizeL += bbs_SIZEOF16( ptrA->maxImageWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->maxImageHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->minScaleExpE ); - memSizeL += bbs_SIZEOF16( ptrA->maxRadiusE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanner_memWrite( struct bbs_Context* cpA, - const struct bbf_LocalScanner* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_LocalScanner_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_LOCAL_SCANNER_VERSION, memPtrA ); - - memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->scaleExpE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxImageWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxImageHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->minScaleExpE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxRadiusE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_LocalScanner_memRead( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_LOCAL_SCANNER_VERSION, memPtrA ); - - memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->scaleExpE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxImageWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxImageHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->minScaleExpE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxRadiusE, memPtrA ); - - if( memSizeL != bbf_LocalScanner_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_LocalScanner_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - if( bbs_Context_error( cpA ) ) return 0; - - /* allocate arrays */ - bbf_LocalScanner_alloc( cpA, ptrA, mtpA ); - - if( bbs_Context_error( cpA ) ) return 0; - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_resetScan( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA ) -{ - ptrA->xE = ptrA->workScanRegionE.x1E; - ptrA->yE = ptrA->workScanRegionE.y1E; - bbf_LocalScanner_initPatchBuffer( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_assign( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const uint8* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bbf_BitParam* paramPtrA ) -{ - if( ptrA->scaleExpE == 0 ) - { - ptrA->workImagePtrE = imagePtrA; - ptrA->workWidthE = imageWidthA; - ptrA->workHeightE = imageHeightA; - } - else - { - ptrA->origImagePtrE = imagePtrA; - ptrA->origWidthE = imageWidthA; - ptrA->origHeightE = imageHeightA; - } - - ptrA->bitParamE = *paramPtrA; - ptrA->xOffE = 0; - ptrA->yOffE = 0; - ptrA->origScanRegionE = bts_Int16Rect_create( 0, 0, imageWidthA, imageHeightA ); - bbf_LocalScanner_downscale( cpA, ptrA ); - bbf_LocalScanner_createBitImage( cpA, ptrA ); - bbf_LocalScanner_resetScan( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -const uint32* bbf_LocalScanner_getPatch( const struct bbf_LocalScanner* ptrA ) -{ - return ptrA->patchBufferE.arrPtrE + ptrA->xE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_LocalScanner_next( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - if( ( ptrA->xE + 1 ) < ptrA->workScanRegionE.x2E - ( int32 )ptrA->patchWidthE ) - { - ptrA->xE++; - return TRUE; - } - - if( ( ptrA->yE + 1 ) >= ptrA->workScanRegionE.y2E - ( int32 )ptrA->patchHeightE ) return FALSE; - - ptrA->xE = ptrA->workScanRegionE.x1E; - ptrA->yE++; - - { - uint32 offL = ( ptrA->yE & 0x1F ); - uint32 rowL = ( ptrA->yE >> 5 ) + ( offL > 0 ? 1 : 0 ); - - uint32 widthL = ptrA->bitImageE.widthE; - uint32 sizeL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E; - uint32* dstL = ( uint32* )ptrA->patchBufferE.arrPtrE + ptrA->xE; - uint32 iL; - - if( rowL < ptrA->bitImageE.heightE ) - { - uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + rowL * widthL + ptrA->xE; - if( offL > 0 ) - { - uint32 shlL = 32 - offL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( dstL[ iL ] >> 1 ) | ( srcL[ iL ] << shlL ); - } - else - { - bbs_memcpy32( dstL, srcL, sizeL ); - } - } - else - { - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] >>= 1; - } - } - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_goToXY( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, int32 xA, int32 yA ) -{ - bbs_DEF_fNameL( "void bbf_LocalScanner_goToXY( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, int32 xA, int32 yA )" ) - if( xA < ptrA->workScanRegionE.x1E || xA >= ptrA->workScanRegionE.x2E - ( int32 )ptrA->patchWidthE ) - { - bbs_ERROR1( "%s:\nxA out of range", fNameL ); - return; - } - ptrA->xE = xA; - if( ptrA->yE == yA ) return; - if( yA < ptrA->workScanRegionE.y1E || yA >= ptrA->workScanRegionE.y2E - ( int32 )ptrA->patchHeightE ) - { - bbs_ERROR1( "%s:\nyA out of range", fNameL ); - return; - } - ptrA->yE = yA; - - { - uint32 offL = ( ptrA->yE & 0x1F ); - uint32 rowL = ( ptrA->yE >> 5 ) + ( offL > 0 ? 1 : 0 ); - - uint32 sizeL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E; - uint32 imgWidthL = ptrA->bitImageE.widthE; - uint32 imgOffsL = ptrA->workScanRegionE.x1E; - uint32* dstL = ptrA->patchBufferE.arrPtrE + imgOffsL; - uint32 iL; - - if( rowL < ptrA->bitImageE.heightE ) - { - if( offL > 0 ) - { - uint32* src1L = ptrA->bitImageE.arrE.arrPtrE + rowL * imgWidthL + imgOffsL; - uint32* src0L = src1L - imgWidthL; - uint32 shlL = 32 - offL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( src0L[ iL ] >> offL ) | ( src1L[ iL ] << shlL ); - } - else - { - bbs_memcpy32( dstL, ptrA->bitImageE.arrE.arrPtrE + rowL * imgWidthL + imgOffsL, sizeL ); - } - } - else - { - uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + ( rowL - 1 ) * imgWidthL + imgOffsL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = srcL[ iL ] >> offL; - } - } -} - -/* ------------------------------------------------------------------------- */ - -void bbf_LocalScanner_goToIndex( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, uint32 scanIndexA ) -{ - uint32 wL = ptrA->workScanRegionE.x2E - ptrA->workScanRegionE.x1E - ptrA->patchWidthE; - bbf_LocalScanner_goToXY( cpA, ptrA, - ( scanIndexA % wL ) + ptrA->workScanRegionE.x1E, - ( scanIndexA / wL ) + ptrA->workScanRegionE.y1E ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_LocalScanner_nextOffset( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ) -{ - int32 maxL = ( 1 << ptrA->scaleExpE ); - if( ptrA->yOffE == maxL ) return FALSE; - - ptrA->xOffE++; - - if( ptrA->xOffE == maxL ) - { - ptrA->xOffE = 0; - ptrA->yOffE++; - if( ptrA->yOffE == maxL ) return FALSE; - } - - bbf_LocalScanner_downscale( cpA, ptrA ); - bbf_LocalScanner_createBitImage( cpA, ptrA ); - bbf_LocalScanner_setWorkScanRegion( cpA, ptrA ); - bbf_LocalScanner_resetScan( cpA, ptrA ); - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_BitFeatureEm/LocalScanner.h b/Embedded/common/src/b_BitFeatureEm/LocalScanner.h deleted file mode 100644 index 36665b9..0000000 --- a/Embedded/common/src/b_BitFeatureEm/LocalScanner.h +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_LOCAL_SCANNER_EM_H -#define bbf_LOCAL_SCANNER_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BasicEm/UInt16Arr.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_ImageEm/UInt32Image.h" - -#include "b_BitFeatureEm/Feature.h" -#include "b_BitFeatureEm/BitParam.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_LOCAL_SCANNER_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** supports scanning an image on a fixed scale and provides patches on local areas as needed */ -struct bbf_LocalScanner -{ - /* ---- private data --------------------------------------------------- */ - - /** current scan x-coordinate */ - int32 xE; - - /** current scan y-coordinate */ - int32 yE; - - /** current xOffset */ - int32 xOffE; - - /** current yOffset */ - int32 yOffE; - - /** width of scaled image */ - uint32 currentWidthE; - - /** height of scaled image */ - uint32 currentHeightE; - - /** width of work image */ - uint32 workWidthE; - - /** height of work image */ - uint32 workHeightE; - - /** pointer to working image data */ - const uint8* workImagePtrE; - - /** width of original image */ - uint32 origWidthE; - - /** height of original image */ - uint32 origHeightE; - - /** pointer to original image data */ - const uint8* origImagePtrE; - - /** parameter for bit generation */ - struct bbf_BitParam bitParamE; - - /** work image (two pixels per uint16)*/ - struct bbs_UInt8Arr workImageBufferE; - - /** summed-area table (ring buffer) */ - struct bim_UInt32Image satE; - - /** bit image */ - struct bim_UInt32Image bitImageE; - - /** patch buffer */ - struct bbs_UInt32Arr patchBufferE; - - /** original scan region */ - struct bts_Int16Rect origScanRegionE; - - /** current scan region */ - struct bts_Int16Rect workScanRegionE; - - /* ---- public data ---------------------------------------------------- */ - - /** patch width */ - uint32 patchWidthE; - - /** patch height */ - uint32 patchHeightE; - - /** scale exponent (determines at which scale patch data is actually generated) */ - uint32 scaleExpE; - - /** max image width */ - uint32 maxImageWidthE; - - /** max image height */ - uint32 maxImageHeightE; - - /** min scale exponent */ - uint32 minScaleExpE; - - /** maximum filter radius */ - uint32 maxRadiusE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_LocalScanner */ -void bbf_LocalScanner_init( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA ); - -/** resets bbf_LocalScanner */ -void bbf_LocalScanner_exit( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_LocalScanner_copy( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const struct bbf_LocalScanner* srcPtrA ); - -/** equal operator */ -flag bbf_LocalScanner_equal( struct bbs_Context* cpA, - const struct bbf_LocalScanner* ptrA, - const struct bbf_LocalScanner* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** total scan positions at current scale */ -uint32 bbf_LocalScanner_positions( const struct bbf_LocalScanner* ptrA ); - -/** current scan index */ -uint32 bbf_LocalScanner_scanIndex( const struct bbf_LocalScanner* ptrA ); - -/** returns ul position relative to original image; x,y coordinates: 16.16 */ -void bbf_LocalScanner_pos( const struct bbf_LocalScanner* ptrA, int32* xPtrA, int32* yPtrA ); - -/** returns uls position relative to original image at index position; x,y coordinates: 16.16 */ -void bbf_LocalScanner_idxPos( const struct bbf_LocalScanner* ptrA, uint32 scanIndexA, int32* xPtrA, int32* yPtrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** creates & initializes object */ -void bbf_LocalScanner_create( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - uint32 patchWidthA, - uint32 patchHeightA, - uint32 scaleExpA, - uint32 maxImageWidthA, - uint32 maxImageHeightA, - uint32 minScaleExpA, - uint32 maxRadiusA, - struct bbs_MemTbl* mtpA ); - -/** parameter for bit generation + recomputing bit image */ -void bbf_LocalScanner_bitParam( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const struct bbf_BitParam* bitParamPtrA ); - -/** Specifies a (sub-) scan region - * Scanning within a given scale is limited to that region. - * Region is truncateed to physical region - * Image assignment, bitParam assignment and function nextScale reset the sacn region to - * the whole image. - */ -void bbf_LocalScanner_origScanRegion( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const struct bts_Int16Rect* scanRegionPtrA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_LocalScanner_memSize( struct bbs_Context* cpA, - const struct bbf_LocalScanner* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_LocalScanner_memWrite( struct bbs_Context* cpA, - const struct bbf_LocalScanner* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_LocalScanner_memRead( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** resets scan position at current scale level */ -void bbf_LocalScanner_resetScan( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA ); - -/** assigns image; sets initial bit parameters; resets processor */ -void bbf_LocalScanner_assign( struct bbs_Context* cpA, - struct bbf_LocalScanner* ptrA, - const uint8* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bbf_BitParam* paramPtrA ); - -/** returns pointer to patch data */ -const uint32* bbf_LocalScanner_getPatch( const struct bbf_LocalScanner* ptrA ); - -/** goes to next scan position */ -flag bbf_LocalScanner_next( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ); - -/** goes to scan position (integer coordinate numbers) */ -void bbf_LocalScanner_goToXY( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, int32 xA, int32 yA ); - -/** goes to scan position */ -void bbf_LocalScanner_goToIndex( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA, uint32 scanIndexA ); - -/** goes to next offset position */ -flag bbf_LocalScanner_nextOffset( struct bbs_Context* cpA, struct bbf_LocalScanner* ptrA ); - -#endif /* bbf_LOCAL_SCANNER_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/ScanDetector.c b/Embedded/common/src/b_BitFeatureEm/ScanDetector.c deleted file mode 100644 index 44b48bf..0000000 --- a/Embedded/common/src/b_BitFeatureEm/ScanDetector.c +++ /dev/null @@ -1,484 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/ScanDetector.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_ScanDetector_init( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA ) -{ - uint32 iL; - - ptrA->minScaleE = 0; - ptrA->maxScaleE = 0; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - bbf_Scanner_init( cpA, &ptrA->scannerE ); - - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->minDefScaleE = 0; - ptrA->maxDefScaleE = 0; - ptrA->scaleStepE = 0; - ptrA->overlapThrE = 0; - ptrA->borderWidthE = 0; - ptrA->borderHeightE = 0; - ptrA->featuresE = 0; - for( iL = 0; iL < bbf_SCAN_DETECTOR_MAX_FEATURES; iL++ ) bbf_BitParam_init( cpA, &ptrA->bitParamArrE[ iL ] ); - for( iL = 0; iL < bbf_SCAN_DETECTOR_MAX_FEATURES; iL++ ) bbf_Sequence_init( cpA, &ptrA->featureArrE[ iL ] ); - bts_IdCluster2D_init( cpA, &ptrA->refClusterE ); - ptrA->refDistanceE = 10; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_ScanDetector_exit( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA ) -{ - uint32 iL; - - ptrA->minScaleE = 0; - ptrA->maxScaleE = 0; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - bbf_Scanner_exit( cpA, &ptrA->scannerE ); - - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->minDefScaleE = 0; - ptrA->maxDefScaleE = 0; - ptrA->scaleStepE = 0; - ptrA->overlapThrE = 0; - ptrA->borderWidthE = 0; - ptrA->borderHeightE = 0; - ptrA->featuresE = 0; - for( iL = 0; iL < bbf_SCAN_DETECTOR_MAX_FEATURES; iL++ ) bbf_BitParam_exit( cpA, &ptrA->bitParamArrE[ iL ] ); - for( iL = 0; iL < bbf_SCAN_DETECTOR_MAX_FEATURES; iL++ ) bbf_Sequence_exit( cpA, &ptrA->featureArrE[ iL ] ); - bts_IdCluster2D_exit( cpA, &ptrA->refClusterE ); - ptrA->refDistanceE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_ScanDetector_copy( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA, - const struct bbf_ScanDetector* srcPtrA ) -{ - bbs_ERROR0( "bbf_ScanDetector_copy:\n Function is not available" ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_ScanDetector_equal( struct bbs_Context* cpA, - const struct bbf_ScanDetector* ptrA, - const struct bbf_ScanDetector* srcPtrA ) -{ - bbs_ERROR0( "bbf_ScanDetector_equal:\n Function is not available" ); - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_ScanDetector_memSize( struct bbs_Context* cpA, - const struct bbf_ScanDetector* ptrA ) -{ - uint32 iL; - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbs_SIZEOF16( ptrA->patchWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->patchHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->minDefScaleE ); - memSizeL += bbs_SIZEOF16( ptrA->maxDefScaleE ); - memSizeL += bbs_SIZEOF16( ptrA->scaleStepE ); - memSizeL += bbs_SIZEOF16( ptrA->overlapThrE ); - memSizeL += bbs_SIZEOF16( ptrA->borderWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->borderHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->featuresE ); - for( iL = 0; iL < ptrA->featuresE; iL++ ) memSizeL += bbf_BitParam_memSize( cpA, &ptrA->bitParamArrE[ iL ] ); - for( iL = 0; iL < ptrA->featuresE; iL++ ) memSizeL += bbf_Sequence_memSize( cpA, &ptrA->featureArrE[ iL ] ); - memSizeL += bts_IdCluster2D_memSize( cpA, &ptrA->refClusterE ); - memSizeL += bbs_SIZEOF16( ptrA->refDistanceE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_ScanDetector_memWrite( struct bbs_Context* cpA, - const struct bbf_ScanDetector* ptrA, - uint16* memPtrA ) -{ - uint32 iL; - uint32 memSizeL = bbf_ScanDetector_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_SCAN_DETECTOR_VERSION, memPtrA ); - - memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->minDefScaleE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxDefScaleE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->scaleStepE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->overlapThrE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->borderWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->borderHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->featuresE, memPtrA ); - for( iL = 0; iL < ptrA->featuresE; iL++ ) memPtrA += bbf_BitParam_memWrite( cpA, &ptrA->bitParamArrE[ iL ], memPtrA ); - for( iL = 0; iL < ptrA->featuresE; iL++ ) memPtrA += bbf_Sequence_memWrite( cpA, &ptrA->featureArrE[ iL ], memPtrA ); - memPtrA += bts_IdCluster2D_memWrite( cpA, &ptrA->refClusterE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->refDistanceE, memPtrA ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_ScanDetector_memRead( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - bbs_DEF_fNameL( "bbf_ScanDetector_memRead" ) - - /* debugging hint: set this flag to FALSE when you suspect a shared memory conflict */ - const flag maximizeSharedMemoryL = TRUE; - - uint32 iL; - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_SCAN_DETECTOR_VERSION, memPtrA ); - - memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->minDefScaleE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxDefScaleE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->scaleStepE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->overlapThrE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->borderWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->borderHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->featuresE, memPtrA ); - for( iL = 0; iL < ptrA->featuresE; iL++ ) memPtrA += bbf_BitParam_memRead( cpA, &ptrA->bitParamArrE[ iL ], memPtrA ); - for( iL = 0; iL < ptrA->featuresE; iL++ ) memPtrA += bbf_Sequence_memRead( cpA, &ptrA->featureArrE[ iL ], memPtrA, &memTblL ); - memPtrA += bts_IdCluster2D_memRead( cpA, &ptrA->refClusterE, memPtrA, espL ); - memPtrA += bbs_memRead32( &ptrA->refDistanceE, memPtrA ); -/* - if( memSizeL != bbf_ScanDetector_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_ScanDetector_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } -*/ - - ptrA->minScaleE = ptrA->minDefScaleE; - ptrA->maxScaleE = ptrA->maxDefScaleE; - - /* initialize scanner; be aware of shared memory settings(!) */ - { - uint32 maxImageSizeL = ptrA->maxImageWidthE * ptrA->maxImageHeightE; - - /* estimate of maximal possible faces in image */ - uint32 maxFacesL = maxImageSizeL / ( 768 << 1 ); - - uint32 maxRadiusL = 0; - - if( maxImageSizeL == 0 ) - { - bbs_ERROR1( "%s:\nMaximum image size was not defined (size variables must be set before calling _memRead)", fNameL ); - return memSizeL; - } - - for( iL = 0; iL < ptrA->featuresE; iL++ ) - { - maxRadiusL = maxRadiusL > ptrA->bitParamArrE[ iL ].outerRadiusE ? maxRadiusL : ptrA->bitParamArrE[ iL ].outerRadiusE; - } - - if( maxFacesL < 1 ) maxFacesL = 1; - - bbf_Scanner_create( cpA, &ptrA->scannerE, - maximizeSharedMemoryL, - ptrA->maxImageWidthE, - ptrA->maxImageHeightE, - maxRadiusL, - ptrA->patchWidthE, - ptrA->patchHeightE, - ptrA->minScaleE, - ptrA->maxScaleE, - ptrA->scaleStepE, - ptrA->borderWidthE, - ptrA->borderHeightE, - maxFacesL * 20, /* bufferSizeA */ - &memTblL ); - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_ScanDetector_process( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA, - const void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA, - int32** outArrPtrPtrA ) -{ - /* best global values (used when no positives could be found) */ - int32 bestGlobalActL = ( int32 )0x80000000; - int32 bestGlobalXL = 0; - int32 bestGlobalYL = 0; - uint32 bestGlobalScaleL = 0; - - struct bbf_Scanner* scannerPtrL = &ptrA->scannerE; - - scannerPtrL->minScaleE = ptrA->minScaleE; - scannerPtrL->maxScaleE = ptrA->maxScaleE; - - *outArrPtrPtrA = NULL; - - if( bbs_Context_error( cpA ) ) return 0; - if( ptrA->featuresE == 0 ) - { - bbs_ERROR0( "bbf_ScanDetector_process: detector has no features" ); - return 0; - } - - if( imageWidthA > ptrA->maxImageWidthE || imageHeightA > ptrA->maxImageHeightE ) - { - bbs_ERROR0( "bbf_ScanDetector_process: images size exceeds preallocated size" ); - return 0; - } - - /* resets output positions */ - bbf_Scanner_resetOutPos( cpA, scannerPtrL ); - - /* assign image to scanner - reset scanner */ - bbf_Scanner_assign( cpA, scannerPtrL, imagePtrA, imageWidthA, imageHeightA, roiPtrA, &ptrA->bitParamArrE[ 0 ] ); - - while( bbf_Scanner_positions( scannerPtrL ) > 0 ) - { - int32 bestActL = ( int32 )0x80000000; - uint32 bestIdxL = 0; - uint32 bestLvlL = 0; - uint32 iL; - - const struct bbf_Feature* featurePtrL = ( const struct bbf_Feature* )&ptrA->featureArrE[ 0 ]; - const struct bbf_BitParam* paramPtrL = &ptrA->bitParamArrE[ 0 ]; - bbf_Scanner_bitParam( cpA, scannerPtrL, paramPtrL ); - - /* resets internal positions */ - bbf_Scanner_resetIntPos( cpA, scannerPtrL ); - - do - { - int32 actL = featurePtrL->vpActivityE( featurePtrL, bbf_Scanner_getPatch( scannerPtrL ) ); - if( actL > 0 ) - { - bbf_Scanner_addIntPos( cpA, scannerPtrL, bbf_Scanner_scanIndex( scannerPtrL ), actL ); - } - - if( actL > bestActL ) - { - bestActL = actL; - bestIdxL = bbf_Scanner_scanIndex( scannerPtrL ); - } - } - while( bbf_Scanner_next( cpA, scannerPtrL ) ); - - for( iL = 1; iL < ptrA->featuresE; iL++ ) - { - const struct bbf_Feature* featurePtrL = ( const struct bbf_Feature* )&ptrA->featureArrE[ iL ]; - const struct bbf_BitParam* paramPtrL = &ptrA->bitParamArrE[ iL ]; - uint32* idxArrL = scannerPtrL->idxArrE.arrPtrE; - int32* actArrL = scannerPtrL->actArrE.arrPtrE; - - uint32 kL = 0; - uint32 jL; - - if( scannerPtrL->intCountE == 0 ) break; - bestActL = ( int32 )0x80000000; - bbf_Scanner_bitParam( cpA, scannerPtrL, paramPtrL ); - - for( jL = 0; jL < scannerPtrL->intCountE; jL++ ) - { - int32 actL; - bbf_Scanner_goToIndex( cpA, scannerPtrL, idxArrL[ jL ] ); - actL = featurePtrL->vpActivityE( featurePtrL, bbf_Scanner_getPatch( scannerPtrL ) ); - if( actL > 0 ) - { - idxArrL[ kL ] = idxArrL[ jL ]; - actArrL[ kL ] = ( actArrL[ jL ] + actL ) >> 1; - kL++; - } - - if( actL > bestActL ) - { - bestActL = actL; - bestIdxL = idxArrL[ jL ]; - bestLvlL = iL; - } - } - - scannerPtrL->intCountE = kL; - } - - if( scannerPtrL->intCountE == 0 ) - { - int32 xL, yL; - uint32 scaleL; - - /* 8.24 */ - int32 actL = ( bestActL >> 4 ) + ( ( ( int32 )( bestLvlL + 1 - ptrA->featuresE ) << 24 ) / ( int32 )ptrA->featuresE ); - - /* 4.28 */ - actL <<= 4; - - bbf_Scanner_idxPos( scannerPtrL, bestIdxL, &xL, &yL, &scaleL ); - - if( actL > bestGlobalActL ) - { - bestGlobalActL = actL; - bestGlobalXL = xL; - bestGlobalYL = yL; - bestGlobalScaleL = scaleL; - } - } - else - { - /* remove overlaps for current scale */ - bbf_Scanner_removeIntOverlaps( cpA, scannerPtrL, ptrA->overlapThrE ); - - for( iL = 0; iL < scannerPtrL->intCountE; iL++ ) - { - int32 xL, yL; - uint32 scaleL; - uint32* idxArrL = scannerPtrL->idxArrE.arrPtrE; - int32* actArrL = scannerPtrL->actArrE.arrPtrE; - - int32 actL = actArrL[ iL ]; - bbf_Scanner_idxPos( scannerPtrL, idxArrL[ iL ], &xL, &yL, &scaleL ); - - /* add external position */ - bbf_Scanner_addOutPos( cpA, scannerPtrL, xL, yL, scaleL, actL ); - } - - /* remove overlapping positions */ - bbf_Scanner_removeOutOverlaps( cpA, scannerPtrL, ptrA->overlapThrE ); - - } - - if( !bbf_Scanner_nextScale( cpA, scannerPtrL ) ) break; - } -/* - { - uint32 iL; - printf( "\n-----------------------------------------------" ); - for( iL = 0; iL < scannerPtrL->outCountE; iL++ ) - { - printf( "\n%02i: %6.1f %6.1f %6.2f %6.3f", - iL, - ( float )scannerPtrL->outArrE.arrPtrE[ iL * 4 + 0 ] / ( 1L << 16 ), - ( float )scannerPtrL->outArrE.arrPtrE[ iL * 4 + 1 ] / ( 1L << 16 ), - ( float )scannerPtrL->outArrE.arrPtrE[ iL * 4 + 2 ] / ( 1L << 20 ), - ( float )scannerPtrL->outArrE.arrPtrE[ iL * 4 + 3 ] / ( 1L << 28 ) ); - - } - } -*/ - - *outArrPtrPtrA = scannerPtrL->outArrE.arrPtrE; - if( scannerPtrL->outCountE == 0 ) - { - /* no positive activities found: store best negative activity */ - bbf_Scanner_addOutPos( cpA, scannerPtrL, bestGlobalXL, bestGlobalYL, bestGlobalScaleL, bestGlobalActL ); - return 0; - } - else - { - return scannerPtrL->outCountE; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/ScanDetector.h b/Embedded/common/src/b_BitFeatureEm/ScanDetector.h deleted file mode 100644 index 7d44f81..0000000 --- a/Embedded/common/src/b_BitFeatureEm/ScanDetector.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_SCAN_DETECTOR_EM_H -#define bbf_SCAN_DETECTOR_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/IdCluster2D.h" -#include "b_BitFeatureEm/Sequence.h" -#include "b_BitFeatureEm/BitParam.h" -#include "b_BitFeatureEm/Scanner.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_SCAN_DETECTOR_VERSION 100 - -/* maximum number of features in scan detector */ -#define bbf_SCAN_DETECTOR_MAX_FEATURES 4 - -/* ---- object definition -------------------------------------------------- */ - -/** discrete feature set */ -struct bbf_ScanDetector -{ - /* ---- private data --------------------------------------------------- */ - - /** minimum scale (12.20) */ - uint32 minScaleE; - - /** maximum scale (0: unlimited) (12.20) */ - uint32 maxScaleE; - - /** maximum image width (this variable must be specified before reading the parameter file) */ - uint32 maxImageWidthE; - - /** maximum image height (this variable must be specified before reading the parameter file) */ - uint32 maxImageHeightE; - - /** scanner */ - struct bbf_Scanner scannerE; - - /* ---- public data ---------------------------------------------------- */ - - /** patch width */ - uint32 patchWidthE; - - /** patch height */ - uint32 patchHeightE; - - /** minimum default scale (12.20) */ - uint32 minDefScaleE; - - /** maximum default scale (0: unlimited) (12.20) */ - uint32 maxDefScaleE; - - /** scale step factor (1.32) (leading bit is always one and therefore ignored) */ - uint32 scaleStepE; - - /** overlap threshold (16.16) */ - uint32 overlapThrE; - - /** border width in pixels (refers to scaled image) */ - uint32 borderWidthE; - - /** border height in pixels (refers to scaled image) */ - uint32 borderHeightE; - - /** number of features */ - uint32 featuresE; - - /** bit param array */ - struct bbf_BitParam bitParamArrE[ bbf_SCAN_DETECTOR_MAX_FEATURES ]; - - /** feature array */ - struct bbf_Sequence featureArrE[ bbf_SCAN_DETECTOR_MAX_FEATURES ]; - - /** reference cluster */ - struct bts_IdCluster2D refClusterE; - - /** reference distance (e.g. eye distance) in ref cluster (16.16) */ - uint32 refDistanceE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_ScanDetector */ -void bbf_ScanDetector_init( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA ); - -/** resets bbf_ScanDetector */ -void bbf_ScanDetector_exit( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_ScanDetector_copy( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA, - const struct bbf_ScanDetector* srcPtrA ); - -/** equal operator */ -flag bbf_ScanDetector_equal( struct bbs_Context* cpA, - const struct bbf_ScanDetector* ptrA, - const struct bbf_ScanDetector* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_ScanDetector_memSize( struct bbs_Context* cpA, - const struct bbf_ScanDetector* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_ScanDetector_memWrite( struct bbs_Context* cpA, - const struct bbf_ScanDetector* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_ScanDetector_memRead( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Scans over image returns number of detected positions - * After processing the output data are stored in composite format - * in scannerPtrA->outArrE. - * - * The output data array is located after execution at *outArrPtrPtrA. - * The output data are organized as follows: - * x(16.16) y(16.16), scale(12.20), confidence(4.28), x(16.16).... - * - * All positions are sorted by descending confidence - * - * If no faces were found, the function returns 0 but the output contains - * one valid position with the highest confidence; the associated activity - * value is negative (or 0) in that case. - * - * If roiPtrA is NULL, the whole image is considered for processsing - * otherwise *roiPtrA specifies a section of the original image to which - * processing is limited. All coordinates refer to that section and must - * eventually be adjusted externally. - * The roi rectangle must not include pixels outside of the original image - * (checked -> error). The rectangle may be of uneven width. - */ -uint32 bbf_ScanDetector_process( struct bbs_Context* cpA, - struct bbf_ScanDetector* ptrA, - const void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA, - int32** outArrPtrPtrA ); - -#endif /* bbf_SCAN_DETECTOR_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/Scanner.c b/Embedded/common/src/b_BitFeatureEm/Scanner.c deleted file mode 100644 index 327e714..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Scanner.c +++ /dev/null @@ -1,1290 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/Scanner.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/** multiplies a scale with a 0.32 scale factor */ -uint32 bbf_Scanner_scalePrd( uint32 scaleA, uint32 factorA /*0.32 */ )\ -{ - return ( scaleA >> 16 ) * ( factorA >> 16 ) + - ( ( ( scaleA & 0x0FFFF ) * ( factorA >> 16 ) ) >> 16 ) + - ( ( ( scaleA >> 16 ) * ( factorA & 0x0FFFF ) ) >> 16 ); -} - -/* ------------------------------------------------------------------------- */ - -/** allocates arays */ -void bbf_Scanner_alloc( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - struct bbs_MemTbl* mtpA, - flag maximizeSharedMemoryA ) -{ - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - struct bbs_MemSeg* sspL = bbs_MemTbl_sharedSegPtr( cpA, &memTblL, 0 ); - struct bbs_MemSeg* mspL = maximizeSharedMemoryA ? sspL : espL; - - /* filter patch dimension */ - uint32 proL = ptrA->maxRadiusE; - uint32 pwoL = ( proL << 1 ) + 1; - - /* output image size (bit image) */ - uint32 woL = ptrA->maxImageWidthE; - uint32 hoL = ptrA->maxImageHeightE; - - /* extended output image size (bit image) considering borders */ - uint32 xwoL = woL + ( ptrA->borderWidthE << 1 ); - uint32 xhoL = hoL + ( ptrA->borderHeightE << 1 ); - - /* allocate working image */ - bbs_UInt16Arr_create( cpA, &ptrA->workImageE, ( ( woL >> 1 ) + ( woL & 1 ) ) * hoL, mspL ); - if( bbs_Context_error( cpA ) ) return; - bbs_UInt16Arr_fill( cpA, &ptrA->workImageE, 0 ); - - /* allocate bit image */ - bim_UInt32Image_create( cpA, &ptrA->bitImageE, xwoL, ( xhoL >> 5 ) + ( ( ( xhoL & 0x1F ) != 0 ) ? 1 : 0 ), mspL ); - if( bbs_Context_error( cpA ) ) return; - bim_UInt32Image_setAllPixels( cpA, &ptrA->bitImageE, 0, 0 ); - - /* allocate patch buffer */ - bbs_UInt32Arr_create( cpA, &ptrA->patchBufferE, ptrA->bitImageE.widthE, mspL ); - if( bbs_Context_error( cpA ) ) return; - bbs_UInt32Arr_fill( cpA, &ptrA->patchBufferE, 0 ); - - /* allocate line buffer */ - bbs_UInt16Arr_create( cpA, &ptrA->lineBufE, woL + ( woL & 1 ), sspL ); - - /* allocate table */ - bim_UInt32Image_create( cpA, &ptrA->satE, woL + pwoL, pwoL + 1, sspL ); - - /* allocate buffers */ - bbs_UInt32Arr_create( cpA, &ptrA->idxArrE, ptrA->bufferSizeE, mspL ); - bbs_Int32Arr_create( cpA, &ptrA->actArrE, ptrA->bufferSizeE, mspL ); - - bbs_Int32Arr_create( cpA, &ptrA->outArrE, ptrA->bufferSizeE >> 1, espL ); -} - -/* ------------------------------------------------------------------------- */ - -/** downscales work image */ -void bbf_Scanner_downscale( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - uint32 w0L = ptrA->workWidthE; - uint32 h0L = ptrA->workHeightE; - uint32 w1L = w0L >> 1; - uint32 h1L = h0L >> 1; - uint32 w20L = ( w0L >> 1 ) + ( w0L & 1 ); - uint16* arrL = ptrA->workImageE.arrPtrE; - - uint32 iL, jL; - uint32 kL = 0; - for( jL = 0; jL < h1L; jL++ ) - { - for( iL = 0; iL < ( w1L >> 1 ); iL++ ) - { - uint16 loL, hiL; - uint32 idxL = jL * 2 * w20L + iL * 2; - - loL = ( ( arrL[ idxL ] & 0x00FF ) + ( arrL[ idxL ] >> 8 ) + ( arrL[ idxL + w20L ] & 0x00FF ) + ( arrL[ idxL + w20L ] >> 8 ) + 2 ) >> 2; - idxL++; - hiL = ( ( arrL[ idxL ] & 0x00FF ) + ( arrL[ idxL ] >> 8 ) + ( arrL[ idxL + w20L ] & 0x00FF ) + ( arrL[ idxL + w20L ] >> 8 ) + 2 ) >> 2; - - arrL[ kL ] = loL | ( hiL << 8 ); - kL++; - } - if( ( w1L & 1 ) != 0 ) - { - uint32 idxL = jL * 2 * w20L + iL; - arrL[ kL++ ] = ( ( arrL[ idxL ] & 0x00FF ) + ( arrL[ idxL ] >> 8 ) + ( arrL[ idxL + w20L ] & 0x00FF ) + ( arrL[ idxL + w20L ] >> 8 ) + 2 ) >> 2; - } - } - - ptrA->workWidthE = w1L; - ptrA->workHeightE = h1L; - ptrA->scaleExpE++; -} - -/* ------------------------------------------------------------------------- */ - -/** copies image - * handling for 8 bit images is implemented - * 16 bit image handling for the whole class needs to be added in this function only - */ -void bbf_Scanner_copyImage( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, const void* imagePtrA, uint32 imageWidthA, uint32 imageHeightA, const struct bts_Int16Rect* roiPtrA ) -{ - bbs_DEF_fNameL( "void bbf_Scanner_copyImage( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, const struct bim_UInt16ByteImage* imagePtrA, const struct bts_Int16Rect* roiPtrA )" ) - - if( imageWidthA > ptrA->maxImageWidthE || imageHeightA > ptrA->maxImageHeightE ) - { - bbs_ERROR5( "%s:\n Input image (%ix%i)is too large; Scanner is configured for maximal (%ix%i)", - fNameL, imageWidthA, imageHeightA, ptrA->maxImageWidthE, ptrA->maxImageHeightE ); - return; - } - - if( roiPtrA == 0 ) - { - uint32 iL, jL; - const uint8* srcL = ( uint8* )imagePtrA; - uint16* dstL = ptrA->workImageE.arrPtrE; - ptrA->workWidthE = imageWidthA; - ptrA->workHeightE = imageHeightA; - for( iL = 0; iL < ptrA->workHeightE; iL++ ) - { - for( jL = ptrA->workWidthE >> 1; jL > 0; jL-- ) - { - *dstL++ = ( uint16 )srcL[ 0 ] | ( uint16 )srcL[ 1 ] << 8; - srcL += 2; - } - - /* uneven width */ - if( ptrA->workWidthE & 1 ) *dstL++ = *srcL++; - } - } - else - { - uint32 iL, jL; - const uint8* srcL = ( uint8* )imagePtrA + roiPtrA->y1E * imageWidthA + roiPtrA->x1E; - uint16* dstL = ptrA->workImageE.arrPtrE; - - if( roiPtrA->x2E <= roiPtrA->x1E || roiPtrA->y2E <= roiPtrA->y1E ) - { - bbs_ERROR1( "%s:\n ROI is invalid or zero", fNameL ); - return; - } - if( roiPtrA->x1E < 0 || roiPtrA->y1E < 0 || roiPtrA->x2E > ( int32 )imageWidthA || roiPtrA->y2E > ( int32 )imageHeightA ) - { - bbs_ERROR1( "%s:\n ROI exceeds image boundary", fNameL ); - return; - } - - ptrA->workWidthE = roiPtrA->x2E - roiPtrA->x1E; - ptrA->workHeightE = roiPtrA->y2E - roiPtrA->y1E; - for( iL = 0; iL < ptrA->workHeightE; iL++ ) - { - for( jL = ptrA->workWidthE >> 1; jL > 0; jL-- ) - { - *dstL++ = ( uint16 )srcL[ 0 ] | ( uint16 )srcL[ 1 ] << 8; - srcL += 2; - } - - /* uneven width */ - if( ptrA->workWidthE & 1 ) *dstL++ = *srcL++; - - srcL += imageWidthA - ptrA->workWidthE; - } - } -} - -/* ------------------------------------------------------------------------- */ - -/** creates bit image */ -void bbf_Scanner_createBitImage( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - bbs_DEF_fNameL( "void bbf_Scanner_createBitImage( struct bbs_Context* cpA, struct bbf_Scanner* ptrA )" ) - - - /* declarations */ - uint32 proL, priL, pwoL, pwiL; - uint32 wiL, wi2L, hiL, woL, hoL, xwoL, xhoL; /* image size specifies */ - uint32 stepL; /* scan step (16.16) */ - uint32 bitMaskL; /* current bit mask */ - uint32* bitRowL; /* pointer to bit-row */ - uint32 wsL, hsL; /* size of summed area table (ringbuffer) */ - uint32 satSizeL; - uint32* satL; /* pointer to summed area table */ - uint16* lBufL; /* pointer to line buffer */ - uint32 yfL; /* fixed point y-coordinate (16.16) */ - uint32 iL, jL; - - uint32 swi1L; /* table writing index */ - uint32 swi2L; /* table writing index */ - uint32 sriL; /* table reading index */ - - uint32 poAreaL, piAreaL; /* areas of inner and outer rectangles */ - uint32 siL[ 8 ]; /* table indices */ - - - proL = ptrA->bitParamE.outerRadiusE; - priL = ptrA->bitParamE.innerRadiusE; - pwoL = ( proL << 1 ) + 1; - pwiL = ( priL << 1 ) + 1; - - if( ptrA->borderHeightE >= 32 ) - { - bbs_ERROR1( "%s:\n borderHeightE >= 32", fNameL ); - return; - } - - if( proL <= priL ) - { - bbs_ERROR1( "%s:\n outer radius <= inner radius", fNameL ); - return; - } - - /* input image size (bit image) */ - wiL = ptrA->workWidthE; - hiL = ptrA->workHeightE; - wi2L = ( wiL >> 1 ) + ( wiL & 1 ); - - /* 16.16 */ - stepL = ptrA->scaleE >> ( ptrA->scaleExpE + 4 ); - - /* output image size (bit image) */ - woL = ( wiL << 16 ) / stepL; - hoL = ( hiL << 16 ) / stepL; - - if( woL <= pwoL || hoL <= pwoL ) - { - bbs_ERROR1( "%s:\n scaled image is too small", fNameL ); - return; - } - - if( woL * stepL >= ( wiL << 16 ) ) woL--; - if( hoL * stepL >= ( hiL << 16 ) ) hoL--; - - /* extended output image size (bit image) considering borders */ - xwoL = woL + ( ptrA->borderWidthE << 1 ); - xhoL = hoL + ( ptrA->borderHeightE << 1 ); - - ptrA->currentWidthE = xwoL; - ptrA->currentHeightE = xhoL; - - /* initialize bit image */ - bim_UInt32Image_size( cpA, &ptrA->bitImageE, xwoL, ( xhoL >> 5 ) + ( ( ( xhoL & 0x1F ) != 0 ) ? 1 : 0 ) ); - bim_UInt32Image_setAllPixels( cpA, &ptrA->bitImageE, 0, 0 ); - - bitMaskL = ( uint32 )1 << ptrA->borderHeightE; - bitRowL = ( uint32* )ptrA->bitImageE.arrE.arrPtrE + ptrA->borderWidthE; - - /* width of table */ - wsL = woL + pwoL; - - /* height of table */ - hsL = pwoL + 1; - - bim_UInt32Image_size( cpA, &ptrA->satE, wsL, hsL ); - - satL = ptrA->satE.arrE.arrPtrE; - satSizeL = wsL * hsL; - - lBufL = ptrA->lineBufE.arrPtrE; - - yfL = 0; /* fixed point y-coordinate ( 16.16 )*/ - - swi1L = 0; /* table writing index */ - swi2L = 0; /* table writing index */ - sriL = 0; /* table reading index */ - - /* areas of inner and outer rectangles */ - poAreaL = pwoL * pwoL; - piAreaL = pwiL * pwiL; - - /* interpolate pixels; compute table and bit image */ - - for( iL = wsL * ( proL + 1 ); iL > 0; iL-- ) satL[ swi1L++ ] = 0; - swi2L = swi1L - wsL; - - for( jL = 0; jL < hoL + proL; jL++ ) - { - if( jL < hoL ) /* rescale area */ - { - uint32 ypL = ( yfL >> 16 ); - uint32 yoff1L = yfL & 0x0FFFF; - uint32 yoff0L = 0x010000 - yoff1L; - const uint16* arr0L = ptrA->workImageE.arrPtrE + ypL * wi2L; - const uint16* arr1L = arr0L + wi2L; - - - uint32 xfL = 0; /* fixed point x-coordinate (16.16) */ - uint32 hSumL = 0; - - yfL += stepL; - - for( iL = 0; iL <= proL; iL++ ) satL[ swi1L++ ] = 0; - swi2L += iL; - - /* fill line buffer */ - for( iL = 0; iL < wi2L; iL++ ) - { - lBufL[ iL * 2 ] = ( ( ( arr0L[ iL ] & 0x0FF ) * yoff0L ) + ( ( arr1L[ iL ] & 0x0FF ) * yoff1L ) ) >> 10; - lBufL[ iL * 2 + 1 ] = ( ( ( arr0L[ iL ] >> 8 ) * yoff0L ) + ( ( arr1L[ iL ] >> 8 ) * yoff1L ) ) >> 10; - } - - for( iL = 0; iL < woL; iL++ ) - { - uint32 xpL = ( xfL >> 16 ); - uint32 xoff1L = xfL & 0x0FFFF; - uint16 pixL = ( lBufL[ xpL ] * ( 0x010000 - xoff1L ) + lBufL[ xpL + 1 ] * xoff1L ) >> 22; - satL[ swi1L ] = ( hSumL += pixL ) + satL[ swi2L ]; - xfL += stepL; - swi1L++; - swi2L++; - } - - for( iL = 0; iL < proL; iL++ ) - { - satL[ swi1L ] = hSumL + satL[ swi2L ]; - swi1L++; - swi2L++; - } - } - else /* image is processed - fill in 0s */ - { - for( iL = 0; iL < wsL; iL++ ) satL[ swi1L++ ] = satL[ swi2L++ ]; - } - - swi1L = ( swi1L < satSizeL ) ? swi1L : 0; - swi2L = ( swi2L < satSizeL ) ? swi2L : 0; - - /* fill line in bit image */ - if( jL >= proL ) - { - const uint32* rSatL = satL; - - /* table coordinate indices for outer rectangle */ - siL[ 0 ] = sriL; - siL[ 1 ] = siL[ 0 ] + pwoL; - siL[ 2 ] = siL[ 0 ] + pwoL * wsL; - siL[ 2 ] -= ( siL[ 2 ] >= satSizeL ) ? satSizeL : 0; - siL[ 3 ] = siL[ 2 ] + pwoL; - - /* table coordinate indices for inner rectangle */ - siL[ 4 ] = siL[ 0 ] + ( proL - priL ) * wsL + ( proL - priL ); - siL[ 4 ] -= ( siL[ 4 ] >= satSizeL ) ? satSizeL : 0; - siL[ 5 ] = siL[ 4 ] + pwiL; - siL[ 6 ] = siL[ 4 ] + pwiL * wsL; - siL[ 6 ] -= ( siL[ 6 ] >= satSizeL ) ? satSizeL : 0; - siL[ 7 ] = siL[ 6 ] + pwiL; - sriL += wsL; - if( sriL == satSizeL ) sriL = 0; - - for( iL = 0; iL < woL; iL++ ) - { - uint32 oAvgL = ( rSatL[ siL[ 0 ] ] - rSatL[ siL[ 1 ] ] - rSatL[ siL[ 2 ] ] + rSatL[ siL[ 3 ] ] ) * piAreaL; - uint32 iAvgL = ( rSatL[ siL[ 4 ] ] - rSatL[ siL[ 5 ] ] - rSatL[ siL[ 6 ] ] + rSatL[ siL[ 7 ] ] ) * poAreaL; - bitRowL[ iL ] |= ( iAvgL > oAvgL ) ? bitMaskL : 0; - rSatL++; - } - if( ( bitMaskL <<= 1 ) == 0 ) - { - bitRowL += xwoL; - bitMaskL = 1; - } - } - } -} - -/* ------------------------------------------------------------------------- */ - -/** initialize patch buffer */ -void bbf_Scanner_initPatchBuffer( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - bbs_UInt32Arr_size( cpA, &ptrA->patchBufferE, ptrA->bitImageE.widthE ); - bbs_memcpy32( ptrA->patchBufferE.arrPtrE, ptrA->bitImageE.arrE.arrPtrE, ptrA->bitImageE.widthE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_init( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA ) -{ - ptrA->scaleExpE = 0; - ptrA->scaleE = 0; - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->effMaxScaleE = 0; - ptrA->currentWidthE = 0; - ptrA->currentHeightE = 0; - ptrA->workWidthE = 0; - ptrA->workHeightE = 0; - bbf_BitParam_init( cpA, &ptrA->bitParamE ); - bbs_UInt16Arr_init( cpA, &ptrA->workImageE ); - bim_UInt32Image_init( cpA, &ptrA->satE ); - bim_UInt32Image_init( cpA, &ptrA->bitImageE ); - bbs_UInt32Arr_init( cpA, &ptrA->patchBufferE ); - bbs_UInt16Arr_init( cpA, &ptrA->lineBufE ); - - bbs_UInt32Arr_init( cpA, &ptrA->idxArrE ); - bbs_Int32Arr_init( cpA, &ptrA->actArrE ); - bbs_Int32Arr_init( cpA, &ptrA->outArrE ); - ptrA->outCountE = 0; - ptrA->intCountE = 0; - ptrA->bufferSizeE = 1024; - - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - ptrA->maxRadiusE = 0; - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->minScaleE = 0; - ptrA->maxScaleE = 0; - ptrA->scaleStepE = 0; - ptrA->borderWidthE = 0; - ptrA->borderHeightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_exit( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA ) -{ - ptrA->scaleExpE = 0; - ptrA->scaleE = 0; - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->effMaxScaleE = 0; - ptrA->currentWidthE = 0; - ptrA->currentHeightE = 0; - ptrA->workWidthE = 0; - ptrA->workHeightE = 0; - bbf_BitParam_exit( cpA, &ptrA->bitParamE ); - bbs_UInt16Arr_exit( cpA, &ptrA->workImageE ); - bim_UInt32Image_exit( cpA, &ptrA->satE ); - bim_UInt32Image_exit( cpA, &ptrA->bitImageE ); - bbs_UInt32Arr_exit( cpA, &ptrA->patchBufferE ); - bbs_UInt16Arr_exit( cpA, &ptrA->lineBufE ); - - bbs_UInt32Arr_exit( cpA, &ptrA->idxArrE ); - bbs_Int32Arr_exit( cpA, &ptrA->actArrE ); - bbs_Int32Arr_exit( cpA, &ptrA->outArrE ); - ptrA->outCountE = 0; - ptrA->intCountE = 0; - ptrA->bufferSizeE = 1024; - - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; - ptrA->maxRadiusE = 0; - ptrA->patchWidthE = 0; - ptrA->patchHeightE = 0; - ptrA->minScaleE = 0; - ptrA->maxScaleE = 0; - ptrA->scaleStepE = 0; - ptrA->borderWidthE = 0; - ptrA->borderHeightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_copy( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - const struct bbf_Scanner* srcPtrA ) -{ - ptrA->scaleExpE = srcPtrA->scaleExpE; - ptrA->scaleE = srcPtrA->scaleE; - ptrA->xE = srcPtrA->xE; - ptrA->yE = srcPtrA->yE; - ptrA->effMaxScaleE = srcPtrA->effMaxScaleE; - ptrA->currentWidthE = srcPtrA->currentWidthE; - ptrA->currentHeightE = srcPtrA->currentHeightE; - ptrA->workWidthE = srcPtrA->workWidthE; - ptrA->workHeightE = srcPtrA->workHeightE; - - bbf_BitParam_copy( cpA, &ptrA->bitParamE, &srcPtrA->bitParamE ); - bbs_UInt16Arr_copy( cpA, &ptrA->workImageE, &srcPtrA->workImageE ); - bim_UInt32Image_copy( cpA, &ptrA->satE, &srcPtrA->satE ); - bim_UInt32Image_copy( cpA, &ptrA->bitImageE, &srcPtrA->bitImageE ); - bbs_UInt32Arr_copy( cpA, &ptrA->patchBufferE, &srcPtrA->patchBufferE ); - bbs_UInt16Arr_copy( cpA, &ptrA->lineBufE, &srcPtrA->lineBufE ); - - ptrA->maxImageWidthE = srcPtrA->maxImageWidthE; - ptrA->maxImageHeightE = srcPtrA->maxImageHeightE; - ptrA->maxRadiusE = srcPtrA->maxRadiusE; - ptrA->patchWidthE = srcPtrA->patchWidthE; - ptrA->patchHeightE = srcPtrA->patchHeightE; - ptrA->minScaleE = srcPtrA->minScaleE; - ptrA->maxScaleE = srcPtrA->maxScaleE; - ptrA->scaleStepE = srcPtrA->scaleStepE; - ptrA->borderWidthE = srcPtrA->borderWidthE; - ptrA->borderHeightE = srcPtrA->borderHeightE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_Scanner_equal( struct bbs_Context* cpA, - const struct bbf_Scanner* ptrA, - const struct bbf_Scanner* srcPtrA ) -{ - if( ptrA->maxImageWidthE != srcPtrA->maxImageWidthE ) return FALSE; - if( ptrA->maxImageHeightE != srcPtrA->maxImageHeightE ) return FALSE; - if( ptrA->maxRadiusE != srcPtrA->maxRadiusE ) return FALSE; - if( ptrA->patchWidthE != srcPtrA->patchWidthE ) return FALSE; - if( ptrA->patchHeightE != srcPtrA->patchHeightE ) return FALSE; - if( ptrA->minScaleE != srcPtrA->minScaleE ) return FALSE; - if( ptrA->maxScaleE != srcPtrA->maxScaleE ) return FALSE; - if( ptrA->scaleStepE != srcPtrA->scaleStepE ) return FALSE; - if( ptrA->borderWidthE != srcPtrA->borderWidthE ) return FALSE; - if( ptrA->borderHeightE != srcPtrA->borderHeightE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Scanner_positions( const struct bbf_Scanner* ptrA ) -{ - int32 wL = ( int32 )ptrA->currentWidthE - ptrA->patchWidthE; - int32 hL = ( int32 )ptrA->currentHeightE - ptrA->patchHeightE; - return ( wL >= 0 ? wL : 0 ) * ( hL >= 0 ? hL : 0 ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Scanner_scanIndex( const struct bbf_Scanner* ptrA ) -{ - return ptrA->yE * ptrA->currentWidthE + ptrA->xE; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_pos( const struct bbf_Scanner* ptrA, - int32* xPtrA, int32* yPtrA, uint32* scalePtrA ) -{ - /* 16.16 */ - *xPtrA = ( int32 )( ptrA->xE - ptrA->borderWidthE ) * ( int32 )( ptrA->scaleE >> 4 ); - - /* 16.16 */ - *yPtrA = ( int32 )( ptrA->yE - ptrA->borderHeightE ) * ( int32 )( ptrA->scaleE >> 4 ); - - /* 12.20 */ - *scalePtrA = ptrA->scaleE; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_idxPos( const struct bbf_Scanner* ptrA, uint32 scanIndexA, - int32* xPtrA, int32* yPtrA, uint32* scalePtrA ) -{ - int32 yL = scanIndexA / ptrA->currentWidthE; - int32 xL = scanIndexA - ( yL * ptrA->currentWidthE ); - - /* 16.16 */ - *xPtrA = ( int32 )( xL - ptrA->borderWidthE ) * ( int32 )( ptrA->scaleE >> 4 ); - - /* 16.16 */ - *yPtrA = ( int32 )( yL - ptrA->borderHeightE ) * ( int32 )( ptrA->scaleE >> 4 ); - - *scalePtrA = ptrA->scaleE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_create( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - flag maximizeSharedMemoryA, - uint32 maxImageWidthA, - uint32 maxImageHeightA, - uint32 maxRadiusA, - uint32 patchWidthA, - uint32 patchHeightA, - uint32 minScaleA, - uint32 maxScaleA, - uint32 scaleStepA, - uint32 borderWidthA, - uint32 borderHeightA, - uint32 bufferSizeA, - struct bbs_MemTbl* mtpA ) -{ - ptrA->maxImageWidthE = maxImageWidthA; - ptrA->maxImageHeightE = maxImageHeightA; - ptrA->maxRadiusE = maxRadiusA; - ptrA->patchWidthE = patchWidthA; - ptrA->patchHeightE = patchHeightA; - ptrA->minScaleE = minScaleA; - ptrA->maxScaleE = maxScaleA; - ptrA->scaleStepE = scaleStepA; - ptrA->borderWidthE = borderWidthA; - ptrA->borderHeightE = borderHeightA; - ptrA->bufferSizeE = bufferSizeA; - bbf_Scanner_alloc( cpA, ptrA, mtpA, maximizeSharedMemoryA ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_bitParam( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - const struct bbf_BitParam* bitParamPtrA ) -{ - if( !bbf_BitParam_equal( cpA, &ptrA->bitParamE, bitParamPtrA ) ) - { - bbf_BitParam_copy( cpA, &ptrA->bitParamE, bitParamPtrA ); - bbf_Scanner_createBitImage( cpA, ptrA ); - } - - bbf_Scanner_resetScan( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Scanner_memSize( struct bbs_Context* cpA, - const struct bbf_Scanner* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - memSizeL += bbs_SIZEOF16( ptrA->maxImageWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->maxImageHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->maxRadiusE ); - memSizeL += bbs_SIZEOF16( ptrA->patchWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->patchHeightE ); - memSizeL += bbs_SIZEOF16( ptrA->minScaleE ); - memSizeL += bbs_SIZEOF16( ptrA->maxScaleE ); - memSizeL += bbs_SIZEOF16( ptrA->scaleStepE ); - memSizeL += bbs_SIZEOF16( ptrA->borderWidthE ); - memSizeL += bbs_SIZEOF16( ptrA->borderHeightE ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Scanner_memWrite( struct bbs_Context* cpA, - const struct bbf_Scanner* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bbf_Scanner_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_SCANNER_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxImageWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxImageHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxRadiusE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->minScaleE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxScaleE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->scaleStepE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->borderWidthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->borderHeightE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Scanner_memRead( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_SCANNER_VERSION, memPtrA ); - - memPtrA += bbs_memRead32( &ptrA->maxImageWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxImageHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxRadiusE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->minScaleE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxScaleE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->scaleStepE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->borderWidthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->borderHeightE, memPtrA ); - - if( memSizeL != bbf_Scanner_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_Scanner_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - if( bbs_Context_error( cpA ) ) return 0; - - /* allocate arrays */ - bbf_Scanner_alloc( cpA, ptrA, mtpA, FALSE ); - - if( bbs_Context_error( cpA ) ) return 0; - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_resetScan( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; - bbf_Scanner_initPatchBuffer( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_assign( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, - const void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA, - const struct bbf_BitParam* paramPtrA ) -{ - /* copy image */ - bbf_Scanner_copyImage( cpA, ptrA, imagePtrA, imageWidthA, imageHeightA, roiPtrA ); - - ptrA->scaleE = ptrA->minScaleE; - bbf_BitParam_copy( cpA, &ptrA->bitParamE, paramPtrA ); - - /* compute effective max scale */ - { - /* 16.16 */ - uint32 maxHScaleL = ( ptrA->workWidthE << 16 ) / ( ptrA->patchWidthE + 1 ); - uint32 maxVScaleL = ( ptrA->workHeightE << 16 ) / ( ptrA->patchHeightE + 1 ); - - /* 12.20 */ - ptrA->effMaxScaleE = maxHScaleL < maxVScaleL ? ( maxHScaleL << 4 ) : ( maxVScaleL << 4 ); - - if( ptrA->maxScaleE > 0 ) ptrA->effMaxScaleE = ptrA->effMaxScaleE < ptrA->maxScaleE ? ptrA->effMaxScaleE : ptrA->maxScaleE; - } - - ptrA->scaleExpE = 0; - - /* downscale work image if necessary */ - while( ptrA->scaleE > ( ( uint32 )( 2 << ptrA->scaleExpE ) << 20 ) ) bbf_Scanner_downscale( cpA, ptrA ); - - bbf_Scanner_createBitImage( cpA, ptrA ); - bbf_Scanner_resetScan( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_Scanner_nextScale( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - if( ptrA->scaleE + bbf_Scanner_scalePrd( ptrA->scaleE, ptrA->scaleStepE ) >= ptrA->effMaxScaleE ) return FALSE; - ptrA->scaleE += bbf_Scanner_scalePrd( ptrA->scaleE, ptrA->scaleStepE ); - - /* downscale work image if necessary */ - while( ptrA->scaleE > ( ( uint32 )( 2 << ptrA->scaleExpE ) << 20 ) ) bbf_Scanner_downscale( cpA, ptrA ); - - bbf_Scanner_createBitImage( cpA, ptrA ); - bbf_Scanner_resetScan( cpA, ptrA ); - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -const uint32* bbf_Scanner_getPatch( const struct bbf_Scanner* ptrA ) -{ - return ptrA->patchBufferE.arrPtrE + ptrA->xE; -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_Scanner_next( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - if( ( ptrA->xE + 1 ) < ( int32 )( ptrA->currentWidthE - ptrA->patchWidthE ) ) - { - ptrA->xE++; - return TRUE; - } - - if( ( ptrA->yE + 1 ) >= ( int32 )( ptrA->currentHeightE - ptrA->patchHeightE ) ) return FALSE; - - ptrA->xE = 0; - ptrA->yE++; - - { - uint32 offL = ( ptrA->yE & 0x1F ); - uint32 rowL = ( ptrA->yE >> 5 ) + ( offL > 0 ? 1 : 0 ); - - uint32 sizeL = ptrA->bitImageE.widthE; - uint32* dstL = ptrA->patchBufferE.arrPtrE; - uint32 iL; - - if( rowL < ptrA->bitImageE.heightE ) - { - uint32* srcL = ( uint32* )ptrA->bitImageE.arrE.arrPtrE + rowL * sizeL; - if( offL > 0 ) - { - uint32 shlL = 32 - offL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( dstL[ iL ] >> 1 ) | ( srcL[ iL ] << shlL ); - } - else - { - bbs_memcpy32( dstL, srcL, sizeL ); - } - } - else - { - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] >>= 1; - } - } - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_goToXY( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, int32 xA, int32 yA ) -{ - bbs_DEF_fNameL( "void bbf_Scanner_goToXY( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, int32 xA, int32 yA )" ) - - if( xA > ( int32 )( ptrA->currentWidthE - ptrA->patchWidthE ) ) - { - bbs_ERROR1( "%s:\nyA out of range", fNameL ); - return; - } - - ptrA->xE = xA; - - if( ptrA->yE == yA ) return; - - if( yA >= ( int32 )( ptrA->currentHeightE - ptrA->patchHeightE ) ) - { - bbs_ERROR1( "%s:\nyA out of range", fNameL ); - return; - } - - if( yA == ptrA->yE + 1 ) - { - uint32 offL, rowL; - uint32 sizeL; - uint32* dstL; - uint32 iL; - - ptrA->yE = yA; - offL = ( ptrA->yE & 0x1F ); - rowL = ( ptrA->yE >> 5 ) + ( offL > 0 ? 1 : 0 ); - - sizeL = ptrA->bitImageE.widthE; - dstL = ptrA->patchBufferE.arrPtrE; - - if( rowL < ptrA->bitImageE.heightE ) - { - uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + rowL * sizeL; - if( offL > 0 ) - { - uint32 shlL = 32 - offL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( dstL[ iL ] >> 1 ) | ( srcL[ iL ] << shlL ); - } - else - { - bbs_memcpy32( dstL, srcL, sizeL ); - } - } - else - { - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] >>= 1; - } - } - else - { - uint32 offL, rowL; - uint32 sizeL; - uint32* dstL; - uint32 iL; - - ptrA->yE = yA; - offL = ( ptrA->yE & 0x1F ); - rowL = ( ptrA->yE >> 5 ) + ( offL > 0 ? 1 : 0 ); - - sizeL = ptrA->bitImageE.widthE; - dstL = ptrA->patchBufferE.arrPtrE; - - if( rowL < ptrA->bitImageE.heightE ) - { - if( offL > 0 ) - { - uint32* src1L = ptrA->bitImageE.arrE.arrPtrE + rowL * sizeL; - uint32* src0L = src1L - sizeL; - uint32 shlL = 32 - offL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( src0L[ iL ] >> offL ) | ( src1L[ iL ] << shlL ); - } - else - { - bbs_memcpy32( dstL, ptrA->bitImageE.arrE.arrPtrE + rowL * sizeL, sizeL ); - } - } - else - { - uint32* srcL = ptrA->bitImageE.arrE.arrPtrE + ( rowL - 1 ) * sizeL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = srcL[ iL ] >> offL; - } - } -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_goToIndex( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, uint32 scanIndexA ) -{ - int32 yL = scanIndexA / ptrA->currentWidthE; - int32 xL = scanIndexA - yL * ptrA->currentWidthE; - bbf_Scanner_goToXY( cpA, ptrA, xL, yL ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Scanner_goToUls( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, - int32 xA, int32 yA, uint32 scaleA ) -{ - int32 xL = ( xA / ( int32 )( ptrA->scaleE >> 4 ) ) + ptrA->borderWidthE; - int32 yL = ( yA / ( int32 )( ptrA->scaleE >> 4 ) ) + ptrA->borderHeightE; - - if( ptrA->scaleE != scaleA ) - { - bbs_ERROR0( "bbf_Scanner_goToUls:\nScales no not match" ); - return; - } - - bbf_Scanner_goToXY( cpA, ptrA, xL, yL ); -} - -/* ------------------------------------------------------------------------- */ - -/* resets output positions */ -void bbf_Scanner_resetOutPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - ptrA->outCountE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* resets internal positions */ -void bbf_Scanner_resetIntPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) -{ - ptrA->intCountE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* add internal position */ -void bbf_Scanner_addIntPos( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - uint32 idxA, - int32 actA ) -{ - if( ptrA->intCountE < ptrA->idxArrE.sizeE ) - { - ptrA->idxArrE.arrPtrE[ ptrA->intCountE ] = idxA; - ptrA->actArrE.arrPtrE[ ptrA->intCountE ] = actA; - ptrA->intCountE++; - } - else - { - /* When buffer is full then replace lowest confidence-entry with new input - * This fallback solution causes soft degradation of performance when the buffer limit is reached. - */ - int32 minActL = 0x7FFFFFFF; - uint32 minIdxL = 0; - uint32 iL; - int32* actArrL = ptrA->actArrE.arrPtrE; - for( iL = 0; iL < ptrA->intCountE; iL++ ) - { - if( actArrL[ iL ] < minActL ) - { - minActL = actArrL[ iL ]; - minIdxL = iL; - } - } - - if( actA > minActL ) - { - ptrA->idxArrE.arrPtrE[ minIdxL ] = idxA; - ptrA->actArrE.arrPtrE[ minIdxL ] = actA; - } - } -} - -/* ------------------------------------------------------------------------- */ - -/* add external position */ -void bbf_Scanner_addOutPos( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - int32 xA, - int32 yA, - uint32 scaleA, - int32 actA ) -{ - if( ( ptrA->outCountE * 4 ) < ptrA->outArrE.sizeE ) - { - ptrA->outArrE.arrPtrE[ ptrA->outCountE * 4 + 0 ] = xA; - ptrA->outArrE.arrPtrE[ ptrA->outCountE * 4 + 1 ] = yA; - ptrA->outArrE.arrPtrE[ ptrA->outCountE * 4 + 2 ] = scaleA; - ptrA->outArrE.arrPtrE[ ptrA->outCountE * 4 + 3 ] = actA; - ptrA->outCountE++; - } - else - { - /* When buffer is full then replace lowest confidence-entry with new input - * This fallback solution causes soft degradation of performance when the buffer limit is reached. - */ - int32 minActL = 0x7FFFFFFF; - uint32 minIdxL = 0; - uint32 iL; - int32* outArrL = ptrA->outArrE.arrPtrE; - for( iL = 0; iL < ptrA->outCountE; iL++ ) - { - if( outArrL[ iL * 4 + 3 ] < minActL ) - { - minActL = outArrL[ iL * 4 + 3 ]; - minIdxL = iL; - } - } - - if( actA > minActL ) - { - ptrA->idxArrE.arrPtrE[ minIdxL * 4 + 0 ] = xA; - ptrA->idxArrE.arrPtrE[ minIdxL * 4 + 1 ] = yA; - ptrA->idxArrE.arrPtrE[ minIdxL * 4 + 2 ] = scaleA; - ptrA->idxArrE.arrPtrE[ minIdxL * 4 + 3 ] = actA; - } - } -} - -/* ------------------------------------------------------------------------- */ - -/* remove overlaps */ -uint32 bbf_Scanner_removeOutOverlaps( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - uint32 overlapThrA ) -{ - uint32 begIdxL = 0; /* begin index */ - uint32 endIdxL = ptrA->outCountE; /* end index */ - uint32 iL; - uint32 rw0L = ptrA->patchWidthE; - uint32 rh0L = ptrA->patchHeightE; - int32* outArrL = ptrA->outArrE.arrPtrE; - - if( overlapThrA >= 0x010000 ) return ptrA->outCountE; - - while( endIdxL - begIdxL > 1 ) - { - int32 x1L, y1L, s1L, a1L; - int32 r1wL, r1hL; - uint32 r1aL; - - /* find maximum activity */ - uint32 maxIdxL = 0; - - { - int32 maxActL = ( int32 )0x80000000; - for( iL = begIdxL; iL < endIdxL; iL++ ) - { - if( outArrL[ iL * 4 + 3 ] > maxActL ) - { - maxActL = outArrL[ iL * 4 + 3 ]; - maxIdxL = iL; - } - } - } - - /* swap with position 0 */ - x1L = outArrL[ maxIdxL * 4 + 0 ]; - y1L = outArrL[ maxIdxL * 4 + 1 ]; - s1L = outArrL[ maxIdxL * 4 + 2 ]; - a1L = outArrL[ maxIdxL * 4 + 3 ]; - - outArrL[ maxIdxL * 4 + 0 ] = outArrL[ begIdxL * 4 + 0 ]; - outArrL[ maxIdxL * 4 + 1 ] = outArrL[ begIdxL * 4 + 1 ]; - outArrL[ maxIdxL * 4 + 2 ] = outArrL[ begIdxL * 4 + 2 ]; - outArrL[ maxIdxL * 4 + 3 ] = outArrL[ begIdxL * 4 + 3 ]; - - outArrL[ begIdxL * 4 + 0 ] = x1L; - outArrL[ begIdxL * 4 + 1 ] = y1L; - outArrL[ begIdxL * 4 + 2 ] = s1L; - outArrL[ begIdxL * 4 + 3 ] = a1L; - - /* rectangle */ - r1wL = ( rw0L * ( s1L >> 12 ) + 128 ) >> 8; - r1hL = ( rh0L * ( s1L >> 12 ) + 128 ) >> 8; - r1aL = ( uint32 )r1wL * ( uint32 )r1hL; - - /* remove coordinate fractions */ - x1L = ( x1L + ( 1 << 15 ) ) >> 16; - y1L = ( y1L + ( 1 << 15 ) ) >> 16; - - /* compare to other rectangles and remove overlaps */ - for( iL = endIdxL - 1; iL > begIdxL; iL-- ) - { - int32* x2pL = &outArrL[ iL * 4 + 0 ]; - int32* y2pL = &outArrL[ iL * 4 + 1 ]; - int32* s2pL = &outArrL[ iL * 4 + 2 ]; - int32* a2pL = &outArrL[ iL * 4 + 3 ]; - - int32 x2L = ( *x2pL + ( 1 << 15 ) ) >> 16; - int32 y2L = ( *y2pL + ( 1 << 15 ) ) >> 16; - - /* rectangle */ - int32 r2wL = ( rw0L * ( *s2pL >> 12 ) + 128 ) >> 8; - int32 r2hL = ( rh0L * ( *s2pL >> 12 ) + 128 ) >> 8; - uint32 r2aL = r2wL * r2hL; - - /* intersection */ - int32 rx1L = x1L > x2L ? x1L : x2L; - int32 rx2L = ( x1L + r1wL ) < ( x2L + r2wL ) ? ( x1L + r1wL ) : ( x2L + r2wL ); - int32 ry1L = y1L > y2L ? y1L : y2L; - int32 ry2L = ( y1L + r1hL ) < ( y2L + r2hL ) ? ( y1L + r1hL ) : ( y2L + r2hL ); - uint32 riwL; - - rx2L = ( rx2L > rx1L ) ? rx2L : rx1L; - ry2L = ( ry2L > ry1L ) ? ry2L : ry1L; - riwL = ( uint32 )( rx2L - rx1L ) * ( uint32 )( ry2L - ry1L ); - - if( riwL > ( ( ( overlapThrA >> 8 ) * ( r1aL < r2aL ? r1aL : r2aL ) ) >> 8 ) ) - { - endIdxL--; - *x2pL = outArrL[ endIdxL * 4 + 0 ]; - *y2pL = outArrL[ endIdxL * 4 + 1 ]; - *s2pL = outArrL[ endIdxL * 4 + 2 ]; - *a2pL = outArrL[ endIdxL * 4 + 3 ]; - } - } - - begIdxL++; - } - - ptrA->outCountE = endIdxL; - - return endIdxL; -} - -/* ------------------------------------------------------------------------- */ - -/* remove internal overlaps */ -uint32 bbf_Scanner_removeIntOverlaps( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - uint32 overlapThrA ) -{ - uint32 begIdxL = 0; /* begin index */ - uint32 endIdxL = ptrA->intCountE; /* end index */ - uint32 iL; - uint32 rw0L = ptrA->patchWidthE; - uint32 rh0L = ptrA->patchHeightE; - int32 minAreaL = ( overlapThrA * rw0L * rh0L ) >> 16; - - int32* actArrL = ptrA->actArrE.arrPtrE; - uint32* idxArrL = ptrA->idxArrE.arrPtrE; - - if( overlapThrA >= 0x010000 ) return ptrA->intCountE; - - while( endIdxL - begIdxL > 1 ) - { - /* find maximum activity */ - int32 a1L = ( int32 )0x80000000; - uint32 i1L = 0; - uint32 maxIdxL = 0; - int32 x1L, y1L; - - for( iL = begIdxL; iL < endIdxL; iL++ ) - { - if( actArrL[ iL ] > a1L ) - { - a1L = actArrL[ iL ]; - maxIdxL = iL; - } - } - - /* swap with position 0 */ - i1L = idxArrL[ maxIdxL ]; - idxArrL[ maxIdxL ] = idxArrL[ begIdxL ]; - actArrL[ maxIdxL ] = actArrL[ begIdxL ]; - idxArrL[ begIdxL ] = i1L; - actArrL[ begIdxL ] = a1L; - - /* upper left coordinates */ - y1L = i1L / ptrA->currentWidthE; - x1L = i1L - ( y1L * ptrA->currentWidthE ); - - /* compare to other rectangles and remove overlaps */ - for( iL = endIdxL - 1; iL > begIdxL; iL-- ) - { - int32* a2pL = &actArrL[ iL ]; - uint32* i2pL = &idxArrL[ iL ]; - - int32 y2L = *i2pL / ptrA->currentWidthE; - int32 x2L = *i2pL - ( y2L * ptrA->currentWidthE ); - - int32 dxL = rw0L - ( x1L > x2L ? x1L - x2L : x2L - x1L ); - int32 dyL = rh0L - ( y1L > y2L ? y1L - y2L : y2L - y1L ); - - dxL = dxL > 0 ? dxL : 0; - dyL = dyL > 0 ? dyL : 0; - - if( dxL * dyL > minAreaL ) - { - endIdxL--; - *a2pL = actArrL[ endIdxL ]; - *i2pL = idxArrL[ endIdxL ]; - } - } - - begIdxL++; - } - - ptrA->intCountE = endIdxL; - - return ptrA->intCountE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_BitFeatureEm/Scanner.h b/Embedded/common/src/b_BitFeatureEm/Scanner.h deleted file mode 100644 index 31787e8..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Scanner.h +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_SCANNER_EM_H -#define bbf_SCANNER_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/UInt32Arr.h" -#include "b_BasicEm/Int32Arr.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BasicEm/UInt16Arr.h" -#include "b_ImageEm/UInt32Image.h" - -#include "b_BitFeatureEm/Feature.h" -#include "b_BitFeatureEm/BitParam.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bbf_SCANNER_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** scans an image and provides patches as needed */ -struct bbf_Scanner -{ - /* ---- private data --------------------------------------------------- */ - - /** downscale exponent */ - uint32 scaleExpE; - - /** current scale (12.20) */ - uint32 scaleE; - - /** current scan x-coordinate */ - int32 xE; - - /** current scan y-coordinate */ - int32 yE; - - /** effective maximum scale (12.20) */ - uint32 effMaxScaleE; - - /** width of scaled image */ - uint32 currentWidthE; - - /** height of scaled image */ - uint32 currentHeightE; - - /** width of work image */ - uint32 workWidthE; - - /** height of work image */ - uint32 workHeightE; - - /** parameter for bit generation */ - struct bbf_BitParam bitParamE; - - /** work image (two pixels per uint16)*/ - struct bbs_UInt16Arr workImageE; - - /** summed-area table (ring buffer) */ - struct bim_UInt32Image satE; - - /** bit image */ - struct bim_UInt32Image bitImageE; - - /** patch buffer */ - struct bbs_UInt32Arr patchBufferE; - - /** image line buffer */ - struct bbs_UInt16Arr lineBufE; - - - - /** index position buffer */ - struct bbs_UInt32Arr idxArrE; - - /** activity buffer */ - struct bbs_Int32Arr actArrE; - - /** composite output buffer */ - struct bbs_Int32Arr outArrE; - - /* internal positions detected */ - uint32 intCountE; - - /* output positions detected */ - uint32 outCountE; - - /** Face positions buffer size (approx.: max faces * 20...60) - * This variable is not part of I/O and must be set before calling memRead - * Default value: 1024 -> about 100...200 faces/image detectable - * - * The Scanner allocates internally bufferSizeE * 10 bytes of exclusive memory - */ - uint32 bufferSizeE; - - /* ---- public data ---------------------------------------------------- */ - - /** maximum image width */ - uint32 maxImageWidthE; - - /** maximum image height */ - uint32 maxImageHeightE; - - /** maximum filter radius */ - uint32 maxRadiusE; - - /** patch width */ - uint32 patchWidthE; - - /** patch height */ - uint32 patchHeightE; - - /** minimum scale (12.20) */ - uint32 minScaleE; - - /** maximum scale (12.20) (0: unlimited) */ - uint32 maxScaleE; - - /** scale step factor (1.32) (leading bit is always one and therfore ignored) */ - uint32 scaleStepE; - - /** x-border in pixels */ - uint32 borderWidthE; - - /** y-border in pixels */ - uint32 borderHeightE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_Scanner */ -void bbf_Scanner_init( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA ); - -/** resets bbf_Scanner */ -void bbf_Scanner_exit( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_Scanner_copy( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - const struct bbf_Scanner* srcPtrA ); - -/** equal operator */ -flag bbf_Scanner_equal( struct bbs_Context* cpA, - const struct bbf_Scanner* ptrA, - const struct bbf_Scanner* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** scan positions at current scale */ -uint32 bbf_Scanner_positions( const struct bbf_Scanner* ptrA ); - -/** current scan index */ -uint32 bbf_Scanner_scanIndex( const struct bbf_Scanner* ptrA ); - -/** returns current uls position relative to original image; x,y: 16.16; scale: 12.20 */ -void bbf_Scanner_pos( const struct bbf_Scanner* ptrA, - int32* xPtrA, int32* yPtrA, uint32* scalePtrA ); - -/** returns uls position relative to original image at index position; x,y: 16.16; scale: 12.20 */ -void bbf_Scanner_idxPos( const struct bbf_Scanner* ptrA, uint32 scanIndexA, - int32* xPtrA, int32* yPtrA, uint32* scalePtrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** creates & initializes object */ -void bbf_Scanner_create( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - flag maximizeSharedMemoryA, - uint32 maxImageWidthA, - uint32 maxImageHeightA, - uint32 maxRadiusA, - uint32 patchWidthA, - uint32 patchHeightA, - uint32 minScaleA, - uint32 maxScaleA, - uint32 scaleStepA, - uint32 borderWidthA, - uint32 borderHeightA, - uint32 bufferSizeA, - struct bbs_MemTbl* mtpA ); - -/** parameter for bit generation + recomputing bit image */ -void bbf_Scanner_bitParam( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - const struct bbf_BitParam* bitParamPtrA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_Scanner_memSize( struct bbs_Context* cpA, - const struct bbf_Scanner* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_Scanner_memWrite( struct bbs_Context* cpA, - const struct bbf_Scanner* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_Scanner_memRead( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** resets scan position at current scale level */ -void bbf_Scanner_resetScan( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ); - -/** Assigns image; sets initial bit parameters; resets processor. - * If roiPtrA is NULL, the whole image is considered for processsing - * otherwise *roiPtrA specifies a section of the original image to which - * procesing is limited. All coordinates refer to that section and must - * eventually be corrected externally. - * The roi rectangle must not include pixels outside of the original image - * (checked -> error). The rectangle may be of uneven width. - */ -void bbf_Scanner_assign( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, - const void* imagePtrA, - uint32 imageWidthA, - uint32 imageHeightA, - const struct bts_Int16Rect* roiPtrA, - const struct bbf_BitParam* paramPtrA ); - -/** goes to next scale position */ -flag bbf_Scanner_nextScale( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ); - -/** returns pointer to patch data */ -const uint32* bbf_Scanner_getPatch( const struct bbf_Scanner* ptrA ); - -/** goes to next scan position */ -flag bbf_Scanner_next( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ); - -/** goes to scan position */ -void bbf_Scanner_goToXY( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, int32 xA, int32 yA ); - -/** goes to scan index position */ -void bbf_Scanner_goToIndex( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, uint32 scanIndexA ); - -/** goes to scan position from image uls position (error if scales do not match); x,y: 16.16; scale: 12.20 */ -void bbf_Scanner_goToUls( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, - int32 xA, int32 yA, uint32 scaleA ); - -/** The functions below offer positions management of temporary positions needed by the detector object */ - -/** resets internal positions */ -void bbf_Scanner_resetIntPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ); - -/** reset output positions */ -void bbf_Scanner_resetOutPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA ) ; - -/* add internal position */ -void bbf_Scanner_addIntPos( struct bbs_Context* cpA, struct bbf_Scanner* ptrA, uint32 idxA, int32 actA ); - -/* add external position */ -void bbf_Scanner_addOutPos( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - int32 xA, - int32 yA, - uint32 scaleA, - int32 actA ); - -/* removes internal overlaps */ -uint32 bbf_Scanner_removeIntOverlaps( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - uint32 overlapThrA ); - -/** removes output overlaps */ -uint32 bbf_Scanner_removeOutOverlaps( struct bbs_Context* cpA, - struct bbf_Scanner* ptrA, - uint32 overlapThrA ); - -#endif /* bbf_SCANNER_EM_H */ - diff --git a/Embedded/common/src/b_BitFeatureEm/Sequence.c b/Embedded/common/src/b_BitFeatureEm/Sequence.c deleted file mode 100644 index e25373f..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Sequence.c +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BitFeatureEm/Sequence.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Sequence_init( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA ) -{ - bbs_memset16( ptrA->ftrPtrArrE, 0, bbs_SIZEOF16( ptrA->ftrPtrArrE ) ); - - bbf_Feature_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bbf_FT_SEQUENCE; - ptrA->baseE.vpActivityE = bbf_Sequence_activity; - ptrA->sizeE = 0; - bbs_Int32Arr_init( cpA, &ptrA->thrArrE ); - bbs_UInt16Arr_init( cpA, &ptrA->wgtArrE ); - bbs_UInt16Arr_init( cpA, &ptrA->dataArrE ); -} - -/* ------------------------------------------------------------------------- */ - -void bbf_Sequence_exit( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA ) -{ - uint16 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) bbf_featureExit( cpA, ptrA->ftrPtrArrE[ iL ] ); - - bbs_memset16( ptrA->ftrPtrArrE, 0, bbs_SIZEOF16( ptrA->ftrPtrArrE ) ); - bbf_Feature_exit( cpA, &ptrA->baseE ); - ptrA->sizeE = 0; - bbs_Int32Arr_exit( cpA, &ptrA->thrArrE ); - bbs_UInt16Arr_exit( cpA, &ptrA->wgtArrE ); - bbs_UInt16Arr_exit( cpA, &ptrA->dataArrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bbf_Sequence_copy( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA, - const struct bbf_Sequence* srcPtrA ) -{ - bbs_ERROR0( "bbf_Sequence_copy:\n Function is not available" ); -} - -/* ------------------------------------------------------------------------- */ - -flag bbf_Sequence_equal( struct bbs_Context* cpA, - const struct bbf_Sequence* ptrA, - const struct bbf_Sequence* srcPtrA ) -{ - bbs_ERROR0( "bbf_Sequence_equal:\n Function is not available" ); - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Sequence_memSize( struct bbs_Context* cpA, - const struct bbf_Sequence* ptrA ) -{ - uint16 iL; - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_SIZEOF16( ptrA->sizeE ); - memSizeL += bbs_Int32Arr_memSize( cpA, &ptrA->thrArrE ); - memSizeL += bbs_UInt16Arr_memSize( cpA, &ptrA->wgtArrE ); - for( iL = 0; iL < ptrA->sizeE; iL++ ) memSizeL += bbf_featureMemSize( cpA, ptrA->ftrPtrArrE[ iL ] ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Sequence_memWrite( struct bbs_Context* cpA, - const struct bbf_Sequence* ptrA, - uint16* memPtrA ) -{ - uint16 iL; - uint32 memSizeL = bbf_Sequence_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bbf_SEQUENCE_VERSION, memPtrA ); - memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_Int32Arr_memWrite( cpA, &ptrA->thrArrE, memPtrA ); - memPtrA += bbs_UInt16Arr_memWrite( cpA, &ptrA->wgtArrE, memPtrA ); - for( iL = 0; iL < ptrA->sizeE; iL++ ) memPtrA += bbf_featureMemWrite( cpA, ptrA->ftrPtrArrE[ iL ], memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bbf_Sequence_memRead( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint16 iL; - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_SEQUENCE_VERSION, memPtrA ); - memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->sizeE, memPtrA ); - - if( ptrA->sizeE > bbf_SEQUENCE_MAX_SIZE ) - { - bbs_ERROR0( "bbf_Sequence_memRead:\n Sequence size exceeds bbf_SEQUENCE_MAX_SIZE" ); - return 0; - } - - memPtrA += bbs_Int32Arr_memRead( cpA, &ptrA->thrArrE, memPtrA, espL ); - - if( versionL >= 101 ) memPtrA += bbs_UInt16Arr_memRead( cpA, &ptrA->wgtArrE, memPtrA, espL ); - - /* check features & allocate data buffer */ - { - const uint16* memPtrL = memPtrA; - uint32 dataSizeL = 0; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - enum bbf_FeatureType typeL = ( enum bbf_FeatureType )bbs_memPeek32( memPtrL + 4 ); - dataSizeL += bbf_featureSizeOf16( cpA, typeL ); - memPtrL += bbs_memPeek32( memPtrL ); - } - bbs_UInt16Arr_create( cpA, &ptrA->dataArrE, dataSizeL, espL ); - } - - /* load features & initialize pointers */ - { - uint16* dataPtrL = ptrA->dataArrE.arrPtrE; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - enum bbf_FeatureType typeL = ( enum bbf_FeatureType )bbs_memPeek32( memPtrA + 4 ); - ptrA->ftrPtrArrE[ iL ] = ( struct bbf_Feature* )dataPtrL; - bbf_featureInit( cpA, ptrA->ftrPtrArrE[ iL ], typeL ); - memPtrA += bbf_featureMemRead( cpA, ptrA->ftrPtrArrE[ iL ], memPtrA, &memTblL ); - dataPtrL += bbf_featureSizeOf16( cpA, typeL ); - } - } - -/* if( memSizeL != bbf_Sequence_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_Sequence_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } -*/ - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bbf_Sequence_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) -{ - const struct bbf_Sequence* ptrL = ( struct bbf_Sequence* )ptrA; - - count_t iL; - - int32 sizeL = ptrL->sizeE; - - /* 12.20 */ - int32 actSumL = ( -sizeL ) << 20; - - if( sizeL == 0 ) return 0x10000000; /* 1.0 in 4.28 format */ - - if( ptrL->wgtArrE.sizeE == 0 ) - { - for( iL = 0; iL < ptrL->sizeE; iL++ ) - { - /* 4.28 */ - int32 actL = ptrL->ftrPtrArrE[ iL ]->vpActivityE( ptrL->ftrPtrArrE[ iL ], patchA ) - ptrL->thrArrE.arrPtrE[ iL ]; - actSumL += ( actL >> 8 ); - if( actL < 0 ) return ( actSumL / sizeL ) << 7; /* return 4.28 */ - } - } - else - { - for( iL = 0; iL < ptrL->sizeE; iL++ ) - { - /* 4.28 */ - int32 actL = ptrL->ftrPtrArrE[ iL ]->vpActivityE( ptrL->ftrPtrArrE[ iL ], patchA ) - ptrL->thrArrE.arrPtrE[ iL ]; - int32 wgtL = ptrL->wgtArrE.arrPtrE[ iL ]; - actL = ( actL >> 16 ) * wgtL + ( ( ( int32 )( actL & 0x0000FFFF ) * wgtL ) >> 16 ); - actSumL += ( actL >> 8 ); - if( actL < 0 ) return ( actSumL / sizeL ) << 7; /* return 4.28 */ - } - } - - actSumL += sizeL << 20; - - /* positive activity: ] 0, 1 ] */ - return ( actSumL / sizeL ) << 7; /* return 4.28 */ -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_BitFeatureEm/Sequence.h b/Embedded/common/src/b_BitFeatureEm/Sequence.h deleted file mode 100644 index c03bb75..0000000 --- a/Embedded/common/src/b_BitFeatureEm/Sequence.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bbf_SEQUENCE_EM_H -#define bbf_SEQUENCE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Int32Arr.h" -#include "b_BasicEm/UInt16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_BitFeatureEm/Feature.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** data format version number */ -#define bbf_SEQUENCE_VERSION 101 - -/** maximum sequence size */ -#define bbf_SEQUENCE_MAX_SIZE 16 - -/* ---- object definition -------------------------------------------------- */ - -/** inhomogenious sequence of features */ -struct bbf_Sequence -{ - /* ---- public data ---------------------------------------------------- */ - - /** base element (must be first element) */ - struct bbf_Feature baseE; - - /* ---- private data --------------------------------------------------- */ - - /** feature pointer arrray */ - struct bbf_Feature* ftrPtrArrE[ bbf_SEQUENCE_MAX_SIZE ]; - - /* ---- public data ---------------------------------------------------- */ - - /** sequence size */ - uint32 sizeE; - - /** array of thresholds (4.28) */ - struct bbs_Int32Arr thrArrE; - - /** array of weights (0.16); value 1.0 is saturated to 0xFFFF */ - struct bbs_UInt16Arr wgtArrE; - - /** data array (contains feature elements) */ - struct bbs_UInt16Arr dataArrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bbf_Sequence */ -void bbf_Sequence_init( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA ); - -/** resets bbf_Sequence */ -void bbf_Sequence_exit( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bbf_Sequence_copy( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA, - const struct bbf_Sequence* srcPtrA ); - -/** equal operator */ -flag bbf_Sequence_equal( struct bbs_Context* cpA, - const struct bbf_Sequence* ptrA, - const struct bbf_Sequence* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bbf_Sequence_memSize( struct bbs_Context* cpA, - const struct bbf_Sequence* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bbf_Sequence_memWrite( struct bbs_Context* cpA, - const struct bbf_Sequence* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bbf_Sequence_memRead( struct bbs_Context* cpA, - struct bbf_Sequence* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes feature's activity (4.28) on the given patch */ -int32 bbf_Sequence_activity( const struct bbf_Feature* ptrA, const uint32* patchA ); - -#endif /* bbf_SEQUENCE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/APhImage.c b/Embedded/common/src/b_ImageEm/APhImage.c deleted file mode 100644 index 2c5c9a8..0000000 --- a/Embedded/common/src/b_ImageEm/APhImage.c +++ /dev/null @@ -1,456 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_ImageEm/APhImage.h" -#include "b_ImageEm/ComplexImage.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_APhImage_init( struct bbs_Context* cpA, - struct bim_APhImage* ptrA ) -{ - bbs_APhArr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bim_APhImage_create( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_APhImage_size( cpA, ptrA, widthA, heightA ); - } - else - { - bbs_APhArr_create( cpA, &ptrA->arrE, widthA * heightA, mspA ); - ptrA->widthE = widthA; - ptrA->heightE = heightA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_APhImage_exit( struct bbs_Context* cpA, - struct bim_APhImage* ptrA ) -{ - bbs_APhArr_exit( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_APhImage_copy( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - const struct bim_APhImage* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.allocatedSizeE < srcPtrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_APhImage_copy( struct bim_APhImage*, uint32 sizeA ):\n" - "Unsufficient allocated memory" ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - bbs_APhArr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_APhImage_equal( struct bbs_Context* cpA, - const struct bim_APhImage* ptrA, - const struct bim_APhImage* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - return bbs_APhArr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_APhImage_size( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - uint32 widthA, - uint32 heightA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.allocatedSizeE < widthA * heightA ) - { - bbs_ERROR0( "void bim_APhImage_size( struct bim_APhImage*, uint32 sizeA ):\n" - "Unsufficient allocated memory" ); - return; - } -#endif - ptrA->widthE = widthA; - ptrA->heightE = heightA; - bbs_APhArr_size( cpA, &ptrA->arrE, widthA * heightA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_APhImage_memSize( struct bbs_Context* cpA, - const struct bim_APhImage* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_APhArr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_APhImage_memWrite( struct bbs_Context* cpA, - const struct bim_APhImage* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_APhImage_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_APH_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - bbs_APhArr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_APhImage_memRead( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, widthL, heightL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_APH_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &widthL, memPtrA ); - memPtrA += bbs_memRead32( &heightL, memPtrA ); - - ptrA->widthE = widthL; - ptrA->heightE = heightL; - bbs_APhArr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_APhImage_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_APhImage_memRead( const struct bim_APhImage*, const void* ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_APhImage_setAllPixels( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - struct bbs_APh valueA ) -{ - long iL; - struct bbs_APh* ptrL = ptrA->arrE.arrPtrE; - for( iL = ptrA->widthE * ptrA->heightE; iL > 0; iL-- ) - { - *ptrL++ = valueA; - } -} - -/* ------------------------------------------------------------------------- */ - -/** - | | | | - | (loop x1) | (loop x2) | (loop x3) | - o------------->-o------------>--o------------->-o - | | | | - | | | | - | | | | - | | | | - ( sectionL->x1E, sectionL->y1E ) | | ----------o- R-------------------------------|---------------- - | | | | | - | | | | | - | | | | | - | | | | | - (loop y1)| | | | - | | | | | - V | | | | - | | |( 0, 0 ) | | X ----------o------------------I-------------------------------------------------> - | | | | | - | | | | | - | | | | | - | | | | | - | | | | | - (loop y2)| | | | - | | | | | - | | | | | - | | | | | - V | | | | - | | | | | ----------o------------------|---------------I | - | | | ( srcPtrA->widthE, srcPtrA->heightE ) - | | | | - | | | | - | | | | - | | | | - | | | | - (loop y3)| | | - | | | | - | | | | - V | | | - | | | | ----------o--------------------------------------------------R - | ( sectionL->x2E, sectionL->y2E ) - | - Y | - | - | - V - - To understand how the algorithm work refer to the diagram above. - The image boundaries are indicated by letter "I" ( 0, 0 ) to ( srcPtrA->widthE, srcPtrA->heightE ) - The rectangle boundaries are indicated by letter "R" ( sectionPtrA->x1E, sectionPtrA->y1E ) to ( sectionPtrA->x2E, sectionPtrA->y2E ) - - In the above example the intersection of the image and the rectange is - ( 0, 0 ), ( srcPtrA->widthE, srcPtrA->heightE ) - - The size of the destination image is always ( ( sectionL->x2E, sectionL->y2E ) - ( sectionL->x1E, sectionL->y1E ) ) - - All coordinates are assumed to be relative to the original image. - - 1. parse all pixels in "loop y1" - 1.a. parse all pixels in "loop x1" - 1.b. parse all pixels in "loop x2" - 1.c. parse all pixels in "loop x3" - 2. parse all pixels in "loop y2" - 2.a. parse all pixels in "loop x1" - 2.b. parse all pixels in "loop x2" - 2.c. parse all pixels in "loop x3" - 3. parse all pixels in "loop y3" - 3.a. parse all pixels in "loop x1" - 3.b. parse all pixels in "loop x2" - 3.c. parse all pixels in "loop x3" - -*/ - -/** copies a section of given image */ -void bim_APhImage_copySection( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - const struct bim_APhImage* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ) -{ - - struct bbs_APh* srcPixelPtrL; - struct bbs_APh* dstPixelPtrL; - int32 yIndexL; - int32 xIndexL; - - struct bts_Int16Rect srcImageSubSectionL; - struct bts_Int16Rect sectionL; - - /* make sure that the rectangle passed is correct, in case the x2 < x1 or y2 < y1, swap them */ - sectionL.x1E = bbs_min( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.x2E = bbs_max( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.y1E = bbs_min( sectionPtrA->y1E, sectionPtrA->y2E ); - sectionL.y2E = bbs_max( sectionPtrA->y1E, sectionPtrA->y2E ); - - /* find the intersection betweem the rectangle and the image, the image always starts at 0,0 */ - srcImageSubSectionL.x1E = bbs_max( 0, sectionL.x1E ); - srcImageSubSectionL.y1E = bbs_max( 0, sectionL.y1E ); - srcImageSubSectionL.x2E = bbs_min( ( int32 ) srcPtrA->widthE, sectionL.x2E ); - srcImageSubSectionL.y2E = bbs_min( ( int32 ) srcPtrA->heightE, sectionL.y2E ); - - /* If the image and the rectangle do not intersect in X direction, set the intersecting rectangle to the image coordinates */ - if( srcImageSubSectionL.x2E < srcImageSubSectionL.x1E ) - { - srcImageSubSectionL.x1E = 0; - srcImageSubSectionL.x2E = srcPtrA->widthE; - } - /* do the same as above in the Y direction */ - if( srcImageSubSectionL.y2E < srcImageSubSectionL.y1E ) - { - srcImageSubSectionL.y1E = 0; - srcImageSubSectionL.y2E = srcPtrA->heightE; - } - - /* set size, and allocate required memory for the destination image if required */ - bim_APhImage_size( cpA, ptrA, sectionL.x2E - sectionL.x1E, sectionL.y2E - sectionL.y1E ); - - /* get the pointer to the destination image */ - dstPixelPtrL = ptrA->arrE.arrPtrE; - - /* 1. parse all pixels in "loop y1" */ - for( yIndexL = sectionL.y1E; yIndexL < srcImageSubSectionL.y1E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE; - - /* 1.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 1.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 1.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 2. parse all pixels in "loop y2" */ - for( ; yIndexL < srcImageSubSectionL.y2E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE + yIndexL * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 2.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 2.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 2.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 3. parse all pixels in "loop y3" */ - for( ; yIndexL < sectionL.y2E; yIndexL++ ) - { - srcPixelPtrL = srcPtrA->arrE.arrPtrE + ( srcImageSubSectionL.y2E - 1 ) * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 3.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 3.b. parse all pixels in "loop x3" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 3.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - -} - -/* ------------------------------------------------------------------------- */ - -void bim_APhImage_importComplex( struct bbs_Context* cpA, - struct bim_APhImage* dstPtrA, - const struct bim_ComplexImage* srcPtrA ) -{ - long iL; - struct bbs_APh* dstL; - const struct bbs_Complex* srcL; - bim_APhImage_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE ); - dstL = dstPtrA->arrE.arrPtrE; - srcL = srcPtrA->arrE.arrPtrE; - for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- ) - { - bbs_APh_importComplex( dstL++, srcL++ ); - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/APhImage.h b/Embedded/common/src/b_ImageEm/APhImage.h deleted file mode 100644 index f4804da..0000000 --- a/Embedded/common/src/b_ImageEm/APhImage.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_APH_IMAGE_EM_H -#define bim_APH_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/APhArr.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_TensorEm/Flt16Alt2D.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bim_ComplexImage; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_APH_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** image of complex values (abs-phase format) */ -struct bim_APhImage -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** array of bytes */ - struct bbs_APhArr arrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_APhImage */ -void bim_APhImage_init( struct bbs_Context* cpA, - struct bim_APhImage* ptrA ); - -/** creates bim_APhImage object */ -void bim_APhImage_create( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ); - -/** frees bim_APhImage */ -void bim_APhImage_exit( struct bbs_Context* cpA, - struct bim_APhImage* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_APhImage_copy( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - const struct bim_APhImage* srcPtrA ); - -/** equal operator */ -flag bim_APhImage_equal( struct bbs_Context* cpA, - const struct bim_APhImage* ptrA, - const struct bim_APhImage* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** sets image size */ -void bim_APhImage_size( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - uint32 widthA, - uint32 heightA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) needs when written to memory */ -uint32 bim_APhImage_memSize( struct bbs_Context* cpA, - const struct bim_APhImage* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bim_APhImage_memWrite( struct bbs_Context* cpA, - const struct bim_APhImage* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bim_APhImage_memRead( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** sets all pixels to one value */ -void bim_APhImage_setAllPixels( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - struct bbs_APh valueA ); - -/** copies a section of given image */ -void bim_APhImage_copySection( struct bbs_Context* cpA, - struct bim_APhImage* ptrA, - const struct bim_APhImage* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ); - -/** import complex image */ -void bim_APhImage_importComplex( struct bbs_Context* cpA, - struct bim_APhImage* dstPtrA, - const struct bim_ComplexImage* srcPtrA ); - -#endif /* bim_APH_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/ComplexImage.c b/Embedded/common/src/b_ImageEm/ComplexImage.c deleted file mode 100644 index cbcf0f3..0000000 --- a/Embedded/common/src/b_ImageEm/ComplexImage.c +++ /dev/null @@ -1,480 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_ImageEm/ComplexImage.h" -#include "b_ImageEm/APhImage.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_ComplexImage_init( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA ) -{ - bbs_ComplexArr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bim_ComplexImage_exit( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA ) -{ - bbs_ComplexArr_exit( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_ComplexImage_copy( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - const struct bim_ComplexImage* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.allocatedSizeE < srcPtrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_ComplexImage_copy(...):\n" - "Unsufficient allocated memory in destination image." ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - bbs_ComplexArr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_ComplexImage_equal( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA, - const struct bim_ComplexImage* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - return bbs_ComplexArr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_ComplexImage_checkSum( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA ) -{ - uint32 sumL =0 ; - uint32 iL; - uint32 sizeL = ptrA->arrE.sizeE; - const struct bbs_Complex* ptrL = ptrA->arrE.arrPtrE; - for( iL =0; iL < sizeL; iL++ ) - { - sumL += ptrL->imagE + ptrL->realE; - ptrL++; - } - return sumL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_ComplexImage_heapSize( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA, - uint32 widthA, uint32 heightA ) -{ - return bbs_ComplexArr_heapSize( cpA, &ptrA->arrE, widthA * heightA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_ComplexImage_create( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_ComplexImage_size( cpA, ptrA, widthA, heightA ); - } - else - { - bbs_ComplexArr_create( cpA, &ptrA->arrE, widthA * heightA, mspA ); - ptrA->widthE = widthA; - ptrA->heightE = heightA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_ComplexImage_size( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - uint32 widthA, - uint32 heightA ) -{ - if( ptrA->arrE.allocatedSizeE < widthA * heightA ) - { - bbs_ERROR0( "void bim_ComplexImage_size( struct bim_ComplexImage*, uint32 sizeA ):\n" - "Unsufficient allocated memory" ); - return; - } - ptrA->widthE = widthA; - ptrA->heightE = heightA; - bbs_ComplexArr_size( cpA, &ptrA->arrE, widthA * heightA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_ComplexImage_memSize( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_ComplexArr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_ComplexImage_memWrite( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_ComplexImage_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_COMPLEX_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - bbs_ComplexArr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_ComplexImage_memRead( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL, widthL, heightL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_COMPLEX_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &widthL, memPtrA ); - memPtrA += bbs_memRead32( &heightL, memPtrA ); - - ptrA->widthE = widthL; - ptrA->heightE = heightL; - bbs_ComplexArr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_ComplexImage_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_ComplexImage_memRead( const struct bim_ComplexImage* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_ComplexImage_setAllPixels( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - struct bbs_Complex valueA ) -{ - long iL; - struct bbs_Complex* ptrL = ptrA->arrE.arrPtrE; - for( iL = ptrA->widthE * ptrA->heightE; iL > 0; iL-- ) - { - *ptrL++ = valueA; - } -} - -/* ------------------------------------------------------------------------- */ - -/** - | | | | - | (loop x1) | (loop x2) | (loop x3) | - o------------->-o------------>--o------------->-o - | | | | - | | | | - | | | | - | | | | - ( sectionL->x1E, sectionL->y1E ) | | ----------o- R-------------------------------|---------------- - | | | | | - | | | | | - | | | | | - | | | | | - (loop y1)| | | | - | | | | | - V | | | | - | | |( 0, 0 ) | | X ----------o------------------I-------------------------------------------------> - | | | | | - | | | | | - | | | | | - | | | | | - | | | | | - (loop y2)| | | | - | | | | | - | | | | | - | | | | | - V | | | | - | | | | | ----------o------------------|---------------I | - | | | ( srcPtrA->widthE, srcPtrA->heightE ) - | | | | - | | | | - | | | | - | | | | - | | | | - (loop y3)| | | - | | | | - | | | | - V | | | - | | | | ----------o--------------------------------------------------R - | ( sectionL->x2E, sectionL->y2E ) - | - Y | - | - | - V - - To understand how the algorithm work refer to the diagram above. - The image boundaries are indicated by letter "I" ( 0, 0 ) to ( srcPtrA->widthE, srcPtrA->heightE ) - The rectangle boundaries are indicated by letter "R" ( sectionPtrA->x1E, sectionPtrA->y1E ) to ( sectionPtrA->x2E, sectionPtrA->y2E ) - - In the above example the intersection of the image and the rectange is - ( 0, 0 ), ( srcPtrA->widthE, srcPtrA->heightE ) - - The size of the destination image is always ( ( sectionL->x2E, sectionL->y2E ) - ( sectionL->x1E, sectionL->y1E ) ) - - All coordinates are assumed to be relative to the original image. - - 1. parse all pixels in "loop y1" - 1.a. parse all pixels in "loop x1" - 1.b. parse all pixels in "loop x2" - 1.c. parse all pixels in "loop x3" - 2. parse all pixels in "loop y2" - 2.a. parse all pixels in "loop x1" - 2.b. parse all pixels in "loop x2" - 2.c. parse all pixels in "loop x3" - 3. parse all pixels in "loop y3" - 3.a. parse all pixels in "loop x1" - 3.b. parse all pixels in "loop x2" - 3.c. parse all pixels in "loop x3" - -*/ - -/** copies a section of given image */ -void bim_ComplexImage_copySection( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - const struct bim_ComplexImage* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ) -{ - - struct bbs_Complex* srcPixelPtrL; - struct bbs_Complex* dstPixelPtrL; - int32 yIndexL; - int32 xIndexL; - - struct bts_Int16Rect srcImageSubSectionL; - struct bts_Int16Rect sectionL; - - /* make sure that the rectangle passed is correct, in case the x2 < x1 or y2 < y1, swap them */ - sectionL.x1E = bbs_min( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.x2E = bbs_max( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.y1E = bbs_min( sectionPtrA->y1E, sectionPtrA->y2E ); - sectionL.y2E = bbs_max( sectionPtrA->y1E, sectionPtrA->y2E ); - - /* find the intersection betweem the rectangle and the image, the image always starts at 0,0 */ - srcImageSubSectionL.x1E = bbs_max( 0, sectionL.x1E ); - srcImageSubSectionL.y1E = bbs_max( 0, sectionL.y1E ); - srcImageSubSectionL.x2E = bbs_min( ( int32 ) srcPtrA->widthE, sectionL.x2E ); - srcImageSubSectionL.y2E = bbs_min( ( int32 ) srcPtrA->heightE, sectionL.y2E ); - - /* If the image and the rectangle do not intersect in X direction, set the intersecting rectangle to the image coordinates */ - if( srcImageSubSectionL.x2E < srcImageSubSectionL.x1E ) - { - srcImageSubSectionL.x1E = 0; - srcImageSubSectionL.x2E = srcPtrA->widthE; - } - /* do the same as above in the Y direction */ - if( srcImageSubSectionL.y2E < srcImageSubSectionL.y1E ) - { - srcImageSubSectionL.y1E = 0; - srcImageSubSectionL.y2E = srcPtrA->heightE; - } - - /* set size, and allocate required memory for the destination image if required */ - bim_ComplexImage_size( cpA, ptrA, sectionL.x2E - sectionL.x1E, sectionL.y2E - sectionL.y1E ); - - /* get the pointer to the destination image */ - dstPixelPtrL = ptrA->arrE.arrPtrE; - - /* 1. parse all pixels in "loop y1" */ - for( yIndexL = sectionL.y1E; yIndexL < srcImageSubSectionL.y1E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE; - - /* 1.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 1.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 1.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 2. parse all pixels in "loop y2" */ - for( ; yIndexL < srcImageSubSectionL.y2E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE + yIndexL * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 2.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 2.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 2.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 3. parse all pixels in "loop y3" */ - for( ; yIndexL < sectionL.y2E; yIndexL++ ) - { - srcPixelPtrL = srcPtrA->arrE.arrPtrE + ( srcImageSubSectionL.y2E - 1 ) * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 3.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 3.b. parse all pixels in "loop x3" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 3.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - -} - -/* ------------------------------------------------------------------------- */ - -void bim_ComplexImage_importAPh( struct bbs_Context* cpA, - struct bim_ComplexImage* dstPtrA, - const struct bim_APhImage* srcPtrA ) -{ - long iL; - struct bbs_Complex* dstL; - const struct bbs_APh* srcL; - bim_ComplexImage_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE ); - dstL = dstPtrA->arrE.arrPtrE; - srcL = srcPtrA->arrE.arrPtrE; - for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- ) - { - bbs_Complex_importAPh( dstL++, srcL++ ); - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/ComplexImage.h b/Embedded/common/src/b_ImageEm/ComplexImage.h deleted file mode 100644 index 73cc968..0000000 --- a/Embedded/common/src/b_ImageEm/ComplexImage.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_COMPLEX_IMAGE_EM_H -#define bim_COMPLEX_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/ComplexArr.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_TensorEm/Flt16Alt2D.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bim_APhImage; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_COMPLEX_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** image of complex values */ -struct bim_ComplexImage -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** array of bytes */ - struct bbs_ComplexArr arrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_ComplexImage */ -void bim_ComplexImage_init( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA ); - -/** frees bim_ComplexImage */ -void bim_ComplexImage_exit( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_ComplexImage_copy( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - const struct bim_ComplexImage* srcPtrA ); - -/** equal operator */ -flag bim_ComplexImage_equal( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA, - const struct bim_ComplexImage* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** checksum of image (for debugging purposes) */ -uint32 bim_ComplexImage_checkSum( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA ); - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bim_ComplexImage_heapSize( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA, - uint32 widthA, uint32 heightA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bim_ComplexImage */ -void bim_ComplexImage_create( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ); - -/** sets image size */ -void bim_ComplexImage_size( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - uint32 widthA, - uint32 heightA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bim_ComplexImage_memSize( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bim_ComplexImage_memWrite( struct bbs_Context* cpA, - const struct bim_ComplexImage* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bim_ComplexImage_memRead( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** sets all pixels to one value */ -void bim_ComplexImage_setAllPixels( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - struct bbs_Complex valueA ); - -/** copies a section of given image */ -void bim_ComplexImage_copySection( struct bbs_Context* cpA, - struct bim_ComplexImage* ptrA, - const struct bim_ComplexImage* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ); - -/** import abs-phase image */ -void bim_ComplexImage_importAPh( struct bbs_Context* cpA, - struct bim_ComplexImage* dstPtrA, - const struct bim_APhImage* srcPtrA ); - -#endif /* bim_COMPLEX_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/Flt16Image.c b/Embedded/common/src/b_ImageEm/Flt16Image.c deleted file mode 100644 index 8e8143b..0000000 --- a/Embedded/common/src/b_ImageEm/Flt16Image.c +++ /dev/null @@ -1,550 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_ImageEm/Flt16Image.h" -#include "b_ImageEm/ComplexImage.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_init( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA ) -{ - bbs_Int16Arr_init( cpA, &ptrA->allocArrE ); - bbs_Int16Arr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_exit( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA ) -{ - bbs_Int16Arr_exit( cpA, &ptrA->arrE ); - bbs_Int16Arr_exit( cpA, &ptrA->allocArrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_copy( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - const struct bim_Flt16Image* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.allocatedSizeE < srcPtrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_Flt16Image_copy(...):\n" - "Unsufficient allocated memory in destination image." ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - ptrA->bbpE = srcPtrA->bbpE; - bbs_Int16Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_Flt16Image_equal( struct bbs_Context* cpA, - const struct bim_Flt16Image* ptrA, - const struct bim_Flt16Image* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - if( ptrA->bbpE != srcPtrA->bbpE ) return FALSE; - return bbs_Int16Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_create( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_Flt16Image_size( cpA, ptrA, widthA, heightA ); - } - else - { - /* OLD CODE - bbs_Int16Arr_create( cpA, &ptrA->arrE, widthA * heightA, mspA ); - */ - bbs_Int16Arr_createAligned( cpA, &ptrA->arrE, widthA * heightA, mspA, &ptrA->allocArrE, bbs_MEMORY_ALIGNMENT ); - - ptrA->widthE = widthA; - ptrA->heightE = heightA; - } -} - -/* ------------------------------------------------------------------------- */ -/* incompatible with ALIGN -void bim_Flt16Image_assignExternalImage( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - struct bim_Flt16Image* srcPtrA ) -{ - struct bbs_MemSeg sharedSegL = bbs_MemSeg_createShared( cpA, srcPtrA->arrE.arrPtrE, srcPtrA->widthE * srcPtrA->heightE ); - - if( ptrA->arrE.arrPtrE != 0 ) - { - bbs_ERROR0( "void bim_Flt16Image_assignExternalImage( ... ): image was already created once" ); - return; - } - - bim_Flt16Image_create( cpA, - ptrA, - srcPtrA->widthE, - srcPtrA->heightE, - &sharedSegL ); - - ptrA->bbpE = srcPtrA->bbpE; -} -*/ -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_size( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - uint32 widthA, - uint32 heightA ) -{ - if( ptrA->arrE.allocatedSizeE < widthA * heightA ) - { - bbs_ERROR0( "void bim_Flt16Image_size( struct bim_Flt16Image*, uint32 sizeA ):\n" - "Unsufficient allocated memory" ); - return; - } - ptrA->widthE = widthA; - ptrA->heightE = heightA; - bbs_Int16Arr_size( cpA, &ptrA->arrE, widthA * heightA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_Flt16Image_memSize( struct bbs_Context* cpA, - const struct bim_Flt16Image* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_SIZEOF16( ptrA->bbpE ) - + bbs_Int16Arr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_Flt16Image_memWrite( struct bbs_Context* cpA, - const struct bim_Flt16Image* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_Flt16Image_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_FLT16_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->bbpE, memPtrA ); - bbs_Int16Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_Flt16Image_memRead( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_FLT16_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->heightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->bbpE, memPtrA ); - bbs_Int16Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_Flt16Image_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_Flt16Image_memRead( const struct bim_Flt16Image* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_setAllPixels( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - int16 valueA, - int32 bbpA ) -{ - long iL; - int16* ptrL = ptrA->arrE.arrPtrE; - for( iL = ptrA->widthE * ptrA->heightE; iL > 0; iL-- ) - { - *ptrL++ = valueA; - } - ptrA->bbpE = bbpA; -} - -/* ------------------------------------------------------------------------- */ - -/** - | | | | - | (loop x1) | (loop x2) | (loop x3) | - o------------->-o------------>--o------------->-o - | | | | - | | | | - | | | | - | | | | - ( sectionL->x1E, sectionL->y1E ) | | ----------o- R-------------------------------|---------------- - | | | | | - | | | | | - | | | | | - | | | | | - (loop y1)| | | | - | | | | | - V | | | | - | | |( 0, 0 ) | | X ----------o------------------I-------------------------------------------------> - | | | | | - | | | | | - | | | | | - | | | | | - | | | | | - (loop y2)| | | | - | | | | | - | | | | | - | | | | | - V | | | | - | | | | | ----------o------------------|---------------I | - | | | ( srcPtrA->widthE, srcPtrA->heightE ) - | | | | - | | | | - | | | | - | | | | - | | | | - (loop y3)| | | - | | | | - | | | | - V | | | - | | | | ----------o--------------------------------------------------R - | ( sectionL->x2E, sectionL->y2E ) - | - Y | - | - | - V - - To understand how the algorithm work refer to the diagram above. - The image boundaries are indicated by letter "I" ( 0, 0 ) to ( srcPtrA->widthE, srcPtrA->heightE ) - The rectangle boundaries are indicated by letter "R" ( sectionPtrA->x1E, sectionPtrA->y1E ) to ( sectionPtrA->x2E, sectionPtrA->y2E ) - - In the above example the intersection of the image and the rectange is - ( 0, 0 ), ( srcPtrA->widthE, srcPtrA->heightE ) - - The size of the destination image is always ( ( sectionL->x2E, sectionL->y2E ) - ( sectionL->x1E, sectionL->y1E ) ) - - All coordinates are assumed to be relative to the original image. - - 1. parse all pixels in "loop y1" - 1.a. parse all pixels in "loop x1" - 1.b. parse all pixels in "loop x2" - 1.c. parse all pixels in "loop x3" - 2. parse all pixels in "loop y2" - 2.a. parse all pixels in "loop x1" - 2.b. parse all pixels in "loop x2" - 2.c. parse all pixels in "loop x3" - 3. parse all pixels in "loop y3" - 3.a. parse all pixels in "loop x1" - 3.b. parse all pixels in "loop x2" - 3.c. parse all pixels in "loop x3" - -*/ - -/** copies a section of given image */ -void bim_Flt16Image_copySection( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - const struct bim_Flt16Image* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ) -{ - - int16* srcPixelPtrL; - int16* dstPixelPtrL; - int32 yIndexL; - int32 xIndexL; - - struct bts_Int16Rect srcImageSubSectionL; - struct bts_Int16Rect sectionL; - - /* make sure that the rectangle passed is correct, in case the x2 < x1 or y2 < y1, swap them */ - sectionL.x1E = bbs_min( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.x2E = bbs_max( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.y1E = bbs_min( sectionPtrA->y1E, sectionPtrA->y2E ); - sectionL.y2E = bbs_max( sectionPtrA->y1E, sectionPtrA->y2E ); - - /* find the intersection betweem the rectangle and the image, the image always starts at 0,0 */ - srcImageSubSectionL.x1E = bbs_max( 0, sectionL.x1E ); - srcImageSubSectionL.y1E = bbs_max( 0, sectionL.y1E ); - srcImageSubSectionL.x2E = bbs_min( ( int32 ) srcPtrA->widthE, sectionL.x2E ); - srcImageSubSectionL.y2E = bbs_min( ( int32 ) srcPtrA->heightE, sectionL.y2E ); - - /* If the image and the rectangle do not intersect in X direction, set the intersecting rectangle to the image coordinates */ - if( srcImageSubSectionL.x2E < srcImageSubSectionL.x1E ) - { - srcImageSubSectionL.x1E = 0; - srcImageSubSectionL.x2E = srcPtrA->widthE; - } - /* do the same as above in the Y direction */ - if( srcImageSubSectionL.y2E < srcImageSubSectionL.y1E ) - { - srcImageSubSectionL.y1E = 0; - srcImageSubSectionL.y2E = srcPtrA->heightE; - } - - /* initialize, set size, and allocate required memory for the destination image if required */ - bim_Flt16Image_size( cpA, ptrA, sectionL.x2E - sectionL.x1E, sectionL.y2E - sectionL.y1E ); - ptrA->bbpE = srcPtrA->bbpE; - - /* get the pointer to the destination image */ - dstPixelPtrL = ptrA->arrE.arrPtrE; - - /* 1. parse all pixels in "loop y1" */ - for( yIndexL = sectionL.y1E; yIndexL < srcImageSubSectionL.y1E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE; - - /* 1.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 1.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 1.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 2. parse all pixels in "loop y2" */ - for( ; yIndexL < srcImageSubSectionL.y2E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE + yIndexL * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 2.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 2.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 2.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 3. parse all pixels in "loop y3" */ - for( ; yIndexL < sectionL.y2E; yIndexL++ ) - { - srcPixelPtrL = srcPtrA->arrE.arrPtrE + ( srcImageSubSectionL.y2E - 1 ) * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 3.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 3.b. parse all pixels in "loop x3" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 3.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - -} - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_importReal( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ) -{ - long iL; - int16* dstL; - const struct bbs_Complex* srcL; - bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE ); - dstPtrA->bbpE = 0; - dstL = dstPtrA->arrE.arrPtrE; - srcL = srcPtrA->arrE.arrPtrE; - for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- ) - { - *dstL++ = ( *srcL++ ).realE; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_importImag( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ) -{ - long iL; - int16* dstL; - const struct bbs_Complex* srcL; - bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE ); - dstPtrA->bbpE = 0; - dstL = dstPtrA->arrE.arrPtrE; - srcL = srcPtrA->arrE.arrPtrE; - for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- ) - { - *dstL++ = ( *srcL++ ).imagE; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_importAbs( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ) -{ - long iL; - int16* dstL; - const struct bbs_Complex* srcL; - bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE ); - dstPtrA->bbpE = 0; - dstL = dstPtrA->arrE.arrPtrE; - srcL = srcPtrA->arrE.arrPtrE; - for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- ) - { - *dstL++ = bbs_sqrt32( ( int32 )srcL->realE * srcL->realE + ( int32 )srcL->imagE * srcL->imagE ); - srcL++; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_Flt16Image_importPhase( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ) -{ - long iL; - int16* dstL; - const struct bbs_Complex* srcL; - bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE ); - dstPtrA->bbpE = 0; - dstL = dstPtrA->arrE.arrPtrE; - srcL = srcPtrA->arrE.arrPtrE; - for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- ) - { - *dstL++ = bbs_phase16( srcL->realE, srcL->imagE ); - srcL++; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/Flt16Image.h b/Embedded/common/src/b_ImageEm/Flt16Image.h deleted file mode 100644 index 875b636..0000000 --- a/Embedded/common/src/b_ImageEm/Flt16Image.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_FLT16_IMAGE_EM_H -#define bim_FLT16_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_TensorEm/Flt16Alt2D.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bim_ComplexImage; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_FLT16_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** image of int16 with floating point */ -struct bim_Flt16Image -{ - - /* ---- private data --------------------------------------------------- */ - - /** allocated array of bytes */ - struct bbs_Int16Arr allocArrE; - - /* ---- public data ---------------------------------------------------- */ - - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** point position */ - int32 bbpE; - - /** array of bytes */ - struct bbs_Int16Arr arrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_Flt16Image */ -void bim_Flt16Image_init( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA ); - -/** destroys bim_Flt16Image */ -void bim_Flt16Image_exit( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_Flt16Image_copy( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - const struct bim_Flt16Image* srcPtrA ); - -/** equal operator */ -flag bim_Flt16Image_equal( struct bbs_Context* cpA, - const struct bim_Flt16Image* ptrA, - const struct bim_Flt16Image* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bim_Flt16Image */ -void bim_Flt16Image_create( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ); - -/** assigns external image to array (no allocation, deallocation or copying of data) */ -/*void bim_Flt16Image_assignExternalImage( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - struct bim_Flt16Image* srcPtrA ); -*/ -/** sets image size */ -void bim_Flt16Image_size( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - uint32 widthA, - uint32 heightA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) needs when written to memory */ -uint32 bim_Flt16Image_memSize( struct bbs_Context* cpA, - const struct bim_Flt16Image* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bim_Flt16Image_memWrite( struct bbs_Context* cpA, - const struct bim_Flt16Image* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bim_Flt16Image_memRead( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** sets all pixels to one value */ -void bim_Flt16Image_setAllPixels( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - int16 valueA, int32 bbpA ); - -/** copies a section of given image */ -void bim_Flt16Image_copySection( struct bbs_Context* cpA, - struct bim_Flt16Image* ptrA, - const struct bim_Flt16Image* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ); - -/** imports real values from complex image */ -void bim_Flt16Image_importReal( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ); - -/** imports imaginary values from complex image */ -void bim_Flt16Image_importImag( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ); - -/** imports magnitudes from complex image */ -void bim_Flt16Image_importAbs( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ); - -/** imports phases from complex image */ -void bim_Flt16Image_importPhase( struct bbs_Context* cpA, - struct bim_Flt16Image* dstPtrA, - const struct bim_ComplexImage* srcPtrA ); - - -#endif /* bim_FLT16_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/Functions.c b/Embedded/common/src/b_ImageEm/Functions.c deleted file mode 100644 index c99540e..0000000 --- a/Embedded/common/src/b_ImageEm/Functions.c +++ /dev/null @@ -1,734 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_ImageEm/Functions.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/** downscale by factor 2 (dstPtrA and srcPtrA may be identical) */ -void bim_downscaleBy2( uint8* dstPtrA, - const uint8* srcPtrA, - uint32 srcWidthA, - uint32 effWidthA, - uint32 effHeightA ) -{ - uint32 wsL = srcWidthA; - uint32 w0L = effWidthA; - uint32 h0L = effHeightA; - uint32 w1L = w0L >> 1; - uint32 h1L = h0L >> 1; - - const uint8* srcL = srcPtrA; - uint8* dstL = dstPtrA; - - uint32 iL, jL; - for( jL = 0; jL < h1L; jL++ ) - { - for( iL = 0; iL < w1L; iL++ ) - { - *dstL = ( ( uint32 )srcL[ 0 ] + srcL[ 1 ] + srcL[ wsL ] + srcL[ wsL + 1 ] + 2 ) >> 2; - dstL++; - srcL += 2; - } - srcL += ( wsL - w1L ) * 2; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_filterWarpInterpolation( struct bbs_Context* cpA, - uint8* dstImagePtrA, - const uint8* srcImagePtrA, - uint32 srcImageWidthA, - uint32 srcImageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_Flt16Alt2D* altPtrA, - uint32 dstWidthA, - uint32 dstHeightA, - struct bbs_UInt8Arr* bufPtrA, - uint32 scaleThresholdA ) -{ - bbs_DEF_fNameL( "bim_filterWarpInterpolation" ) - - uint32 w0L = srcImageWidthA; - uint32 h0L = srcImageHeightA; - - const uint8* srcL = srcImagePtrA; - uint8* dstL = dstImagePtrA; - - uint32 w1L = w0L; - uint32 h1L = h0L; - - /* 16.16 */ - uint32 scaleThrL = scaleThresholdA; - struct bts_Flt16Alt2D invAltL; - - /* matrix variables */ - int32 mxxL, mxyL, myxL, myyL, txL, tyL; - - flag downScaledL = FALSE; - flag boundsOkL = TRUE; - - if( w0L == 0 || h0L == 0 || bts_Flt16Mat2D_det( &altPtrA->matE ) == 0 ) - { - uint32 iL; - for( iL = 0; iL < dstWidthA * dstHeightA; iL++ ) dstImagePtrA[ iL ] = 0; - return; - } - - /* compute inverse ALT */ - invAltL = bts_Flt16Alt2D_inverted( altPtrA ); - - /* fixed point ALT 16.16 */ - if( invAltL.matE.bbpE <= 16 ) - { - uint32 shlL = 16 - invAltL.matE.bbpE; - mxxL = invAltL.matE.xxE << shlL; - mxyL = invAltL.matE.xyE << shlL; - myxL = invAltL.matE.yxE << shlL; - myyL = invAltL.matE.yyE << shlL; - } - else - { - uint32 shrL = invAltL.matE.bbpE - 16; - mxxL = ( ( invAltL.matE.xxE >> ( shrL - 1 ) ) + 1 ) >> 1; - mxyL = ( ( invAltL.matE.xyE >> ( shrL - 1 ) ) + 1 ) >> 1; - myxL = ( ( invAltL.matE.yxE >> ( shrL - 1 ) ) + 1 ) >> 1; - myyL = ( ( invAltL.matE.yyE >> ( shrL - 1 ) ) + 1 ) >> 1; - } - - if( invAltL.vecE.bbpE <= 16 ) - { - uint32 shlL = 16 - invAltL.vecE.bbpE; - txL = invAltL.vecE.xE << shlL; - tyL = invAltL.vecE.yE << shlL; - } - else - { - uint32 shrL = invAltL.vecE.bbpE - 16; - txL = ( ( invAltL.vecE.xE >> ( shrL - 1 ) ) + 1 ) >> 1; - tyL = ( ( invAltL.vecE.yE >> ( shrL - 1 ) ) + 1 ) >> 1; - } - - /* add offset */ - txL += ( int32 )offsPtrA->xE << 16; - tyL += ( int32 )offsPtrA->yE << 16; - - if( scaleThresholdA > 0 ) - { - /* compute downscale exponent */ - uint32 axxL = ( mxxL >= 0 ) ? mxxL : -mxxL; - uint32 axyL = ( mxyL >= 0 ) ? mxyL : -mxyL; - uint32 ayxL = ( myxL >= 0 ) ? myxL : -myxL; - uint32 ayyL = ( myyL >= 0 ) ? myyL : -myyL; - - uint32 a1L = ( axxL > ayxL ) ? axxL : ayxL; - uint32 a2L = ( axyL > ayyL ) ? axyL : ayyL; - - uint32 invScaleL = ( a1L < a2L ) ? a1L : a2L; - uint32 scaleExpL = 0; - while( ( invScaleL >> scaleExpL ) > scaleThrL ) scaleExpL++; - while( ( scaleExpL > 0 ) && ( w0L >> scaleExpL ) < 2 ) scaleExpL--; - while( ( scaleExpL > 0 ) && ( h0L >> scaleExpL ) < 2 ) scaleExpL--; - - /* downscale image */ - if( scaleExpL > 0 ) - { - /* down sampling is limited to the effective area of the original image */ - - /* compute effective area by mapping all corners of the dst rectangle */ - int32 xMinL = 0x7FFFFFFF; - int32 yMinL = 0x7FFFFFFF; - int32 xMaxL = 0x80000000; - int32 yMaxL = 0x80000000; - uint32 wEffL, hEffL; - - { - int32 xL, yL; - xL = txL; - yL = tyL; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - xL = txL + mxxL * ( int32 )dstWidthA + mxyL * ( int32 )dstHeightA; - yL = tyL + myxL * ( int32 )dstWidthA + myyL * ( int32 )dstHeightA; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - xL = txL + mxyL * ( int32 )dstHeightA; - yL = tyL + myyL * ( int32 )dstHeightA; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - xL = txL + mxxL * ( int32 )dstWidthA; - yL = tyL + myxL * ( int32 )dstWidthA; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - } - - xMaxL = ( xMaxL >> 16 ) + 2; - yMaxL = ( yMaxL >> 16 ) + 2; - xMinL >>= 16; - yMinL >>= 16; - - /* ensre effective area stays within original frame */ - xMinL = 0 > xMinL ? 0 : xMinL; - yMinL = 0 > yMinL ? 0 : yMinL; - xMinL = ( int32 )w0L < xMinL ? w0L : xMinL; - yMinL = ( int32 )h0L < yMinL ? h0L : yMinL; - xMaxL = 0 > xMaxL ? 0 : xMaxL; - yMaxL = 0 > yMaxL ? 0 : yMaxL; - xMaxL = ( int32 )w0L < xMaxL ? w0L : xMaxL; - yMaxL = ( int32 )h0L < yMaxL ? h0L : yMaxL; - - wEffL = xMaxL - xMinL; - hEffL = yMaxL - yMinL; - - /* ensure downscaling does not reduce image to 0 */ - while( ( scaleExpL > 0 ) && ( wEffL >> scaleExpL ) < 2 ) scaleExpL--; - while( ( scaleExpL > 0 ) && ( hEffL >> scaleExpL ) < 2 ) scaleExpL--; - - /* downscale */ - if( scaleExpL > 0 ) - { - uint32 iL; - w1L = wEffL >> 1; - h1L = hEffL >> 1; - if( bufPtrA == NULL ) bbs_ERROR1( "%s:\nPreallocated buffer is needed", fNameL ); - bbs_UInt8Arr_size( cpA, bufPtrA, w1L * h1L ); - bim_downscaleBy2( bufPtrA->arrPtrE, srcL + yMinL * w0L + xMinL, w0L, wEffL, hEffL ); - for( iL = 1; iL < scaleExpL; iL++ ) - { - bim_downscaleBy2( bufPtrA->arrPtrE, bufPtrA->arrPtrE, w1L, w1L, h1L ); - w1L >>= 1; - h1L >>= 1; - } - - /* adjust inverted cordinates */ - txL -= ( xMinL << 16 ); - tyL -= ( yMinL << 16 ); - mxxL >>= scaleExpL; - mxyL >>= scaleExpL; - myxL >>= scaleExpL; - myyL >>= scaleExpL; - txL >>= scaleExpL; - tyL >>= scaleExpL; - srcL = bufPtrA->arrPtrE; - } - - downScaledL = TRUE; - } - } - - /* if not downscaled and src and dst images are identcal then copy srcImage into buffer */ - if( !downScaledL && dstImagePtrA == srcImagePtrA ) - { - uint32 iL; - uint32 srcSizeL = srcImageWidthA * srcImageHeightA; - if( bufPtrA == NULL ) bbs_ERROR1( "%s:\nPreallocated buffer is needed", fNameL ); - bbs_UInt8Arr_size( cpA, bufPtrA, srcSizeL ); - for( iL = 0; iL < srcSizeL; iL++ ) bufPtrA->arrPtrE[ iL ] = srcImagePtrA[ iL ]; - srcL = bufPtrA->arrPtrE; - } - - /* compute destination image */ - - /* bounds check (dst image fully inside src image? -> fast algorithm) */ - { - int32 xL, yL; - int32 wbL = w1L - 1; - int32 hbL = h1L - 1; - - xL = txL >> 16; - yL = tyL >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - - xL = ( txL + mxxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - yL = ( tyL + myxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - - xL = ( txL + mxyL * ( int32 )( dstHeightA - 1 ) ) >> 16; - yL = ( tyL + myyL * ( int32 )( dstHeightA - 1 ) ) >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - - xL = ( txL + mxyL * ( int32 )( dstHeightA - 1 ) + mxxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - yL = ( tyL + myyL * ( int32 )( dstHeightA - 1 ) + myxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - } - - if( boundsOkL ) - { - int32 iL, jL; - for( jL = 0; jL < ( int32 )dstHeightA; jL++ ) - { - /* 16.16 */ - int32 xL = txL + mxyL * jL; - int32 yL = tyL + myyL * jL; - for( iL = 0; iL < ( int32 )dstWidthA; iL++ ) - { - int32 x0L = xL >> 16; - int32 y0L = yL >> 16; - uint32 xf2L = xL & 0x0FFFF; - uint32 yf2L = yL & 0x0FFFF; - uint32 xf1L = 0x10000 - xf2L; - uint32 yf1L = 0x10000 - yf2L; - - xL += mxxL; - yL += myxL; - - { - uint32 idxL = y0L * w1L + x0L; - uint32 v1L = ( ( uint32 )srcL[ idxL ] * xf1L + ( uint32 )srcL[ idxL + 1 ] * xf2L + 0x0800 ) >> 12; - uint32 v2L = ( ( uint32 )srcL[ idxL + w1L ] * xf1L + ( uint32 )srcL[ idxL + w1L + 1 ] * xf2L + 0x0800 ) >> 12; - *dstL++ = ( v1L * yf1L + v2L * yf2L + 0x080000 ) >> 20; - } - } - } - } - else - { - int32 iL, jL; - for( jL = 0; jL < ( int32 )dstHeightA; jL++ ) - { - /* 16.16 */ - int32 xL = txL + mxyL * jL; - int32 yL = tyL + myyL * jL; - for( iL = 0; iL < ( int32 )dstWidthA; iL++ ) - { - int32 x0L = xL >> 16; - int32 y0L = yL >> 16; - uint32 xf2L = xL & 0x0FFFF; - uint32 yf2L = yL & 0x0FFFF; - uint32 xf1L = 0x10000 - xf2L; - uint32 yf1L = 0x10000 - yf2L; - - xL += mxxL; - yL += myxL; - - if( y0L < 0 ) - { - if( x0L < 0 ) - { - *dstL++ = srcL[ 0 ]; - } - else if( x0L >= ( int32 )w1L - 1 ) - { - *dstL++ = srcL[ w1L - 1 ]; - } - else - { - *dstL++ = ( ( uint32 )srcL[ x0L ] * xf1L + ( uint32 )srcL[ x0L + 1 ] * xf2L + 0x08000 ) >> 16; - } - } - else if( y0L >= ( int32 )h1L - 1 ) - { - if( x0L < 0 ) - { - *dstL++ = srcL[ ( h1L - 1 ) * w1L ]; - } - else if( x0L >= ( int32 )w1L - 1 ) - { - *dstL++ = srcL[ ( h1L * w1L ) - 1 ]; - } - else - { - uint32 idxL = ( h1L - 1 ) * w1L + x0L; - *dstL++ = ( ( uint32 )srcL[ idxL ] * xf1L + ( uint32 )srcL[ idxL + 1 ] * xf2L + 0x08000 ) >> 16; - } - } - else - { - if( x0L < 0 ) - { - uint32 idxL = y0L * w1L; - *dstL++ = ( ( uint32 )srcL[ idxL ] * yf1L + ( uint32 )srcL[ idxL + w1L ] * yf2L + 0x08000 ) >> 16; - } - else if( x0L >= ( int32 )w1L - 1 ) - { - uint32 idxL = ( y0L + 1 ) * w1L - 1; - *dstL++ = ( ( uint32 )srcL[ idxL ] * yf1L + ( uint32 )srcL[ idxL + w1L ] * yf2L + 0x08000 ) >> 16; - } - else - { - uint32 idxL = y0L * w1L + x0L; - uint32 v1L = ( ( uint32 )srcL[ idxL ] * xf1L + ( uint32 )srcL[ idxL + 1 ] * xf2L + 0x0800 ) >> 12; - uint32 v2L = ( ( uint32 )srcL[ idxL + w1L ] * xf1L + ( uint32 )srcL[ idxL + w1L + 1 ] * xf2L + 0x0800 ) >> 12; - *dstL++ = ( v1L * yf1L + v2L * yf2L + 0x080000 ) >> 20; - } - } - } - } - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_filterWarpPixelReplication( struct bbs_Context* cpA, - uint8* dstImagePtrA, - const uint8* srcImagePtrA, - uint32 srcImageWidthA, - uint32 srcImageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_Flt16Alt2D* altPtrA, - uint32 dstWidthA, - uint32 dstHeightA, - struct bbs_UInt8Arr* bufPtrA, - uint32 scaleThresholdA ) -{ - bbs_DEF_fNameL( "bim_filterWarpPixelReplication" ) - - uint32 w0L = srcImageWidthA; - uint32 h0L = srcImageHeightA; - - const uint8* srcL = srcImagePtrA; - uint8* dstL = dstImagePtrA; - - uint32 w1L = w0L; - uint32 h1L = h0L; - - /* 16.16 */ - uint32 scaleThrL = scaleThresholdA; - struct bts_Flt16Alt2D invAltL; - - /* matrix variables */ - int32 mxxL, mxyL, myxL, myyL, txL, tyL; - - flag downScaledL = FALSE; - flag boundsOkL = TRUE; - - if( w0L == 0 || h0L == 0 || bts_Flt16Mat2D_det( &altPtrA->matE ) == 0 ) - { - uint32 iL; - for( iL = 0; iL < dstWidthA * dstHeightA; iL++ ) dstImagePtrA[ iL ] = 0; - return; - } - - /* compute inverse ALT */ - invAltL = bts_Flt16Alt2D_inverted( altPtrA ); - - /* fixed point ALT 16.16 */ - if( invAltL.matE.bbpE <= 16 ) - { - uint32 shlL = 16 - invAltL.matE.bbpE; - mxxL = invAltL.matE.xxE << shlL; - mxyL = invAltL.matE.xyE << shlL; - myxL = invAltL.matE.yxE << shlL; - myyL = invAltL.matE.yyE << shlL; - } - else - { - uint32 shrL = invAltL.matE.bbpE - 16; - mxxL = ( ( invAltL.matE.xxE >> ( shrL - 1 ) ) + 1 ) >> 1; - mxyL = ( ( invAltL.matE.xyE >> ( shrL - 1 ) ) + 1 ) >> 1; - myxL = ( ( invAltL.matE.yxE >> ( shrL - 1 ) ) + 1 ) >> 1; - myyL = ( ( invAltL.matE.yyE >> ( shrL - 1 ) ) + 1 ) >> 1; - } - - if( invAltL.vecE.bbpE <= 16 ) - { - uint32 shlL = 16 - invAltL.vecE.bbpE; - txL = invAltL.vecE.xE << shlL; - tyL = invAltL.vecE.yE << shlL; - } - else - { - uint32 shrL = invAltL.vecE.bbpE - 16; - txL = ( ( invAltL.vecE.xE >> ( shrL - 1 ) ) + 1 ) >> 1; - tyL = ( ( invAltL.vecE.yE >> ( shrL - 1 ) ) + 1 ) >> 1; - } - - /* add offset */ - txL += ( int32 )offsPtrA->xE << 16; - tyL += ( int32 )offsPtrA->yE << 16; - - if( scaleThresholdA > 0 ) - { - /* compute downscale exponent */ - uint32 axxL = ( mxxL >= 0 ) ? mxxL : -mxxL; - uint32 axyL = ( mxyL >= 0 ) ? mxyL : -mxyL; - uint32 ayxL = ( myxL >= 0 ) ? myxL : -myxL; - uint32 ayyL = ( myyL >= 0 ) ? myyL : -myyL; - - uint32 a1L = ( axxL > ayxL ) ? axxL : ayxL; - uint32 a2L = ( axyL > ayyL ) ? axyL : ayyL; - - uint32 invScaleL = ( a1L < a2L ) ? a1L : a2L; - uint32 scaleExpL = 0; - while( ( invScaleL >> scaleExpL ) > scaleThrL ) scaleExpL++; - while( ( scaleExpL > 0 ) && ( w0L >> scaleExpL ) < 2 ) scaleExpL--; - while( ( scaleExpL > 0 ) && ( h0L >> scaleExpL ) < 2 ) scaleExpL--; - - /* downscale image */ - if( scaleExpL > 0 ) - { - /* down sampling is limited to the effective area of the original image */ - - /* compute effective area by mapping all corners of the dst rectangle */ - int32 xMinL = 0x7FFFFFFF; - int32 yMinL = 0x7FFFFFFF; - int32 xMaxL = 0x80000000; - int32 yMaxL = 0x80000000; - uint32 wEffL, hEffL; - - { - int32 xL, yL; - xL = txL; - yL = tyL; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - xL = txL + mxxL * ( int32 )dstWidthA + mxyL * ( int32 )dstHeightA; - yL = tyL + myxL * ( int32 )dstWidthA + myyL * ( int32 )dstHeightA; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - xL = txL + mxyL * ( int32 )dstHeightA; - yL = tyL + myyL * ( int32 )dstHeightA; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - xL = txL + mxxL * ( int32 )dstWidthA; - yL = tyL + myxL * ( int32 )dstWidthA; - xMinL = xL < xMinL ? xL : xMinL; - yMinL = yL < yMinL ? yL : yMinL; - xMaxL = xL > xMaxL ? xL : xMaxL; - yMaxL = yL > yMaxL ? yL : yMaxL; - } - - xMaxL = ( xMaxL >> 16 ) + 2; - yMaxL = ( yMaxL >> 16 ) + 2; - xMinL >>= 16; - yMinL >>= 16; - - /* ensre effective area stays within original frame */ - xMinL = 0 > xMinL ? 0 : xMinL; - yMinL = 0 > yMinL ? 0 : yMinL; - xMinL = ( int32 )w0L < xMinL ? w0L : xMinL; - yMinL = ( int32 )h0L < yMinL ? h0L : yMinL; - xMaxL = 0 > xMaxL ? 0 : xMaxL; - yMaxL = 0 > yMaxL ? 0 : yMaxL; - xMaxL = ( int32 )w0L < xMaxL ? w0L : xMaxL; - yMaxL = ( int32 )h0L < yMaxL ? h0L : yMaxL; - - wEffL = xMaxL - xMinL; - hEffL = yMaxL - yMinL; - - /* ensure downscaling does not reduce image to 0 */ - while( ( scaleExpL > 0 ) && ( wEffL >> scaleExpL ) < 2 ) scaleExpL--; - while( ( scaleExpL > 0 ) && ( hEffL >> scaleExpL ) < 2 ) scaleExpL--; - - /* downscale */ - if( scaleExpL > 0 ) - { - uint32 iL; - w1L = wEffL >> 1; - h1L = hEffL >> 1; - if( bufPtrA == NULL ) bbs_ERROR1( "%s:\nPreallocated buffer is needed", fNameL ); - bbs_UInt8Arr_size( cpA, bufPtrA, w1L * h1L ); - bim_downscaleBy2( bufPtrA->arrPtrE, srcL + yMinL * w0L + xMinL, w0L, wEffL, hEffL ); - for( iL = 1; iL < scaleExpL; iL++ ) - { - bim_downscaleBy2( bufPtrA->arrPtrE, bufPtrA->arrPtrE, w1L, w1L, h1L ); - w1L >>= 1; - h1L >>= 1; - } - - /* adjust inverted cordinates */ - txL -= ( xMinL << 16 ); - tyL -= ( yMinL << 16 ); - mxxL >>= scaleExpL; - mxyL >>= scaleExpL; - myxL >>= scaleExpL; - myyL >>= scaleExpL; - txL >>= scaleExpL; - tyL >>= scaleExpL; - srcL = bufPtrA->arrPtrE; - } - - downScaledL = TRUE; - } - } - - /* if not downscaled and src and dst images are identcal then copy srcImage into buffer */ - if( !downScaledL && dstImagePtrA == srcImagePtrA ) - { - uint32 iL; - uint32 srcSizeL = srcImageWidthA * srcImageHeightA; - if( bufPtrA == NULL ) bbs_ERROR1( "%s:\nPreallocated buffer is needed", fNameL ); - bbs_UInt8Arr_size( cpA, bufPtrA, srcSizeL ); - for( iL = 0; iL < srcSizeL; iL++ ) bufPtrA->arrPtrE[ iL ] = srcImagePtrA[ iL ]; - srcL = bufPtrA->arrPtrE; - } - - /* compute destination image */ - - /* bounds check (dst image fully inside src image? -> fast algorithm) */ - { - int32 xL, yL; - int32 wbL = w1L - 1; - int32 hbL = h1L - 1; - - xL = txL >> 16; - yL = tyL >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - - xL = ( txL + mxxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - yL = ( tyL + myxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - - xL = ( txL + mxyL * ( int32 )( dstHeightA - 1 ) ) >> 16; - yL = ( tyL + myyL * ( int32 )( dstHeightA - 1 ) ) >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - - xL = ( txL + mxyL * ( int32 )( dstHeightA - 1 ) + mxxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - yL = ( tyL + myyL * ( int32 )( dstHeightA - 1 ) + myxL * ( int32 )( dstWidthA - 1 ) ) >> 16; - boundsOkL = boundsOkL && ( xL >= 0 && xL < wbL && yL >= 0 && yL < hbL ); - } - - if( boundsOkL ) - { - int32 iL, jL; - for( jL = 0; jL < ( int32 )dstHeightA; jL++ ) - { - /* 16.16 */ - int32 xL = txL + mxyL * jL; - int32 yL = tyL + myyL * jL; - for( iL = 0; iL < ( int32 )dstWidthA; iL++ ) - { - /* nearest whole position */ - *dstL++ = srcL[ ( ( ( yL >> 15 ) + 1 ) >> 1 ) * w1L + ( ( ( xL >> 15 ) + 1 ) >> 1 ) ]; - xL += mxxL; - yL += myxL; - } - } - } - else - { - int32 iL, jL; - for( jL = 0; jL < ( int32 )dstHeightA; jL++ ) - { - /* 16.16 */ - int32 xL = txL + mxyL * jL; - int32 yL = tyL + myyL * jL; - for( iL = 0; iL < ( int32 )dstWidthA; iL++ ) - { - /* nearest whole position */ - int32 x0L = ( ( xL >> 15 ) + 1 ) >> 1; - int32 y0L = ( ( yL >> 15 ) + 1 ) >> 1; - xL += mxxL; - yL += myxL; - - if( y0L < 0 ) - { - if( x0L < 0 ) - { - *dstL++ = srcL[ 0 ]; - } - else if( x0L >= ( int32 )w1L - 1 ) - { - *dstL++ = srcL[ w1L - 1 ]; - } - else - { - *dstL++ = srcL[ x0L ]; - } - } - else if( y0L >= ( int32 )h1L - 1 ) - { - if( x0L < 0 ) - { - *dstL++ = srcL[ ( h1L - 1 ) * w1L ]; - } - else if( x0L >= ( int32 )w1L - 1 ) - { - *dstL++ = srcL[ ( h1L * w1L ) - 1 ]; - } - else - { - *dstL++ = srcL[ ( h1L - 1 ) * w1L + x0L ]; - } - } - else - { - if( x0L < 0 ) - { - *dstL++ = srcL[ y0L * w1L ]; - } - else if( x0L >= ( int32 )w1L - 1 ) - { - *dstL++ = srcL[ ( y0L + 1 ) * w1L - 1 ]; - } - else - { - *dstL++ = srcL[ y0L * w1L + x0L ]; - } - } - } - } - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_filterWarp( struct bbs_Context* cpA, - uint8* dstImagePtrA, - const uint8* srcImagePtrA, - uint32 srcImageWidthA, - uint32 srcImageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_Flt16Alt2D* altPtrA, - uint32 dstWidthA, - uint32 dstHeightA, - struct bbs_UInt8Arr* bufPtrA, - uint32 scaleThresholdA, - flag interpolateA ) -{ - if( interpolateA ) - { - bim_filterWarpInterpolation( cpA, dstImagePtrA, srcImagePtrA, srcImageWidthA, srcImageHeightA, offsPtrA, altPtrA, dstWidthA, dstHeightA, bufPtrA, scaleThresholdA ); - } - else - { - bim_filterWarpPixelReplication( cpA, dstImagePtrA, srcImagePtrA, srcImageWidthA, srcImageHeightA, offsPtrA, altPtrA, dstWidthA, dstHeightA, bufPtrA, scaleThresholdA ); - } -} - -/* ------------------------------------------------------------------------- */ - diff --git a/Embedded/common/src/b_ImageEm/Functions.h b/Embedded/common/src/b_ImageEm/Functions.h deleted file mode 100644 index ff272eb..0000000 --- a/Embedded/common/src/b_ImageEm/Functions.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_FUNCTIONS_EM_H -#define bim_FUNCTIONS_EM_H - -/** - * This files contains gerenral purpose functions. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/UInt8Arr.h" -#include "b_TensorEm/Functions.h" -#include "b_TensorEm/Flt16Alt2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** pyramidal image type */ -enum bim_PyramidalImageType -{ - bim_UINT8_PYRAMIDAL_IMG, /* byte representation of pyramical image */ - bim_UINT16_PYRAMIDAL_IMG /* 16-bit representation of pyramical image */ -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/** Warps an image with intermediate pyramidal downscaling if possible in order to minimize aliasing - * The actual warping happens using pixel interpolation - * *bufPtrA is an intermediate byte array that holds downscaled data (only needed when pyramidal downscaling happens; can be NULL otherwise) - * scaleThresholdA (16.16): - * specifies the minimum scale ratio (inImage/outImage) required to initiate prior filtering - * A value range of 2.0...4.0 is recommended (<= 0.0: disabled) - * - * offsPtrA specifies the pixel position (0,0) in the input image (format 16.0) - */ -void bim_filterWarpInterpolation( struct bbs_Context* cpA, - uint8* dstImagePtrA, - const uint8* srcImagePtrA, - uint32 srcImageWidthA, - uint32 srcImageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_Flt16Alt2D* altPtrA, - uint32 dstWidthA, - uint32 dstHeightA, - struct bbs_UInt8Arr* bufPtrA, - uint32 scaleThresholdA ); - -/** Warps an image with intermediate pyramidal downscaling if possible in order to minimize aliasing - * The actual warping happens using pixel replication (fast but prone to artefacts) - * *bufPtrA is an intermediate byte array that holds downscaled data (only needed when pyramidal downscaling happens; can be NULL otherwise) - * scaleThresholdA (16.16): - * specifies the minimum scale ratio (inImage/outImage) required to initiate prior filtering - * A value range of 2.0...4.0 is recommended (0.0: disabled) - * offsPtrA specifies the pixel position (0,0) in the input image (format 16.0) - */ -void bim_filterWarpPixelReplication( struct bbs_Context* cpA, - uint8* dstImagePtrA, - const uint8* srcImagePtrA, - uint32 srcImageWidthA, - uint32 srcImageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_Flt16Alt2D* altPtrA, - uint32 dstWidthA, - uint32 dstHeightA, - struct bbs_UInt8Arr* bufPtrA, - uint32 scaleThresholdA ); - -/** Selects proper warp function above - * offsPtrA specifies the pixel position (0,0) in the input image (format 16.0) - */ -void bim_filterWarp( struct bbs_Context* cpA, - uint8* dstImagePtrA, - const uint8* srcImagePtrA, - uint32 srcImageWidthA, - uint32 srcImageHeightA, - const struct bts_Int16Vec2D* offsPtrA, - const struct bts_Flt16Alt2D* altPtrA, - uint32 dstWidthA, - uint32 dstHeightA, - struct bbs_UInt8Arr* bufPtrA, - uint32 scaleThresholdA, - flag interpolateA ); - -#endif /* bim_FUNCTIONS_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/HistoEq.c b/Embedded/common/src/b_ImageEm/HistoEq.c deleted file mode 100644 index 0b73b21..0000000 --- a/Embedded/common/src/b_ImageEm/HistoEq.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/Math.h" -#include "b_ImageEm/HistoEq.h" -#include "b_ImageEm/UInt8Image.h" - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/** Computes grey level histogram of given image. */ -void bim_createHisto( struct bbs_Context* cpA, - uint16* histoPtrA, - const struct bim_UInt8Image* imagePtrA ) -{ - uint32 iL; - uint16* dstPtrL; - const uint8* srcPtrL; - - /* init histogram array with 0 */ - dstPtrL = histoPtrA; - for( iL = 256; iL > 0; iL-- ) - { - *dstPtrL++ = 0; - } - - /* calculate histogram */ - srcPtrL = imagePtrA->arrE.arrPtrE; - dstPtrL = histoPtrA; - for( iL = imagePtrA->arrE.sizeE; iL > 0; iL-- ) - { - dstPtrL[ *srcPtrL++ ]++; - } -} - -/* ------------------------------------------------------------------------- */ - -/** Computes grey level histogram of given image. */ -void bim_createHistoOfSection( struct bbs_Context* cpA, - uint16* histoPtrA, - const struct bts_Int16Rect* sectionPtrA, - const struct bim_UInt8Image* imagePtrA ) -{ - uint32 xL, yL; - const uint8* srcPtrL; - uint16* dstPtrL; - struct bts_Int16Rect sectionL = *sectionPtrA; - uint32 sectWidthL; - uint32 sectHeightL; - int32 imgWidthL = imagePtrA->widthE; - int32 imgHeightL = imagePtrA->heightE; - - /* adjustments */ - sectionL.x1E = bbs_max( 0, sectionL.x1E ); - sectionL.x1E = bbs_min( imgWidthL, sectionL.x1E ); - sectionL.x2E = bbs_max( 0, sectionL.x2E ); - sectionL.x2E = bbs_min( imgWidthL, sectionL.x2E ); - sectionL.y1E = bbs_max( 0, sectionL.y1E ); - sectionL.y1E = bbs_min( imgHeightL, sectionL.y1E ); - sectionL.y2E = bbs_max( 0, sectionL.y2E ); - sectionL.y2E = bbs_min( imgHeightL, sectionL.y2E ); - - sectWidthL = sectionL.x2E - sectionL.x1E; - sectHeightL = sectionL.y2E - sectionL.y1E; - - /* init histogram with 0 */ - dstPtrL = histoPtrA; - for( xL = 256; xL > 0; xL-- ) - { - *dstPtrL++ = 0; - } - - /* calculate histogram */ - srcPtrL = imagePtrA->arrE.arrPtrE + sectionL.y1E * imgWidthL + sectionL.x1E; - dstPtrL = histoPtrA; - for( yL = 0; yL < sectHeightL; yL++ ) - { - for( xL = 0; xL < sectWidthL; xL++ ) - { - dstPtrL[ *srcPtrL++ ]++; - } - srcPtrL += imgWidthL - sectWidthL; - } -} - -/* ------------------------------------------------------------------------- */ - -/** equalize image using given histogram */ -void bim_equalize( struct bbs_Context* cpA, - struct bim_UInt8Image* imagePtrA, - const uint16* histoPtrA ) -{ - uint32 kL; - uint32 sumL = 0; - uint32 totalSumL = 0; - const uint16* histoArrPtrL; - uint8* dstPtrL; - uint8 mappingL[ 256 ]; - - /* determine number of counts in histogram */ - histoArrPtrL = histoPtrA; - for( kL = 256; kL > 0; kL-- ) - { - totalSumL += *histoArrPtrL++; - } - - if( totalSumL == 0 ) totalSumL = 1; - - /* compute transfer function (cumulative histogram) */ - histoArrPtrL = histoPtrA; - for( kL = 0; kL < 256; kL++ ) - { - sumL += *histoArrPtrL++; - mappingL[ kL ] = ( sumL * 255 ) / totalSumL; - } - - /* remap pixel values */ - dstPtrL = imagePtrA->arrE.arrPtrE; - for( kL = imagePtrA->arrE.sizeE; kL > 0; kL-- ) - { - *dstPtrL = mappingL[ *dstPtrL ]; - dstPtrL++; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_equalize( struct bbs_Context* cpA, - struct bim_UInt8Image* imagePtrA ) -{ - uint16 histogramL[ 256 ]; - bim_createHisto( cpA, histogramL, imagePtrA ); - bim_equalize( cpA, imagePtrA, histogramL ); -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_equalizeSection( struct bbs_Context* cpA, - struct bim_UInt8Image* imagePtrA, - const struct bts_Int16Rect* sectionPtrA ) -{ - uint16 histogramL[ 256 ]; - bim_createHistoOfSection( cpA, histogramL, sectionPtrA, imagePtrA ); - bim_equalize( cpA, imagePtrA, histogramL ); -} - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_ImageEm/HistoEq.h b/Embedded/common/src/b_ImageEm/HistoEq.h deleted file mode 100644 index 82f2286..0000000 --- a/Embedded/common/src/b_ImageEm/HistoEq.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_HISTOEQ_EM_H -#define bim_HISTOEQ_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_ImageEm/UInt8Image.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bim_UInt8Image; -struct bts_Int16Rect; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/** Histogram equalization of image */ -void bim_UInt8Image_equalize( struct bbs_Context* cpA, - struct bim_UInt8Image* imagePtrA ); - -/** Histogram equalization using histogram generated from subregion. - * While the histogram is taken only in the specified sub-section of the - * image, the equalization, i.e. remapping of the pixel values, is - * performed on the whole image. - * - * @param imagePtrA pointer to image to be equalized - * @param sectionPtrA section specifying region in image where histogram is - * generated from - */ -void bim_UInt8Image_equalizeSection( struct bbs_Context* cpA, - struct bim_UInt8Image* imagePtrA, - const struct bts_Int16Rect* sectionPtrA ); - -/* ------------------------------------------------------------------------- */ - -#endif /* bim_HISTOEQ_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/HistoEq16.c b/Embedded/common/src/b_ImageEm/HistoEq16.c deleted file mode 100644 index f45c1e3..0000000 --- a/Embedded/common/src/b_ImageEm/HistoEq16.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_BasicEm/Math.h" -#include "b_ImageEm/HistoEq16.h" -#include "b_ImageEm/UInt16ByteImage.h" - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/** Computes grey level histogram of given image. */ -void bim_createHisto16( uint16* histoPtrA, - const struct bim_UInt16ByteImage* imagePtrA ) -{ - uint32 iL; - uint16* dstPtrL; - const uint16* srcPtrL; - - /* init histogram array with 0 */ - dstPtrL = histoPtrA; - for( iL = 256; iL > 0; iL-- ) - { - *dstPtrL++ = 0; - } - - srcPtrL = imagePtrA->arrE.arrPtrE; - dstPtrL = histoPtrA; - /* calculate histogram (assuming even image width) */ - for( iL = imagePtrA->arrE.sizeE; iL > 0; iL-- ) - { - dstPtrL[ ( *srcPtrL & 0x0FF ) ]++; - dstPtrL[ ( *srcPtrL >> 8 ) ]++; - srcPtrL++; - } -} - -/* ------------------------------------------------------------------------- */ - -/** Computes grey level histogram of given image. */ -void bim_createHistoOfSection16( uint16* histoPtrA, - const struct bts_Int16Rect* sectionPtrA, - const struct bim_UInt16ByteImage* imagePtrA ) -{ - uint32 xL, yL; - const uint16* srcPtrL; - uint16* dstPtrL; - struct bts_Int16Rect sectionL = *sectionPtrA; - uint32 sectWidthL; - uint32 sectHeightL; - int32 imgWidthL = imagePtrA->widthE; - int32 imgHeightL = imagePtrA->heightE; - - bbs_ERROR0( "bim_createHistoOfSection16(...): not implemented" ); - - /* adjustments */ - sectionL.x1E = bbs_max( 0, sectionL.x1E ); - sectionL.x1E = bbs_min( imgWidthL, sectionL.x1E ); - sectionL.x2E = bbs_max( 0, sectionL.x2E ); - sectionL.x2E = bbs_min( imgWidthL, sectionL.x2E ); - sectionL.y1E = bbs_max( 0, sectionL.y1E ); - sectionL.y1E = bbs_min( imgHeightL, sectionL.y1E ); - sectionL.y2E = bbs_max( 0, sectionL.y2E ); - sectionL.y2E = bbs_min( imgHeightL, sectionL.y2E ); - - sectWidthL = sectionL.x2E - sectionL.x1E; - sectHeightL = sectionL.y2E - sectionL.y1E; - - /* init histogram with 0 */ - dstPtrL = histoPtrA; - for( xL = 256; xL > 0; xL-- ) - { - *dstPtrL++ = 0; - } - - /* calculate histogram */ - srcPtrL = imagePtrA->arrE.arrPtrE + sectionL.y1E * imgWidthL + sectionL.x1E; - dstPtrL = histoPtrA; - for( yL = 0; yL < sectHeightL; yL++ ) - { - for( xL = 0; xL < sectWidthL; xL++ ) - { - dstPtrL[ ( *srcPtrL & 0x0FF ) ]++; - dstPtrL[ ( *srcPtrL >> 8 ) ]++; - srcPtrL++; - /* dstPtrL[ *srcPtrL++ ]++; */ - } - srcPtrL += imgWidthL - sectWidthL; - } -} - -/* ------------------------------------------------------------------------- */ - -/** equalize image using given histogram */ -void bim_equalize16( struct bim_UInt16ByteImage* imagePtrA, - const uint16* histoPtrA ) -{ - uint32 kL; - uint32 sumL = 0; - uint32 totalSumL = 0; - const uint16* histoArrPtrL; - uint16* dstPtrL; - uint16 mappingL[ 256 ]; - - /* determine number of counts in histogram */ - histoArrPtrL = histoPtrA; - for( kL = 256; kL > 0; kL-- ) - { - totalSumL += *histoArrPtrL++; - } - - if( totalSumL == 0 ) totalSumL = 1; - - /* compute transfer function (cumulative histogram) */ - histoArrPtrL = histoPtrA; - for( kL = 0; kL < 256; kL++ ) - { - sumL += *histoArrPtrL++; - mappingL[ kL ] = ( sumL * 255 ) / totalSumL; - } - - /* remap pixel values */ - dstPtrL = imagePtrA->arrE.arrPtrE; - for( kL = imagePtrA->arrE.sizeE; kL > 0; kL-- ) - { - *dstPtrL = mappingL[ *dstPtrL & 0x00FF ] | ( mappingL[ *dstPtrL >> 8 ] << 8 ); - dstPtrL++; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_equalize( struct bim_UInt16ByteImage* imagePtrA ) -{ - uint16 histogramL[ 256 ]; - bim_createHisto16( histogramL, imagePtrA ); - bim_equalize16( imagePtrA, histogramL ); -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_equalizeSection( struct bim_UInt16ByteImage* imagePtrA, - const struct bts_Int16Rect* sectionPtrA ) -{ - uint16 histogramL[ 256 ]; - bim_createHistoOfSection16( histogramL, sectionPtrA, imagePtrA ); - bim_equalize16( imagePtrA, histogramL ); -} - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_ImageEm/HistoEq16.h b/Embedded/common/src/b_ImageEm/HistoEq16.h deleted file mode 100644 index 94907fa..0000000 --- a/Embedded/common/src/b_ImageEm/HistoEq16.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_HISTOEQ16_EM_H -#define bim_HISTOEQ16_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -/* ---- related objects --------------------------------------------------- */ - -struct bim_UInt16ByteImage; -struct bts_Int16Rect; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/** Histogram equalization of image */ -void bim_UInt16ByteImage_equalize( struct bim_UInt16ByteImage* imagePtrA ); - -/** Histogram equalization using histogram generated from subregion. - * While the histogram is taken only in the specified sub-section of the - * image, the equalization, i.e. remapping of the pixel values, is - * performed on the whole image. - * - * @param imagePtrA pointer to image to be equalized - * @param sectionPtrA section specifying region in image where histogram is - * generated from - */ -void bim_UInt16ByteImage_equalizeSection( struct bim_UInt16ByteImage* imagePtrA, - const struct bts_Int16Rect* sectionPtrA ); - -/* ------------------------------------------------------------------------- */ - -#endif /* bim_HISTOEQ16_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/ToneDownBGSupp.c b/Embedded/common/src/b_ImageEm/ToneDownBGSupp.c deleted file mode 100644 index 70c7aff..0000000 --- a/Embedded/common/src/b_ImageEm/ToneDownBGSupp.c +++ /dev/null @@ -1,551 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEM/Math.h" -#include "b_BasicEM/Memory.h" -#include "b_BasicEM/Int16Arr.h" -#include "b_BasicEM/Int32Arr.h" - -#include "b_ImageEM/ToneDownBGSupp.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_ToneDownBGSupp_BGGreyLevelOutside( struct bim_UInt8Image* imgA, - struct bts_Int16Rect* rectA, - int16 rectExpansionA, - uint32* meanBGGrayLevelA ) -{ - /* image access */ - int16 iL, jL; - uint8 *imgPtrL = 0; - uint8 *imgPtrMaxL = 0; - - /* the sum is possibly a large number. e.g. for a 512x512 byte image, maximum brightness, sumL is 7x10E7 */ - uint32 sumL, ctrL; - - /* the rectangle vertices */ - int16 rectXMinL, rectXMaxL, rectYMinL, rectYMaxL; - int16 rectIxXMinL, rectIxXMaxL, rectIxYMinL, rectIxYMaxL; - - /* expand the rectangle */ - - /* expand rectangle. the result is called the ROI */ - rectXMinL = rectA->x1E + rectExpansionA; - rectXMaxL = rectA->x2E - rectExpansionA; - rectYMinL = rectA->y1E + rectExpansionA; - rectYMaxL = rectA->y2E - rectExpansionA; - - rectIxXMinL = bbs_max( rectXMinL, ( int16 ) 0 ); - rectIxXMaxL = bbs_max( rectXMaxL, ( int16 ) 0 ); - rectIxXMaxL = bbs_min( rectXMaxL, ( int16 ) imgA->widthE ); - rectIxYMinL = bbs_max( rectYMinL, ( int16 ) 0 ); - rectIxYMaxL = bbs_min( rectYMaxL, ( int16 ) 0 ); - rectIxYMaxL = bbs_min( rectYMaxL, ( int16 ) imgA->heightE ); - - /* avoid negative overlap */ - rectIxXMinL = bbs_min( rectIxXMinL, rectIxXMaxL ); - rectIxYMinL = bbs_min( rectIxYMinL, rectIxYMaxL ); - -/* printf( "new xmin=%d, xmax=%d, ymin=%d,ymax=%d \n", rectIxXMinL, rectIxXMaxL, rectIxYMinL, rectIxYMaxL ); */ - - /* part 1: sum up all the lines above the ROI */ - - sumL = 0; - ctrL = 0; - - imgPtrL = &(imgA->arrE.arrPtrE[ 0 ]); - ctrL += rectIxYMinL * imgA->widthE; - imgPtrMaxL = imgPtrL + rectIxYMinL * imgA->widthE; - while ( imgPtrL < imgPtrMaxL ) - { - sumL += *imgPtrL; - imgPtrL++; - } - - /* part 2: sum up all the lines below the ROI */ - - ctrL += ( imgA->heightE - rectIxYMaxL ) * imgA->widthE; - - imgPtrL = &(imgA->arrE.arrPtrE[ rectIxYMaxL * imgA->widthE ]); - imgPtrMaxL = &(imgA->arrE.arrPtrE[ imgA->heightE * imgA->widthE ]); - while ( imgPtrL < imgPtrMaxL ) - { - sumL += *imgPtrL; - imgPtrL++; - } - - /* part 3: sum over the two vertically adjacent blocks */ - - for ( jL = rectIxYMinL; jL < rectIxYMaxL; jL++ ) - { - imgPtrL = &(imgA->arrE.arrPtrE[ rectIxYMinL * imgA->widthE ]); - ctrL += bbs_max( 0, rectIxXMinL ); - - for ( iL = 0; iL < rectIxXMinL; iL++ ) - { - sumL += imgPtrL[ iL ]; - } - - if( ( int32 )imgA->widthE > ( int32 )rectIxXMaxL ) - { - ctrL += ( int32 )imgA->widthE - ( int32 )rectIxXMaxL; - } - - for ( iL = rectIxXMaxL; iL < ( int16 ) imgA->widthE; iL++ ) - { - sumL += imgPtrL[ iL ]; - } - } - - /* printf( "new sum = %d, new ctr = %d \n", sumL, ctrL ); */ - - /* result is bpb=[16.16] */ - *meanBGGrayLevelA = ( sumL << 16 ) / ( uint32 ) ctrL; - - /* result is bpb=[16.16] */ - *meanBGGrayLevelA = sumL / ctrL; /* integer division */ - sumL = sumL - *meanBGGrayLevelA * ctrL; /* result always greater than or equal to zero */ - *meanBGGrayLevelA = *meanBGGrayLevelA << 16; /* shift to left */ - *meanBGGrayLevelA = *meanBGGrayLevelA + ( sumL << 16 ) / ctrL; /* add residue */ - -} - -/* ------------------------------------------------------------------------- */ - -void bim_ToneDownBGSupp_BGGreyLevelContour( struct bim_UInt8Image* imgA, - struct bts_Int16Rect* rectA, - uint32* meanBGGrayLevelA ) -{ - /* image access */ - int16 iL; - uint8 *imgPtr0L = 0; - uint8 *imgPtr1L = 0; - - /* the sum is possibly a large number. e.g. for a 512x512 byte image, maximum brightness, sumL is 7x10E7 */ - uint32 sumL, ctrL; - - /* the rectangle vertices */ - int16 rectXMinL, rectXMaxL, rectYMinL, rectYMaxL; - int16 rectIxXMinL, rectIxXMaxL, rectIxYMinL, rectIxYMaxL; - int16 rectMinWidthL = 10, rectMinHeightL = 10; - int16 rectXMidPointL, rectYMidPointL; - int16 shiftXRectL, shiftYRectL; - - /* cut off the rectangle at the image bounaries - * when its size becomes too small - * the rectangle is shifted back inside the image */ - - /* cut off at image boundaries */ - rectXMinL = rectA->x1E; - rectXMaxL = rectA->x2E; - rectYMinL = rectA->y1E; - rectYMaxL = rectA->y2E; - - rectIxXMinL = bbs_max( rectXMinL, ( int16 ) 0 ); - rectIxXMaxL = bbs_max( rectXMaxL, ( int16 ) 0 ); - rectIxXMaxL = bbs_min( rectXMaxL, ( int16 ) imgA->widthE ); - rectIxYMinL = bbs_max( rectYMinL, ( int16 ) 0 ); - rectIxYMaxL = bbs_min( rectYMaxL, ( int16 ) 0 ); - rectIxYMaxL = bbs_min( rectYMaxL, ( int16 ) imgA->heightE ); - - /* shift back into image */ - shiftXRectL = 0; - shiftYRectL = 0; - if ( rectIxXMaxL - rectIxXMinL < rectMinWidthL ) - { - rectXMidPointL = ( rectIxXMaxL + rectIxXMinL ) >> 1; - rectIxXMinL = rectXMidPointL - ( rectMinWidthL >> 1 ); - rectIxXMaxL = rectXMidPointL + ( rectMinWidthL >> 1 ); - - if ( rectIxXMinL < 0 ) - { - shiftXRectL = -rectIxXMinL; - } - if ( rectIxXMaxL > ( int16 ) imgA->widthE ) - { - shiftXRectL = rectIxXMaxL - ( int16 ) imgA->widthE; - } - } - if ( rectIxYMaxL - rectIxYMinL < rectMinHeightL ) - { - rectYMidPointL = ( rectIxYMaxL + rectIxYMinL ) >> 1; - rectIxYMinL = rectYMidPointL - ( rectMinWidthL >> 1 ); - rectIxYMaxL = rectYMidPointL + ( rectMinWidthL >> 1 ); - - if ( rectIxYMinL < 0 ) - { - shiftXRectL = -rectIxYMinL; - } - if ( rectIxYMaxL > ( int16 ) imgA->widthE ) - { - shiftXRectL = rectIxYMaxL - ( int16 ) imgA->widthE; - } - } - rectIxXMinL += shiftXRectL; - rectIxXMaxL += shiftXRectL; - rectIxYMinL += shiftYRectL; - rectIxYMaxL += shiftYRectL; - - /* when the image is small, there is a possibility that the shifted rectangle lies outside of the image. - * => lop off the rectangle at image boundaries once again */ - rectIxXMinL = bbs_max( rectXMinL, ( int16 ) 0 ); - rectIxXMaxL = bbs_min( rectXMaxL, ( int16 ) imgA->widthE ); - rectIxYMinL = bbs_max( rectYMinL, ( int16 ) 0 ); - rectIxYMaxL = bbs_min( rectYMaxL, ( int16 ) imgA->heightE ); - - - sumL = 0; - ctrL = 0; - ctrL += ( rectIxXMaxL - rectIxXMinL ) << 1; - ctrL += ( rectIxYMaxL - rectIxYMinL - 2 ) << 1; - - /* loop over the contour */ - imgPtr0L = &(imgA->arrE.arrPtrE[ rectIxYMinL * imgA->widthE ]); - imgPtr1L = &(imgA->arrE.arrPtrE[ ( rectIxYMaxL - 1 ) * imgA->widthE ]); - for ( iL = rectIxXMinL; iL < rectIxXMaxL; iL++ ) - { - sumL += imgPtr0L[ iL ]; - sumL += imgPtr1L[ iL ]; - } - imgPtr0L = &(imgA->arrE.arrPtrE[ ( rectIxYMinL + 1 ) * imgA->widthE + rectIxXMinL ]); - imgPtr1L = &(imgA->arrE.arrPtrE[ ( rectIxYMinL + 1 ) * imgA->widthE + rectIxXMaxL - 1 ]); - for ( iL = rectIxYMinL + 1; iL < rectIxYMaxL - 1; iL++ ) - { - sumL += *imgPtr0L; - sumL += *imgPtr1L; - imgPtr0L += imgA->widthE; - imgPtr1L += imgA->widthE; - } - - - /* printf( "new sum = %d, new ctr = %d \n", sumL, ctrL ); */ - - /* result is bpb=[16.16] */ - *meanBGGrayLevelA = ( sumL << 16 ) / ( uint32 ) ctrL; - - /* result is bpb=[16.16] */ - *meanBGGrayLevelA = sumL / ctrL; /* integer division */ - sumL = sumL - *meanBGGrayLevelA * ctrL; /* result always greater than or equal to zero */ - *meanBGGrayLevelA = *meanBGGrayLevelA << 16; /* shift to left */ - *meanBGGrayLevelA = *meanBGGrayLevelA + ( sumL << 16 ) / ctrL; /* add residue */ -} - -/* ------------------------------------------------------------------------- */ - -void bim_ToneDownBGSupp_suppress( struct bim_UInt8Image* imgA, - struct bts_Int16Rect* rectA, - int16 rectShrinkageA, - int32 toneDownFactorA, /* ToDo: change to int16, bpb=[0.16] */ - int32 cutOffAccuracyA ) -{ - /* ((( variable declarations begin ))) */ - - /* the rectangle vertices */ - int16 rectXMinL, rectXMaxL, rectYMinL, rectYMaxL; - int16 rectIxXMinL, rectIxXMaxL, rectIxYMinL, rectIxYMaxL; - int16 rectShrinkageL; - - /* the BG mean grey value */ - uint8 meanBGGreyBBPL; - uint32 meanBGGreyLevelL; - uint32 meanBGGreyLevelByteL; - int32 meanBGGreyLevelLongL; - - /* maximum reach of the ROI */ - uint32 maxROIReachL; - int16 rOIReachXMinL, rOIReachXMaxL, rOIReachYMinL, rOIReachYMaxL; - int16 rOIReachIxXMinL, rOIReachIxXMaxL, rOIReachIxYMinL, rOIReachIxYMaxL; - int16 ridgeIxLeftL, ridgeIxRightL; - - /* tone down table */ - struct bbs_Int32Arr toneDownFactorsL; /* ToDo: change int32 bpb=[16.16] to uint bpb=[0.16] */ - int32 toneDownFactorPowA; - int32* toneDownFactorsPtrL; - int32 ctrL; - - /* image access */ - int16 iL, jL; - uint8 *imgPtrL = 0; /* welcome back to the stoneage */ - - /* weighting formula */ - int32 weightL, invWeightL; /* R=[0.0...1.0], bpb=[16.16] */ - int32 opSrcL, opBGL, sumL; /* R=[0.0...255.0], bpb=[24,8] */ - - /* ((( variable declarations end ))) */ - - /* make sure that the width is smaller than the rectangle */ - rectShrinkageL = rectShrinkageA; - rectShrinkageL = bbs_min( rectShrinkageL, ( rectA->x2E - rectA->x1E ) >> 1 ); - rectShrinkageL = bbs_min( rectShrinkageL, ( rectA->y2E - rectA->y1E ) >> 1 ); - - /* shrink rectangle. the result is called the ROI */ - rectXMinL = rectA->x1E + rectShrinkageL; - rectXMaxL = rectA->x2E - rectShrinkageL; - rectYMinL = rectA->y1E + rectShrinkageL; - rectYMaxL = rectA->y2E - rectShrinkageL; - - rectIxXMinL = bbs_max( rectXMinL, 0 ); - rectIxXMinL = bbs_min( rectIxXMinL, ( int16 ) imgA->widthE ); - rectIxXMaxL = bbs_min( rectXMaxL, ( int16 ) imgA->widthE ); - rectIxXMaxL = bbs_max( rectIxXMaxL, 0 ); - - rectIxYMinL = bbs_max( rectYMinL, 0 ); - rectIxYMinL = bbs_min( rectIxYMinL, ( int16 ) imgA->heightE ); - rectIxYMaxL = bbs_min( rectYMaxL, ( int16 ) imgA->heightE ); - rectIxYMaxL = bbs_max( rectIxYMaxL, 0 ); - - /* exit function at exceptional cases */ - if ( ( imgA->heightE == 0 ) || ( imgA->widthE == 0 ) ) return; - if ( rectShrinkageL == 0 ) return; - - /* compute the mean gray level aloong the rectangle contour */ - bim_ToneDownBGSupp_BGGreyLevelContour( imgA, rectA, &meanBGGreyLevelL ); - - /* printf( "new mean BG gray value = %f \n", ( float ) meanBGGreyLevelL / 65536.0f ); */ - - /* R=[0.0...255.0], bpb=[24.8] */ - meanBGGreyBBPL = 16; - meanBGGreyLevelL = ( 128 << meanBGGreyBBPL ); - meanBGGreyLevelByteL = meanBGGreyLevelL >> meanBGGreyBBPL; - meanBGGreyLevelLongL = ( 128 << meanBGGreyBBPL ); - /* ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo ToDo */ - - /* this function computes an image that moving away from the ROI gradually fades to - * the background grey level BG according to the formula - * tonedImg = w srcImg + (1-w) BG - * w depends on the distance to the ROI. - * there is a distance maxROIReachL beyond which - * the importance of the source image - * relative to the BG in the equation - * falls below a small threshold. - * in those regions the toned image is equal to - * the mean BG grey value. i.e. w=0, tonedImg = BG */ - maxROIReachL = bbs_max( imgA->widthE, imgA->heightE ); - - /* pre-compute an array of tone down factors. R=[0.0...1.0] => bpb=[0.16] (idealy, bpb=[16.16] due to missing uInt16Arr ) */ - bbs_Int32Arr_init( &toneDownFactorsL ); - bbs_Int32Arr_size( &toneDownFactorsL, maxROIReachL ); - toneDownFactorPowA = toneDownFactorA; - toneDownFactorsPtrL = toneDownFactorsL.arrPtrE; - for( ctrL = 0; ctrL < ( int32 ) maxROIReachL && toneDownFactorPowA > cutOffAccuracyA; ctrL++ ) - { - toneDownFactorsPtrL[ ctrL ] = toneDownFactorPowA; - toneDownFactorPowA = toneDownFactorPowA * ( toneDownFactorA >> 1 ); - toneDownFactorPowA = toneDownFactorPowA >> 15; - - /* make active to check the error that accumulates by recursively multiplying factors */ - /* printf( "pow = %d, tonedown dec = %d, tonedown float = %f \n", ctrL + 2, toneDownFactorPowA, toneDownFactorPowA / 65536.0f ); */ - } - maxROIReachL = ctrL; - /* printf( "maxROIReachL = %d, tonedown = %d \n", maxROIReachL, toneDownFactorPowA ); */ - - /* move across the image one row at a time. - * (1) fill the outside frame with BG grey level - * (2) blend in the original image moving towards the ROI - */ - - rOIReachXMinL = rectXMinL - ( int32 ) maxROIReachL; - rOIReachXMaxL = rectXMaxL + ( int32 ) maxROIReachL; - rOIReachYMinL = rectYMinL - ( int32 ) maxROIReachL; - rOIReachYMaxL = rectYMaxL + ( int32 ) maxROIReachL; - - rOIReachIxXMinL = bbs_max( rOIReachXMinL, ( int16 ) 0 ); - rOIReachIxXMinL = bbs_min( rOIReachIxXMinL, ( int16 ) imgA->widthE ); - rOIReachIxXMaxL = bbs_min( rOIReachXMaxL, ( int16 ) imgA->widthE ); - rOIReachIxXMaxL = bbs_max( rOIReachIxXMaxL, ( int16 ) 0 ); - - rOIReachIxYMinL = bbs_max( rOIReachYMinL, ( int16 ) 0 ); - rOIReachIxYMinL = bbs_min( rOIReachIxYMinL, ( int16 ) imgA->heightE ); - rOIReachIxYMaxL = bbs_min( rOIReachYMaxL, ( int16 ) imgA->heightE ); - rOIReachIxYMaxL = bbs_max( rOIReachIxYMaxL, ( int16 ) 0 ); - - /* (1) far from the ROI the image is filled with the BG grey value */ - - imgPtrL = 0; - for ( jL = 0; jL < rOIReachYMinL; jL++ ) - { - imgPtrL = &( imgA->arrE.arrPtrE[ jL * imgA->widthE ] ); - for ( iL = 0; iL <= ( int16 ) imgA->widthE; iL++ ) - { - imgPtrL[ iL ] = meanBGGreyLevelByteL; - } - } - for ( jL = rOIReachYMaxL; jL < ( int16 ) imgA->heightE; jL++ ) - { - imgPtrL = &( imgA->arrE.arrPtrE[ jL * imgA->widthE ] ); - for ( iL = 0; iL <= ( int16 ) imgA->widthE; iL++ ) - { - imgPtrL[ iL ] = meanBGGreyLevelByteL; - } - } - for ( jL = rOIReachIxYMinL; jL < rOIReachIxYMaxL; jL++ ) - { - imgPtrL = &( imgA->arrE.arrPtrE[ jL * imgA->widthE ] ); - for ( iL = 0; iL < rOIReachXMinL; iL++ ) - { - imgPtrL[ iL ] = meanBGGreyLevelByteL; - } - for ( iL = rOIReachXMaxL; iL < ( int16 ) imgA->widthE; iL++ ) - { - imgPtrL[ iL ] = meanBGGreyLevelByteL; - } - } - - /* (2) blend from ROI to outside regions */ - - for ( jL = rOIReachIxYMinL; jL < rectIxYMinL; jL++ ) - { - /* the factor for one row is a constant */ - weightL = ( int32 ) toneDownFactorsPtrL[ maxROIReachL - 1 - ( jL - rOIReachYMinL ) ]; - invWeightL = 0x00010000 - weightL; - opBGL = ( meanBGGreyLevelLongL >> 9 ) * invWeightL; /* result is bpb=[8,24] */ - opBGL = opBGL >> 7; - imgPtrL = &( imgA->arrE.arrPtrE[ jL * imgA->widthE ] ); - - /* compute the ridge position */ - ridgeIxLeftL = bbs_max( 0, rOIReachXMinL + jL - rOIReachYMinL ); - ridgeIxRightL = bbs_min( ( int16 ) imgA->widthE - 1, rOIReachXMaxL - 1 - ( jL - rOIReachYMinL ) ); - - /* loop over all elements from left ridge through right ridge */ - for ( iL = ridgeIxLeftL; iL <= ridgeIxRightL; iL++ ) - { - opSrcL = imgPtrL[ iL ]; /* leave at byte */ - opSrcL = opSrcL * weightL; /* result is bpb=[16,16] */ - sumL = opSrcL + opBGL; /* OF impossible */ - imgPtrL[ iL ] = sumL >> 16; /* round to byte */ - } - } - for ( jL = rOIReachIxYMaxL - 1; jL >= rectIxYMaxL; jL-- ) - { - /* the factor for one row is a constant */ - weightL = ( int32 ) toneDownFactorsPtrL[ maxROIReachL - 1 - ( rOIReachYMaxL - 1 - jL ) ]; - invWeightL = 0x00010000 - weightL; - opBGL = ( meanBGGreyLevelLongL >> 9 ) * invWeightL; /* result is bpb=[8,24] */ - opBGL = opBGL >> 7; - imgPtrL = &( imgA->arrE.arrPtrE[ jL * imgA->widthE ] ); - - /* compute the ridge position */ - ridgeIxLeftL = bbs_max( 0, rOIReachXMinL + ( rOIReachYMaxL - 1 - jL ) ); - ridgeIxRightL = bbs_min( ( int16 ) imgA->widthE - 1, rOIReachXMaxL - 1 - ( rOIReachYMaxL - 1 - jL ) ); - - /* loop over all elements from left ridge through right ridge */ - for ( iL = ridgeIxLeftL; iL <= ridgeIxRightL; iL++ ) - { - opSrcL = imgPtrL[ iL ]; /* leave at byte */ - opSrcL = opSrcL * weightL; /* result is bpb=[16,16] */ - sumL = opSrcL + opBGL; /* OF impossible */ - imgPtrL[ iL ] = sumL >> 16; /* round to byte */ - } - } - for ( jL = rOIReachIxYMinL; jL < rOIReachIxYMaxL; jL++ ) - { - imgPtrL = &( imgA->arrE.arrPtrE[ jL * imgA->widthE ] ); - - ridgeIxLeftL = bbs_min( rOIReachXMinL + ( jL - rOIReachYMinL ) - 1, rectXMinL - 1 ); - ridgeIxLeftL = bbs_min( ridgeIxLeftL, rOIReachXMinL + ( rOIReachYMaxL - 1 - jL ) - 1 ); - for ( iL = rOIReachIxXMinL; iL <= ridgeIxLeftL; iL++ ) - { - weightL = ( int32 ) toneDownFactorsPtrL[ maxROIReachL - 1 - ( iL - rOIReachXMinL ) ]; - invWeightL = 0x00010000 - weightL; - opBGL = ( meanBGGreyLevelLongL >> 9 ) * invWeightL; /* result is bpb=[16,16] */ - opBGL = opBGL >> 7; - - opSrcL = imgPtrL[ iL ]; /* leave at byte */ - opSrcL = opSrcL * weightL; /* result is bpb=[16,16] */ - sumL = opSrcL + opBGL; /* OF impossible */ - imgPtrL[ iL ] = sumL >> 16; /* round to byte */ - } - - ridgeIxRightL = bbs_max( rOIReachXMaxL - 1 - ( jL - rOIReachYMinL ) + 1 , rectXMaxL ); - ridgeIxRightL = bbs_max( ridgeIxRightL, rOIReachXMaxL - 1 - ( rOIReachYMaxL - 1 - jL ) + 1 ); - for ( iL = ridgeIxRightL; iL < rOIReachIxXMaxL; iL++ ) - { - weightL = ( int32 ) toneDownFactorsPtrL[ iL - rectXMaxL ]; - invWeightL = 0x00010000 - weightL; - opBGL = ( meanBGGreyLevelLongL >> 9 ) * invWeightL; /* result is bpb=[16,16] */ - opBGL = opBGL >> 7; - - opSrcL = imgPtrL[ iL ]; /* leave at byte */ - opSrcL = opSrcL * weightL; /* result is bpb=[16,16] */ - sumL = opSrcL + opBGL; /* OF impossible */ - imgPtrL[ iL ] = sumL >> 16; /* round to byte */ - } - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/Embedded/common/src/b_ImageEm/ToneDownBGSupp.h b/Embedded/common/src/b_ImageEm/ToneDownBGSupp.h deleted file mode 100644 index 8ac76be..0000000 --- a/Embedded/common/src/b_ImageEm/ToneDownBGSupp.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_TONE_DOWN_BG_SUPP_EM_H -#define bim_TONE_DOWN_BG_SUPP_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_ImageEm/UInt8Image.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes the mean BG gray level outside of the rectangle */ -void bim_ToneDownBGSupp_BGGreyLevelOutside( struct bim_UInt8Image* imgA, - struct bts_Int16Rect* rectA, - int16 rectExpansionA, /* this is a remnant of the original c++ class */ - uint32* meanBGGrayLevelA ); /* was mistakenly converted to c */ - -/** computes the mean BG gray level right on the rectangle contours */ -void bim_ToneDownBGSupp_BGGreyLevelContour( struct bim_UInt8Image* imgA, - struct bts_Int16Rect* rectA, - uint32* meanBGGrayLevelA ); - -/** attenuates the image away from the rectangle boundary */ -void bim_ToneDownBGSupp_suppress( struct bim_UInt8Image* imgA, - struct bts_Int16Rect* rectA, - int16 rectShrinkageA, - int32 toneDownFactorA, /* bpb = [16.16] */ - int32 cutOffAccuracyA ); /* bpb = [16.16], put in 0 for highest accuracy */ - -#endif /* bim_TONE_DOWN_BG_SUPP_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/UInt16ByteImage.c b/Embedded/common/src/b_ImageEm/UInt16ByteImage.c deleted file mode 100644 index e6c6ba2..0000000 --- a/Embedded/common/src/b_ImageEm/UInt16ByteImage.c +++ /dev/null @@ -1,876 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_ImageEm/UInt16ByteImage.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_init( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA ) -{ - bbs_UInt16Arr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_exit( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA ) -{ - bbs_UInt16Arr_exit( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_copy( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.sizeE < srcPtrA->arrE.sizeE ) - { - bbs_ERROR0( "void bim_UInt16ByteImage_copy( struct bim_UInt16ByteImage*, const struct bim_UInt16ByteImage* ):\n" - "Unsufficient allocated memory in destination image" ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - bbs_UInt16Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_UInt16ByteImage_equal( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - return bbs_UInt16Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16ByteImage_checkSum( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA ) -{ - uint32 sumL =0 ; - uint32 iL; - uint32 sizeL = ptrA->arrE.sizeE; - const uint16* ptrL = ptrA->arrE.arrPtrE; - for( iL =0; iL < sizeL; iL++ ) - { - sumL += *ptrL++; - } - return sumL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_create( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( widthA & 1 ) - { - bbs_ERROR0( "bim_UInt16ByteImage_create( .... ): width of image must be even" ); - return; - } - - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_UInt16ByteImage_size( cpA, ptrA, widthA, heightA ); - } - else - { - bbs_UInt16Arr_create( cpA, &ptrA->arrE, ( widthA * heightA ) >> 1, mspA ); - ptrA->widthE = widthA; - ptrA->heightE = heightA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_assignExternalImage( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - struct bim_UInt16ByteImage* srcPtrA ) -{ - struct bbs_MemSeg sharedSegL = bbs_MemSeg_createShared( cpA, srcPtrA->arrE.arrPtrE, ( srcPtrA->widthE * srcPtrA->heightE ) / 2 ); - - if( ptrA->arrE.arrPtrE != 0 ) - { - bbs_ERROR0( "void bim_UInt16ByteImage_assignExternalImage( ... ): image was already created once" ); - return; - } - - bim_UInt16ByteImage_create( cpA, ptrA, - srcPtrA->widthE, - srcPtrA->heightE, - &sharedSegL ); -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_size( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - uint32 widthA, uint32 heightA ) -{ - if( widthA & 1 ) - { - bbs_ERROR0( "bim_UInt16ByteImage_size( .... ): width of image must be even" ); - return; - } - - if( ptrA->arrE.allocatedSizeE < ( ( widthA * heightA ) >> 1 ) ) - { - bbs_ERROR0( "void bim_UInt16ByteImage_size( struct bim_UInt16ByteImage*, uint32 sizeA ):\n" - "Unsufficient allocated memory" ); - return; - } - bbs_UInt16Arr_size( cpA, &ptrA->arrE, ( widthA * heightA ) >> 1 ); - ptrA->widthE = widthA; - ptrA->heightE = heightA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16ByteImage_memSize( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_UInt16Arr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16ByteImage_memWrite( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_UInt16ByteImage_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_UINT16_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - bbs_UInt16Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16ByteImage_memRead( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL, widthL, heightL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_UINT16_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &widthL, memPtrA ); - memPtrA += bbs_memRead32( &heightL, memPtrA ); - - ptrA->widthE = widthL; - ptrA->heightE = heightL; - bbs_UInt16Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_UInt16ByteImage_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_UInt16ByteImage_memRead( const struct bim_UInt16ByteImage* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16ByteImage_setAllPixels( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - uint16 valueA ) -{ - long iL; - uint16* ptrL = ptrA->arrE.arrPtrE; - uint16 fillL = ( valueA & 0x0FF ) | ( ( valueA & 0x0FF ) << 8 ); - for( iL = ptrA->arrE.sizeE; iL > 0; iL-- ) - { - *ptrL++ = fillL; - } -} - -/* ------------------------------------------------------------------------- */ - -/** - M-------------------------------------------------------M - | | | | - | | | | - | | | | - | | | | - | region x0y0 | region x1y0 | region x2y0 | - | | | | - | | | | - | | | | - |---------------I-----------------------I---------------| - | | | | - | | | | - | | | | - | | | | - | | | | - | | | | - | region x0y1 | region x1y1 | region x2y1 | - | | | | - | | | | - | | | | - | | | | - | | | | - | | | | - | | | | - |---------------I-----------------------I---------------| - | | | | - | | | | - | | | | - | | | | - | region x0y2 | region x1y2 | region x2y2 | - | | | | - | | | | - | | | | - M-------------------------------------------------------M - - - To see how the code is organized. Refer to the diagram above. - Assume the original image after applying the tranzformations(translation, rotation and scaling) is "O" - (boundaries of the image are shown above bounded by the letter 'O'). - This image is being Warped to the area "M" (boundaries of this area are bounded by the letter 'M'). - - Refer to the source code below to point to the loop that maps pixels in the particular region. -*/ - -/** applies affine linear warping to pixels positions of imageA before copying the into *ptrA */ -void bim_UInt16ByteImage_warp( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ) -{ - long srcWidthL = srcPtrA->widthE; - long srcHeightL = srcPtrA->heightE; - long halfSrcWidthL = srcWidthL >> 1; - - struct bts_Flt16Alt2D invAlt2DL; - - uint16* dstPtrL; - const uint16* ulPtrL = srcPtrA->arrE.arrPtrE; - const uint16* urPtrL = ulPtrL + halfSrcWidthL - 1; - const uint16* llPtrL = ulPtrL + ( srcHeightL - 1 ) * halfSrcWidthL; - const uint16* lrPtrL = llPtrL + halfSrcWidthL - 1; - - uint32 iL, jL; - int32 shiftL; - - const uint16 bbpL = 16; - int32 maxInt32Value8bbpL = 0x7FFFFFFF; - - /* The bbp for all these variables is the same as bbpL */ - int32 mxxL; - int32 mxyL; - int32 myxL; - int32 myyL; - - int32 txL; - int32 tyL; - - int32 xL; - int32 yL; - - bim_UInt16ByteImage_size( cpA, ptrA, resultWidthA, resultHeightA ); - dstPtrL = ptrA->arrE.arrPtrE; - - /* compute inverse */ - invAlt2DL = bts_Flt16Alt2D_inverted( altPtrA ); - - if( srcWidthL == 0 || srcHeightL == 0 ) - { - bim_UInt16ByteImage_size( cpA, ptrA, srcWidthL, srcHeightL ); - bbs_ERROR2( "Size of output image is %d/%d", srcWidthL, srcHeightL ); - return; - } - - /* align Matrix and Vector to 8 bits bbp */ - shiftL = invAlt2DL.matE.bbpE - bbpL; - if( shiftL >= 0 ) - { - mxxL = ( int32 )invAlt2DL.matE.xxE >> shiftL; - mxyL = ( int32 )invAlt2DL.matE.xyE >> shiftL; - myxL = ( int32 )invAlt2DL.matE.yxE >> shiftL; - myyL = ( int32 )invAlt2DL.matE.yyE >> shiftL; - } - else - { - /* Check for overflow since we are left shifting. */ - maxInt32Value8bbpL >>= -shiftL; - if( invAlt2DL.matE.xxE > maxInt32Value8bbpL || - invAlt2DL.matE.xyE > maxInt32Value8bbpL || - invAlt2DL.matE.yxE > maxInt32Value8bbpL || - invAlt2DL.matE.yyE > maxInt32Value8bbpL ) - { - /* Overflow error */ - bbs_ERROR5( "The values in the transformation matrix cause overflow during bitshift\n%d, %d,\n%d, %d\n" - "The maximum allowed value is %d", - invAlt2DL.matE.xxE >> invAlt2DL.matE.bbpE, - invAlt2DL.matE.xyE >> invAlt2DL.matE.bbpE, - invAlt2DL.matE.yxE >> invAlt2DL.matE.bbpE, - invAlt2DL.matE.yyE >> invAlt2DL.matE.bbpE, - maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) ); - return; - } - - mxxL = ( int32 )invAlt2DL.matE.xxE << -shiftL; - mxyL = ( int32 )invAlt2DL.matE.xyE << -shiftL; - myxL = ( int32 )invAlt2DL.matE.yxE << -shiftL; - myyL = ( int32 )invAlt2DL.matE.yyE << -shiftL; - maxInt32Value8bbpL <<= -shiftL; - } - invAlt2DL.matE.bbpE = bbpL; - - shiftL = invAlt2DL.vecE.bbpE - bbpL; - if( shiftL >= 0 ) - { - txL = ( int32 )invAlt2DL.vecE.xE >> shiftL; - tyL = ( int32 )invAlt2DL.vecE.yE >> shiftL; - } - else - { - /* Check for overflow since we are left shifting. */ - maxInt32Value8bbpL >>= -shiftL; - if( invAlt2DL.vecE.xE > maxInt32Value8bbpL || - invAlt2DL.vecE.yE > maxInt32Value8bbpL ) - { - /* Overflow error */ - bbs_ERROR3( "The values in the vector cause overflow during bitshift\n%d, %d,\n" - "The maximum allowed value is %d", - invAlt2DL.vecE.xE >> invAlt2DL.vecE.bbpE, - invAlt2DL.vecE.yE >> invAlt2DL.vecE.bbpE, - maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) ); - return; - } - txL = ( int32 )invAlt2DL.vecE.xE << -shiftL; - tyL = ( int32 )invAlt2DL.vecE.yE << -shiftL; - maxInt32Value8bbpL <<= -shiftL; - } - invAlt2DL.vecE.bbpE = bbpL; - - /* For each destination pixel find the correspoding source pixel by applying the inverse transformation */ - for( jL = 0; jL < ptrA->heightE; jL++ ) - { - xL = txL + mxyL * jL; - yL = tyL + myyL * jL; - for( iL = 0; iL < ptrA->widthE; iL++ ) - { - const uint16 bbpLby2L = bbpL / 2; - const int32 oneL = ( int32 )0x00000001 << bbpLby2L; - const int32 fractionOnlyL = 0xFFFFFFFF >> ( 32 - bbpL ); - uint16 dstPixelL; - - /* The bbp for all these variables is the same as bbpLby2L */ - int32 f2xL; - int32 f2yL; - int32 f1xL; - int32 f1yL; - - /* always whole numbers with a bbp of 0 */ - int32 kL, khL; - int32 lL; - - flag kEvenL; - - /* The bbpE for these variables is bbpLby2L */ - int32 valL; - - /* Get the whole numbers only and make the bbp 0. */ - kL = xL >> bbpL; - lL = yL >> bbpL; - - khL = kL >> 1; - kEvenL = !( kL & 1 ); - - /* fraction of destination pixel in the next source pixel */ - f2xL = ( xL & fractionOnlyL ) >> bbpLby2L; - f2yL = ( yL & fractionOnlyL ) >> bbpLby2L; - /* fraction of destination pixel in the current source pixel */ - f1xL = oneL - f2xL; - f1yL = oneL - f2yL; - - /* increment values for next loop */ - xL += mxxL; - yL += myxL; - - if( lL < 0 ) - { - if( kL < 0 ) - { - /* handle all pixels in region x0y0 */ - dstPixelL = *ulPtrL & 0x0FF; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y0 */ - dstPixelL = *urPtrL >> 8; - } - else - { - /* handle all pixels in region x1y0 */ - /* The bbp has shifted left by bbpLby2L */ - if( kEvenL ) - { - uint16 srcL = *( ulPtrL + khL ); - valL = f1xL * ( srcL & 0x00FF ) + f2xL * ( srcL >> 8 ); - } - else - { - valL = f1xL * ( *( ulPtrL + khL ) >> 8 ) + f2xL * ( *( ulPtrL + khL + 1 ) & 0x0FF ); - } - dstPixelL = valL >> bbpLby2L; - } - } /* if( lL < 0 ) */ - else if( lL >= srcHeightL - 1 ) - { - if( kL < 0 ) - { - /* handle all pixels in region x0y2 */ - dstPixelL = *llPtrL & 0x0FF; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y2 */ - dstPixelL = *lrPtrL >> 8; - } - else - { - /* handle all pixels in region x1y2 */ - /* The bbp has shifted left by bbpLby2L */ - if( kEvenL ) - { - uint16 srcL = *( llPtrL + khL ); - valL = f1xL * ( srcL & 0x00FF ) + f2xL * ( srcL >> 8 ); - } - else - { - valL = f1xL * ( *( llPtrL + khL ) >> 8 ) + f2xL * ( *( llPtrL + khL + 1 ) & 0x0FF ); - } - - dstPixelL = valL >> bbpLby2L; - } - } /* if( lL >= srcHeightL - 1 ) */ - else - { - const uint16* ptr1L; - const uint16* ptr2L; - - ptr1L = ulPtrL + lL * halfSrcWidthL; - /* point to the pixel in the same column */ - ptr2L = ptr1L + halfSrcWidthL; - if( kL < 0 ) - { - /* handle all pixels in region x0y1 */ - valL = f1yL * ( *ptr1L & 0x0FF ) + f2yL * ( *ptr2L & 0x0FF ); - dstPixelL = valL >> bbpLby2L; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y1 */ - valL = f1yL * ( *( ptr1L + halfSrcWidthL - 1 ) >> 8 ) + - f2yL * ( *( ptr2L + halfSrcWidthL - 1 ) >> 8 ); - dstPixelL = valL >> bbpLby2L; - } - else - { - /* assuming that bbpL = bbpLby2 * 2 */ - /* The bbp for these variables is bbpL */ - int32 v1L; - int32 v2L; - const int32 halfL = ( int32 )0x00000001 << ( bbpL - 1 ); - - /* handle all pixels in region x1y1 */ - if( kEvenL ) - { - #ifdef HW_BIG_ENDIAN - /* Our images are in byte order for big & little endian so when using a - 16bit ptr our bytes will be swapped on big endian hardware shift and mask*/ - v1L = f1xL * ( *( ptr1L + khL ) >> 8 ) + f2xL * ( *( ptr1L + khL ) & 0x0FF ); - v2L = f1xL * ( *( ptr2L + khL ) >> 8 ) + f2xL * ( *( ptr2L + khL ) & 0x0FF ); - #else - v1L = f1xL * ( *( ptr1L + khL ) & 0x0FF ) + f2xL * ( *( ptr1L + khL ) >> 8 ); - v2L = f1xL * ( *( ptr2L + khL ) & 0x0FF ) + f2xL * ( *( ptr2L + khL ) >> 8 ); - #endif - } - else - { - #ifdef HW_BIG_ENDIAN - v1L = f1xL * ( *( ptr1L + khL ) & 0x0FF ) + f2xL * ( *( ptr1L + khL + 1 ) >> 8 ); - v2L = f1xL * ( *( ptr2L + khL ) & 0x0FF ) + f2xL * ( *( ptr2L + khL + 1 ) >> 8 ); - #else - v1L = f1xL * ( *( ptr1L + khL ) >> 8 ) + f2xL * ( *( ptr1L + khL + 1 ) & 0x0FF ); - v2L = f1xL * ( *( ptr2L + khL ) >> 8 ) + f2xL * ( *( ptr2L + khL + 1 ) & 0x0FF ); - #endif - } - /* adding the half to round off the resulting value */ - valL = v1L * f1yL + v2L * f2yL + halfL; - dstPixelL = valL >> bbpL; - } - } - - if( iL & 1 ) - { - #ifdef HW_BIG_ENDIAN - *dstPtrL |= dstPixelL & 0x0FF; - #else - *dstPtrL |= dstPixelL << 8; - #endif - dstPtrL++; - } - else - { - #ifdef HW_BIG_ENDIAN - *dstPtrL = dstPixelL << 8; - #else - *dstPtrL = dstPixelL & 0x0FF; - #endif - } - - } /* iL loop */ - } /* jL loop */ - -} - -/* ------------------------------------------------------------------------- */ - -#ifndef HW_TMS320C5x /* 16bit architecture excluded */ - -void bim_UInt16ByteImage_warp8( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ) -{ - long srcWidthL = srcPtrA->widthE; - long srcHeightL = srcPtrA->heightE; - - struct bts_Flt16Alt2D invAlt2DL; - - uint8* dstPtrL; - const uint8* ulPtrL = ( const uint8* )srcPtrA->arrE.arrPtrE; - const uint8* urPtrL = ulPtrL + srcWidthL - 1; - const uint8* llPtrL = ulPtrL + ( srcHeightL - 1 ) * srcWidthL; - const uint8* lrPtrL = llPtrL + srcWidthL - 1; - - uint32 iL, jL; - int32 shiftL; - - const uint16 bbpL = 16; - int32 maxInt32Value8bbpL = 0x7FFFFFFF; - - /* The bbp for all these variables is the same as bbpL */ - int32 mxxL; - int32 mxyL; - int32 myxL; - int32 myyL; - - int32 txL; - int32 tyL; - - int32 xL; - int32 yL; - - bim_UInt16ByteImage_size( cpA, ptrA, resultWidthA, resultHeightA ); - dstPtrL = ( uint8* )ptrA->arrE.arrPtrE; - - /* compute inverse */ - invAlt2DL = bts_Flt16Alt2D_inverted( altPtrA ); - - if( srcWidthL == 0 || srcHeightL == 0 ) - { - bbs_ERROR2( "Size of output image is %d/%d", srcWidthL, srcHeightL ); - return; - } - - /* align Matrix and Vector to 8 bits bbp */ - shiftL = invAlt2DL.matE.bbpE - bbpL; - if( shiftL >= 0 ) - { - mxxL = ( int32 )invAlt2DL.matE.xxE >> shiftL; - mxyL = ( int32 )invAlt2DL.matE.xyE >> shiftL; - myxL = ( int32 )invAlt2DL.matE.yxE >> shiftL; - myyL = ( int32 )invAlt2DL.matE.yyE >> shiftL; - } - else - { - /* Check for overflow since we are left shifting. */ - maxInt32Value8bbpL >>= -shiftL; - if( invAlt2DL.matE.xxE > maxInt32Value8bbpL || - invAlt2DL.matE.xyE > maxInt32Value8bbpL || - invAlt2DL.matE.yxE > maxInt32Value8bbpL || - invAlt2DL.matE.yyE > maxInt32Value8bbpL ) - { - /* Overflow error */ - bbs_ERROR5( "The values in the transformation matrix cause overflow during bitshift\n%d, %d,\n%d, %d\n" - "The maximum allowed value is %d", - ( int32 )invAlt2DL.matE.xxE >> invAlt2DL.matE.bbpE, - ( int32 )invAlt2DL.matE.xyE >> invAlt2DL.matE.bbpE, - ( int32 )invAlt2DL.matE.yxE >> invAlt2DL.matE.bbpE, - ( int32 )invAlt2DL.matE.yyE >> invAlt2DL.matE.bbpE, - maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) ); - return; - } - - mxxL = ( int32 )invAlt2DL.matE.xxE << -shiftL; - mxyL = ( int32 )invAlt2DL.matE.xyE << -shiftL; - myxL = ( int32 )invAlt2DL.matE.yxE << -shiftL; - myyL = ( int32 )invAlt2DL.matE.yyE << -shiftL; - maxInt32Value8bbpL <<= -shiftL; - } - invAlt2DL.matE.bbpE = bbpL; - - shiftL = invAlt2DL.vecE.bbpE - bbpL; - if( shiftL >= 0 ) - { - txL = ( int32 )invAlt2DL.vecE.xE >> shiftL; - tyL = ( int32 )invAlt2DL.vecE.yE >> shiftL; - } - else - { - /* Check for overflow since we are left shifting. */ - maxInt32Value8bbpL >>= -shiftL; - if( invAlt2DL.vecE.xE > maxInt32Value8bbpL || - invAlt2DL.vecE.yE > maxInt32Value8bbpL ) - { - /* Overflow error */ - bbs_ERROR3( "The values in the vector cause overflow during bitshift\n%d, %d,\n" - "The maximum allowed value is %d", - invAlt2DL.vecE.xE >> invAlt2DL.vecE.bbpE, - invAlt2DL.vecE.yE >> invAlt2DL.vecE.bbpE, - maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) ); - return; - } - txL = ( int32 )invAlt2DL.vecE.xE << -shiftL; - tyL = ( int32 )invAlt2DL.vecE.yE << -shiftL; - maxInt32Value8bbpL <<= -shiftL; - } - invAlt2DL.vecE.bbpE = bbpL; - - /* For each destination pixel find the correspoding source pixel by applying the inverse transformation */ - for( jL = 0; jL < ptrA->heightE; jL++ ) - { - xL = txL + mxyL * jL; - yL = tyL + myyL * jL; - for( iL = 0; iL < ptrA->widthE; iL++ ) - { - const uint16 bbpLby2L = bbpL / 2; - const int32 oneL = ( int32 )0x00000001 << bbpLby2L; - const int32 fractionOnlyL = 0xFFFFFFFF >> ( 32 - bbpL ); - - /* The bbp for all these variables is the same as bbpLby2L */ - int32 f2xL; - int32 f2yL; - int32 f1xL; - int32 f1yL; - - /* always whole numbers with a bbp of 0 */ - int32 kL; - int32 lL; - - /* The bbpE for these variables is bbpLby2L */ - int32 valL; - - /* Get the whole numbers only and make the bbp 0. */ - kL = xL >> bbpL; - lL = yL >> bbpL; - - /* fraction of destination pixel in the next source pixel */ - f2xL = ( xL & fractionOnlyL ) >> bbpLby2L; - f2yL = ( yL & fractionOnlyL ) >> bbpLby2L; - /* fraction of destination pixel in the current source pixel */ - f1xL = oneL - f2xL; - f1yL = oneL - f2yL; - - /* increment values for next loop */ - xL += mxxL; - yL += myxL; - - if( lL < 0 ) - { - if( kL < 0 ) - { - /* handle all pixels in region x0y0 */ - *dstPtrL++ = *ulPtrL; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y0 */ - *dstPtrL++ = *urPtrL; - } - else - { - /* handle all pixels in region x1y0 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *( ulPtrL + kL ) * f1xL + *( ulPtrL + kL + 1 ) * f2xL; - *dstPtrL++ = valL >> bbpLby2L; - } - } /* if( lL < 0 ) */ - else if( lL >= srcHeightL - 1 ) - { - if( kL < 0 ) - { - /* handle all pixels in region x0y2 */ - *dstPtrL++ = *llPtrL; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y2 */ - *dstPtrL++ = *lrPtrL; - } - else - { - /* handle all pixels in region x1y2 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *( llPtrL + kL ) * f1xL + *( llPtrL + kL + 1 ) * f2xL; - *dstPtrL++ = valL >> bbpLby2L; - } - } /* if( lL >= srcHeightL - 1 ) */ - else - { - const uint8* ptr1L; - const uint8* ptr2L; - - ptr1L = ulPtrL + lL * srcWidthL; - /* point to the pixel in the same column */ - ptr2L = ptr1L + srcWidthL; - if( kL < 0 ) - { - /* handle all pixels in region x0y1 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *ptr1L * f1yL + *ptr2L * f2yL ; - *dstPtrL++ = valL >> bbpLby2L; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y1 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *( ptr1L + srcWidthL - 1 ) * f1yL + *( ptr2L + srcWidthL - 1 ) * f2yL; - *dstPtrL++ = valL >> bbpLby2L; - } - else - { - /* assuming that bbpL = bbpLby2 * 2 */ - /* The bbp for these variables is bbpLby2L */ - int32 v1L; - int32 v2L; - /* The bbp for these variables is bbpL */ - const int32 halfL = ( int32 )0x00000001 << ( bbpL - 1 ); - - /* handle all pixels in region x1y1 */ - /* The bbp has shifted left by bbpLby2L */ - v1L = *( ptr1L + kL ) * f1xL + *( ptr1L + kL + 1 ) * f2xL; - v2L = *( ptr2L + kL ) * f1xL + *( ptr2L + kL + 1 ) * f2xL; - /* The bbp has shifted left again by bbpLby2L */ - /* adding the half to round off the resulting value */ - valL = v1L * f1yL + v2L * f2yL + halfL; - *dstPtrL++ = valL >> bbpL; - } - } - } /* iL loop */ - } /* jL loop */ - -} - -#endif - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/UInt16ByteImage.h b/Embedded/common/src/b_ImageEm/UInt16ByteImage.h deleted file mode 100644 index 3e6c0c6..0000000 --- a/Embedded/common/src/b_ImageEm/UInt16ByteImage.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_UINT16_IMAGE_EM_H -#define bim_UINT16_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/UInt16Arr.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_TensorEm/Flt16Alt2D.h" -#include "b_ImageEm/UInt8Image.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_UINT16_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** Packed byte image - * 2 pixels are stored on a 16 bit space. - * Using conventional pixel order, the first pixel is represented by the low-byte. - * A Pixel at position (x,y) can be accessed as follows: - * ( ( arrE.arrE + y * withE + ( x >> 1 ) ) >> ( 8 * ( x & 1 ) ) ) & 0x0FF; - * - * On little endian platforms bim_UInt16ByteImage and bim_UInt8Image - * have the same memory representation of the image data. - */ -struct bim_UInt16ByteImage -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** array of 16bit words */ - struct bbs_UInt16Arr arrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_UInt16ByteImage */ -void bim_UInt16ByteImage_init( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA ); - -/** allocates memory for bim_UInt16ByteImage */ -void bim_UInt16ByteImage_create( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ); - -/** destructor of bim_UInt16ByteImage */ -void bim_UInt16ByteImage_exit( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_UInt16ByteImage_copy( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA ); - -/** equal operator */ -flag bim_UInt16ByteImage_equal( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** checksum of image (for debugging purposes) */ -uint32 bim_UInt16ByteImage_checkSum( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** assigns external image to array (no allocation, deallocation or copying of data) */ -void bim_UInt16ByteImage_assignExternalImage( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - struct bim_UInt16ByteImage* srcPtrA ); - -/** sets image size */ -void bim_UInt16ByteImage_size( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - uint32 widthA, uint32 heightA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bim_UInt16ByteImage_memSize( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bim_UInt16ByteImage_memWrite( struct bbs_Context* cpA, - const struct bim_UInt16ByteImage* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bim_UInt16ByteImage_memRead( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** sets all pixels to one value; higher 8 bits of valueA are ignored */ -void bim_UInt16ByteImage_setAllPixels( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - uint16 valueA ); - -/** applies affine linear warping to pixels positions of imageA before copying the into *ptrA */ -void bim_UInt16ByteImage_warp( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ); - - -#ifndef HW_TMS320C5x /* 16bit architecture excluded */ - -/** applies affine linear warping to pixels positions of ptrA before copying the into *ptrA. - * This function accepts an bim_UInt16ByteImage as input, but uses a faster algorithm - * utilizing 8-bit data access for warping. - * Only available for platforms that allow 8 bit data access. - */ -void bim_UInt16ByteImage_warp8( struct bbs_Context* cpA, - struct bim_UInt16ByteImage* ptrA, - const struct bim_UInt16ByteImage* srcPtrA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ); -#endif /* HW_TMS320C5x */ - -#endif /* bim_UINT16_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/UInt16BytePyrImage.c b/Embedded/common/src/b_ImageEm/UInt16BytePyrImage.c deleted file mode 100644 index e662f21..0000000 --- a/Embedded/common/src/b_ImageEm/UInt16BytePyrImage.c +++ /dev/null @@ -1,416 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_ImageEm/Functions.h" -#include "b_ImageEm/UInt16BytePyrImage.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16BytePyrImage_init( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA ) -{ - bbs_UInt16Arr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->depthE = 0; - ptrA->typeE = bim_UINT16_PYRAMIDAL_IMG; -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16BytePyrImage_exit( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA ) -{ - bbs_UInt16Arr_exit( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->depthE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16BytePyrImage_copy( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - const struct bim_UInt16BytePyrImage* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.allocatedSizeE < srcPtrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_UInt16BytePyrImage_copy( ... ):\n" - "Unsufficient allocated memory in destination image" ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - ptrA->depthE = srcPtrA->depthE; - bbs_UInt16Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_UInt16BytePyrImage_equal( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - const struct bim_UInt16BytePyrImage* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - if( ptrA->depthE != srcPtrA->depthE ) return FALSE; - return bbs_UInt16Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint16* bim_UInt16BytePyrImage_arrPtr( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - uint32 levelA ) -{ - uint32 iL; - uint32 offsL = 0; - uint32 baseSizeL = ( ptrA->widthE * ptrA->heightE ) >> 1; - -#ifdef DEBUG2 - if( levelA >= ptrA->depthE ) - { - bbs_ERROR2( "uint16* bim_UInt16BytePyrImage_arrPtr( struct bim_UInt16BytePyrImage*, uint32 levelA ):\n" - "levelA = %i out of range [0,%i]", levelA, ptrA->depthE - 1 ); - return NULL; - } -#endif - - for( iL = 0; iL < levelA; iL++ ) - { - offsL += ( baseSizeL >> ( iL * 2 ) ); - } - return ptrA->arrE.arrPtrE + offsL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16BytePyrImage_heapSize( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - uint32 widthA, uint32 heightA, - uint32 depthA ) -{ - uint32 baseSizeL = ( widthA * heightA ) >> 1; - uint32 sizeL = 0; - uint32 iL; - for( iL = 0; iL < depthA; iL++ ) - { - sizeL += ( baseSizeL >> ( iL * 2 ) ); - } - return bbs_UInt16Arr_heapSize( cpA, &ptrA->arrE, sizeL ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16BytePyrImage_create( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - uint32 widthA, uint32 heightA, - uint32 depthA, - struct bbs_MemSeg* mspA ) -{ - uint32 baseSizeL = ( widthA * heightA ) >> 1; - uint32 sizeL = 0; - uint32 iL; - - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_UInt16BytePyrImage_size( cpA, ptrA, widthA, heightA, depthA ); - return; - } - -#ifdef DEBUG1 - { - uint32 depthMaskL = ( ( int32 )1 << ( depthA - 1 ) ) - 1; - if( depthA == 0 ) - { - bbs_ERROR0( "void bim_UInt16BytePyrImage_create( struct bim_UInt16BytePyrImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "depthA must be > 0" ); - return; - } - if( ( ( widthA & depthMaskL ) > 0 ) || ( ( heightA & depthMaskL ) > 0 ) ) - { - bbs_ERROR1( "void bim_UInt16BytePyrImage_create( struct bim_UInt16BytePyrImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "widthA and heightA must be divisible by %i", depthMaskL + 1 ); - return; - } - } -#endif - - ptrA->widthE = widthA; - ptrA->heightE = heightA; - ptrA->depthE = depthA; - - for( iL = 0; iL < depthA; iL++ ) - { - sizeL += ( baseSizeL >> ( iL * 2 ) ); - } - bbs_UInt16Arr_create( cpA, &ptrA->arrE, sizeL, mspA ); -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt16BytePyrImage_size( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - uint32 widthA, - uint32 heightA, - uint32 depthA ) -{ - uint32 baseSizeL = ( widthA * heightA ) >> 1; - uint32 sizeL = 0; - uint32 iL; - -#ifdef DEBUG1 - uint32 depthMaskL = ( 1 << ( depthA - 1 ) ) - 1; - if( depthA == 0 ) - { - bbs_ERROR0( "void bim_UInt16BytePyrImage_size( struct bim_UInt16BytePyrImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "depthA must be > 0" ); - return; - } - - if( ( ( widthA & depthMaskL ) > 0 ) || ( ( heightA & depthMaskL ) > 0 ) ) - { - bbs_ERROR1( "void bim_UInt16BytePyrImage_size( struct bim_UInt16BytePyrImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "widthA and heightA must be divisible by %i", depthMaskL + 1 ); - return; - } -#endif - - ptrA->widthE = widthA; - ptrA->heightE = heightA; - ptrA->depthE = depthA; - - for( iL = 0; iL < depthA; iL++ ) - { - sizeL += ( baseSizeL >> ( iL * 2 ) ); - } -#ifdef DEBUG1 - if( sizeL > ptrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_UInt16BytePyrImage_size( struct bim_UInt16BytePyrImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "Insufficient allocated memory." ); - return; - } -#endif - bbs_UInt16Arr_size( cpA, &ptrA->arrE, sizeL ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16BytePyrImage_memSize( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_SIZEOF16( ptrA->depthE ) - + bbs_UInt16Arr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16BytePyrImage_memWrite( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_UInt16BytePyrImage_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_UINT16_PYRAMIDAL_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->depthE, memPtrA ); - bbs_UInt16Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt16BytePyrImage_memRead( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL, widthL, heightL, depthL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_UINT16_PYRAMIDAL_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &widthL, memPtrA ); - memPtrA += bbs_memRead32( &heightL, memPtrA ); - memPtrA += bbs_memRead32( &depthL, memPtrA ); - - ptrA->widthE = widthL; - ptrA->heightE = heightL; - ptrA->depthE = depthL; - bbs_UInt16Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_UInt16BytePyrImage_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_UInt16BytePyrImage_memRead( const struct bim_UInt16BytePyrImage* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -void bim_UInt16BytePyrImage_overlayUInt16( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - struct bim_UInt16ByteImage* uint16ImageA ) -{ - uint16ImageA->widthE = ptrA->widthE; - uint16ImageA->heightE = ptrA->heightE; - uint16ImageA->arrE.sizeE = ptrA->widthE * ptrA->heightE; - uint16ImageA->arrE.allocatedSizeE = ptrA->widthE * ptrA->heightE; - uint16ImageA->arrE.arrPtrE = ptrA->arrE.arrPtrE; - uint16ImageA->arrE.mspE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/** process remaining layers */ -void bim_UInt16BytePyrImage_recompute( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* dstPtrA ) -{ - count_t iL, jL, layerL; - uint16 tmpL; - - uint32 widthL = dstPtrA->widthE; - uint32 halfWidthL = widthL >> 1; - uint32 heightL = dstPtrA->heightE; - - uint16* srcL = dstPtrA->arrE.arrPtrE; - uint16* dstL = srcL + ( heightL * halfWidthL ); - for( layerL = 1; layerL < dstPtrA->depthE; layerL++ ) - { - for( jL = ( heightL >> 1 ); jL > 0; jL-- ) - { - for( iL = ( halfWidthL >> 1 ); iL > 0; iL-- ) - { - /* averaging with rounding */ - tmpL = ( ( *srcL & 0x0FF ) + ( *srcL >> 8 ) + ( *( srcL + halfWidthL ) & 0x0FF ) + - ( *( srcL + halfWidthL ) >> 8 ) + 2 ) >> 2; - #ifdef HW_BIG_ENDIAN - *dstL = tmpL << 8; - #else - *dstL = tmpL; - #endif - srcL++; - - tmpL = ( ( *srcL & 0x0FF ) + ( *srcL >> 8 ) + ( *( srcL + halfWidthL ) & 0x0FF ) + - ( *( srcL + halfWidthL ) >> 8 ) + 2 ) >> 2; - #ifdef HW_BIG_ENDIAN - *dstL |= tmpL; - #else - *dstL |= tmpL << 8; - #endif - srcL++; - dstL++; - } - srcL += halfWidthL; - } - halfWidthL >>= 1; - heightL >>= 1; - } -} - - -/* ------------------------------------------------------------------------- */ - - -void bim_UInt16BytePyrImage_importUInt16( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* dstPtrA, - const struct bim_UInt16ByteImage* srcPtrA, - uint32 depthA ) -{ - - bim_UInt16BytePyrImage_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE, depthA ); - - /* copy first layer */ - bbs_memcpy16( dstPtrA->arrE.arrPtrE, srcPtrA->arrE.arrPtrE, srcPtrA->arrE.sizeE ); - - bim_UInt16BytePyrImage_recompute( cpA, dstPtrA ); -} - - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/UInt16BytePyrImage.h b/Embedded/common/src/b_ImageEm/UInt16BytePyrImage.h deleted file mode 100644 index 168baeb..0000000 --- a/Embedded/common/src/b_ImageEm/UInt16BytePyrImage.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_UINT16_PYR_IMAGE_EM_H -#define bim_UINT16_PYR_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_ImageEm/UInt16ByteImage.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -#define bim_PYRAMIDAL_IMAGE_STANDARD_DEPTH 4 - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_UINT16_PYRAMIDAL_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** Pyramidal image of uint16 (packed bytes). - * - * 2 pixels are stored in one 16-bit word. On a little endian system the - * image data of bim_UInt16BytePyrImage and bim_UInt8PyramidalImage have - * an identical memory representation. - * - * The Pyramidal format is as follows: - * widthE specifies width of first image (image 0) - * heightE specifies height of first image (image 0) - * depthE specifies the number of levels present - * image n has half of the width,heigth nimension of image n-1 - * A pixel of in image n is the average of the corresponding 4 - * covering pixels in image n-1 - * Adresses of data relative to arrE.arrPtrE - * The address of image 0 is 0 - * The address of image 1 is widthE * heightE / 2 - * The address of image n is widthE * heightE / 2 + widthE * heightE / 8 + ... + widthE * heightE * ( 2^-(2*n) ) - * Use function uint16* bim_UInt16BytePyrImage_arrPtr( uint32 levelA ) to obtain adress of image at given depth level - * Use function bim_UInt16BytePyrImage_importUInt8 to create a pyramidal image from an uint8 image -*/ -struct bim_UInt16BytePyrImage -{ - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** depth of image (number of layers) */ - uint32 depthE; - - /** pyramidal image type (temporary: until switch to 16-bit complete) */ - uint32 typeE; - - /** array of bytes */ - struct bbs_UInt16Arr arrE; -}; - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_UInt16BytePyrImage */ -void bim_UInt16BytePyrImage_init( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA ); - -/** allocates memory for bim_UInt16BytePyrImage */ -void bim_UInt16BytePyrImage_create( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - uint32 widthA, uint32 heightA, - uint32 depthA, - struct bbs_MemSeg* mspA ); - -/** frees bim_UInt16BytePyrImage */ -void bim_UInt16BytePyrImage_exit( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_UInt16BytePyrImage_copy( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - const struct bim_UInt16BytePyrImage* srcPtrA ); - -/** equal operator */ -flag bim_UInt16BytePyrImage_equal( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - const struct bim_UInt16BytePyrImage* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns adress of image at given depth level */ -uint16* bim_UInt16BytePyrImage_arrPtr( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - uint32 levelA ); - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bim_UInt16BytePyrImage_heapSize( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - uint32 widthA, - uint32 heightA, - uint32 depthA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** sets image size */ -void bim_UInt16BytePyrImage_size( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - uint32 widthA, - uint32 heightA, - uint32 depthA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bim_UInt16BytePyrImage_memSize( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bim_UInt16BytePyrImage_memWrite( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bim_UInt16BytePyrImage_memRead( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** create overlay bim_Uint16Image (does not own memory) */ -void bim_UInt16BytePyrImage_overlayUInt16( struct bbs_Context* cpA, - const struct bim_UInt16BytePyrImage* ptrA, - struct bim_UInt16ByteImage* uint16ImageA ); - -/** recompute pyramidal format with given depth from data in layer 0 */ -void bim_UInt16BytePyrImage_recompute( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* dstPtrA ); - -/** import uint8image and creates pyramidal format with given depth */ -void bim_UInt16BytePyrImage_importUInt16( struct bbs_Context* cpA, - struct bim_UInt16BytePyrImage* dstPtrA, - const struct bim_UInt16ByteImage* srcPtrA, - uint32 depthA ); - -#endif /* bim_UINT16_PYR_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/UInt32Image.c b/Embedded/common/src/b_ImageEm/UInt32Image.c deleted file mode 100644 index 771f0b8..0000000 --- a/Embedded/common/src/b_ImageEm/UInt32Image.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_ImageEm/UInt32Image.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt32Image_init( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA ) -{ - bbs_UInt32Arr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt32Image_exit( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA ) -{ - bbs_UInt32Arr_exit( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt32Image_copy( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - const struct bim_UInt32Image* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.allocatedSizeE < srcPtrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_UInt32Image_copy(...):\n" - "Unsufficient allocated memory in destination image." ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - bbs_UInt32Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_UInt32Image_equal( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA, - const struct bim_UInt32Image* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - return bbs_UInt32Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt32Image_heapSize( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA, - uint32 widthA, - uint32 heightA ) -{ - return bbs_UInt32Arr_heapSize( cpA, &ptrA->arrE, widthA * heightA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt32Image_checkSum( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA ) -{ - uint32 sumL =0 ; - uint32 iL; - uint32 sizeL = ptrA->arrE.sizeE; - const uint32* ptrL = ptrA->arrE.arrPtrE; - for( iL =0; iL < sizeL; iL++ ) - { - sumL += *ptrL++; - } - return sumL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt32Image_create( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_UInt32Image_size( cpA, ptrA, widthA, heightA ); - } - else - { - bbs_UInt32Arr_create( cpA, &ptrA->arrE, widthA * heightA, mspA ); - ptrA->widthE = widthA; - ptrA->heightE = heightA; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt32Image_assignExternalImage( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - struct bim_UInt32Image* srcPtrA ) -{ - struct bbs_MemSeg sharedSegL = bbs_MemSeg_createShared( cpA, srcPtrA->arrE.arrPtrE, srcPtrA->widthE * srcPtrA->heightE ); - - if( ptrA->arrE.arrPtrE != 0 ) - { - bbs_ERROR0( "void bim_UInt32Image_assignExternalImage( ... ): image was already created once" ); - return; - } - - bim_UInt32Image_create( cpA, - ptrA, - srcPtrA->widthE, - srcPtrA->heightE, - &sharedSegL ); -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt32Image_size( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - uint32 widthA, - uint32 heightA ) -{ - if( ptrA->arrE.allocatedSizeE < widthA * heightA ) - { - bbs_ERROR0( "void bim_UInt32Image_size( struct bim_UInt32Image*, uint32 sizeA ):\n" - "Unsufficient allocated memory" ); - return; - } - ptrA->widthE = widthA; - ptrA->heightE = heightA; - bbs_UInt32Arr_size( cpA, &ptrA->arrE, widthA * heightA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt32Image_memSize( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_UInt32Arr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt32Image_memWrite( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_UInt32Image_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_UINT32_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - bbs_UInt32Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt32Image_memRead( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_UINT32_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->heightE, memPtrA ); - bbs_UInt32Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_UInt32Image_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_UInt32Image_memRead( const struct bim_UInt32Image* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt32Image_setAllPixels( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - uint32 valueA, - int32 bbpA ) -{ - long iL; - uint32* ptrL = ptrA->arrE.arrPtrE; - for( iL = ptrA->widthE * ptrA->heightE; iL > 0; iL-- ) - { - *ptrL++ = valueA; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/UInt32Image.h b/Embedded/common/src/b_ImageEm/UInt32Image.h deleted file mode 100644 index 3d56656..0000000 --- a/Embedded/common/src/b_ImageEm/UInt32Image.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_UINT32_IMAGE_EM_H -#define bim_UINT32_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/UInt32Arr.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_UINT32_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** image of uint32 */ -struct bim_UInt32Image -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** array of bytes */ - struct bbs_UInt32Arr arrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_UInt32Image */ -void bim_UInt32Image_init( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA ); - -/** destroys bim_UInt32Image */ -void bim_UInt32Image_exit( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_UInt32Image_copy( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - const struct bim_UInt32Image* srcPtrA ); - -/** equal operator */ -flag bim_UInt32Image_equal( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA, - const struct bim_UInt32Image* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bim_UInt32Image_heapSize( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA, - uint32 widthA, - uint32 heightA ); - -/** checksum of image (for debugging purposes) */ -uint32 bim_UInt32Image_checkSum( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates memory for bim_UInt32Image */ -void bim_UInt32Image_create( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ); - -/** assigns external image to array (no allocation, deallocation or copying of data) */ -void bim_UInt32Image_assignExternalImage( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - struct bim_UInt32Image* srcPtrA ); - -/** sets image size */ -void bim_UInt32Image_size( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - uint32 widthA, - uint32 heightA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) needs when written to memory */ -uint32 bim_UInt32Image_memSize( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bim_UInt32Image_memWrite( struct bbs_Context* cpA, - const struct bim_UInt32Image* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bim_UInt32Image_memRead( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** sets all pixels to one value */ -void bim_UInt32Image_setAllPixels( struct bbs_Context* cpA, - struct bim_UInt32Image* ptrA, - uint32 valueA, - int32 bbpA ); - -#endif /* bim_UINT32_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/UInt8Image.c b/Embedded/common/src/b_ImageEm/UInt8Image.c deleted file mode 100644 index 39af7ca..0000000 --- a/Embedded/common/src/b_ImageEm/UInt8Image.c +++ /dev/null @@ -1,777 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_ImageEm/UInt8Image.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_init( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA ) -{ - bbs_UInt8Arr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_create( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_UInt8Image_size( cpA, ptrA, widthA, heightA ); - } - else - { - bbs_UInt8Arr_create( cpA, &ptrA->arrE, widthA * heightA, mspA ); - ptrA->widthE = widthA; - ptrA->heightE = heightA; - } -} -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_exit( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA ) -{ - bbs_UInt8Arr_exit( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_copy( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.sizeE < srcPtrA->arrE.sizeE ) - { - bbs_ERROR0( "void bim_UInt8Image_copy( struct bim_UInt8Image*, const struct bim_UInt8Image* ):\n" - "Unsufficient allocated memory in destination image" ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - bbs_UInt8Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_UInt8Image_equal( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - return bbs_UInt8Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8Image_checkSum( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA ) -{ - uint32 sumL =0 ; - uint32 iL; - uint32 sizeL = ptrA->arrE.sizeE; - const uint8* ptrL = ptrA->arrE.arrPtrE; - for( iL =0; iL < sizeL; iL++ ) - { - sumL += *ptrL++; - } - return sumL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_assignExternalImage( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - struct bim_UInt8Image* srcPtrA ) -{ - struct bbs_MemSeg sharedSegL = bbs_MemSeg_createShared( cpA, srcPtrA->arrE.arrPtrE, ( srcPtrA->widthE * srcPtrA->heightE ) / 2 ); - - if( ptrA->arrE.arrPtrE != 0 ) - { - bbs_ERROR0( "void bim_UInt8Image_assignExternalImage( ... ): image was already created once" ); - return; - } - - bim_UInt8Image_create( cpA, ptrA, - srcPtrA->widthE, - srcPtrA->heightE, - &sharedSegL ); -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_size( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - uint32 widthA, - uint32 heightA ) -{ - if( ptrA->arrE.allocatedSizeE < widthA * heightA ) - { - bbs_ERROR0( "void bim_UInt8Image_size( struct bim_UInt8Image*, uint32 sizeA ):\n" - "Unsufficient allocated memory" ); - return; - } - bbs_UInt8Arr_size( cpA, &ptrA->arrE, widthA * heightA ); - ptrA->widthE = widthA; - ptrA->heightE = heightA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8Image_memSize( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_UInt8Arr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8Image_memWrite( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_UInt8Image_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_UINT8_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - bbs_UInt8Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8Image_memRead( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL, widthL, heightL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_UINT8_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &widthL, memPtrA ); - memPtrA += bbs_memRead32( &heightL, memPtrA ); - - ptrA->widthE = widthL; - ptrA->heightE = heightL; - bbs_UInt8Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_UInt8Image_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_UInt8Image_memRead( const struct bim_UInt8Image* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_setAllPixels( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - uint8 valueA ) -{ - long iL; - uint8* ptrL = ptrA->arrE.arrPtrE; - for( iL = ptrA->widthE * ptrA->heightE; iL > 0; iL-- ) - { - *ptrL++ = valueA; - } -} - -/* ------------------------------------------------------------------------- */ - -/** - | | | | - | (loop x1) | (loop x2) | (loop x3) | - o------------->-o------------>--o------------->-o - | | | | - | | | | - | | | | - | | | | - ( sectionL->x1E, sectionL->y1E ) | | ----------o- R-------------------------------|---------------- - | | | | | - | | | | | - | | | | | - | | | | | - (loop y1)| | | | - | | | | | - V | | | | - | | |( 0, 0 ) | | X ----------o------------------I-------------------------------------------------> - | | | | | - | | | | | - | | | | | - | | | | | - | | | | | - (loop y2)| | | | - | | | | | - | | | | | - | | | | | - V | | | | - | | | | | ----------o------------------|---------------I | - | | | ( srcPtrA->widthE, srcPtrA->heightE ) - | | | | - | | | | - | | | | - | | | | - | | | | - (loop y3)| | | - | | | | - | | | | - V | | | - | | | | ----------o--------------------------------------------------R - | ( sectionL->x2E, sectionL->y2E ) - | - Y | - | - | - V - - To understand how the algorithm work refer to the diagram above. - The image boundaries are indicated by letter "I" ( 0, 0 ) to ( srcPtrA->widthE, srcPtrA->heightE ) - The rectangle boundaries are indicated by letter "R" ( sectionPtrA->x1E, sectionPtrA->y1E ) to ( sectionPtrA->x2E, sectionPtrA->y2E ) - - In the above example the intersection of the image and the rectange is - ( 0, 0 ), ( srcPtrA->widthE, srcPtrA->heightE ) - - The size of the destination image is always ( ( sectionL->x2E, sectionL->y2E ) - ( sectionL->x1E, sectionL->y1E ) ) - - All coordinates are assumed to be relative to the original image. - - 1. parse all pixels in "loop y1" - 1.a. parse all pixels in "loop x1" - 1.b. parse all pixels in "loop x2" - 1.c. parse all pixels in "loop x3" - 2. parse all pixels in "loop y2" - 2.a. parse all pixels in "loop x1" - 2.b. parse all pixels in "loop x2" - 2.c. parse all pixels in "loop x3" - 3. parse all pixels in "loop y3" - 3.a. parse all pixels in "loop x1" - 3.b. parse all pixels in "loop x2" - 3.c. parse all pixels in "loop x3" - -*/ - -/** copies a section of given image */ -void bim_UInt8Image_copySection( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ) -{ - - uint8* srcPixelPtrL; - uint8* dstPixelPtrL; - int32 yIndexL; - int32 xIndexL; - - struct bts_Int16Rect srcImageSubSectionL; - struct bts_Int16Rect sectionL; - - /* make sure that the rectangle passed is correct, in case the x2 < x1 or y2 < y1, swap them */ - sectionL.x1E = bbs_min( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.x2E = bbs_max( sectionPtrA->x1E, sectionPtrA->x2E ); - sectionL.y1E = bbs_min( sectionPtrA->y1E, sectionPtrA->y2E ); - sectionL.y2E = bbs_max( sectionPtrA->y1E, sectionPtrA->y2E ); - - /* find the intersection betweem the rectangle and the image, the image always starts at 0,0 */ - srcImageSubSectionL.x1E = bbs_max( 0, sectionL.x1E ); - srcImageSubSectionL.y1E = bbs_max( 0, sectionL.y1E ); - srcImageSubSectionL.x2E = bbs_min( ( int32 ) srcPtrA->widthE, sectionL.x2E ); - srcImageSubSectionL.y2E = bbs_min( ( int32 ) srcPtrA->heightE, sectionL.y2E ); - - /* If the image and the rectangle do not intersect in X direction, set the intersecting rectangle to the image coordinates */ - if( srcImageSubSectionL.x2E < srcImageSubSectionL.x1E ) - { - srcImageSubSectionL.x1E = 0; - srcImageSubSectionL.x2E = srcPtrA->widthE; - } - /* do the same as above in the Y direction */ - if( srcImageSubSectionL.y2E < srcImageSubSectionL.y1E ) - { - srcImageSubSectionL.y1E = 0; - srcImageSubSectionL.y2E = srcPtrA->heightE; - } - - /* set size, and allocate required memory for the destination image if required */ - bim_UInt8Image_size( cpA, ptrA, sectionL.x2E - sectionL.x1E, sectionL.y2E - sectionL.y1E ); - - /* get the pointer to the destination image */ - dstPixelPtrL = ptrA->arrE.arrPtrE; - - /* 1. parse all pixels in "loop y1" */ - for( yIndexL = sectionL.y1E; yIndexL < srcImageSubSectionL.y1E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE; - - /* 1.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 1.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 1.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 2. parse all pixels in "loop y2" */ - for( ; yIndexL < srcImageSubSectionL.y2E && yIndexL < sectionL.y2E; yIndexL++ ) - { - /* move to the first pixel that needs to be copied. */ - srcPixelPtrL = srcPtrA->arrE.arrPtrE + yIndexL * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 2.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 2.b. parse all pixels in "loop x2" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 2.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - /* 3. parse all pixels in "loop y3" */ - for( ; yIndexL < sectionL.y2E; yIndexL++ ) - { - srcPixelPtrL = srcPtrA->arrE.arrPtrE + ( srcImageSubSectionL.y2E - 1 ) * srcPtrA->widthE + srcImageSubSectionL.x1E; - - /* 3.a. parse all pixels in "loop x1" */ - for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - /* 3.b. parse all pixels in "loop x3" */ - for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL++; - } - srcPixelPtrL--; - /* 3.c. parse all pixels in "loop x3" */ - for( ; xIndexL < sectionL.x2E; xIndexL++ ) - { - *dstPixelPtrL++ = *srcPixelPtrL; - } - } - -} - -/* ------------------------------------------------------------------------- */ - -/** - - - M-------------------------------------------------------M - | | | | - | | | | - | | | | - | | | | - | region x0y0 | region x1y0 | region x2y0 | - | | | | - | | | | - | | | | - |---------------I-----------------------I---------------| - | | | | - | | | | - | | | | - | | | | - | | | | - | | | | - | region x0y1 | region x1y1 | region x2y1 | - | | | | - | | | | - | | | | - | | | | - | | | | - | | | | - | | | | - |---------------I-----------------------I---------------| - | | | | - | | | | - | | | | - | | | | - | region x0y2 | region x1y2 | region x2y2 | - | | | | - | | | | - | | | | - M-------------------------------------------------------M - - - To see how the code is organized. Refer to the diagram above. - Assume the original image after applying the tranzformations(translation, rotation and scaling) is "O" - (boundaries of the image are shown above bounded by the letter 'O'). - This image is being Warped to the area "M" (boundaries of this area are bounded by the letter 'M'). - - Refer to the source code below to point to the loop that maps pixels in the particular region. - - */ - -/** applies affine linear warping to pixels positions of imageA before copying the into *ptrA */ -void bim_UInt8Image_warpOffs( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA, - int32 xOffsA, - int32 yOffsA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ) -{ - long srcWidthL = srcPtrA->widthE; - long srcHeightL = srcPtrA->heightE; - - struct bts_Flt16Alt2D invAlt2DL; - - uint8* dstPtrL; - const uint8* ulPtrL = srcPtrA->arrE.arrPtrE; - const uint8* urPtrL = ulPtrL + srcWidthL - 1; - const uint8* llPtrL = ulPtrL + ( srcHeightL - 1 ) * srcWidthL; - const uint8* lrPtrL = llPtrL + srcWidthL - 1; - - uint32 iL, jL; - int32 shiftL; - - const uint16 bbpL = 16; - int32 maxInt32Value8bbpL = 0x7FFFFFFF; - - /* The bbp for all these variables is the same as bbpL */ - int32 mxxL; - int32 mxyL; - int32 myxL; - int32 myyL; - - int32 txL; - int32 tyL; - - int32 xL; - int32 yL; - - bim_UInt8Image_size( cpA, ptrA, resultWidthA, resultHeightA ); - dstPtrL = ptrA->arrE.arrPtrE; - - /* compute inverse */ - invAlt2DL = bts_Flt16Alt2D_inverted( altPtrA ); - - if( srcWidthL == 0 || srcHeightL == 0 ) - { - bim_UInt8Image_size( cpA, ptrA, srcWidthL, srcHeightL ); - bbs_ERROR2( "Size of output image is %d/%d", srcWidthL, srcHeightL ); - return; - } - - /* align Matrix and Vector to 8 bits bbp */ - shiftL = invAlt2DL.matE.bbpE - bbpL; - if( shiftL >= 0 ) - { - mxxL = invAlt2DL.matE.xxE >> shiftL; - mxyL = invAlt2DL.matE.xyE >> shiftL; - myxL = invAlt2DL.matE.yxE >> shiftL; - myyL = invAlt2DL.matE.yyE >> shiftL; - } - else - { - /* Check for overflow since we are left shifting. */ - maxInt32Value8bbpL >>= -shiftL; - if( invAlt2DL.matE.xxE > maxInt32Value8bbpL || - invAlt2DL.matE.xyE > maxInt32Value8bbpL || - invAlt2DL.matE.yxE > maxInt32Value8bbpL || - invAlt2DL.matE.yyE > maxInt32Value8bbpL ) - { - /* Overflow error */ - bbs_ERROR5( "The values in the transformation matrix cause overflow during bitshift\n%d, %d,\n%d, %d\n" - "The maximum allowed value is %d", - invAlt2DL.matE.xxE >> invAlt2DL.matE.bbpE, - invAlt2DL.matE.xyE >> invAlt2DL.matE.bbpE, - invAlt2DL.matE.yxE >> invAlt2DL.matE.bbpE, - invAlt2DL.matE.yyE >> invAlt2DL.matE.bbpE, - maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) ); - return; - } - - mxxL = invAlt2DL.matE.xxE << -shiftL; - mxyL = invAlt2DL.matE.xyE << -shiftL; - myxL = invAlt2DL.matE.yxE << -shiftL; - myyL = invAlt2DL.matE.yyE << -shiftL; - maxInt32Value8bbpL <<= -shiftL; - } - - /* invAlt2DL.matE.bbpE = bbpL; nonsense! */ - - shiftL = invAlt2DL.vecE.bbpE - bbpL; - if( shiftL >= 0 ) - { - txL = invAlt2DL.vecE.xE >> shiftL; - tyL = invAlt2DL.vecE.yE >> shiftL; - } - else - { - /* Check for overflow since we are left shifting. */ - maxInt32Value8bbpL >>= -shiftL; - if( invAlt2DL.vecE.xE > maxInt32Value8bbpL || - invAlt2DL.vecE.yE > maxInt32Value8bbpL ) - { - /* Overflow error */ - bbs_ERROR3( "The values in the vector cause overflow during bitshift\n%d, %d,\n" - "The maximum allowed value is %d", - invAlt2DL.vecE.xE >> invAlt2DL.vecE.bbpE, - invAlt2DL.vecE.yE >> invAlt2DL.vecE.bbpE, - maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) ); - return; - } - txL = invAlt2DL.vecE.xE << -shiftL; - tyL = invAlt2DL.vecE.yE << -shiftL; - maxInt32Value8bbpL <<= -shiftL; - } - - /* invAlt2DL.vecE.bbpE = bbpL; nonsense! */ - - /* adjust offset */ - txL += xOffsA << bbpL; - tyL += yOffsA << bbpL; - - /* For each destination pixel find the correspoding source pixel by applying the inverse transformation */ - for( jL = 0; jL < ptrA->heightE; jL++ ) - { - xL = txL + mxyL * jL; - yL = tyL + myyL * jL; - for( iL = 0; iL < ptrA->widthE; iL++ ) - { - const uint16 bbpLby2L = bbpL / 2; - const int32 oneL = 0x00000001 << bbpLby2L; - const int32 fractionOnlyL = 0xFFFFFFFF >> ( 32 - bbpL ); - - /* The bbp for all these variables is the same as bbpLby2L */ - int32 f2xL; - int32 f2yL; - int32 f1xL; - int32 f1yL; - - /* always whole numbers with a bbp of 0 */ - int32 kL; - int32 lL; - - /* The bbpE for these variables is bbpLby2L */ - int32 valL; - - /* Get the whole numbers only and make the bbp 0. */ - kL = xL >> bbpL; - lL = yL >> bbpL; - - /* fraction of destination pixel in the next source pixel */ - f2xL = ( xL & fractionOnlyL ) >> bbpLby2L; - f2yL = ( yL & fractionOnlyL ) >> bbpLby2L; - /* fraction of destination pixel in the current source pixel */ - f1xL = oneL - f2xL; - f1yL = oneL - f2yL; - - /* increment values for next loop */ - xL += mxxL; - yL += myxL; - - if( lL < 0 ) - { - if( kL < 0 ) - { - /* handle all pixels in region x0y0 */ - *dstPtrL++ = *ulPtrL; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y0 */ - *dstPtrL++ = *urPtrL; - } - else - { - /* handle all pixels in region x1y0 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *( ulPtrL + kL ) * f1xL + *( ulPtrL + kL + 1 ) * f2xL; - *dstPtrL++ = valL >> bbpLby2L; - } - } /* if( lL < 0 ) */ - else if( lL >= srcHeightL - 1 ) - { - if( kL < 0 ) - { - /* handle all pixels in region x0y2 */ - *dstPtrL++ = *llPtrL; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y2 */ - *dstPtrL++ = *lrPtrL; - } - else - { - /* handle all pixels in region x1y2 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *( llPtrL + kL ) * f1xL + *( llPtrL + kL + 1 ) * f2xL; - *dstPtrL++ = valL >> bbpLby2L; - } - } /* if( lL >= srcHeightL - 1 ) */ - else - { - const uint8* ptr1L; - const uint8* ptr2L; - - ptr1L = ulPtrL + lL * srcWidthL; - /* point to the pixel in the same column */ - ptr2L = ptr1L + srcWidthL; - if( kL < 0 ) - { - /* handle all pixels in region x0y1 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *ptr1L * f1yL + *ptr2L * f2yL ; - *dstPtrL++ = valL >> bbpLby2L; - } - else if( kL >= srcWidthL - 1 ) - { - /* handle all pixels in region x2y1 */ - /* The bbp has shifted left by bbpLby2L */ - valL = *( ptr1L + srcWidthL - 1 ) * f1yL + *( ptr2L + srcWidthL - 1 ) * f2yL; - *dstPtrL++ = valL >> bbpLby2L; - } - else - { - /* assuming that bbpL = bbpLby2 * 2 */ - /* The bbp for these variables is bbpLby2L */ - int32 v1L; - int32 v2L; - /* The bbp for these variables is bbpL */ - const int32 halfL = 0x00000001 << ( bbpL - 1 ); - - /* handle all pixels in region x1y1 */ - /* The bbp has shifted left by bbpLby2L */ - v1L = *( ptr1L + kL ) * f1xL + *( ptr1L + kL + 1 ) * f2xL; - v2L = *( ptr2L + kL ) * f1xL + *( ptr2L + kL + 1 ) * f2xL; - /* The bbp has shifted left again by bbpLby2L */ - /* adding the half to round off the resulting value */ - valL = v1L * f1yL + v2L * f2yL + halfL; - *dstPtrL++ = valL >> bbpL; - } - } - } /* iL loop */ - } /* jL loop */ - -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8Image_warp( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ) -{ - bim_UInt8Image_warpOffs( cpA, ptrA, srcPtrA, 0, 0, altPtrA, resultWidthA, resultHeightA ); -} - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/UInt8Image.h b/Embedded/common/src/b_ImageEm/UInt8Image.h deleted file mode 100644 index 4666d5b..0000000 --- a/Embedded/common/src/b_ImageEm/UInt8Image.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_UINT8_IMAGE_EM_H -#define bim_UINT8_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/UInt8Arr.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_TensorEm/Flt16Alt2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_UINT8_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** image of uint8 */ -struct bim_UInt8Image -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** array of bytes */ - struct bbs_UInt8Arr arrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_UInt8Image */ -void bim_UInt8Image_init( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA ); - -/** allocates memory for bim_UInt8Image */ -void bim_UInt8Image_create( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - uint32 widthA, - uint32 heightA, - struct bbs_MemSeg* mspA ); - -/** destructor of bim_UInt8Image */ -void bim_UInt8Image_exit( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_UInt8Image_copy( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA ); - -/** equal operator */ -flag bim_UInt8Image_equal( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** checksum of image (for debugging purposes) */ -uint32 bim_UInt8Image_checkSum( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** assigns external image to array (no allocation, deallocation or copying of data) */ -void bim_UInt8Image_assignExternalImage( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - struct bim_UInt8Image* srcPtrA ); - -/** sets image size */ -void bim_UInt8Image_size( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - uint32 widthA, - uint32 heightA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bim_UInt8Image_memSize( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bim_UInt8Image_memWrite( struct bbs_Context* cpA, - const struct bim_UInt8Image* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bim_UInt8Image_memRead( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** sets all pixels to one value */ -void bim_UInt8Image_setAllPixels( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - uint8 valueA ); - -/** copies a section of given image */ -void bim_UInt8Image_copySection( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA, - const struct bts_Int16Rect* sectionPtrA ); - -/** applies affine linear warping to pixels positions of imageA before copying the into *ptrA - * xOffsA, yOffsA specify an additional offset vector (16.0) that is added to image coordinates - */ -void bim_UInt8Image_warpOffs( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA, - int32 xOffsA, - int32 yOffsA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ); - -/** applies affine linear warping to pixels positions of imageA before copying the into *ptrA */ -void bim_UInt8Image_warp( struct bbs_Context* cpA, - struct bim_UInt8Image* ptrA, - const struct bim_UInt8Image* srcPtrA, - const struct bts_Flt16Alt2D* altPtrA, - int32 resultWidthA, - int32 resultHeightA ); - -#endif /* bim_UINT8_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_ImageEm/UInt8PyramidalImage.c b/Embedded/common/src/b_ImageEm/UInt8PyramidalImage.c deleted file mode 100644 index 9b47188..0000000 --- a/Embedded/common/src/b_ImageEm/UInt8PyramidalImage.c +++ /dev/null @@ -1,404 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_ImageEm/Functions.h" -#include "b_ImageEm/UInt8PyramidalImage.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8PyramidalImage_init( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA ) -{ - bbs_UInt8Arr_init( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->depthE = 0; - ptrA->typeE = bim_UINT8_PYRAMIDAL_IMG; -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8PyramidalImage_exit( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA ) -{ - bbs_UInt8Arr_exit( cpA, &ptrA->arrE ); - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->depthE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8PyramidalImage_copy( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - const struct bim_UInt8PyramidalImage* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->arrE.allocatedSizeE < srcPtrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_UInt8PyramidalImage_copy( ... ):\n" - "Unsufficient allocated memory in destination image" ); - return; - } -#endif - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - ptrA->depthE = srcPtrA->depthE; - bbs_UInt8Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bim_UInt8PyramidalImage_equal( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - const struct bim_UInt8PyramidalImage* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) return FALSE; - if( ptrA->heightE != srcPtrA->heightE ) return FALSE; - if( ptrA->depthE != srcPtrA->depthE ) return FALSE; - return bbs_UInt8Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint8* bim_UInt8PyramidalImage_arrPtr( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - uint32 levelA ) -{ - uint32 iL; - uint32 offsL = 0; - uint32 baseSizeL = ptrA->widthE * ptrA->heightE; - -#ifdef DEBUG2 - if( levelA >= ptrA->depthE ) - { - bbs_ERROR2( "uint8* bim_UInt8PyramidalImage_arrPtr( struct bim_UInt8PyramidalImage* ptrA, uint32 levelA ):\n" - "levelA = %i out of range [0,%i]", levelA, ptrA->depthE - 1 ); - return NULL; - } -#endif - - for( iL = 0; iL < levelA; iL++ ) - { - offsL += ( baseSizeL >> ( iL * 2 ) ); - } - return ptrA->arrE.arrPtrE + offsL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8PyramidalImage_heapSize( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - uint32 widthA, - uint32 heightA, - uint32 depthA ) -{ - uint32 baseSizeL = widthA * heightA; - uint32 sizeL = 0; - uint32 iL; - for( iL = 0; iL < depthA; iL++ ) - { - sizeL += ( baseSizeL >> ( iL * 2 ) ); - } - return bbs_UInt8Arr_heapSize( cpA, &ptrA->arrE, sizeL ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8PyramidalImage_create( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - uint32 widthA, uint32 heightA, - uint32 depthA, - struct bbs_MemSeg* mspA ) -{ - uint32 baseSizeL = widthA * heightA; - uint32 sizeL = 0; - uint32 iL; - if( bbs_Context_error( cpA ) ) return; - for( iL = 0; iL < depthA; iL++ ) - { - sizeL += ( baseSizeL >> ( iL * 2 ) ); - } - - if( ptrA->arrE.arrPtrE != 0 ) - { - bim_UInt8PyramidalImage_size( cpA, ptrA, widthA, heightA, depthA ); - return; - } - -#ifdef DEBUG1 - { - uint32 depthMaskL = ( 1 << ( depthA - 1 ) ) - 1; - if( depthA == 0 ) - { - bbs_ERROR0( "void bim_UInt8PyramidalImage_create( struct bim_UInt8PyramidalImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "depthA must be > 0" ); - return; - } - if( ( ( widthA & depthMaskL ) > 0 ) || ( ( heightA & depthMaskL ) > 0 ) ) - { - bbs_ERROR1( "void bim_UInt8PyramidalImage_create( struct bim_UInt8PyramidalImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "widthA and heightA must be divisible by %i", depthMaskL + 1 ); - return; - } - } -#endif - - ptrA->widthE = widthA; - ptrA->heightE = heightA; - ptrA->depthE = depthA; - - bbs_UInt8Arr_create( cpA, &ptrA->arrE, sizeL, mspA ); -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8PyramidalImage_size( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - uint32 widthA, - uint32 heightA, - uint32 depthA ) -{ - uint32 baseSizeL = widthA * heightA; - uint32 sizeL = 0; - uint32 iL; - -#ifdef DEBUG1 - uint32 depthMaskL = ( 1 << ( depthA - 1 ) ) - 1; - if( depthA == 0 ) - { - bbs_ERROR0( "void bim_UInt8PyramidalImage_size( struct bim_UInt8PyramidalImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "depthA must be > 0" ); - return; - } - - if( ( ( widthA & depthMaskL ) > 0 ) || ( ( heightA & depthMaskL ) > 0 ) ) - { - bbs_ERROR1( "void bim_UInt8PyramidalImage_size( struct bim_UInt8PyramidalImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "widthA and heightA must be divisible by %i", depthMaskL + 1 ); - return; - } -#endif - - ptrA->widthE = widthA; - ptrA->heightE = heightA; - ptrA->depthE = depthA; - - for( iL = 0; iL < depthA; iL++ ) - { - sizeL += ( baseSizeL >> ( iL * 2 ) ); - } -#ifdef DEBUG1 - if( sizeL > ptrA->arrE.allocatedSizeE ) - { - bbs_ERROR0( "void bim_UInt8PyramidalImage_size( struct bim_UInt8PyramidalImage* ptrA, uint32 widthA, uint32 heightA, uint32 depthA ):\n" - "Insufficient allocated memory." ); - return; - } -#endif - bbs_UInt8Arr_size( cpA, &ptrA->arrE, sizeL ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8PyramidalImage_memSize( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_SIZEOF16( ptrA->depthE ) - + bbs_UInt8Arr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8PyramidalImage_memWrite( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bim_UInt8PyramidalImage_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bim_UINT8_PYRAMIDAL_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->depthE, memPtrA ); - bbs_UInt8Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bim_UInt8PyramidalImage_memRead( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL, widthL, heightL, depthL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_UINT8_PYRAMIDAL_IMAGE_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &widthL, memPtrA ); - memPtrA += bbs_memRead32( &heightL, memPtrA ); - memPtrA += bbs_memRead32( &depthL, memPtrA ); - - ptrA->widthE = widthL; - ptrA->heightE = heightL; - ptrA->depthE = depthL; - bbs_UInt8Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bim_UInt8PyramidalImage_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_UInt8PyramidalImage_memRead( const struct bim_UInt8PyramidalImage* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -void bim_UInt8PyramidalImage_overlayUInt8( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - struct bim_UInt8Image* uint8ImageA ) -{ - uint8ImageA->widthE = ptrA->widthE; - uint8ImageA->heightE = ptrA->heightE; - uint8ImageA->arrE.sizeE = ptrA->widthE * ptrA->heightE; - uint8ImageA->arrE.allocatedSizeE = ptrA->widthE * ptrA->heightE; - uint8ImageA->arrE.arrPtrE = ptrA->arrE.arrPtrE; - uint8ImageA->arrE.mspE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8PyramidalImage_recompute( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* dstPtrA ) -{ - uint32 iL, jL, layerL, widthL, heightL; - uint8 *srcL, *dstL; - - /* process remaining layers */ - widthL = dstPtrA->widthE; - heightL = dstPtrA->heightE; - srcL = dstPtrA->arrE.arrPtrE; - dstL = srcL + widthL * heightL; - for( layerL = 1; layerL < dstPtrA->depthE; layerL++ ) - { - for( jL = ( heightL >> 1 ); jL > 0; jL-- ) - { - for( iL = ( widthL >> 1 ); iL > 0; iL-- ) - { - /* averaging with roundig */ - *dstL++ = ( ( *srcL + *( srcL + 1 ) + *( srcL + widthL ) + *( srcL + widthL + 1 ) ) + 2 ) >> 2; - srcL += 2; - } - srcL += widthL; - } - widthL >>= 1; - heightL >>= 1; - } -} - -/* ------------------------------------------------------------------------- */ - -void bim_UInt8PyramidalImage_importUInt8( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* dstPtrA, - const struct bim_UInt8Image* srcPtrA, - uint32 depthA ) -{ - - bim_UInt8PyramidalImage_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE, depthA ); - - if( srcPtrA->arrE.sizeE & 1 ) - { - bbs_ERROR0( "void bim_UInt8PyramidalImage_importUInt8(....):\n" - "Size of source image must be even.\n" ); - return; - - } - - /* copy first layer */ - bbs_memcpy16( dstPtrA->arrE.arrPtrE, srcPtrA->arrE.arrPtrE, srcPtrA->arrE.sizeE >> 1 ); - - bim_UInt8PyramidalImage_recompute( cpA, dstPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_ImageEm/UInt8PyramidalImage.h b/Embedded/common/src/b_ImageEm/UInt8PyramidalImage.h deleted file mode 100644 index a4484d3..0000000 --- a/Embedded/common/src/b_ImageEm/UInt8PyramidalImage.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bim_UINT8_PYRAMIDAL_IMAGE_EM_H -#define bim_UINT8_PYRAMIDAL_IMAGE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_ImageEm/UInt8Image.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -#define bim_PYRAMIDAL_IMAGE_STANDARD_DEPTH 4 - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bim_UINT8_PYRAMIDAL_IMAGE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** Pyramidal image of uint8. - * The Pyramidal format is as follows - * widthE specifies width of first image (image 0) - * heightE specifies height of first image (image 0) - * depthE specifies the number of levels present - * image n has half of the width,heigth dimension of image n-1 - * A pixel of in image n is the average of the corresponding 4 - * covering pixels in image n-1 - * Adresses of data relative to arrE.arrPtrE - * The address of image 0 is 0 - * The address of image 1 is widthE * heightE - * The address of image n is widthE * heightE + widthE * heightE / 4 + ... + widthE * heightE * ( 2^-(2*n) ) - * Use function uint8* bim_UInt8PyramidalImage_arrPtr( uint32 levelA ) to obtain adress of image at given depth level - * Use function bim_UInt8PyramidalImage_importUInt8 to create a pyramidal image from an uint8 image -*/ -struct bim_UInt8PyramidalImage -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** width of image */ - uint32 widthE; - - /** height of image */ - uint32 heightE; - - /** depth of image (number of layers) */ - uint32 depthE; - - /** pyramidal image type (temporary: until switch to 16-bit complete) */ - uint32 typeE; - - /** array of bytes */ - struct bbs_UInt8Arr arrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bim_UInt8PyramidalImage */ -void bim_UInt8PyramidalImage_init( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA ); - -/** allocates memory for bim_UInt8PyramidalImage */ -void bim_UInt8PyramidalImage_create( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - uint32 widthA, uint32 heightA, - uint32 depthA, - struct bbs_MemSeg* mspA ); - -/** frees bim_UInt8PyramidalImage */ -void bim_UInt8PyramidalImage_exit( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bim_UInt8PyramidalImage_copy( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - const struct bim_UInt8PyramidalImage* srcPtrA ); - -/** equal operator */ -flag bim_UInt8PyramidalImage_equal( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, const struct bim_UInt8PyramidalImage* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns adress of image at given depth level */ -uint8* bim_UInt8PyramidalImage_arrPtr( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - uint32 levelA ); - -/** calculates the amount of heap memory needed (16bit words) if created with given parameters */ -uint32 bim_UInt8PyramidalImage_heapSize( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - uint32 widthA, - uint32 heightA, - uint32 depthA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** sets image size */ -void bim_UInt8PyramidalImage_size( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - uint32 widthA, - uint32 heightA, - uint32 depthA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bim_UInt8PyramidalImage_memSize( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bim_UInt8PyramidalImage_memWrite( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bim_UInt8PyramidalImage_memRead( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** create overlay bim_UInt8Image (does not own memory) */ -void bim_UInt8PyramidalImage_overlayUInt8( struct bbs_Context* cpA, - const struct bim_UInt8PyramidalImage* ptrA, - struct bim_UInt8Image* uint8ImageA ); - -/** recompute pyramidal format with given depth from data in layer 0 */ -void bim_UInt8PyramidalImage_recompute( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* dstPtrA ); - -/** import uint8image and creates pyramidal format with given depth */ -void bim_UInt8PyramidalImage_importUInt8( struct bbs_Context* cpA, - struct bim_UInt8PyramidalImage* dstPtrA, - const struct bim_UInt8Image* srcPtrA, - uint32 depthA ); - -#endif /* bim_UINT8_PYRAMIDAL_IMAGE_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Alt.c b/Embedded/common/src/b_TensorEm/Alt.c deleted file mode 100644 index d7373e0..0000000 --- a/Embedded/common/src/b_TensorEm/Alt.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_TensorEm/Alt.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Alt_init( struct bbs_Context* cpA, - struct bts_Alt* ptrA ) -{ - bts_VectorMap_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bts_VM_ALT; - ptrA->baseE.vpMapE = bts_Alt_map; - - bts_CompactAlt_init( cpA, &ptrA->altE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Alt_exit( struct bbs_Context* cpA, - struct bts_Alt* ptrA ) -{ - bts_CompactAlt_exit( cpA, &ptrA->altE ); - - bts_VectorMap_exit( cpA, &ptrA->baseE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Alt_copy( struct bbs_Context* cpA, - struct bts_Alt* ptrA, - const struct bts_Alt* srcPtrA ) -{ - bts_CompactAlt_copy( cpA, &ptrA->altE, &srcPtrA->altE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Alt_equal( struct bbs_Context* cpA, - const struct bts_Alt* ptrA, - const struct bts_Alt* srcPtrA ) -{ - bbs_ERROR0( "bts_Alt_equal:\n Function is not available" ); - return FALSE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Alt_memSize( struct bbs_Context* cpA, - const struct bts_Alt* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - memSizeL += bts_VectorMap_memSize( cpA, &ptrA->baseE ); - memSizeL += bts_CompactAlt_memSize( cpA, &ptrA->altE ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Alt_memWrite( struct bbs_Context* cpA, - const struct bts_Alt* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_Alt_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_ALT_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bts_CompactAlt_memWrite( cpA, &ptrA->altE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Alt_memRead( struct bbs_Context* cpA, - struct bts_Alt* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_ALT_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bts_CompactAlt_memRead( cpA, &ptrA->altE, memPtrA, espL ); - - if( memSizeL != bts_Alt_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Alt_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Alt_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ) -{ - bbs_DEF_fNameL( "bts_Alt_map" ) - const struct bts_Alt* ptrL = ( const struct bts_Alt* )ptrA; - - if( inVecPtrA->arrE.sizeE != ptrL->altE.matE.widthE ) - { - bbs_ERROR1( "%s:\ninput vector has incorrect size", fNameL ); - return; - } - - if( outVecPtrA->arrE.allocatedSizeE < ptrL->altE.matE.heightE ) - { - bbs_ERROR1( "%s:\noutput vector is insufficiently allocated", fNameL ); - return; - } - - bts_Flt16Vec_size( cpA, outVecPtrA, ptrL->altE.matE.heightE ); - - bts_CompactAlt_map( cpA, &ptrL->altE, inVecPtrA->arrE.arrPtrE, inVecPtrA->expE, outVecPtrA->arrE.arrPtrE, &outVecPtrA->expE ); - - bts_Flt16Vec_maximizeMantisse( cpA, outVecPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Alt.h b/Embedded/common/src/b_TensorEm/Alt.h deleted file mode 100644 index 8286834..0000000 --- a/Embedded/common/src/b_TensorEm/Alt.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_ALT_EM_H -#define bts_ALT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/VectorMap.h" -#include "b_TensorEm/CompactAlt.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** data format version number */ -#define bts_ALT_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** applies affine linear transformation to vector */ -struct bts_Alt -{ - /* ---- public data ---------------------------------------------------- */ - - /** base element (must be first element) */ - struct bts_VectorMap baseE; - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /* affine linear transformation */ - struct bts_CompactAlt altE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bts_Alt */ -void bts_Alt_init( struct bbs_Context* cpA, - struct bts_Alt* ptrA ); - -/** resets bts_Alt */ -void bts_Alt_exit( struct bbs_Context* cpA, - struct bts_Alt* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_Alt_copy( struct bbs_Context* cpA, - struct bts_Alt* ptrA, - const struct bts_Alt* srcPtrA ); - -/** equal operator */ -flag bts_Alt_equal( struct bbs_Context* cpA, - const struct bts_Alt* ptrA, - const struct bts_Alt* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bts_Alt_memSize( struct bbs_Context* cpA, - const struct bts_Alt* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_Alt_memWrite( struct bbs_Context* cpA, - const struct bts_Alt* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_Alt_memRead( struct bbs_Context* cpA, - struct bts_Alt* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Vector map operation. - * Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - */ -void bts_Alt_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ); - -#endif /* bts_ALT_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Cluster2D.c b/Embedded/common/src/b_TensorEm/Cluster2D.c deleted file mode 100644 index e6acf6e..0000000 --- a/Embedded/common/src/b_TensorEm/Cluster2D.c +++ /dev/null @@ -1,997 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Cluster2D.h" -#include "b_TensorEm/RBFMap2D.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/** Computes relative scale factor from the 2 mean square node distances to the - * cluster centers for 2 clusters. - */ -void bts_Cluster2D_computeScale( uint32 enumA, /* mean square radius, dst cluster */ - int32 bbp_enumA, /* bbp of enumA */ - uint32 denomA, /* mean square radius, src cluster */ - int32 bbp_denomA, /* bbp of denomA */ - uint32* scaleA, /* resulting scale factor */ - int32* bbp_scaleA )/* bbp of scale factor */ -{ - uint32 shiftL, quotientL; - int32 posL, bbp_denomL; - - /* how far can we shift enumA to the left */ - shiftL = 31 - bbs_intLog2( enumA ); - - /* how far do we have to shift denomA to the right */ - posL = bbs_intLog2( denomA ) + 1; - bbp_denomL = bbp_denomA; - - if( posL - bbp_denomL > 12 ) - { - /* if denomA has more than 12 bit before the point, discard bits behind the point */ - denomA >>= bbp_denomL; - bbp_denomL = 0; - } - else - { - /* otherwise reduce denomA to 12 bit */ - bbs_uint32ReduceToNBits( &denomA, &bbp_denomL, 12 ); - } - - /* make result bbp even for call of sqrt */ - if( ( bbp_enumA + shiftL - bbp_denomL ) & 1 ) shiftL--; - - quotientL = ( enumA << shiftL ) / denomA; - - *scaleA = bbs_fastSqrt32( quotientL ); - *bbp_scaleA = ( bbp_enumA + shiftL - bbp_denomL ) >> 1; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_init( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA ) -{ - ptrA->mspE = NULL; - ptrA->vecArrE = NULL; - ptrA->allocatedSizeE = 0; - ptrA->sizeE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_exit( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->vecArrE ); - ptrA->vecArrE = NULL; - ptrA->mspE = NULL; - ptrA->allocatedSizeE = 0; - ptrA->sizeE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_copy( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const struct bts_Cluster2D* srcPtrA ) -{ -#ifdef DEBUG2 - if( ptrA->allocatedSizeE < srcPtrA->sizeE ) - { - bbs_ERROR0( "void bts_Cluster2D_copy( struct bts_Cluster2D* ptrA, const struct bts_Cluster2D* srcPtrA ): allocated size too low in destination cluster" ); - return; - } -#endif - - bbs_memcpy32( ptrA->vecArrE, srcPtrA->vecArrE, bbs_SIZEOF32( struct bts_Int16Vec2D ) * srcPtrA->sizeE ); - - ptrA->bbpE = srcPtrA->bbpE; - ptrA->sizeE = srcPtrA->sizeE; -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Cluster2D_equal( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - const struct bts_Cluster2D* srcPtrA ) -{ - uint32 iL; - const struct bts_Int16Vec2D* src1L = ptrA->vecArrE; - const struct bts_Int16Vec2D* src2L = srcPtrA->vecArrE; - - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - if( ptrA->bbpE != srcPtrA->bbpE ) return FALSE; - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( ( src1L->xE != src2L->xE ) || ( src1L->yE != src2L->yE ) ) return FALSE; - src1L++; - src2L++; - } - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Cluster2D_center( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA ) -{ - struct bts_Int16Vec2D* vecPtrL = ptrA->vecArrE; - uint32 iL; - int32 xL = 0; - int32 yL = 0; - - if( ptrA->sizeE == 0 ) return bts_Flt16Vec2D_create16( 0, 0, 0 ); - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - xL += vecPtrL->xE; - yL += vecPtrL->yE; - vecPtrL++; - } - - xL = ( ( ( xL << 1 ) / ( int32 )ptrA->sizeE ) + 1 ) >> 1; - yL = ( ( ( yL << 1 ) / ( int32 )ptrA->sizeE ) + 1 ) >> 1; - - return bts_Flt16Vec2D_create16( ( int16 )xL, ( int16 )yL, ( int16 )ptrA->bbpE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Cluster2D_checkSum( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA ) -{ - struct bts_Int16Vec2D* vecPtrL = ptrA->vecArrE; - uint32 iL; - int32 sumL = ptrA->bbpE; - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - sumL += vecPtrL->xE; - sumL += vecPtrL->yE; - vecPtrL++; - } - - return (uint32)sumL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Rect bts_Cluster2D_boundingBox( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA ) -{ - struct bts_Int16Vec2D* vecPtrL = ptrA->vecArrE; - uint32 iL; - int32 xMinL = 65536; - int32 yMinL = 65536; - int32 xMaxL = -65536; - int32 yMaxL = -65536; - - if( ptrA->sizeE == 0 ) return bts_Int16Rect_create( 0, 0, 0, 0 ); - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - xMinL = bbs_min( xMinL, vecPtrL->xE ); - yMinL = bbs_min( yMinL, vecPtrL->yE ); - xMaxL = bbs_max( xMaxL, vecPtrL->xE ); - yMaxL = bbs_max( yMaxL, vecPtrL->yE ); - vecPtrL++; - } - - return bts_Int16Rect_create( ( int16 )xMinL, ( int16 )yMinL, ( int16 )xMaxL, ( int16 )yMaxL ); -} - - -/* ------------------------------------------------------------------------- */ - -int32 bts_Cluster2D_int32X( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - uint32 indexA, int32 bbpA ) -{ -#ifdef DEBUG2 - if( indexA >= ptrA->sizeE ) - { - bbs_ERROR2( "int32 bts_Cluster2D_int32X( .... )\n" - "indexA = %i is out of range [0,%i]", - indexA, - ptrA->sizeE - 1 ); - return 0; - } -#endif - - { - int32 shiftL = bbpA - ptrA->bbpE; - int32 xL = ptrA->vecArrE[ indexA ].xE; - if( shiftL >= 0 ) - { - xL <<= shiftL; - } - else - { - xL = ( ( xL >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } - - return xL; - } -} - -/* ------------------------------------------------------------------------- */ - -int32 bts_Cluster2D_int32Y( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - uint32 indexA, - int32 bbpA ) -{ -#ifdef DEBUG2 - if( indexA >= ptrA->sizeE ) - { - bbs_ERROR2( "int32 bts_Cluster2D_int32Y( .... )\n" - "indexA = %i is out of range [0,%i]", - indexA, - ptrA->sizeE - 1 ); - return 0; - } -#endif - { - int32 shiftL = bbpA - ptrA->bbpE; - int32 yL = ptrA->vecArrE[ indexA ].yE; - if( shiftL >= 0 ) - { - yL <<= shiftL; - } - else - { - yL = ( ( yL >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } - - return yL; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_create( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->mspE == NULL ) - { - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->vecArrE = NULL; - } - - if( ptrA->sizeE == sizeA ) return; - - if( ptrA->vecArrE != 0 ) - { - bbs_ERROR0( "void bts_Cluster2D_create( const struct bts_Cluster2D*, uint32 ):\n" - "object has already been created and cannot be resized." ); - return; - } - - ptrA->vecArrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( struct bts_Int16Vec2D ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->sizeE = sizeA; - ptrA->allocatedSizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_size( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR2( "void bts_Cluster2D_size( struct bts_Cluster2D* ptrA, uint32 sizeA ):\n" - "Allocated size (%i) of cluster is smaller than requested size (%i).", - ptrA->allocatedSizeE, - sizeA ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_transform( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - struct bts_Flt16Alt2D altA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - struct bts_Flt16Vec2D vL = bts_Flt16Vec2D_createVec16( ptrA->vecArrE[ iL ], ptrA->bbpE ); - ptrA->vecArrE[ iL ] = bts_Flt16Vec2D_int16Vec2D( bts_Flt16Alt2D_mapFlt( &altA, &vL ), ptrA->bbpE ); - } -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_transformBbp( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - struct bts_Flt16Alt2D altA, - uint32 dstBbpA ) -{ - uint32 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - struct bts_Flt16Vec2D vL = bts_Flt16Vec2D_createVec16( ptrA->vecArrE[ iL ], ptrA->bbpE ); - ptrA->vecArrE[ iL ] = bts_Flt16Vec2D_int16Vec2D( bts_Flt16Alt2D_mapFlt( &altA, &vL ), dstBbpA ); - } - ptrA->bbpE = dstBbpA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_rbfTransform( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const struct bts_RBFMap2D* rbfMapPtrA ) -{ - bts_RBFMap2D_mapCluster( cpA, rbfMapPtrA, ptrA, ptrA, ptrA->bbpE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster2D_copyTransform( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const struct bts_Cluster2D* srcPtrA, - struct bts_Flt16Alt2D altA, - uint32 dstBbpA ) -{ - uint32 iL; - - /* prepare destination cluster */ - if( ptrA->allocatedSizeE < srcPtrA->sizeE ) - { - bbs_ERROR0( "void bts_Cluster2D_copyTransform( struct bts_Cluster2D* ptrA, const struct bts_Cluster2D* srcPtrA, struct bts_Flt16Alt2D altA, uint32 dstBbpA ): allocated size too low in destination cluster" ); - return; - } - - ptrA->sizeE = srcPtrA->sizeE; - ptrA->bbpE = dstBbpA; - - /* transform */ - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - struct bts_Flt16Vec2D vL = bts_Flt16Vec2D_createVec16( srcPtrA->vecArrE[ iL ], srcPtrA->bbpE ); - ptrA->vecArrE[ iL ] = bts_Flt16Vec2D_int16Vec2D( bts_Flt16Alt2D_mapFlt( &altA, &vL ), ptrA->bbpE ); - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Cluster2D_memSize( struct bbs_Context* cpA, - const struct bts_Cluster2D *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) /* mem size */ - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->sizeE ) - + bbs_SIZEOF16( ptrA->bbpE ) - + bbs_SIZEOF16( struct bts_Int16Vec2D ) * ptrA->sizeE; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Cluster2D_memWrite( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_Cluster2D_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_CLUSTER2D_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->bbpE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->vecArrE, ptrA->sizeE * 2, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Cluster2D_memRead( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL; - uint32 sizeL; - uint32 versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_CLUSTER2D_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->bbpE, memPtrA ); - - if( ptrA->allocatedSizeE < sizeL ) - { - bts_Cluster2D_create( cpA, ptrA, sizeL, mspA ); - } - else - { - bts_Cluster2D_size( cpA, ptrA, sizeL ); - } - - memPtrA += bbs_memRead16Arr( cpA, ptrA->vecArrE, ptrA->sizeE * 2, memPtrA ); - - if( memSizeL != bts_Cluster2D_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Cluster2D_memRead( const struct bts_Cluster2D* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Cluster2D_alt( struct bbs_Context* cpA, - const struct bts_Cluster2D* srcPtrA, - const struct bts_Cluster2D* dstPtrA, - enum bts_AltType altTypeA ) -{ - struct bts_Flt16Alt2D altL = bts_Flt16Alt2D_createIdentity(); - enum bts_AltType altTypeL = altTypeA; - - uint32 sizeL = srcPtrA->sizeE; - int32 srcBbpL = srcPtrA->bbpE; - int32 dstBbpL = dstPtrA->bbpE; - - struct bts_Flt16Vec2D cpL, cqL, cpMappedL, cpAdjustedL; - - if( dstPtrA->sizeE != srcPtrA->sizeE ) - { - bbs_ERROR2( "struct bts_Flt16Alt2D bts_Cluster2D_alt( ... ):\n" - "the 2 input clusters differ in size: %d vs %d", srcPtrA->sizeE, dstPtrA->sizeE ); - } - - if( sizeL <= 2 ) - { - if( altTypeL == bts_ALT_LINEAR ) - { - altTypeL = bts_ALT_RIGID; - } - } - - if( sizeL <= 1 ) - { - if( altTypeL == bts_ALT_RIGID ) - { - altTypeL = bts_ALT_TRANS; - } - else if( altTypeL == bts_ALT_TRANS_SCALE ) - { - altTypeL = bts_ALT_TRANS; - } - } - - if( sizeL == 0 || altTypeL == bts_ALT_IDENTITY ) - { - /* return identity */ - return altL; - } - - cpL = bts_Cluster2D_center( cpA, srcPtrA ); - cqL = bts_Cluster2D_center( cpA, dstPtrA ); - - if( altTypeL == bts_ALT_TRANS ) - { - /* return translation only */ - altL.vecE = bts_Flt16Vec2D_sub( cqL, cpL ); - return altL; - } - - switch( altTypeL ) - { - case bts_ALT_TRANS_SCALE: - { - uint32 spL = 0; - uint32 sqL = 0; - - struct bts_Int16Vec2D* srcPtrL = srcPtrA->vecArrE; - struct bts_Int16Vec2D* dstPtrL = dstPtrA->vecArrE; - - int32 iL = sizeL; - while( iL-- ) - { - int32 pxL = srcPtrL->xE - cpL.xE; - int32 pyL = srcPtrL->yE - cpL.yE; - int32 qxL = dstPtrL->xE - cqL.xE; - int32 qyL = dstPtrL->yE - cqL.yE; - srcPtrL++; - dstPtrL++; - - /* overflow estimate: no problem with 100 nodes, bbp = 6, x = y = 500 */ - spL += ( pxL * pxL ) >> srcBbpL; - spL += ( pyL * pyL ) >> srcBbpL; - sqL += ( qxL * qxL ) >> dstBbpL; - sqL += ( qyL * qyL ) >> dstBbpL; - } - - spL /= sizeL; - sqL /= sizeL; - - if( spL == 0 ) - { - bbs_ERROR0( "struct bts_Flt16Alt2D bts_Cluster2D_alt( ... ):\n" - "All nodes of the src cluster are sitting in the center -> " - "unable to compute scale matrix between clusters" ); - } - else - { - uint32 scaleL; - int32 factor32L, bbp_scaleL; - int16 factor16L; - - bts_Cluster2D_computeScale( sqL, dstBbpL, spL, srcBbpL, &scaleL, &bbp_scaleL ); - - /* create scale matrix */ - factor32L = ( int32 )scaleL; - altL.matE = bts_Flt16Mat2D_createScale( factor32L, bbp_scaleL ); - - /* create translation vector */ - factor16L = scaleL; - cpMappedL = bts_Flt16Vec2D_mul( cpL, factor16L, bbp_scaleL ); - altL.vecE = bts_Flt16Vec2D_sub( cqL, cpMappedL ); - - return altL; - } - } - break; - - case bts_ALT_RIGID: - { - /* smaller of the 2 bbp's */ - int32 minBbpL = bbs_min( srcBbpL, dstBbpL ); - - uint32 spL = 0; - uint32 sqL = 0; - int32 pxqxL = 0; - int32 pxqyL = 0; - int32 pyqxL = 0; - int32 pyqyL = 0; - - struct bts_Int16Vec2D* srcPtrL = srcPtrA->vecArrE; - struct bts_Int16Vec2D* dstPtrL = dstPtrA->vecArrE; - - int32 iL = sizeL; - while( iL-- ) - { - int32 pxL = srcPtrL->xE - cpL.xE; - int32 pyL = srcPtrL->yE - cpL.yE; - int32 qxL = dstPtrL->xE - cqL.xE; - int32 qyL = dstPtrL->yE - cqL.yE; - srcPtrL++; - dstPtrL++; - - /* overflow estimate: no problem with 100 nodes, bbp = 6, x = y = 500 */ - spL += ( pxL * pxL ) >> srcBbpL; - spL += ( pyL * pyL ) >> srcBbpL; - sqL += ( qxL * qxL ) >> dstBbpL; - sqL += ( qyL * qyL ) >> dstBbpL; - - pxqxL += ( pxL * qxL ) >> minBbpL; - pxqyL += ( pxL * qyL ) >> minBbpL; - pyqxL += ( pyL * qxL ) >> minBbpL; - pyqyL += ( pyL * qyL ) >> minBbpL; - } - - spL /= sizeL; - sqL /= sizeL; - pxqxL /= ( int32 )sizeL; - pxqyL /= ( int32 )sizeL; - pyqxL /= ( int32 )sizeL; - pyqyL /= ( int32 )sizeL; - - if( spL == 0 ) - { - bbs_ERROR0( "struct bts_Flt16Alt2D bts_Cluster2D_alt( ... ):\n" - "All nodes of the src cluster are sitting in the center -> " - "unable to compute scale matrix between clusters" ); - } - else - { - uint32 scaleL, shiftL, quotientL, enumL, denomL, bitsTaken0L, bitsTaken1L; - int32 bbp_scaleL, cL, rL, c1L, r1L; - int32 ppL, pmL, mpL, mmL, maxL; - int32 quotientBbpL, bbp_crL, posL; - - - /* find scale factor: */ - - bts_Cluster2D_computeScale( sqL, dstBbpL, spL, srcBbpL, &scaleL, &bbp_scaleL ); - - - /* find rotation matrix: */ - - /* sign not needed any more */ - enumL = bbs_abs( pxqyL - pyqxL ); - denomL = bbs_abs( pxqxL + pyqyL ); - - if( denomL == 0 ) - { - cL = 0; - rL = 1; - quotientBbpL = 0; - } - else - { - /* original formula: - - float aL = enumL / denomL; - cL = sqrt( 1.0 / ( 1.0 + ebs_sqr( aL ) ) ); - rL = sqrt( 1 - ebs_sqr( cL ) ); - - */ - - /* how far can we shift enumL to the left */ - shiftL = 31 - bbs_intLog2( enumL ); - - /* result has bbp = shiftL */ - quotientL = ( enumL << shiftL ) / denomL; - quotientBbpL = shiftL; - - posL = bbs_intLog2( quotientL ); - - /* if enumL much larger than denomL, then we cannot square the quotient */ - if( posL > ( quotientBbpL + 14 ) ) - { - cL = 0; - rL = 1; - quotientBbpL = 0; - } - else if( quotientBbpL > ( posL + 14 ) ) - { - cL = 1; - rL = 0; - quotientBbpL = 0; - } - else - { - bbs_uint32ReduceToNBits( "ientL, "ientBbpL, 15 ); - - /* to avoid an overflow in the next operation */ - if( quotientBbpL > 15 ) - { - quotientL >>= ( quotientBbpL - 15 ); - quotientBbpL -= ( quotientBbpL - 15 ); - } - - /* result has again bbp = quotientBbpL */ - denomL = bbs_fastSqrt32( quotientL * quotientL + ( ( int32 )1 << ( quotientBbpL << 1 ) ) ); - - quotientL = ( ( uint32 )1 << 31 ) / denomL; - quotientBbpL = 31 - quotientBbpL; - - bbs_uint32ReduceToNBits( "ientL, "ientBbpL, 15 ); - - /* to avoid an overflow in the next operation */ - if( quotientBbpL > 15 ) - { - quotientL >>= ( quotientBbpL - 15 ); - quotientBbpL -= ( quotientBbpL - 15 ); - } - - cL = quotientL; - rL = bbs_fastSqrt32( ( ( int32 )1 << ( quotientBbpL << 1 ) ) - quotientL * quotientL ); - } - } - - /* save cL and rL with this accuracy for later */ - c1L = cL; - r1L = rL; - bbp_crL = quotientBbpL; - - /* prepare the next computations */ - bitsTaken0L = bts_maxAbsIntLog2Of4( pxqxL, pxqyL, pyqxL, pyqyL ) + 1; - bitsTaken1L = bts_maxAbsIntLog2Of2( cL, rL ) + 1; - - if( ( bitsTaken0L + bitsTaken1L ) > 29 ) - { - int32 shiftL = bitsTaken0L + bitsTaken1L - 29; - cL >>= shiftL; - rL >>= shiftL; - quotientBbpL -= shiftL; - } - - /* best combination: */ - ppL = cL * pxqxL - rL * pyqxL + cL * pyqyL + rL * pxqyL; - pmL = cL * pxqxL + rL * pyqxL + cL * pyqyL - rL * pxqyL; - mpL = - cL * pxqxL - rL * pyqxL - cL * pyqyL + rL * pxqyL; - mmL = - cL * pxqxL + rL * pyqxL - cL * pyqyL - rL * pxqyL; - - maxL = bbs_max( bbs_max( ppL, pmL ), bbs_max( mpL, mmL ) ); - - /* restore cL and rL, bbp = bbp_crL */ - cL = c1L; - rL = r1L; - - /* rotation matrix */ - if( ppL == maxL ) - { - altL.matE = bts_Flt16Mat2D_create32( cL, -rL, rL, cL, bbp_crL ); - } - else if( pmL == maxL ) - { - altL.matE = bts_Flt16Mat2D_create32( cL, rL, -rL, cL, bbp_crL ); - } - else if( mpL == maxL ) - { - altL.matE = bts_Flt16Mat2D_create32( -cL, -rL, rL, -cL, bbp_crL ); - } - else - { - altL.matE = bts_Flt16Mat2D_create32( -cL, rL, -rL, -cL, bbp_crL ); - } - - - /* find translation: */ - - /* original formula: - - ets_Float2DVec transL = cqL - ( scaleL * ( rotL * cpL ) ); - altL.mat( rotL * scaleL ); - altL.vec( transL ); - - */ - - bts_Flt16Mat2D_scale( &altL.matE, scaleL, bbp_scaleL ); - cpMappedL = bts_Flt16Mat2D_mapFlt( &altL.matE, &cpL ); - altL.vecE = bts_Flt16Vec2D_sub( cqL, cpMappedL ); - } - - return altL; - } - - case bts_ALT_LINEAR: - { - /* smaller of the 2 bbp's */ - int32 minBbpL = bbs_min( srcBbpL, dstBbpL ); - - int32 iL = 0; - int32 pxpxL = 0; - int32 pxpyL = 0; - int32 pypyL = 0; - int32 pxqxL = 0; - int32 pxqyL = 0; - int32 pyqxL = 0; - int32 pyqyL = 0; - - struct bts_Int16Vec2D* srcPtrL = srcPtrA->vecArrE; - struct bts_Int16Vec2D* dstPtrL = dstPtrA->vecArrE; - - /* get cp adjusted to dstBbpL */ - int32 shiftL = dstBbpL - srcBbpL; - if( shiftL > 0 ) - { - cpAdjustedL.xE = cpL.xE << shiftL; - cpAdjustedL.yE = cpL.yE << shiftL; - cpAdjustedL.bbpE = dstBbpL; - } - else - { - cpAdjustedL.xE = ( ( cpL.xE >> ( -shiftL - 1 ) ) + 1 ) >> 1; - cpAdjustedL.yE = ( ( cpL.yE >> ( -shiftL - 1 ) ) + 1 ) >> 1; - cpAdjustedL.bbpE = dstBbpL; - } - - iL = sizeL; - while( iL-- ) - { - int32 pxL = srcPtrL->xE - cpL.xE; - int32 pyL = srcPtrL->yE - cpL.yE; - int32 qxL = dstPtrL->xE - cpAdjustedL.xE; /* cp, not cq! */ - int32 qyL = dstPtrL->yE - cpAdjustedL.yE; - srcPtrL++; - dstPtrL++; - - /* overflow estimate: no problem with 100 nodes, bbp = 6, x = y = 500 */ - pxpxL += ( pxL * pxL ) >> srcBbpL; - pxpyL += ( pxL * pyL ) >> srcBbpL; - pypyL += ( pyL * pyL ) >> srcBbpL; - - pxqxL += ( pxL * qxL ) >> minBbpL; - pxqyL += ( pxL * qyL ) >> minBbpL; - pyqxL += ( pyL * qxL ) >> minBbpL; - pyqyL += ( pyL * qyL ) >> minBbpL; - } - - pxpxL /= ( int32 )sizeL; - pxpyL /= ( int32 )sizeL; - pypyL /= ( int32 )sizeL; - pxqxL /= ( int32 )sizeL; - pxqyL /= ( int32 )sizeL; - pyqxL /= ( int32 )sizeL; - pyqyL /= ( int32 )sizeL; - - { - /* original code: - - float detPL = ( pxpxL * pypyL ) - ( pxpyL * pxpyL ); - - if( ebs_neglectable( detPL ) ) - { - matL.setIdentity(); - } - else - { - matL.xx( ( pxqxL * pypyL - pyqxL * pxpyL ) / detPL ); - matL.xy( ( pyqxL * pxpxL - pxqxL * pxpyL ) / detPL ); - matL.yx( ( pxqyL * pypyL - pyqyL * pxpyL ) / detPL ); - matL.yy( ( pyqyL * pxpxL - pxqyL * pxpyL ) / detPL ); - } - - */ - - /* compute det first */ - uint32 bitsTaken0L = bts_maxAbsIntLog2Of4( pxpxL, pypyL, pxpyL, pxpyL ) + 1; - int32 shL = 0; - int32 detL = 0; - int32 detBbpL = 0; - - if( bitsTaken0L > 15 ) - { - shL = bitsTaken0L - 15; - } - - detL = ( pxpxL >> shL ) * ( pypyL >> shL ) - ( pxpyL >> shL ) * ( pxpyL >> shL ); - - /* this can be negative */ - detBbpL = ( srcBbpL - shL ) << 1; - - /* reduce to 15 bit */ - shL = ( int32 )bts_absIntLog2( detL ); - if( shL > 15 ) - { - detL >>= ( shL - 15 ); - detBbpL -= ( shL - 15 ); - } - - if( detL != 0 ) - { - int32 sh0L, sh1L, xxL, xyL, yxL, yyL, bbp_enumL; - uint32 bitsTaken1L, highestBitL; - - sh0L = 0; - if( bitsTaken0L > 15 ) - { - sh0L = bitsTaken0L - 15; - } - - bitsTaken1L = bts_maxAbsIntLog2Of4( pxqxL, pxqyL, pyqxL, pyqyL ) + 1; - sh1L = 0; - if( bitsTaken1L > 15 ) - { - sh1L = bitsTaken1L - 15; - } - - xxL = ( pxqxL >> sh1L ) * ( pypyL >> sh0L ) - ( pyqxL >> sh1L ) * ( pxpyL >> sh0L ); - xyL = ( pyqxL >> sh1L ) * ( pxpxL >> sh0L ) - ( pxqxL >> sh1L ) * ( pxpyL >> sh0L ); - yxL = ( pxqyL >> sh1L ) * ( pypyL >> sh0L ) - ( pyqyL >> sh1L ) * ( pxpyL >> sh0L ); - yyL = ( pyqyL >> sh1L ) * ( pxpxL >> sh0L ) - ( pxqyL >> sh1L ) * ( pxpyL >> sh0L ); - - /* again, can be negative */ - bbp_enumL = ( srcBbpL - sh0L ) + ( bbs_max( srcBbpL, dstBbpL ) - sh1L ); - - highestBitL = bts_maxAbsIntLog2Of4( xxL, xyL, yxL, yyL ) + 1; - - /* shift left */ - xxL <<= ( 31 - highestBitL ); - xyL <<= ( 31 - highestBitL ); - yxL <<= ( 31 - highestBitL ); - yyL <<= ( 31 - highestBitL ); - - bbp_enumL += ( 31 - highestBitL ); - - xxL /= detL; - xyL /= detL; - yxL /= detL; - yyL /= detL; - - bbp_enumL -= detBbpL; - - altL.matE = bts_Flt16Mat2D_create32( xxL, xyL, yxL, yyL, bbp_enumL ); - } - - cpMappedL = bts_Flt16Mat2D_mapFlt( &altL.matE, &cpL ); - altL.vecE = bts_Flt16Vec2D_sub( cqL, cpMappedL ); - } - - return altL; - } - - default: - { - bbs_ERROR1( "struct bts_Flt16Alt2D bts_Cluster2D_alt( ... ):\n" - "altType %d is not handled", altTypeL ); - } - } - - return altL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Cluster2D.h b/Embedded/common/src/b_TensorEm/Cluster2D.h deleted file mode 100644 index 43ae987..0000000 --- a/Embedded/common/src/b_TensorEm/Cluster2D.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_CLUSTER2D_EM_H -#define bts_CLUSTER2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" -#include "b_TensorEm/Int16Vec2D.h" -#include "b_TensorEm/Flt16Vec2D.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_TensorEm/Flt16Alt2D.h" -#include "b_TensorEm/Functions.h" - -/* ---- related objects --------------------------------------------------- */ - -struct bts_RBFMap2D; - -/* ---- typedefs ----------------------------------------------------------- */ - -/* data format version number */ -#define bts_CLUSTER2D_VERSION 100 - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d vector array */ -struct bts_Cluster2D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /** number of allocated vectors */ - uint32 allocatedSizeE; - - /** number of vectors */ - uint32 sizeE; - - /** format of vectors (bbpE always > 0) */ - int32 bbpE; - - /** array of int16 vectors */ - struct bts_Int16Vec2D* vecArrE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes cluster */ -void bts_Cluster2D_init( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA ); - -/** destroys cluster */ -void bts_Cluster2D_exit( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copies cluster */ -void bts_Cluster2D_copy( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const struct bts_Cluster2D* srcPtrA ); - -/** compares cluster */ -flag bts_Cluster2D_equal( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - const struct bts_Cluster2D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns center of gravity */ -struct bts_Flt16Vec2D bts_Cluster2D_center( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA ); - -/** returns check sum (for debugging purpose) */ -uint32 bts_Cluster2D_checkSum( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA ); - -/** returns bounding box */ -struct bts_Int16Rect bts_Cluster2D_boundingBox( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA ); - -/** returns int32 x-coordinate with given bbp at indexed position */ -int32 bts_Cluster2D_int32X( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - uint32 indexA, int32 bbpA ); - -/** returns int32 y-coordinate with given bbp at indexed position */ -int32 bts_Cluster2D_int32Y( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - uint32 indexA, - int32 bbpA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates cluster */ -void bts_Cluster2D_create( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** resize cluster (sizeA must be smaller or equal to allocated size)*/ -void bts_Cluster2D_size( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - uint32 sizeA ); - -/** transforms cluster according to alt (function does not change bbp of cluster) */ -void bts_Cluster2D_transform( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - struct bts_Flt16Alt2D altA ); - -/** transforms cluster according to alt and set bbp of output cluster */ -void bts_Cluster2D_transformBbp( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - struct bts_Flt16Alt2D altA, - uint32 dstBbpA ); - -/** transforms cluster with rbf map (function does not change bbp of cluster) */ -void bts_Cluster2D_rbfTransform( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const struct bts_RBFMap2D* rbfMapPtrA ); - -/** copies src cluster and simultaneously transforms vectors according to alt using dstBbpA as resulting cluster format */ -void bts_Cluster2D_copyTransform( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const struct bts_Cluster2D* srcPtrA, - struct bts_Flt16Alt2D altA, - uint32 dstBbpA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size in words (16-bit) object needs when written to memory */ -uint32 bts_Cluster2D_memSize( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_Cluster2D_memWrite( struct bbs_Context* cpA, - const struct bts_Cluster2D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_Cluster2D_memRead( struct bbs_Context* cpA, - struct bts_Cluster2D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Computes the best affine linear transformation from *srcPtrA to *dstPtrA. - * Constrains of trafo are given by altTypeA - */ -struct bts_Flt16Alt2D bts_Cluster2D_alt( struct bbs_Context* cpA, - const struct bts_Cluster2D* srcPtrA, - const struct bts_Cluster2D* dstPtrA, - enum bts_AltType altTypeA ); - -#endif /* bts_CLUSTER2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Cluster3D.c b/Embedded/common/src/b_TensorEm/Cluster3D.c deleted file mode 100644 index cb6dbd9..0000000 --- a/Embedded/common/src/b_TensorEm/Cluster3D.c +++ /dev/null @@ -1,474 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Cluster3D.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster3D_init( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA ) -{ - ptrA->mspE = NULL; - ptrA->vecArrE = NULL; - ptrA->allocatedSizeE = 0; - ptrA->sizeE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster3D_exit( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA ) -{ - bbs_MemSeg_free( cpA, ptrA->mspE, ptrA->vecArrE ); - ptrA->vecArrE = NULL; - ptrA->mspE = NULL; - ptrA->allocatedSizeE = 0; - ptrA->sizeE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster3D_copy( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - const struct bts_Cluster3D* srcPtrA ) -{ -#ifdef DEBUG1 - if( ptrA->allocatedSizeE < srcPtrA->sizeE ) - { - bbs_ERROR0( "void bts_Cluster3D_copy( struct bts_Cluster2D* ptrA, const struct bts_Cluster2D* srcPtrA ): allocated size too low in destination cluster" ); - return; - } -#endif - - bbs_memcpy16( ptrA->vecArrE, srcPtrA->vecArrE, bbs_SIZEOF16( struct bts_Int16Vec3D ) * srcPtrA->sizeE ); - - ptrA->bbpE = srcPtrA->bbpE; - ptrA->sizeE = srcPtrA->sizeE; -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Cluster3D_equal( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - const struct bts_Cluster3D* srcPtrA ) -{ - uint32 iL; - const struct bts_Int16Vec3D* src1L = ptrA->vecArrE; - const struct bts_Int16Vec3D* src2L = srcPtrA->vecArrE; - - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - if( ptrA->bbpE != srcPtrA->bbpE ) return FALSE; - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - if( ( src1L->xE != src2L->xE ) || - ( src1L->yE != src2L->yE ) || - ( src1L->zE != src2L->zE ) ) return FALSE; - src1L++; - src2L++; - } - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Cluster3D_center( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA ) -{ - struct bts_Int16Vec3D* vecPtrL = ptrA->vecArrE; - uint32 iL; - int32 xL = 0; - int32 yL = 0; - int32 zL = 0; - - if( ptrA->sizeE == 0 ) return bts_Flt16Vec3D_create16( 0, 0, 0, 0 ); - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - xL += vecPtrL->xE; - yL += vecPtrL->yE; - zL += vecPtrL->zE; - vecPtrL++; - } - - xL = ( ( ( xL << 1 ) / ( int32 )ptrA->sizeE ) + 1 ) >> 1; - yL = ( ( ( yL << 1 ) / ( int32 )ptrA->sizeE ) + 1 ) >> 1; - zL = ( ( ( zL << 1 ) / ( int32 )ptrA->sizeE ) + 1 ) >> 1; - - return bts_Flt16Vec3D_create16( ( int16 )xL, ( int16 )yL, ( int16 )zL, ( int16 )ptrA->bbpE ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Rect bts_Cluster3D_boundingBox( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA ) -{ - struct bts_Int16Vec3D* vecPtrL = ptrA->vecArrE; - uint32 iL; - int32 xMinL = 65536; /*( 1 << 16 )*/ - int32 yMinL = 65536; /*( 1 << 16 )*/ - int32 xMaxL = 0; - int32 yMaxL = 0; - - if( ptrA->sizeE == 0 ) return bts_Int16Rect_create( 0, 0, 0, 0 ); - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - xMinL = bbs_min( xMinL, vecPtrL->xE ); - yMinL = bbs_min( yMinL, vecPtrL->yE ); - xMaxL = bbs_max( xMaxL, vecPtrL->xE ); - yMaxL = bbs_max( yMaxL, vecPtrL->yE ); - vecPtrL++; - } - - return bts_Int16Rect_create( ( int16 )xMinL, ( int16 )yMinL, ( int16 )xMaxL, ( int16 )yMaxL ); -} - -/* ------------------------------------------------------------------------- */ - -int32 bts_Cluster3D_int32X( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint32 indexA, int32 bbpA ) -{ - int32 shiftL = bbpA - ptrA->bbpE; -#ifdef DEBUG2 - if( indexA >= ptrA->sizeE ) - { - bbs_ERROR2( "int32 bts_Cluster2D_int32X( .... )\n" - "indexA = %i is out of range [0,%i]", - indexA, - ptrA->sizeE - 1 ); - return 0; - } -#endif - if( shiftL >= 0 ) - { - return ( int32 ) ptrA->vecArrE[ indexA ].xE << shiftL; - } - else - { - return ( ( ( int32 ) ptrA->vecArrE[ indexA ].xE >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } -} - -/* ------------------------------------------------------------------------- */ - -int32 bts_Cluster3D_int32Y( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint32 indexA, - int32 bbpA ) -{ - int32 shiftL = bbpA - ptrA->bbpE; -#ifdef DEBUG2 - if( indexA >= ptrA->sizeE ) - { - bbs_ERROR2( "int32 bts_Cluster2D_int32Y( .... )\n" - "indexA = %i is out of range [0,%i]", - indexA, - ptrA->sizeE - 1 ); - return 0; - } -#endif - if( shiftL >= 0 ) - { - return ( int32 ) ptrA->vecArrE[ indexA ].yE << shiftL; - } - else - { - return ( ( ( int32 ) ptrA->vecArrE[ indexA ].yE >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } -} - -/* ------------------------------------------------------------------------- */ - -int32 bts_Cluster3D_int32Z( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint32 indexA, - int32 bbpA ) -{ - int32 shiftL = bbpA - ptrA->bbpE; -#ifdef DEBUG2 - if( indexA >= ptrA->sizeE ) - { - bbs_ERROR2( "int32 bts_Cluster2D_int32Z( .... )\n" - "indexA = %i is out of range [0,%i]", - indexA, - ptrA->sizeE - 1 ); - return 0; - } -#endif - if( shiftL >= 0 ) - { - return ( int32 ) ptrA->vecArrE[ indexA ].zE << shiftL; - } - else - { - return ( ( ( int32 ) ptrA->vecArrE[ indexA ].zE >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster3D_create( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( ptrA->mspE == NULL ) - { - ptrA->sizeE = 0; - ptrA->allocatedSizeE = 0; - ptrA->vecArrE = NULL; - } - - if( ptrA->sizeE == sizeA ) return; - - if( ptrA->vecArrE != 0 ) - { - bbs_ERROR0( "void bts_Cluster3D_create( const struct bts_Cluster3D*, uint32 ):\n" - "object has already been created and cannot be resized." ); - return; - } - - ptrA->vecArrE = bbs_MemSeg_alloc( cpA, mspA, sizeA * bbs_SIZEOF16( struct bts_Int16Vec3D ) ); - if( bbs_Context_error( cpA ) ) return; - ptrA->sizeE = sizeA; - ptrA->allocatedSizeE = sizeA; - if( !mspA->sharedE ) ptrA->mspE = mspA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster3D_size( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - uint32 sizeA ) -{ - if( ptrA->allocatedSizeE < sizeA ) - { - bbs_ERROR2( "void bts_Cluster3D_size( struct bts_Cluster3D* ptrA, uint32 sizeA ):\n" - "Allocated size (%i) of cluster is smaller than requested size (%i).", - ptrA->allocatedSizeE, - sizeA ); - return; - } - ptrA->sizeE = sizeA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Cluster3D_transform( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - struct bts_Flt16Alt3D altA ) -{ - struct bts_Int16Vec3D* vecPtrL = ptrA->vecArrE; - uint32 iL; - - int32 x0L = altA.vecE.xE; - int32 y0L = altA.vecE.yE; - int32 z0L = altA.vecE.zE; - - int32 shiftL = altA.matE.bbpE + ptrA->bbpE - altA.vecE.bbpE; - - if( shiftL < 0 ) - { - x0L = ( ( x0L >> ( -shiftL - 1 ) ) + 1 ) >> 1; - y0L = ( ( y0L >> ( -shiftL - 1 ) ) + 1 ) >> 1; - z0L = ( ( z0L >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } - else - { - x0L <<= shiftL; - y0L <<= shiftL; - z0L <<= shiftL; - } - - if( altA.matE.bbpE > 0 ) - { - x0L += (int32)1 << ( altA.matE.bbpE - 1 ); - y0L += (int32)1 << ( altA.matE.bbpE - 1 ); - z0L += (int32)1 << ( altA.matE.bbpE - 1 ); - } - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - int32 xL = vecPtrL->xE; - int32 yL = vecPtrL->yE; - int32 zL = vecPtrL->zE; - vecPtrL->xE = ( x0L + xL * altA.matE.xxE + yL * altA.matE.xyE + zL * altA.matE.xzE ) >> altA.matE.bbpE; - vecPtrL->yE = ( y0L + xL * altA.matE.yxE + yL * altA.matE.yyE + zL * altA.matE.yzE ) >> altA.matE.bbpE; - vecPtrL->zE = ( z0L + xL * altA.matE.zxE + yL * altA.matE.zyE + zL * altA.matE.zzE ) >> altA.matE.bbpE; - vecPtrL++; - } -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Cluster3D_centerFree( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA ) -{ - struct bts_Flt16Vec3D centerL = bts_Cluster3D_center( cpA, ptrA ); - struct bts_Int16Vec3D* vecPtrL = ptrA->vecArrE; - uint32 iL; - - for( iL = ptrA->sizeE; iL > 0; iL-- ) - { - vecPtrL->xE -= centerL.xE; - vecPtrL->yE -= centerL.yE; - vecPtrL->zE -= centerL.zE; - vecPtrL++; - } - - return centerL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Cluster3D_memSize( struct bbs_Context* cpA, - const struct bts_Cluster3D *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->sizeE ) - + bbs_SIZEOF16( ptrA->bbpE ) - + bbs_SIZEOF16( struct bts_Int16Vec3D ) * ptrA->sizeE; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Cluster3D_memWrite( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_Cluster3D_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_CLUSTER3D_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->bbpE, memPtrA ); - memPtrA += bbs_memWrite16Arr( cpA, ptrA->vecArrE, - ptrA->sizeE * bbs_SIZEOF16( struct bts_Int16Vec3D ), - memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Cluster3D_memRead( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL; - uint32 sizeL; - uint32 versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_CLUSTER3D_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &sizeL, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->bbpE, memPtrA ); - - if( ptrA->allocatedSizeE < sizeL ) - { - bts_Cluster3D_create( cpA, ptrA, sizeL, mspA ); - } - else - { - bts_Cluster3D_size( cpA, ptrA, sizeL ); - } - - - bbs_memcpy16( ptrA->vecArrE, memPtrA, bbs_SIZEOF16( struct bts_Int16Vec3D ) * ptrA->sizeE ); - memPtrA += bbs_memRead16Arr( cpA, ptrA->vecArrE, - ptrA->sizeE * bbs_SIZEOF16( struct bts_Int16Vec3D ), - memPtrA ); - - if( memSizeL != bts_Cluster3D_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Cluster3D_memRead( const struct bts_Cluster3D* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Cluster3D.h b/Embedded/common/src/b_TensorEm/Cluster3D.h deleted file mode 100644 index 70a75f7..0000000 --- a/Embedded/common/src/b_TensorEm/Cluster3D.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_CLUSTER3D_EM_H -#define bts_CLUSTER3D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" -#include "b_TensorEm/Int16Vec3D.h" -#include "b_TensorEm/Flt16Vec3D.h" -#include "b_TensorEm/Int16Rect.h" -#include "b_TensorEm/Flt16Alt3D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bts_CLUSTER3D_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** 3d vector array */ -struct bts_Cluster3D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** pointer to exclusive memory segment used for allocation */ - struct bbs_MemSeg* mspE; - - /** number of allocated vectors */ - uint32 allocatedSizeE; - - /** number of vectors */ - uint32 sizeE; - - /** format of vectors (bbpE always > 0) */ - int32 bbpE; - - /** array of int16 vectors */ - struct bts_Int16Vec3D* vecArrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes cluster */ -void bts_Cluster3D_init( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA ); - -/** destroys cluster */ -void bts_Cluster3D_exit( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copies cluster */ -void bts_Cluster3D_copy( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - const struct bts_Cluster3D* srcPtrA ); - -/** compares cluster */ -flag bts_Cluster3D_equal( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - const struct bts_Cluster3D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns center of gravity */ -struct bts_Flt16Vec3D bts_Cluster3D_center( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA ); - -/** returns bounding box */ -struct bts_Int16Rect bts_Cluster3D_boundingBox( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA ); - -/** returns int32 x-coordinate with given bbp at indexed position */ -int32 bts_Cluster3D_int32X( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint32 indexA, - int32 bbpA ); - -/** returns int32 y-coordinate with given bbp at indexed position */ -int32 bts_Cluster3D_int32Y( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint32 indexA, - int32 bbpA ); - -/** returns int32 z-coordinate with given bbp at indexed position */ -int32 bts_Cluster3D_int32Z( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint32 indexA, - int32 bbpA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates cluster */ -void bts_Cluster3D_create( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** resize cluster (sizeA must be smaller or equal to allocated size)*/ -void bts_Cluster3D_size( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - uint32 sizeA ); - -/** allocates cluster with external memory */ -void bts_Cluster3D_assignExternalMemory( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - struct bts_Int16Vec3D* vecArrA, - uint32 sizeA ); - -/** transforms cluster according to alt (function does not change bbp of cluster) */ -void bts_Cluster3D_transform( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - struct bts_Flt16Alt3D altA ); - -/** translates cluster such that gravity center is 0; returns former gravity center */ -struct bts_Flt16Vec3D bts_Cluster3D_centerFree( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size in words (16-bit) object needs when written to memory */ -uint32 bts_Cluster3D_memSize( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_Cluster3D_memWrite( struct bbs_Context* cpA, - const struct bts_Cluster3D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_Cluster3D_memRead( struct bbs_Context* cpA, - struct bts_Cluster3D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -#endif /* bts_CLUSTER3D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/CompactAlt.c b/Embedded/common/src/b_TensorEm/CompactAlt.c deleted file mode 100644 index d1c8a95..0000000 --- a/Embedded/common/src/b_TensorEm/CompactAlt.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/CompactAlt.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_CompactAlt_init( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA ) -{ - bts_CompactMat_init( cpA, &ptrA->matE ); - bbs_Int16Arr_init( cpA, &ptrA->vecE ); - ptrA->vecExpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_CompactAlt_exit( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA ) -{ - bts_CompactMat_exit( cpA, &ptrA->matE ); - bbs_Int16Arr_exit( cpA, &ptrA->vecE ); - ptrA->vecExpE = 0; -} -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_CompactAlt_create( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA, - uint32 widthA, - uint32 heightA, - uint32 bitsA, - uint32 maxRowSizeA, - struct bbs_MemSeg* mspA ) -{ - bts_CompactMat_create( cpA, &ptrA->matE, widthA, heightA, bitsA, maxRowSizeA, mspA ); - bbs_Int16Arr_create( cpA, &ptrA->vecE, heightA, mspA ); - bbs_Int16Arr_fill( cpA, &ptrA->vecE, 0 ); - ptrA->vecExpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_CompactAlt_copy( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA, - const struct bts_CompactAlt* srcPtrA ) -{ - bts_CompactMat_copy( cpA, &ptrA->matE, &srcPtrA->matE ); - bbs_Int16Arr_copy( cpA, &ptrA->vecE, &srcPtrA->vecE ); - ptrA->vecExpE = srcPtrA->vecExpE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_CompactAlt_memSize( struct bbs_Context* cpA, - const struct bts_CompactAlt *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bts_CompactMat_memSize( cpA, &ptrA->matE ) - + bbs_Int16Arr_memSize( cpA, &ptrA->vecE ) - + bbs_SIZEOF16( ptrA->vecExpE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_CompactAlt_memWrite( struct bbs_Context* cpA, - const struct bts_CompactAlt* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_CompactAlt_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_COMPACT_ALT_VERSION, memPtrA ); - memPtrA += bts_CompactMat_memWrite( cpA, &ptrA->matE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->vecE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->vecExpE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_CompactAlt_memRead( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_COMPACT_ALT_VERSION, memPtrA ); - memPtrA += bts_CompactMat_memRead( cpA, &ptrA->matE, memPtrA, mspA ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->vecE, memPtrA, mspA ); - memPtrA += bbs_memRead32( &ptrA->vecExpE, memPtrA ); - - if( memSizeL != bts_CompactAlt_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_CompactAlt_memRead( const struct bts_CompactAlt* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_CompactAlt_map( struct bbs_Context* cpA, - const struct bts_CompactAlt* ptrA, - const int16* inVecA, - int16 inExpA, - int16* outVecA, - int16* outExpPtrA ) -{ - uint32 iL; - uint32 sizeL = ptrA->matE.heightE; - - int32 expL = inExpA; - int16 mapExpL; - bts_CompactMat_map( cpA, &ptrA->matE, inVecA, outVecA, &mapExpL ); - expL += mapExpL; - - /* translation */ - if( ptrA->vecE.sizeE > 0 ) - { - const int16* vecL = ptrA->vecE.arrPtrE; - if( expL == ptrA->vecExpE ) - { - for( iL = 0; iL < sizeL; iL++ ) outVecA[ iL ] = ( ( int32 )outVecA[ iL ] + vecL[ iL ] + 1 ) >> 1; - expL += 1; - } - else if( expL > ptrA->vecExpE ) - { - int32 shrL = expL - ptrA->vecExpE; - int32 addL = ( int32 )1 << ( shrL - 1 ); - for( iL = 0; iL < sizeL; iL++ ) outVecA[ iL ] = ( ( int32 )outVecA[ iL ] + ( ( ( int32 )vecL[ iL ] + addL ) >> shrL ) + 1 ) >> 1; - expL += 1; - } - else - { - int32 shrL = ptrA->vecExpE - expL; - int32 addL = ( int32 )1 << ( shrL - 1 ); - for( iL = 0; iL < sizeL; iL++ ) outVecA[ iL ] = ( ( ( ( int32 )outVecA[ iL ] + addL ) >> shrL ) + vecL[ iL ] + 1 ) >> 1; - expL += 1 + shrL; - } - } - - /* precision underflow */ - if( expL < -32767 ) - { - bbs_memset16( outVecA, 0, ptrA->matE.heightE ); - expL = 0; - } - - if( outExpPtrA != NULL ) *outExpPtrA = expL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/CompactAlt.h b/Embedded/common/src/b_TensorEm/CompactAlt.h deleted file mode 100644 index 27188c8..0000000 --- a/Embedded/common/src/b_TensorEm/CompactAlt.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_COMPACT_ALT_EM_H -#define bts_COMPACT_ALT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/CompactMat.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bts_COMPACT_ALT_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** Compact Affine linear trasformation composed of compact matrix and - * translation vector (not compressed) - * - * Use this object for memory efficient storage of large matrices. - */ -struct bts_CompactAlt -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** compact matrix */ - struct bts_CompactMat matE; - - /** translation vector (size = 0 when no translation) */ - struct bbs_Int16Arr vecE; - - /** exponent of translation vector */ - int32 vecExpE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes object */ -void bts_CompactAlt_init( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA ); - -/** destroys object */ -void bts_CompactAlt_exit( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* copies alt */ -void bts_CompactAlt_copy( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA, - const struct bts_CompactAlt* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates alt */ -void bts_CompactAlt_create( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA, - uint32 widthA, - uint32 heightA, - uint32 bitsA, - uint32 maxRowSizeA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_CompactAlt_memSize( struct bbs_Context* cpA, - const struct bts_CompactAlt* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_CompactAlt_memWrite( struct bbs_Context* cpA, - const struct bts_CompactAlt* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_CompactAlt_memRead( struct bbs_Context* cpA, - struct bts_CompactAlt* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - * Function executes reasonably fast with maximum possible accuracy - * inExpA - input exponent - * outExpPtrA - exponent to output vector values - */ -void bts_CompactAlt_map( struct bbs_Context* cpA, - const struct bts_CompactAlt* ptrA, - const int16* inVecA, - int16 inExpA, - int16* outVecA, - int16* outExpPtrA ); - -#endif /* bts_COMPACT_ALT_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/CompactMat.c b/Embedded/common/src/b_TensorEm/CompactMat.c deleted file mode 100644 index 5bb44ec..0000000 --- a/Embedded/common/src/b_TensorEm/CompactMat.c +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/CompactMat.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/** Returns dot product of inVec with indexed row - The result is a floating point expresstion: - upper 16 bit: signed value - lower 16 bit: signed exponent - */ -int32 bts_CompactMat_fltDotPrdRow( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA, - const int16* inVecA, - uint32 inNormBitsA, - uint32 rowA ) -{ - const int16* rowPtrL = ptrA->cpsArrE.arrPtrE + ptrA->wordsPerRowE * rowA; - - /* extract row-header info */ - uint32 offsL = *rowPtrL++; - uint32 sizeL = *rowPtrL++; - int32 factorManL = *rowPtrL++; - int32 factorExpL = *rowPtrL++; - uint32 rowNormBitsL = *rowPtrL++; - - /* consider possible overflow */ - uint16 overflowBitsL = ( inNormBitsA + rowNormBitsL >= 31 ) ? inNormBitsA + rowNormBitsL - 31 : 0; - - const int16* inPtrL = inVecA + offsL; - - count_t iL; - int32 sumL = 0; - - if( overflowBitsL == 0 ) /* raw dot product fits in int32 */ - { - switch( ptrA->bitsPerValueE ) - { - case 16: - { - for( iL = sizeL; iL > 0; iL-- ) sumL += ( ( int32 )*rowPtrL++ * ( int32 )*inPtrL++ ); - } - break; - - #ifndef HW_TMS320C5x /* platforms that don't have int8 must use the 'default' implementation */ - - case 8: - { - const uint16* dpL = ( uint16* )rowPtrL; - for( iL = sizeL; iL >= 8; iL -= 8 ) - { - sumL += ( ( int8 ) dpL[ 0 ] * ( int32 )inPtrL[ 0 ] ); - sumL += ( ( int8 )( dpL[ 0 ] >> 8 ) * ( int32 )inPtrL[ 1 ] ); - sumL += ( ( int8 ) dpL[ 1 ] * ( int32 )inPtrL[ 2 ] ); - sumL += ( ( int8 )( dpL[ 1 ] >> 8 ) * ( int32 )inPtrL[ 3 ] ); - sumL += ( ( int8 ) dpL[ 2 ] * ( int32 )inPtrL[ 4 ] ); - sumL += ( ( int8 )( dpL[ 2 ] >> 8 ) * ( int32 )inPtrL[ 5 ] ); - sumL += ( ( int8 ) dpL[ 3 ] * ( int32 )inPtrL[ 6 ] ); - sumL += ( ( int8 )( dpL[ 3 ] >> 8 ) * ( int32 )inPtrL[ 7 ] ); - dpL += 4; - inPtrL += 8; - } - for( ; iL >= 2; iL -= 2 ) - { - sumL += ( ( int8 ) *dpL * ( int32 )inPtrL[ 0 ] ); - sumL += ( ( int8 )( *dpL >> 8 ) * ( int32 )inPtrL[ 1 ] ); - dpL++; - inPtrL += 2; - } - if( iL > 0 ) - { - sumL += ( ( int8 )*dpL++ * ( int32 )inPtrL[ 0 ] ); - } - } - break; - - case 6: - { - const uint16* dpL = ( uint16* )rowPtrL; - for( iL = sizeL; iL >= 8; iL -= 8 ) - { - int32 lSumL = 0; - lSumL += ( ( int8 ) ( dpL[ 0 ] << 2 ) * ( int32 )inPtrL[ 0 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 0 ] >> 4 ) & 0x00FC ) * ( int32 )inPtrL[ 1 ] ); - lSumL += ( ( int8 ) ( ( ( dpL[ 0 ] >> 10 ) | ( dpL[ 1 ] << 6 ) ) & 0x00FC ) * ( int32 )inPtrL[ 2 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 1 ] ) & 0x00FC ) * ( int32 )inPtrL[ 3 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 1 ] >> 6 ) & 0x00FC ) * ( int32 )inPtrL[ 4 ] ); - lSumL += ( ( int8 ) ( ( ( dpL[ 1 ] >> 12 ) | ( dpL[ 2 ] << 4 ) ) & 0x00FC ) * ( int32 )inPtrL[ 5 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 2 ] >> 2 ) & 0x00FC ) * ( int32 )inPtrL[ 6 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 2 ] >> 8 ) & 0x00FC ) * ( int32 )inPtrL[ 7 ] ); - sumL += ( lSumL >> 2 ); - dpL += 3; - inPtrL += 8; - } - - { - int32 lSumL = 0; - if( iL > 0 ) lSumL += ( ( int8 ) ( dpL[ 0 ] << 2 ) * ( int32 )inPtrL[ 0 ] ); - if( iL > 1 ) lSumL += ( ( int8 ) ( ( dpL[ 0 ] >> 4 ) & 0x00FC ) * ( int32 )inPtrL[ 1 ] ); - if( iL > 2 ) lSumL += ( ( int8 ) ( ( ( dpL[ 0 ] >> 10 ) | ( dpL[ 1 ] << 6 ) ) & 0x00FC ) * ( int32 )inPtrL[ 2 ] ); - if( iL > 3 ) lSumL += ( ( int8 ) ( ( dpL[ 1 ] ) & 0x00FC ) * ( int32 )inPtrL[ 3 ] ); - if( iL > 4 ) lSumL += ( ( int8 ) ( ( dpL[ 1 ] >> 6 ) & 0x00FC ) * ( int32 )inPtrL[ 4 ] ); - if( iL > 5 ) lSumL += ( ( int8 ) ( ( ( dpL[ 1 ] >> 12 ) | ( dpL[ 2 ] << 4 ) ) & 0x00FC ) * ( int32 )inPtrL[ 5 ] ); - if( iL > 6 ) lSumL += ( ( int8 ) ( ( dpL[ 2 ] >> 2 ) & 0x00FC ) * ( int32 )inPtrL[ 6 ] ); - sumL += ( lSumL >> 2 ); - } - } - break; - - case 5: - { - const uint16* dpL = ( uint16* )rowPtrL; - for( iL = sizeL; iL >= 16; iL -= 16 ) - { - int32 lSumL = 0; - lSumL += ( ( int8 ) ( dpL[ 0 ] << 3 ) * ( int32 )inPtrL[ 0 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 0 ] >> 2 ) & 0x00F8 ) * ( int32 )inPtrL[ 1 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 0 ] >> 7 ) & 0x00F8 ) * ( int32 )inPtrL[ 2 ] ); - lSumL += ( ( int8 ) ( ( ( dpL[ 0 ] >> 12 ) | ( dpL[ 1 ] << 4 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 3 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 1 ] >> 1 ) & 0x00F8 ) * ( int32 )inPtrL[ 4 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 1 ] >> 6 ) & 0x00F8 ) * ( int32 )inPtrL[ 5 ] ); - lSumL += ( ( int8 ) ( ( ( dpL[ 1 ] >> 11 ) | ( dpL[ 2 ] << 5 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 6 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 2 ] ) & 0x00F8 ) * ( int32 )inPtrL[ 7 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 2 ] >> 5 ) & 0x00F8 ) * ( int32 )inPtrL[ 8 ] ); - lSumL += ( ( int8 ) ( ( ( dpL[ 2 ] >> 10 ) | ( dpL[ 3 ] << 6 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 9 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 3 ] << 1 ) & 0x00F8 ) * ( int32 )inPtrL[ 10 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 3 ] >> 4 ) & 0x00F8 ) * ( int32 )inPtrL[ 11 ] ); - lSumL += ( ( int8 ) ( ( ( dpL[ 3 ] >> 9 ) | ( dpL[ 4 ] << 7 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 12 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 4 ] << 2 ) & 0x00F8 ) * ( int32 )inPtrL[ 13 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 4 ] >> 3 ) & 0x00F8 ) * ( int32 )inPtrL[ 14 ] ); - lSumL += ( ( int8 ) ( ( dpL[ 4 ] >> 8 ) & 0x00F8 ) * ( int32 )inPtrL[ 15 ] ); - sumL += ( lSumL >> 3 ); - dpL += 5; - inPtrL += 16; - } - - { - int32 lSumL = 0; - if( iL > 0 ) lSumL += ( ( int8 ) ( dpL[ 0 ] << 3 ) * ( int32 )inPtrL[ 0 ] ); - if( iL > 1 ) lSumL += ( ( int8 ) ( ( dpL[ 0 ] >> 2 ) & 0x00F8 ) * ( int32 )inPtrL[ 1 ] ); - if( iL > 2 ) lSumL += ( ( int8 ) ( ( dpL[ 0 ] >> 7 ) & 0x00F8 ) * ( int32 )inPtrL[ 2 ] ); - if( iL > 3 ) lSumL += ( ( int8 ) ( ( ( dpL[ 0 ] >> 12 ) | ( dpL[ 1 ] << 4 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 3 ] ); - if( iL > 4 ) lSumL += ( ( int8 ) ( ( dpL[ 1 ] >> 1 ) & 0x00F8 ) * ( int32 )inPtrL[ 4 ] ); - if( iL > 5 ) lSumL += ( ( int8 ) ( ( dpL[ 1 ] >> 6 ) & 0x00F8 ) * ( int32 )inPtrL[ 5 ] ); - if( iL > 6 ) lSumL += ( ( int8 ) ( ( ( dpL[ 1 ] >> 11 ) | ( dpL[ 2 ] << 5 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 6 ] ); - if( iL > 7 ) lSumL += ( ( int8 ) ( ( dpL[ 2 ] ) & 0x00F8 ) * ( int32 )inPtrL[ 7 ] ); - if( iL > 8 ) lSumL += ( ( int8 ) ( ( dpL[ 2 ] >> 5 ) & 0x00F8 ) * ( int32 )inPtrL[ 8 ] ); - if( iL > 9 ) lSumL += ( ( int8 ) ( ( ( dpL[ 2 ] >> 10 ) | ( dpL[ 3 ] << 6 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 9 ] ); - if( iL > 10 ) lSumL += ( ( int8 ) ( ( dpL[ 3 ] << 1 ) & 0x00F8 ) * ( int32 )inPtrL[ 10 ] ); - if( iL > 11 ) lSumL += ( ( int8 ) ( ( dpL[ 3 ] >> 4 ) & 0x00F8 ) * ( int32 )inPtrL[ 11 ] ); - if( iL > 12 ) lSumL += ( ( int8 ) ( ( ( dpL[ 3 ] >> 9 ) | ( dpL[ 4 ] << 7 ) ) & 0x00F8 ) * ( int32 )inPtrL[ 12 ] ); - if( iL > 13 ) lSumL += ( ( int8 ) ( ( dpL[ 4 ] << 2 ) & 0x00F8 ) * ( int32 )inPtrL[ 13 ] ); - if( iL > 14 ) lSumL += ( ( int8 ) ( ( dpL[ 4 ] >> 3 ) & 0x00F8 ) * ( int32 )inPtrL[ 14 ] ); - sumL += ( lSumL >> 3 ); - } - } - break; - - case 4: - { - for( iL = sizeL; iL >= 4; iL -= 4 ) - { - uint16 v1L = *rowPtrL++; - int32 lSumL = 0; - lSumL += ( ( int8 )( ( v1L << 4 ) ) * ( int32 )inPtrL[ 0 ] ); - lSumL += ( ( int8 )( ( v1L ) & 0xF0 ) * ( int32 )inPtrL[ 1 ] ); - lSumL += ( ( int8 )( ( v1L >> 4 ) & 0xF0 ) * ( int32 )inPtrL[ 2 ] ); - lSumL += ( ( int8 )( ( v1L >> 8 ) & 0xF0 ) * ( int32 )inPtrL[ 3 ] ); - inPtrL += 4; - sumL += ( lSumL >> 4 ); - } - { - uint16 v1L = *rowPtrL++; - int32 lSumL = 0; - if( iL-- > 0 ) lSumL += ( ( int8 )( ( v1L << 4 ) ) * ( int32 )inPtrL[ 0 ] ); - if( iL-- > 0 ) lSumL += ( ( int8 )( ( v1L ) & 0xF0 ) * ( int32 )inPtrL[ 1 ] ); - if( iL-- > 0 ) lSumL += ( ( int8 )( ( v1L >> 4 ) & 0xF0 ) * ( int32 )inPtrL[ 2 ] ); - sumL += ( lSumL >> 4 ); - } - } - break; - - #endif /*ifndef HW_TMS320C5x*/ - - /* The default case can process all bit sizes including those that are explicitly encoded above - * Use the default for all bit sizes when the platform cannot handle the int8 data type (e.g. HW_TMS320C5x) - */ - default: - { - uint32 bfL = ( ( uint32 )*rowPtrL++ ) << 16; - uint32 bitsL = ptrA->bitsPerValueE; - uint16 adjL = 16 - bitsL; - uint32 mkL = ( ( 1 << bitsL ) - 1 ) << adjL; - uint32 srL = bitsL; - for( iL = 0; iL < sizeL; iL++ ) - { - if( srL > 16 ) - { - bfL = ( ( ( uint32 )*rowPtrL++ ) << 16 ) | ( bfL >> 16 ); - srL -= 16; - } - sumL += ( ( int16 )( ( bfL >> srL ) & mkL ) * ( int32 )inPtrL[ iL ] ) >> adjL; - srL += bitsL; - } - } - } - } - else /* raw dot product does not fit in int32 */ - { - int32 roundL = 1 << ( overflowBitsL - 1 ); - switch( ptrA->bitsPerValueE ) - { - case 16: - { - for( iL = sizeL; iL > 0; iL-- ) sumL += ( ( ( int32 )*rowPtrL++ * ( int32 )*inPtrL++ ) + roundL ) >> overflowBitsL; - } - break; - - case 8: - { - for( iL = sizeL; iL >= 2; iL -= 2 ) - { - uint16 v1L = *rowPtrL++; - int32 lSumL = ( ( int8 ) v1L * ( int32 )inPtrL[ 0 ] ) - + ( ( int8 )( v1L >> 8 ) * ( int32 )inPtrL[ 1 ] ); - sumL += ( lSumL + roundL ) >> overflowBitsL; - inPtrL += 2; - } - if( iL > 0 ) - { - sumL += ( ( ( int8 )*rowPtrL++ * ( int32 )inPtrL[ 0 ] ) + roundL ) >> overflowBitsL; - } - } - break; - - case 4: - { - for( iL = sizeL; iL >= 4; iL -= 4 ) - { - uint16 v1L = *rowPtrL++; - int32 lSumL = 0; - lSumL += ( ( int8 )( ( v1L << 4 ) ) * ( int32 )inPtrL[ 0 ] ); - lSumL += ( ( int8 )( ( v1L ) & 0xF0 ) * ( int32 )inPtrL[ 1 ] ); - lSumL += ( ( int8 )( ( v1L >> 4 ) & 0xF0 ) * ( int32 )inPtrL[ 2 ] ); - lSumL += ( ( int8 )( ( v1L >> 8 ) & 0xF0 ) * ( int32 )inPtrL[ 3 ] ); - inPtrL += 4; - sumL += ( ( lSumL >> 4 ) + roundL ) >> overflowBitsL; - } - { - uint16 v1L = *rowPtrL++; - int32 lSumL = 0; - if( iL-- > 0 ) lSumL += ( ( int8 )( ( v1L << 4 ) ) * ( int32 )inPtrL[ 0 ] ); - if( iL-- > 0 ) lSumL += ( ( int8 )( ( v1L ) & 0xF0 ) * ( int32 )inPtrL[ 1 ] ); - if( iL-- > 0 ) lSumL += ( ( int8 )( ( v1L >> 4 ) & 0xF0 ) * ( int32 )inPtrL[ 2 ] ); - sumL += ( ( lSumL >> 4 ) + roundL ) >> overflowBitsL; - } - } - break; - - default: - { - uint32 bfL = ( ( uint32 )*rowPtrL++ ) << 16; - uint32 bitsL = ptrA->bitsPerValueE; - uint16 adjL = 16 - bitsL; - uint32 mkL = ( ( 1 << bitsL ) - 1 ) << adjL; - uint32 srL = bitsL; - int32 lRoundL = roundL << adjL; - int32 lAdjL = overflowBitsL + adjL; - for( iL = 0; iL < sizeL; iL++ ) - { - if( srL > 16 ) - { - bfL = ( ( ( uint32 )*rowPtrL++ ) << 16 ) | ( bfL >> 16 ); - srL -= 16; - } - sumL += ( ( int16 )( ( bfL >> srL ) & mkL ) * ( int32 )inPtrL[ iL ] + lRoundL ) >> lAdjL; - srL += bitsL; - } - } - } - } - - /* compute result */ - { - int32 resultManL; - int32 resultExpL; - int32 resultLogL; - bbs_mulS32( sumL, factorManL, &resultManL, &resultExpL ); - resultExpL += factorExpL + overflowBitsL; - resultLogL = bbs_intLog2( resultManL > 0 ? resultManL : -resultManL ); - if( resultLogL < 30 ) - { - resultManL <<= 30 - resultLogL; - resultExpL -= 30 - resultLogL; - } - - resultManL = ( ( resultManL >> 15 ) + 1 ) >> 1; - resultExpL = resultExpL + 16; - - return ( ( resultManL & 0x0000FFFF ) << 16 ) | ( resultExpL & 0x0000FFFF ); - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_CompactMat_init( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA ) -{ - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->bitsPerValueE = 0; - ptrA->wordsPerRowE = 0; - ptrA->maxRowBitsE = 0; - bbs_Int16Arr_init( cpA, &ptrA->cpsArrE ); - bbs_Int16Arr_init( cpA, &ptrA->expArrE ); - -} - -/* ------------------------------------------------------------------------- */ - -void bts_CompactMat_exit( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA ) -{ - ptrA->widthE = 0; - ptrA->heightE = 0; - ptrA->bitsPerValueE = 0; - ptrA->wordsPerRowE = 0; - ptrA->maxRowBitsE = 0; - bbs_Int16Arr_exit( cpA, &ptrA->cpsArrE ); - bbs_Int16Arr_exit( cpA, &ptrA->expArrE ); -} -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_CompactMat_create( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA, - uint32 widthA, - uint32 heightA, - uint32 bitsA, - uint32 maxRowSizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - if( bitsA < 2 || bitsA > 16 ) - { - bbs_ERROR0( "bts_CompactMat_create:\nbitsA must be between 2 and 16" ); - return; - } - - ptrA->widthE = widthA; - ptrA->heightE = heightA; - ptrA->bitsPerValueE = bitsA; - ptrA->wordsPerRowE = 6 /*header + 1*/ + ( ( maxRowSizeA * bitsA ) / ( 8 * sizeof( short ) ) ); - ptrA->maxRowBitsE = 0; - if( ( ptrA->wordsPerRowE & 1 ) != 0 ) ptrA->wordsPerRowE++; - bbs_Int16Arr_create( cpA, &ptrA->cpsArrE, heightA * ptrA->wordsPerRowE, mspA ); - bbs_Int16Arr_fill( cpA, &ptrA->cpsArrE, 0 ); - bbs_Int16Arr_create( cpA, &ptrA->expArrE, ptrA->heightE, mspA ); - bbs_Int16Arr_fill( cpA, &ptrA->expArrE, 0 ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_CompactMat_copy( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA, - const struct bts_CompactMat* srcPtrA ) -{ - ptrA->widthE = srcPtrA->widthE; - ptrA->heightE = srcPtrA->heightE; - ptrA->bitsPerValueE = srcPtrA->bitsPerValueE; - ptrA->wordsPerRowE = srcPtrA->wordsPerRowE; - ptrA->maxRowBitsE = srcPtrA->maxRowBitsE; - bbs_Int16Arr_copy( cpA, &ptrA->cpsArrE, &srcPtrA->cpsArrE ); - bbs_Int16Arr_size( cpA, &ptrA->expArrE, ptrA->heightE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_CompactMat_memSize( struct bbs_Context* cpA, - const struct bts_CompactMat *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_SIZEOF16( ptrA->heightE ) - + bbs_SIZEOF16( ptrA->bitsPerValueE ) - + bbs_SIZEOF16( ptrA->wordsPerRowE ) - + bbs_SIZEOF16( ptrA->maxRowBitsE ) - + bbs_Int16Arr_memSize( cpA, &ptrA->cpsArrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_CompactMat_memWrite( struct bbs_Context* cpA, - const struct bts_CompactMat* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_CompactMat_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_COMPACT_MAT_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->bitsPerValueE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->wordsPerRowE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->maxRowBitsE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->cpsArrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_CompactMat_memRead( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_COMPACT_MAT_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->heightE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->bitsPerValueE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->wordsPerRowE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->maxRowBitsE, memPtrA ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->cpsArrE, memPtrA, mspA ); - - if( memSizeL != bts_CompactMat_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_CompactMat_memRead( const struct bts_CompactMat* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - } - - bbs_Int16Arr_create( cpA, &ptrA->expArrE, ptrA->heightE, mspA ); - bbs_Int16Arr_fill( cpA, &ptrA->expArrE, 0 ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_CompactMat_map( struct bbs_Context* cpA, - const struct bts_CompactMat* ptrA, - const int16* inVecA, - int16* outVecA, - int16* outExpPtrA ) -{ - uint32 inNormBitsL = bbs_intLog2( bbs_vecNorm16( inVecA, ptrA->widthE ) ) + 1; - uint32 iL; - - int16* expArrL = ( ( struct bts_CompactMat* )ptrA )->expArrE.arrPtrE; - int16 maxExpL = -32767; - - for( iL = 0; iL < ptrA->heightE; iL++ ) - { - int32 fltL = bts_CompactMat_fltDotPrdRow( cpA, ( struct bts_CompactMat* )ptrA, inVecA, inNormBitsL, iL ); - outVecA[ iL ] = fltL >> 16; - expArrL[ iL ] = fltL & 0x0000FFFF; - - maxExpL = ( expArrL[ iL ] > maxExpL ) ? expArrL[ iL ] : maxExpL; - } - - if( outExpPtrA != NULL ) *outExpPtrA = maxExpL; - - for( iL = 0; iL < ptrA->heightE; iL++ ) - { - int32 shrL = maxExpL - expArrL[ iL ]; - if( shrL > 0 ) - { - outVecA[ iL ] = ( ( outVecA[ iL ] >> ( shrL - 1 ) ) + 1 ) >> 1; - } - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/CompactMat.h b/Embedded/common/src/b_TensorEm/CompactMat.h deleted file mode 100644 index c6fbd31..0000000 --- a/Embedded/common/src/b_TensorEm/CompactMat.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_COMPACT_MAT_EM_H -#define bts_COMPACT_MAT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Int16Arr.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bts_COMPACT_MAT_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** Compact Matrix - * This object represents a general nxm Matrix that stores its values in - * bit-packs of fixed size. Rows are encoded individually to yield - * maximum accuracy for the given number of bits. The matrix takes sparseness - * into account. - * - * Use this object for memory efficient storage of large matrices. - */ -struct bts_CompactMat -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /* width (columns) of matrix */ - uint32 widthE; - - /* height (rows) of matrix */ - uint32 heightE; - - /* bits per value */ - uint32 bitsPerValueE; - - /* 16 bit words per row including row-header (always even) */ - uint32 wordsPerRowE; - - /* maximum of ( 16 + factorExp + normBits ) for all rows (this value can be negative!) */ - int32 maxRowBitsE; - - /** Composite data array - * Encoding per row: - * (int16) 'offs' offset of row-vector (0 when row is not sparse) - * (int16) 'size' effective size of row vector (= widthE when row is not sparse) - * (int16) 'factorMan' mantisse of factor - * (int16) 'factorExp' exponent of factor - * (int16) 'normBits' norm bits of row vector - * (int16), (int16), ... packed data - * Each row has the effective length of 'wordsPerRowE' - * wordsPerRowE is always even -> rows are 32bit-aligned - */ - struct bbs_Int16Arr cpsArrE; - - /** temorary array used for exponents */ - struct bbs_Int16Arr expArrE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes object */ -void bts_CompactMat_init( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA ); - -/** destroys object */ -void bts_CompactMat_exit( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* copies matrix */ -void bts_CompactMat_copy( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA, - const struct bts_CompactMat* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates matrix */ -void bts_CompactMat_create( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA, - uint32 widthA, - uint32 heightA, - uint32 bitsA, - uint32 maxRowSizeA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_CompactMat_memSize( struct bbs_Context* cpA, - const struct bts_CompactMat* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_CompactMat_memWrite( struct bbs_Context* cpA, - const struct bts_CompactMat* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_CompactMat_memRead( struct bbs_Context* cpA, - struct bts_CompactMat* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - * Function executes reasonably fast with maximum possible accuracy - * outExpPtrA - exponent to output vector values - */ -void bts_CompactMat_map( struct bbs_Context* cpA, - const struct bts_CompactMat* ptrA, - const int16* inVecA, - int16* outVecA, - int16* outExpPtrA ); - -#endif /* bts_COMPACT_MAT_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Alt2D.c b/Embedded/common/src/b_TensorEm/Flt16Alt2D.c deleted file mode 100644 index dd6189c..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Alt2D.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Flt16Alt2D.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Alt2D_init( struct bts_Flt16Alt2D* ptrA ) -{ - bts_Flt16Mat2D_init( &ptrA->matE ); - bts_Flt16Vec2D_init( &ptrA->vecE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Alt2D_exit( struct bts_Flt16Alt2D* ptrA ) -{ - bts_Flt16Mat2D_exit( &ptrA->matE ); - bts_Flt16Vec2D_exit( &ptrA->vecE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Alt2D_copy( struct bts_Flt16Alt2D* ptrA, const struct bts_Flt16Alt2D* srcPtrA ) -{ - bts_Flt16Mat2D_copy( &ptrA->matE, &srcPtrA->matE ); - bts_Flt16Vec2D_copy( &ptrA->vecE, &srcPtrA->vecE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Flt16Alt2D_equal( const struct bts_Flt16Alt2D* ptrA, const struct bts_Flt16Alt2D* srcPtrA ) -{ - if( ! bts_Flt16Mat2D_equal( &ptrA->matE, &srcPtrA->matE ) ) return FALSE; - if( ! bts_Flt16Vec2D_equal( &ptrA->vecE, &srcPtrA->vecE ) ) return FALSE; - return TRUE; -} - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Alt2D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Alt2D *ptrA ) -{ - bbs_ERROR0( "unimplemented function" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Alt2D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Alt2D* ptrA, - uint16* memPtrA ) -{ - bbs_ERROR0( "unimplemented function" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Alt2D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Alt2D* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - bbs_ERROR0( "unimplemented function" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_createIdentity() -{ - struct bts_Flt16Alt2D altL = { { 1, 0, 0, 1, 0 }, { 0, 0, 0 } }; - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_createRotation( phase16 angleA, - const struct bts_Flt16Vec2D* centerPtrA ) -{ - struct bts_Flt16Alt2D altL; - altL.matE = bts_Flt16Mat2D_createRotation( angleA ); - altL.vecE = bts_Flt16Vec2D_sub( *centerPtrA, bts_Flt16Mat2D_mapFlt( &altL.matE, centerPtrA ) ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_createScale( int32 scaleA, - int32 scaleBbpA, - const struct bts_Flt16Vec2D* centerPtrA ) -{ - struct bts_Flt16Alt2D altL; - altL.matE = bts_Flt16Mat2D_createScale( scaleA, scaleBbpA ); - altL.vecE = bts_Flt16Vec2D_sub( *centerPtrA, bts_Flt16Mat2D_mapFlt( &altL.matE, centerPtrA ) ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_createRigid( phase16 angleA, - int32 scaleA, - int32 scaleBbpA, - const struct bts_Flt16Vec2D* centerPtrA ) -{ - struct bts_Flt16Alt2D altL; - altL.matE = bts_Flt16Mat2D_createRigid( angleA, scaleA, scaleBbpA ); - altL.vecE = bts_Flt16Vec2D_sub( *centerPtrA, bts_Flt16Mat2D_mapFlt( &altL.matE, centerPtrA ) ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_createRigidMap( struct bts_Flt16Vec2D vecIn1A, - struct bts_Flt16Vec2D vecIn2A, - struct bts_Flt16Vec2D vecOut1A, - struct bts_Flt16Vec2D vecOut2A ) -{ - struct bts_Flt16Vec2D diffInL = bts_Flt16Vec2D_sub( vecIn1A, vecIn2A ); - struct bts_Flt16Vec2D diffOutL = bts_Flt16Vec2D_sub( vecOut1A, vecOut2A ); - struct bts_Flt16Vec2D centerInL = bts_Flt16Vec2D_mul( bts_Flt16Vec2D_add( vecIn1A, vecIn2A ), 1, 1 ); /* mul by 0.5 */ - struct bts_Flt16Vec2D centerOutL = bts_Flt16Vec2D_mul( bts_Flt16Vec2D_add( vecOut1A, vecOut2A ), 1, 1 ); /* mul by 0.5 */ - - struct bts_Flt16Vec2D transL = bts_Flt16Vec2D_sub( centerOutL, centerInL ); - phase16 angleL = bts_Flt16Vec2D_enclosedAngle( &diffOutL, &diffInL ); - uint32 normInL = bts_Flt16Vec2D_norm( &diffInL ); - uint32 normOutL = bts_Flt16Vec2D_norm( &diffOutL ); - - uint32 scaleL = ( normInL > 0 ) ? ( normOutL << 16 ) / normInL : 0xFFFFFFFF; - uint32 scaleBbpL = 16 + diffOutL.bbpE - diffInL.bbpE; - - struct bts_Flt16Alt2D altL; - - /* fit scale factor in 15 bit */ - uint32 scaleExpL = bbs_intLog2( scaleL ); - if( scaleExpL > 14 ) - { - scaleL >>= scaleExpL - 14; - scaleBbpL -= scaleExpL - 14; - } - - altL = bts_Flt16Alt2D_createRigid( angleL, ( int16 )scaleL, scaleBbpL, ¢erInL ); - - altL.vecE = bts_Flt16Vec2D_add( altL.vecE, transL ); - - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_create16( int16 xxA, - int16 xyA, - int16 yxA, - int16 yyA, - int16 matBbpA, - int16 xA, - int16 yA, - int16 vecBbpA ) -{ - struct bts_Flt16Alt2D altL; - altL.matE = bts_Flt16Mat2D_create16( xxA, xyA, yxA, yyA, matBbpA ); - altL.vecE = bts_Flt16Vec2D_create16( xA, yA, vecBbpA ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_create32( int32 xxA, - int32 xyA, - int32 yxA, - int32 yyA, - int32 matBbpA, - int32 xA, - int32 yA, - int32 vecBbpA ) -{ - struct bts_Flt16Alt2D altL; - altL.matE = bts_Flt16Mat2D_create32( xxA, xyA, yxA, yyA, matBbpA ); - altL.vecE = bts_Flt16Vec2D_create32( xA, yA, vecBbpA ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Alt2D_mapFlt( const struct bts_Flt16Alt2D* altPtrA, - const struct bts_Flt16Vec2D* vecPtrA ) -{ - return bts_Flt16Vec2D_add( altPtrA->vecE, bts_Flt16Mat2D_mapFlt( &altPtrA->matE, vecPtrA ) ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_mul( const struct bts_Flt16Alt2D* alt1PtrA, - const struct bts_Flt16Alt2D* alt2PtrA ) -{ - struct bts_Flt16Alt2D altL; - altL.vecE = bts_Flt16Alt2D_mapFlt( alt1PtrA, &alt2PtrA->vecE ); - altL.matE = bts_Flt16Mat2D_mul( &alt1PtrA->matE, &alt2PtrA->matE ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -/** multiplies matrix with matA; returns pointer to resulting matrix */ -struct bts_Flt16Alt2D* bts_Flt16Alt2D_mulTo( struct bts_Flt16Alt2D* alt1PtrA, - const struct bts_Flt16Alt2D* alt2PtrA ) -{ - *alt1PtrA = bts_Flt16Alt2D_mul( alt1PtrA, alt2PtrA ); - return alt1PtrA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Alt2D_invert( struct bts_Flt16Alt2D* ptrA ) -{ - bts_Flt16Mat2D_invert( &ptrA->matE ); - - ptrA->vecE = bts_Flt16Vec2D_create32( - ( ( ( int32 ) ptrA->matE.xxE * ptrA->vecE.xE + ( int32 ) ptrA->matE.xyE * ptrA->vecE.yE ) ), - - ( ( ( int32 ) ptrA->matE.yxE * ptrA->vecE.xE + ( int32 ) ptrA->matE.yyE * ptrA->vecE.yE ) ), - ptrA->vecE.bbpE + ptrA->matE.bbpE ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_Flt16Alt2D_inverted( const struct bts_Flt16Alt2D* ptrA ) -{ - struct bts_Flt16Alt2D altL = *ptrA; - bts_Flt16Alt2D_invert( &altL ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/Flt16Alt2D.h b/Embedded/common/src/b_TensorEm/Flt16Alt2D.h deleted file mode 100644 index 4103bbe..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Alt2D.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FLT16ALT2D_EM_H -#define bts_FLT16ALT2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_TensorEm/Flt16Mat2D.h" -#include "b_TensorEm/Flt16Vec2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d affine linear trafo */ -struct bts_Flt16Alt2D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** matrix */ - struct bts_Flt16Mat2D matE; - - /** vector */ - struct bts_Flt16Vec2D vecE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes alt */ -void bts_Flt16Alt2D_init( struct bts_Flt16Alt2D* ptrA ); - -/** destroys alt */ -void bts_Flt16Alt2D_exit( struct bts_Flt16Alt2D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_Flt16Alt2D_copy( struct bts_Flt16Alt2D* ptrA, - const struct bts_Flt16Alt2D* srcPtrA ); - -/** equal operator */ -flag bts_Flt16Alt2D_equal( const struct bts_Flt16Alt2D* ptrA, - const struct bts_Flt16Alt2D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Flt16Alt2D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Alt2D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Flt16Alt2D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Alt2D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Flt16Alt2D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Alt2D* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** inverts alt */ -void bts_Flt16Alt2D_invert( struct bts_Flt16Alt2D* ptrA ); - -/** returns inverted alt */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_inverted( const struct bts_Flt16Alt2D* ptrA ); - -/** creates identity alt */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_createIdentity( void ); - -/** creates rotation alt */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_createRotation( phase16 angleA, - const struct bts_Flt16Vec2D* centerPtrA ); - -/** creates scale alt */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_createScale( int32 scaleA, - int32 scaleBbpA, - const struct bts_Flt16Vec2D* centerPtrA ); - -/** creates rigid alt (scale & rotation) */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_createRigid( phase16 angleA, - int32 scaleA, - int32 scaleBbpA, - const struct bts_Flt16Vec2D* centerPtrA ); - -/** creates rigid alt (scale & rotation) that mapps vecIn1 and vecIn2 to vecOut1 and vecOut2*/ -struct bts_Flt16Alt2D bts_Flt16Alt2D_createRigidMap( struct bts_Flt16Vec2D vecIn1A, - struct bts_Flt16Vec2D vecIn2A, - struct bts_Flt16Vec2D vecOut1A, - struct bts_Flt16Vec2D vecOut2A ); - -/** creates alt from 16 bit values */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_create16( int16 xxA, - int16 xyA, - int16 yxA, - int16 yyA, - int16 matBbpA, - int16 xA, - int16 yA, - int16 vecBbpA ); - -/** creates alt from 32 bit values (automatic adjustment of bbp value) */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_create32( int32 xxA, - int32 xyA, - int32 yxA, - int32 yyA, - int32 matBbpA, - int32 xA, - int32 yA, - int32 vecBbpA ); - -/** Multiplies matrix with float vecA; returns resulting vector. - * bbp can get changed. - */ -struct bts_Flt16Vec2D bts_Flt16Alt2D_mapFlt( const struct bts_Flt16Alt2D* matPtrA, - const struct bts_Flt16Vec2D* vecPtrA ); - -/** multiplies alt with altA returns resulting alt */ -struct bts_Flt16Alt2D bts_Flt16Alt2D_mul( const struct bts_Flt16Alt2D* alt1PtrA, - const struct bts_Flt16Alt2D* alt2PtrA ); - -/** multiplies alt with matA; returns pointer to resulting alt */ -struct bts_Flt16Alt2D* bts_Flt16Alt2D_mulTo( struct bts_Flt16Alt2D* alt1PtrA, - const struct bts_Flt16Alt2D* alt2PtrA ); - -#endif /* bts_FLT16ALT2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Alt3D.c b/Embedded/common/src/b_TensorEm/Flt16Alt3D.c deleted file mode 100644 index 16a25da..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Alt3D.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Flt16Alt3D.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Alt3D_init( struct bts_Flt16Alt3D* ptrA ) -{ - bts_Flt16Mat3D_init( &ptrA->matE ); - bts_Flt16Vec3D_init( &ptrA->vecE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Alt3D_exit( struct bts_Flt16Alt3D* ptrA ) -{ - bts_Flt16Mat3D_exit( &ptrA->matE ); - bts_Flt16Vec3D_exit( &ptrA->vecE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Alt3D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Alt3D *ptrA ) -{ - bbs_ERROR0( "unimplemented function" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Alt3D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Alt3D* ptrA, - uint16* memPtrA ) -{ - bbs_ERROR0( "unimplemented function" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Alt3D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Alt3D* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - bbs_ERROR0( "unimplemented function" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt3D bts_Flt16Alt3D_createIdentity() -{ - struct bts_Flt16Alt3D altL = { { 1, 0, 0, - 0, 1, 0, - 0, 0, 1, 0 }, { 0, 0, 0, 0 } }; - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt3D bts_Flt16Alt3D_createScale( int32 scaleA, - int32 scaleBbpA, - const struct bts_Flt16Vec3D* centerPtrA ) -{ - struct bts_Flt16Alt3D altL; - altL.matE = bts_Flt16Mat3D_createScale( scaleA, scaleBbpA ); - altL.vecE = bts_Flt16Vec3D_sub( *centerPtrA, bts_Flt16Mat3D_mapFlt( &altL.matE, centerPtrA ) ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt3D bts_Flt16Alt3D_createLinear( const struct bts_Flt16Mat3D* matPtrA, - const struct bts_Flt16Vec3D* centerPtrA ) -{ - struct bts_Flt16Alt3D altL; - altL.matE = *matPtrA; - altL.vecE = bts_Flt16Vec3D_sub( *centerPtrA, bts_Flt16Mat3D_mapFlt( &altL.matE, centerPtrA ) ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt3D bts_Flt16Alt3D_create16( int16 xxA, int16 xyA, int16 xzA, - int16 yxA, int16 yyA, int16 yzA, - int16 zxA, int16 zyA, int16 zzA, - int16 matBbpA, - int16 xA, int16 yA, int16 zA, - int16 vecBbpA ) -{ - struct bts_Flt16Alt3D altL; - altL.matE = bts_Flt16Mat3D_create16( xxA, xyA, xzA, - yxA, yyA, yzA, - zxA, zyA, zzA, - matBbpA ); - - altL.vecE = bts_Flt16Vec3D_create16( xA, yA, zA, vecBbpA ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt3D bts_Flt16Alt3D_create32( int32 xxA, int32 xyA, int32 xzA, - int32 yxA, int32 yyA, int32 yzA, - int32 zxA, int32 zyA, int32 zzA, - int16 matBbpA, - int32 xA, int32 yA, int32 zA, - int16 vecBbpA ) -{ - struct bts_Flt16Alt3D altL; - altL.matE = bts_Flt16Mat3D_create32( xxA, xyA, xzA, - yxA, yyA, yzA, - zxA, zyA, zzA, - matBbpA ); - - altL.vecE = bts_Flt16Vec3D_create32( xA, yA, zA, vecBbpA ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Alt3D_mapFlt( const struct bts_Flt16Alt3D* altPtrA, - const struct bts_Flt16Vec3D* vecPtrA ) -{ - struct bts_Flt16Vec3D vecL = bts_Flt16Mat3D_mapFlt( &altPtrA->matE, vecPtrA ); - int32 shiftL = altPtrA->vecE.bbpE - vecL.bbpE; - if( shiftL > 0 ) - { - int32 sh1L = shiftL - 1; - vecL.xE += ( ( altPtrA->vecE.xE >> sh1L ) + 1 ) >> 1; - vecL.yE += ( ( altPtrA->vecE.yE >> sh1L ) + 1 ) >> 1; - vecL.zE += ( ( altPtrA->vecE.zE >> sh1L ) + 1 ) >> 1; - } - else - { - vecL.xE += altPtrA->vecE.xE << -shiftL; - vecL.yE += altPtrA->vecE.yE << -shiftL; - vecL.zE += altPtrA->vecE.zE << -shiftL; - } - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt3D bts_Flt16Alt3D_mul( const struct bts_Flt16Alt3D* alt1PtrA, - const struct bts_Flt16Alt3D* alt2PtrA ) -{ - struct bts_Flt16Alt3D altL; - altL.vecE = bts_Flt16Alt3D_mapFlt( alt1PtrA, &alt2PtrA->vecE ); - altL.matE = bts_Flt16Mat3D_mul( &alt1PtrA->matE, &alt2PtrA->matE ); - return altL; -} - -/* ------------------------------------------------------------------------- */ - -/** multiplies matrix with matA; returns pointer to resulting matrix */ -struct bts_Flt16Alt3D* bts_Flt16Alt3D_mulTo( struct bts_Flt16Alt3D* alt1PtrA, - const struct bts_Flt16Alt3D* alt2PtrA ) -{ - *alt1PtrA = bts_Flt16Alt3D_mul( alt1PtrA, alt2PtrA ); - return alt1PtrA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Alt3D.h b/Embedded/common/src/b_TensorEm/Flt16Alt3D.h deleted file mode 100644 index fe3d781..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Alt3D.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FLT16ALT3D_EM_H -#define bts_FLT16ALT3D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_TensorEm/Flt16Mat3D.h" -#include "b_TensorEm/Flt16Vec3D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 3d affine linear trafo */ -struct bts_Flt16Alt3D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** matrix */ - struct bts_Flt16Mat3D matE; - - /** vector */ - struct bts_Flt16Vec3D vecE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes alt */ -void bts_Flt16Alt3D_init( struct bts_Flt16Alt3D* ptrA ); - -/** destroys alt */ -void bts_Flt16Alt3D_exit( struct bts_Flt16Alt3D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Flt16Alt3D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Alt3D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Flt16Alt3D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Alt3D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Flt16Alt3D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Alt3D* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** creates identity alt */ -struct bts_Flt16Alt3D bts_Flt16Alt3D_createIdentity( void ); - -/** creates scale alt */ -struct bts_Flt16Alt3D bts_Flt16Alt3D_createScale( int32 scaleA, - int32 scaleBbpA, - const struct bts_Flt16Vec3D* centerPtrA ); - -/** creates linear alt from matrix and center */ -struct bts_Flt16Alt3D bts_Flt16Alt3D_createLinear( const struct bts_Flt16Mat3D* matPtrA, - const struct bts_Flt16Vec3D* centerPtrA ); - -/** creates alt from 16 bit values */ -struct bts_Flt16Alt3D bts_Flt16Alt3D_create16( int16 xxA, int16 xyA, int16 xzA, - int16 yxA, int16 yyA, int16 yzA, - int16 zxA, int16 zyA, int16 zzA, - int16 matBbpA, - int16 xA, int16 yA, int16 zA, - int16 vecBbpA ); - -/** creates alt from 32 bit values (automatic adjustment of bbp value) */ -struct bts_Flt16Alt3D bts_Flt16Alt3D_create32( int32 xxA, int32 xyA, int32 xzA, - int32 yxA, int32 yyA, int32 yzA, - int32 zxA, int32 zyA, int32 zzA, - int16 matBbpA, - int32 xA, int32 yA, int32 zA, - int16 vecBbpA ); - -/** Multiplies matrix with float vecA; returns resulting vector */ -struct bts_Flt16Vec3D bts_Flt16Alt3D_mapFlt( const struct bts_Flt16Alt3D* matPtrA, - const struct bts_Flt16Vec3D* vecPtrA ); - -/** multiplies alt with altA returns resulting alt */ -struct bts_Flt16Alt3D bts_Flt16Alt3D_mul( const struct bts_Flt16Alt3D* mat1PtrA, - const struct bts_Flt16Alt3D* mat2PtrA ); - -/** multiplies alt with matA; returns pointer to resulting alt */ -struct bts_Flt16Alt3D* bts_Flt16Alt3D_mulTo( struct bts_Flt16Alt3D* mat1PtrA, - const struct bts_Flt16Alt3D* mat2PtrA ); - -#endif /* bts_FLT16ALT3D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Mat2D.c b/Embedded/common/src/b_TensorEm/Flt16Mat2D.c deleted file mode 100644 index 4099167..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Mat2D.c +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Flt16Mat2D.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat2D_init( struct bts_Flt16Mat2D* ptrA ) -{ - ptrA->bbpE = 0; - ptrA->xxE = 0; - ptrA->xyE = 0; - ptrA->yxE = 0; - ptrA->yyE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat2D_exit( struct bts_Flt16Mat2D* ptrA ) -{ - ptrA->bbpE = 0; - ptrA->xxE = 0; - ptrA->xyE = 0; - ptrA->yxE = 0; - ptrA->yyE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat2D_copy( struct bts_Flt16Mat2D* ptrA, const struct bts_Flt16Mat2D* srcPtrA ) -{ - ptrA->bbpE = srcPtrA->bbpE; - ptrA->xxE = srcPtrA->xxE; - ptrA->xyE = srcPtrA->xyE; - ptrA->yxE = srcPtrA->yxE; - ptrA->yyE = srcPtrA->yyE; -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Flt16Mat2D_equal( const struct bts_Flt16Mat2D* ptrA, const struct bts_Flt16Mat2D* srcPtrA ) -{ - int32 bbpDiffL = ptrA->bbpE - srcPtrA->bbpE; - if( bbpDiffL == 0 ) - { - if( ptrA->xxE != srcPtrA->xxE ) return FALSE; - if( ptrA->xyE != srcPtrA->xyE ) return FALSE; - if( ptrA->yxE != srcPtrA->yxE ) return FALSE; - if( ptrA->yyE != srcPtrA->yyE ) return FALSE; - return TRUE; - } - - if( bbpDiffL > 0 ) - { - int32 xxL = ( int32 ) srcPtrA->xxE << bbpDiffL; - int32 xyL = ( int32 ) srcPtrA->xyE << bbpDiffL; - int32 yxL = ( int32 ) srcPtrA->yxE << bbpDiffL; - int32 yyL = ( int32 ) srcPtrA->yyE << bbpDiffL; - - if( ptrA->xxE != xxL ) return FALSE; - if( ptrA->xyE != xyL ) return FALSE; - if( ptrA->yxE != yxL ) return FALSE; - if( ptrA->yyE != yyL ) return FALSE; - - /* check if bits were lost by the shifting */ - if( srcPtrA->xxE != ( xxL >> bbpDiffL ) ) return FALSE; - if( srcPtrA->xyE != ( xyL >> bbpDiffL ) ) return FALSE; - if( srcPtrA->yxE != ( yxL >> bbpDiffL ) ) return FALSE; - if( srcPtrA->yyE != ( yyL >> bbpDiffL ) ) return FALSE; - - return TRUE; - } - - if( bbpDiffL < 0 ) - { - int32 xxL = ( int32 ) ptrA->xxE << -bbpDiffL; - int32 xyL = ( int32 ) ptrA->xyE << -bbpDiffL; - int32 yxL = ( int32 ) ptrA->yxE << -bbpDiffL; - int32 yyL = ( int32 ) ptrA->yyE << -bbpDiffL; - - if( xxL != srcPtrA->xxE ) return FALSE; - if( xyL != srcPtrA->xyE ) return FALSE; - if( yxL != srcPtrA->yxE ) return FALSE; - if( yyL != srcPtrA->yyE ) return FALSE; - - /* check if bits were lost by the shifting */ - if( ptrA->xxE != ( xxL >> -bbpDiffL ) ) return FALSE; - if( ptrA->xyE != ( xyL >> -bbpDiffL ) ) return FALSE; - if( ptrA->yxE != ( yxL >> -bbpDiffL ) ) return FALSE; - if( ptrA->yyE != ( yyL >> -bbpDiffL ) ) return FALSE; - - return TRUE; - } - - return TRUE; -} - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Mat2D_det( const struct bts_Flt16Mat2D* ptrA ) -{ - /* This could be negativ, in theory. But almost always det > 0 for us, - matrix is a rotation or scaling matrix. - Then uint32 makes sure there is no overflow. */ - uint32 detL = ( int32 ) ptrA->xxE * ptrA->yyE - ( int32 ) ptrA->xyE * ptrA->yxE; - return detL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_createIdentity() -{ - struct bts_Flt16Mat2D matL = { 1 << 14, 0, 0, 1 << 14, 14 }; - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_createRotation( phase16 angleA ) -{ - int16 cL = bbs_cos16( angleA ); - int16 sL = bbs_sin16( angleA ); - struct bts_Flt16Mat2D matL; - matL.xxE = cL; - matL.xyE = -sL; - matL.yxE = sL; - matL.yyE = cL; - matL.bbpE = 14; - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_createScale( int32 scaleA, int32 scaleBbpA ) -{ - struct bts_Flt16Mat2D matL = bts_Flt16Mat2D_createIdentity(); - bts_Flt16Mat2D_scale( &matL, scaleA, scaleBbpA ); - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_createRigid( phase16 angleA, int32 scaleA, int32 scaleBbpA ) -{ - struct bts_Flt16Mat2D matL = bts_Flt16Mat2D_createRotation( angleA ); - bts_Flt16Mat2D_scale( &matL, scaleA, scaleBbpA ); - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_create16( int16 xxA, int16 xyA, int16 yxA, int16 yyA, int16 bbpA ) -{ - struct bts_Flt16Mat2D matL; - matL.xxE = xxA; - matL.xyE = xyA; - matL.yxE = yxA; - matL.yyE = yyA; - matL.bbpE = bbpA; - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_create32( int32 xxA, int32 xyA, int32 yxA, int32 yyA, int32 bbpA ) -{ - struct bts_Flt16Mat2D matL; - - if( ( xxA | xyA | yxA | yyA ) == 0 ) - { - matL.xxE = 0; - matL.xyE = 0; - matL.yxE = 0; - matL.yyE = 0; - matL.bbpE = 0; - } - else - { - int32 shiftL = bts_maxAbsIntLog2Of4( xxA, xyA, yxA, yyA ) - 13; - - if( shiftL > 0 ) - { - int32 sh1L = shiftL - 1; - matL.xxE = ( ( xxA >> sh1L ) + 1 ) >> 1; - matL.xyE = ( ( xyA >> sh1L ) + 1 ) >> 1; - matL.yxE = ( ( yxA >> sh1L ) + 1 ) >> 1; - matL.yyE = ( ( yyA >> sh1L ) + 1 ) >> 1; - } - else - { - matL.xxE = xxA << -shiftL; - matL.xyE = xyA << -shiftL; - matL.yxE = yxA << -shiftL; - matL.yyE = yyA << -shiftL; - } - - matL.bbpE = bbpA - shiftL; - } - - return matL; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat2D_scale( struct bts_Flt16Mat2D* ptrA, int32 scaleA, int32 scaleBbpA ) -{ - /* fit scale in 15 bit */ - uint32 scaleExpL = bts_absIntLog2( scaleA ); - if( scaleExpL > 14 ) - { - int32 shiftL = scaleExpL - 14; - scaleA = ( ( scaleA >> ( shiftL - 1 ) ) + 1 ) >> 1; - scaleBbpA -= shiftL; - } - - *ptrA = bts_Flt16Mat2D_create32( (int32)ptrA->xxE * scaleA, - (int32)ptrA->xyE * scaleA, - (int32)ptrA->yxE * scaleA, - (int32)ptrA->yyE * scaleA, - ptrA->bbpE + scaleBbpA ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Vec2D bts_Flt16Mat2D_map( const struct bts_Flt16Mat2D* matPtrA, - const struct bts_Int16Vec2D* vecPtrA ) -{ - struct bts_Int16Vec2D vecL; - - int32 xL = ( int32 ) matPtrA->xxE * vecPtrA->xE + ( int32 ) matPtrA->xyE * vecPtrA->yE; - int32 yL = ( int32 ) matPtrA->yxE * vecPtrA->xE + ( int32 ) matPtrA->yyE * vecPtrA->yE; - - if( matPtrA->bbpE > 0 ) - { - int32 sh1L = matPtrA->bbpE - 1; - vecL.xE = ( ( xL >> sh1L ) + 1 ) >> 1; - vecL.yE = ( ( yL >> sh1L ) + 1 ) >> 1; - } - else - { - /* not overflow safe */ - vecL.xE = xL << -matPtrA->bbpE; - vecL.yE = yL << -matPtrA->bbpE; - } - - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Mat2D_mapFlt( const struct bts_Flt16Mat2D* matPtrA, - const struct bts_Flt16Vec2D* vecPtrA ) -{ - int32 xL = ( int32 ) matPtrA->xxE * vecPtrA->xE + ( int32 ) matPtrA->xyE * vecPtrA->yE; - int32 yL = ( int32 ) matPtrA->yxE * vecPtrA->xE + ( int32 ) matPtrA->yyE * vecPtrA->yE; - int32 bbpL = matPtrA->bbpE + vecPtrA->bbpE; - return bts_Flt16Vec2D_create32( xL, yL, bbpL ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_mul( const struct bts_Flt16Mat2D* mat1PtrA, - const struct bts_Flt16Mat2D* mat2PtrA ) -{ - return bts_Flt16Mat2D_create32( ( int32 ) mat1PtrA->xxE * mat2PtrA->xxE + ( int32 ) mat1PtrA->xyE * mat2PtrA->yxE, - ( int32 ) mat1PtrA->xxE * mat2PtrA->xyE + ( int32 ) mat1PtrA->xyE * mat2PtrA->yyE, - ( int32 ) mat1PtrA->yxE * mat2PtrA->xxE + ( int32 ) mat1PtrA->yyE * mat2PtrA->yxE, - ( int32 ) mat1PtrA->yxE * mat2PtrA->xyE + ( int32 ) mat1PtrA->yyE * mat2PtrA->yyE, - mat1PtrA->bbpE + mat2PtrA->bbpE ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D* bts_Flt16Mat2D_mulTo( struct bts_Flt16Mat2D* mat1PtrA, - const struct bts_Flt16Mat2D* mat2PtrA ) -{ - *mat1PtrA = bts_Flt16Mat2D_mul( mat1PtrA, mat2PtrA ); - return mat1PtrA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat2D_invert( struct bts_Flt16Mat2D* ptrA ) -{ - int32 detL = ( int32 ) ptrA->xxE * ptrA->yyE - ( int32 ) ptrA->xyE * ptrA->yxE; - int32 detExpL = bbs_intLog2( detL ); - int32 dShrL = 0; - if( detExpL > 15 ) - { - dShrL = detExpL - 15; - detL = ( ( detL >> ( dShrL - 1 ) ) + 1 ) >> 1; - } - - if( detL == 0 ) - { - ptrA->xxE = ptrA->yyE = ptrA->xyE = ptrA->yxE = 0; - } - else - { - /* bbp: bbpE + 16 - ( bbpE * 2 - dShrL ) = 16 + dShrL - bbpE */ - int32 xxL = ( ( int32 )ptrA->xxE << 16 ) / detL; - int32 xyL = ( ( int32 )ptrA->xyE << 16 ) / detL; - int32 yxL = ( ( int32 )ptrA->yxE << 16 ) / detL; - int32 yyL = ( ( int32 )ptrA->yyE << 16 ) / detL; - *ptrA = bts_Flt16Mat2D_create32( xxL, -xyL, -yxL, yyL, 16 + dShrL - ptrA->bbpE ); - } -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat2D bts_Flt16Mat2D_inverted( const struct bts_Flt16Mat2D* ptrA ) -{ - struct bts_Flt16Mat2D matL = *ptrA; - bts_Flt16Mat2D_invert( &matL ); - return matL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/Flt16Mat2D.h b/Embedded/common/src/b_TensorEm/Flt16Mat2D.h deleted file mode 100644 index 95e0a98..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Mat2D.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FLT16MAT2D_EM_H -#define bts_FLT16MAT2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" -#include "b_TensorEm/Int16Vec2D.h" -#include "b_TensorEm/Flt16Vec2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d matrix with floating point */ -struct bts_Flt16Mat2D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** xx component */ - int16 xxE; - - /** xy component */ - int16 xyE; - - /** yx component */ - int16 yxE; - - /** yy component */ - int16 yyE; - - /** point position */ - int16 bbpE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes matrix */ -void bts_Flt16Mat2D_init( struct bts_Flt16Mat2D* ptrA ); - -/** destroys matrix */ -void bts_Flt16Mat2D_exit( struct bts_Flt16Mat2D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_Flt16Mat2D_copy( struct bts_Flt16Mat2D* ptrA, const struct bts_Flt16Mat2D* srcPtrA ); - -/** equal operator */ -flag bts_Flt16Mat2D_equal( const struct bts_Flt16Mat2D* ptrA, const struct bts_Flt16Mat2D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** returns determinate of matrix; return bbp is ptrA->bbpE * 2 */ -uint32 bts_Flt16Mat2D_det( const struct bts_Flt16Mat2D* ptrA ); - -/** inverts matrix */ -void bts_Flt16Mat2D_invert( struct bts_Flt16Mat2D* ptrA ); - -/** returns inverted matrix */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_inverted( const struct bts_Flt16Mat2D* ptrA ); - -/** creates identity matrix */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_createIdentity( void ); - -/** creates rotation matrix */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_createRotation( phase16 angleA ); - -/** creates scale matrix */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_createScale( int32 scaleA, int32 scaleBbpA ); - -/** creates rigid matrix (scale & rotation) */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_createRigid( phase16 angleA, int32 scaleA, int32 scaleBbpA ); - -/** creates matrix from 16 bit values */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_create16( int16 xxA, int16 xyA, int16 yxA, int16 yyA, int16 bbpA ); - -/** creates matrix from 32 bit values (automatic adjustment of bbp value) */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_create32( int32 xxA, int32 xyA, int32 yxA, int32 yyA, int32 bbpA ); - -/** scales matrix by a factor */ -void bts_Flt16Mat2D_scale( struct bts_Flt16Mat2D* ptrA, int32 scaleA, int32 scaleBbpA ); - -/** multiplies matrix with vecA; returns resulting vector */ -struct bts_Int16Vec2D bts_Flt16Mat2D_map( const struct bts_Flt16Mat2D* matPtrA, - const struct bts_Int16Vec2D* vecPtrA ); - -/** Multiplies matrix with float vecA; returns resulting vector. */ -struct bts_Flt16Vec2D bts_Flt16Mat2D_mapFlt( const struct bts_Flt16Mat2D* matPtrA, - const struct bts_Flt16Vec2D* vecPtrA ); - -/** multiplies matrix with matA; returns resulting matrix */ -struct bts_Flt16Mat2D bts_Flt16Mat2D_mul( const struct bts_Flt16Mat2D* mat1PtrA, - const struct bts_Flt16Mat2D* mat2PtrA ); - -/** multiplies matrix with matA; returns pointer to resulting matrix */ -struct bts_Flt16Mat2D* bts_Flt16Mat2D_mulTo( struct bts_Flt16Mat2D* mat1PtrA, - const struct bts_Flt16Mat2D* mat2PtrA ); - -#endif /* bts_FLT16MAT2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Mat3D.c b/Embedded/common/src/b_TensorEm/Flt16Mat3D.c deleted file mode 100644 index 437632c..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Mat3D.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Flt16Mat3D.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat3D_init( struct bts_Flt16Mat3D* ptrA ) -{ - ptrA->bbpE = 0; - ptrA->xxE = 0; - ptrA->xyE = 0; - ptrA->xzE = 0; - ptrA->yxE = 0; - ptrA->yyE = 0; - ptrA->yzE = 0; - ptrA->zxE = 0; - ptrA->zyE = 0; - ptrA->zzE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat3D_exit( struct bts_Flt16Mat3D* ptrA ) -{ - ptrA->bbpE = 0; - ptrA->xxE = 0; - ptrA->xyE = 0; - ptrA->xzE = 0; - ptrA->yxE = 0; - ptrA->yyE = 0; - ptrA->yzE = 0; - ptrA->zxE = 0; - ptrA->zyE = 0; - ptrA->zzE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Mat3D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Mat3D *ptrA ) -{ - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Mat3D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Mat3D* ptrA, - uint16* memPtrA ) -{ - bbs_ERROR0( "not implemented" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Mat3D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Mat3D* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - bbs_ERROR0( "not implemented" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat3D bts_Flt16Mat3D_createIdentity() -{ - struct bts_Flt16Mat3D matL = { 1 << 14, 0, 0, 0, 1 << 14, 0, 0, 0, 1 << 14, 14 }; - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat3D bts_Flt16Mat3D_createScale( int32 scaleA, int32 scaleBbpA ) -{ - struct bts_Flt16Mat3D matL = bts_Flt16Mat3D_createIdentity(); - bts_Flt16Mat3D_scale( &matL, scaleA, scaleBbpA ); - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat3D bts_Flt16Mat3D_create16( int16 xxA, int16 xyA, int16 xzA, - int16 yxA, int16 yyA, int16 yzA, - int16 zxA, int16 zyA, int16 zzA, - int16 bbpA ) -{ - struct bts_Flt16Mat3D matL; - matL.xxE = xxA; - matL.xyE = xyA; - matL.xzE = xzA; - matL.yxE = yxA; - matL.yyE = yyA; - matL.yzE = yzA; - matL.zxE = zxA; - matL.zyE = zyA; - matL.zzE = zzA; - matL.bbpE = bbpA; - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat3D bts_Flt16Mat3D_create32( int32 xxA, int32 xyA, int32 xzA, - int32 yxA, int32 yyA, int32 yzA, - int32 zxA, int32 zyA, int32 zzA, - int32 bbpA ) -{ - struct bts_Flt16Mat3D matL; - - if( ( xxA | xyA | xzA | yxA | yyA | yzA | zxA | zyA | zzA ) == 0 ) - { - matL.xxE = 0; - matL.xyE = 0; - matL.xzE = 0; - matL.yxE = 0; - matL.yyE = 0; - matL.yzE = 0; - matL.zxE = 0; - matL.zyE = 0; - matL.zzE = 0; - matL.bbpE = 0; - } - else - { - int32 xShiftL = bts_maxAbsIntLog2Of3( xxA, xyA, xzA ) - 13; - int32 yShiftL = bts_maxAbsIntLog2Of3( yxA, yyA, yzA ) - 13; - int32 zShiftL = bts_maxAbsIntLog2Of3( zxA, zyA, zzA ) - 13; - - int32 shiftL = bbs_max( bbs_max( xShiftL, yShiftL ), zShiftL ); - - if( shiftL > 0 ) - { - int32 sh1L = shiftL - 1; - matL.xxE = ( ( xxA >> sh1L ) + 1 ) >> 1; - matL.xyE = ( ( xyA >> sh1L ) + 1 ) >> 1; - matL.xzE = ( ( xzA >> sh1L ) + 1 ) >> 1; - matL.yxE = ( ( yxA >> sh1L ) + 1 ) >> 1; - matL.yyE = ( ( yyA >> sh1L ) + 1 ) >> 1; - matL.yzE = ( ( yzA >> sh1L ) + 1 ) >> 1; - matL.zxE = ( ( zxA >> sh1L ) + 1 ) >> 1; - matL.zyE = ( ( zyA >> sh1L ) + 1 ) >> 1; - matL.zzE = ( ( zzA >> sh1L ) + 1 ) >> 1; - } - else - { - matL.xxE = xxA << -shiftL; - matL.xyE = xyA << -shiftL; - matL.xzE = xzA << -shiftL; - matL.yxE = yxA << -shiftL; - matL.yyE = yyA << -shiftL; - matL.yzE = yzA << -shiftL; - matL.zxE = zxA << -shiftL; - matL.zyE = zyA << -shiftL; - matL.zzE = zzA << -shiftL; - } - - matL.bbpE = bbpA - shiftL; - } - return matL; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Mat3D_scale( struct bts_Flt16Mat3D* ptrA, int32 scaleA, int32 scaleBbpA ) -{ - /* fit scale in 15 bit */ - uint32 scaleExpL = bts_absIntLog2( scaleA ); - if( scaleExpL > 14 ) - { - int32 shiftL = scaleExpL - 14; - scaleA = ( ( scaleA >> ( shiftL - 1 ) ) + 1 ) >> 1; - scaleBbpA -= shiftL; - } - - *ptrA = bts_Flt16Mat3D_create32( ptrA->xxE * scaleA, ptrA->xyE * scaleA, ptrA->xzE * scaleA, - ptrA->yxE * scaleA, ptrA->yyE * scaleA, ptrA->yzE * scaleA, - ptrA->zxE * scaleA, ptrA->zyE * scaleA, ptrA->zzE * scaleA, - ptrA->bbpE + scaleBbpA ); -} - -/* ------------------------------------------------------------------------- */ -#ifndef HW_EE /* causes internal compiler error in ee-gcc */ -struct bts_Int16Vec3D bts_Flt16Mat3D_map( const struct bts_Flt16Mat3D* matPtrA, - const struct bts_Int16Vec3D* vecPtrA ) -{ - struct bts_Int16Vec3D vecL; - - int32 xL = ( int32 ) matPtrA->xxE * vecPtrA->xE + ( int32 ) matPtrA->xyE * vecPtrA->yE + ( int32 ) matPtrA->xzE * vecPtrA->zE; - int32 yL = ( int32 ) matPtrA->yxE * vecPtrA->xE + ( int32 ) matPtrA->yyE * vecPtrA->yE + ( int32 ) matPtrA->yzE * vecPtrA->zE; - int32 zL = ( int32 ) matPtrA->zxE * vecPtrA->xE + ( int32 ) matPtrA->zyE * vecPtrA->yE + ( int32 ) matPtrA->zzE * vecPtrA->zE; - - if( matPtrA->bbpE > 0 ) - { - int32 sh1L = matPtrA->bbpE - 1; - vecL.xE = ( ( xL >> sh1L ) + 1 ) >> 1; - vecL.yE = ( ( yL >> sh1L ) + 1 ) >> 1; - vecL.zE = ( ( zL >> sh1L ) + 1 ) >> 1; - } - else - { - /* not overflow safe */ - vecL.xE = xL << -matPtrA->bbpE; - vecL.yE = yL << -matPtrA->bbpE; - vecL.zE = zL << -matPtrA->bbpE; - } - - return vecL; -} -#endif -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Mat3D_mapFlt( const struct bts_Flt16Mat3D* matPtrA, - const struct bts_Flt16Vec3D* vecPtrA ) -{ - /* avoids overflow summing intermediate products */ - int32 xL = ( ( ( ( int32 ) matPtrA->xxE * vecPtrA->xE + 1 ) >> 1 ) + - ( ( ( int32 ) matPtrA->xyE * vecPtrA->yE + 1 ) >> 1 ) + - ( ( ( int32 ) matPtrA->xzE * vecPtrA->zE + 1 ) >> 1 ) ); - - int32 yL = ( ( ( ( int32 ) matPtrA->yxE * vecPtrA->xE + 1 ) >> 1 ) + - ( ( ( int32 ) matPtrA->yyE * vecPtrA->yE + 1 ) >> 1 ) + - ( ( ( int32 ) matPtrA->yzE * vecPtrA->zE + 1 ) >> 1 ) ); - - int32 zL = ( ( ( ( int32 ) matPtrA->zxE * vecPtrA->xE + 1 ) >> 1 ) + - ( ( ( int32 ) matPtrA->zyE * vecPtrA->yE + 1 ) >> 1 ) + - ( ( ( int32 ) matPtrA->zzE * vecPtrA->zE + 1 ) >> 1 ) ); - - - return bts_Flt16Vec3D_create32( xL, yL, zL, vecPtrA->bbpE + matPtrA->bbpE - 1 ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat3D bts_Flt16Mat3D_mul( const struct bts_Flt16Mat3D* mat1PtrA, - const struct bts_Flt16Mat3D* mat2PtrA ) -{ - /* avoids overflow summing intermediate products */ - return bts_Flt16Mat3D_create32( - - ( ( ( int32 ) mat1PtrA->xxE * mat2PtrA->xxE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->xyE * mat2PtrA->yxE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->xzE * mat2PtrA->zxE + 1 ) >> 1 ), - ( ( ( int32 ) mat1PtrA->xxE * mat2PtrA->xyE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->xyE * mat2PtrA->yyE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->xzE * mat2PtrA->zyE + 1 ) >> 1 ), - ( ( ( int32 ) mat1PtrA->xxE * mat2PtrA->xzE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->xyE * mat2PtrA->yzE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->xzE * mat2PtrA->zzE + 1 ) >> 1 ), - - ( ( ( int32 ) mat1PtrA->yxE * mat2PtrA->xxE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->yyE * mat2PtrA->yxE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->yzE * mat2PtrA->zxE + 1 ) >> 1 ), - ( ( ( int32 ) mat1PtrA->yxE * mat2PtrA->xyE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->yyE * mat2PtrA->yyE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->yzE * mat2PtrA->zyE + 1 ) >> 1 ), - ( ( ( int32 ) mat1PtrA->yxE * mat2PtrA->xzE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->yyE * mat2PtrA->yzE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->yzE * mat2PtrA->zzE + 1 ) >> 1 ), - - ( ( ( int32 ) mat1PtrA->zxE * mat2PtrA->xxE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->zyE * mat2PtrA->yxE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->zzE * mat2PtrA->zxE + 1 ) >> 1 ), - ( ( ( int32 ) mat1PtrA->zxE * mat2PtrA->xyE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->zyE * mat2PtrA->yyE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->zzE * mat2PtrA->zyE + 1 ) >> 1 ), - ( ( ( int32 ) mat1PtrA->zxE * mat2PtrA->xzE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->zyE * mat2PtrA->yzE + 1 ) >> 1 ) + ( ( ( int32 ) mat1PtrA->zzE * mat2PtrA->zzE + 1 ) >> 1 ), - - mat1PtrA->bbpE + mat2PtrA->bbpE - 1 ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Mat3D* bts_Flt16Mat3D_mulTo( struct bts_Flt16Mat3D* mat1PtrA, - const struct bts_Flt16Mat3D* mat2PtrA ) -{ - *mat1PtrA = bts_Flt16Mat3D_mul( mat1PtrA, mat2PtrA ); - return mat1PtrA; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Mat3D.h b/Embedded/common/src/b_TensorEm/Flt16Mat3D.h deleted file mode 100644 index 740caa6..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Mat3D.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FLT16MAT3D_EM_H -#define bts_FLT16MAT3D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" -#include "b_TensorEm/Int16Vec3D.h" -#include "b_TensorEm/Flt16Vec3D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 3d matrix with floating point */ -struct bts_Flt16Mat3D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** xx component */ - int16 xxE; - - /** xy component */ - int16 xyE; - - /** xz component */ - int16 xzE; - - /** yx component */ - int16 yxE; - - /** yy component */ - int16 yyE; - - /** yz component */ - int16 yzE; - - /** zx component */ - int16 zxE; - - /** zy component */ - int16 zyE; - - /** zz component */ - int16 zzE; - - /** point position */ - int16 bbpE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes matrix */ -void bts_Flt16Mat3D_init( struct bts_Flt16Mat3D* ptrA ); - -/** destroys matrix */ -void bts_Flt16Mat3D_exit( struct bts_Flt16Mat3D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Flt16Mat3D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Mat3D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Flt16Mat3D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Mat3D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Flt16Mat3D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Mat3D* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** creates identity matrix */ -struct bts_Flt16Mat3D bts_Flt16Mat3D_createIdentity( void ); - -/** creates scale matrix */ -struct bts_Flt16Mat3D bts_Flt16Mat3D_createScale( int32 scaleA, int32 scaleBbpA ); - -/** creates matrix from 16 bit values */ -struct bts_Flt16Mat3D bts_Flt16Mat3D_create16( int16 xxA, int16 xyA, int16 xzA, - int16 yxA, int16 yyA, int16 yzA, - int16 zxA, int16 zyA, int16 zzA, - int16 bbpA ); - -/** creates matrix from 32 bit values (automatic adjustment of bbp value) */ -struct bts_Flt16Mat3D bts_Flt16Mat3D_create32( int32 xxA, int32 xyA, int32 xzA, - int32 yxA, int32 yyA, int32 yzA, - int32 zxA, int32 zyA, int32 zzA, - int32 bbpA ); - -/** scales matrix by a factor */ -void bts_Flt16Mat3D_scale( struct bts_Flt16Mat3D* ptrA, int32 scaleA, int32 scaleBbpA ); - -/** multiplies matrix with vecA; returns resulting vector */ -#ifndef HW_EE /* causes internal compiler error in ee-gcc */ -struct bts_Int16Vec3D bts_Flt16Mat3D_map( const struct bts_Flt16Mat3D* matPtrA, - const struct bts_Int16Vec3D* vecPtrA ); -#endif -/** Multiplies matrix with float vecA; returns resulting vector. - * The point position of returned vector is the same as of the input vector. - */ -struct bts_Flt16Vec3D bts_Flt16Mat3D_mapFlt( const struct bts_Flt16Mat3D* matPtrA, - const struct bts_Flt16Vec3D* vecPtrA ); - -/** multiplies matrix with matA; returns resulting matrix */ -struct bts_Flt16Mat3D bts_Flt16Mat3D_mul( const struct bts_Flt16Mat3D* mat1PtrA, - const struct bts_Flt16Mat3D* mat2PtrA ); - -/** multiplies matrix with matA; returns pointer to resulting matrix */ -struct bts_Flt16Mat3D* bts_Flt16Mat3D_mulTo( struct bts_Flt16Mat3D* mat1PtrA, - const struct bts_Flt16Mat3D* mat2PtrA ); - -#endif /* bts_FLT16MAT3D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Vec.c b/Embedded/common/src/b_TensorEm/Flt16Vec.c deleted file mode 100644 index 6757dda..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Vec.c +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Flt16Vec.h" -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_init( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA ) -{ - bbs_Int16Arr_init( cpA, &ptrA->arrE ); - ptrA->expE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_exit( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA ) -{ - bbs_Int16Arr_exit( cpA, &ptrA->arrE ); - ptrA->expE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_copy( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - const struct bts_Flt16Vec* srcPtrA ) -{ - bbs_Int16Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); - ptrA->expE = srcPtrA->expE; -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Flt16Vec_equal( struct bbs_Context* cpA, - const struct bts_Flt16Vec* ptrA, - const struct bts_Flt16Vec* srcPtrA ) -{ - if( !bbs_Int16Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ) ) return FALSE; - if( ptrA->expE != srcPtrA->expE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int16 bts_Flt16Vec_avg( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ) -{ - uint16 iL; - uint16 sizeL = ptrA->arrE.sizeE; - int32 sumL = 0; - const int16* srcL = ptrA->arrE.arrPtrE; - for( iL = 0; iL < sizeL; iL++ ) - { - sumL += srcL[ iL ]; - } - return sumL / ( int32 )sizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec_norm( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ) -{ - return bbs_vecNorm16( ptrA->arrE.arrPtrE, ptrA->arrE.sizeE ); -} - -/* ------------------------------------------------------------------------- */ - -uint16 bts_Flt16Vec_maxAbs( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ) -{ - uint16 iL; - uint16 sizeL = ptrA->arrE.sizeE; - uint16 maxL = 0; - const int16* srcL = ptrA->arrE.arrPtrE; - for( iL = 0; iL < sizeL; iL++ ) - { - uint16 vL = srcL[ iL ] > 0 ? srcL[ iL ] : -srcL[ iL ]; - maxL = vL > maxL ? vL : maxL; - } - return maxL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_create( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - bbs_Int16Arr_create( cpA, &ptrA->arrE, sizeA, mspA ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_size( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - uint32 sizeA ) -{ - bbs_Int16Arr_size( cpA, &ptrA->arrE, sizeA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Vec *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) /* mem size */ - + bbs_Int16Arr_memSize( cpA, &ptrA->arrE ) - + bbs_SIZEOF16( ptrA->expE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Vec* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_Flt16Vec_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->expE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec_memRead( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - memPtrA += bbs_memRead16( &ptrA->expE, memPtrA ); - - if( memSizeL != bts_Flt16Vec_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Flt16Vec_memRead( const struct bts_Flt16Vec* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_maximizeMantisse( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) -{ - uint32 maxAbsL = bts_Flt16Vec_maxAbs( cpA, ptrA ); - int16 shlL = 0; - - if( maxAbsL == 0 ) return; /* cannot maximize 0 */ - - while( maxAbsL < 0x4000 ) - { - shlL++; - maxAbsL <<= 1; - } - - if( shlL > 0 ) - { - uint32 iL; - uint32 sizeL = ptrA->arrE.sizeE; - int16* dstL = ptrA->arrE.arrPtrE; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] <<= shlL; - ptrA->expE -= shlL; - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec_maximizeAbsValue( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) -{ - int32 maxAbsL = bts_Flt16Vec_maxAbs( cpA, ptrA ); - int32 fL; - if( maxAbsL == 0 ) return 0; /* vector is zero */ - - fL = ( int32 )0x7FFF0000 / maxAbsL; - - { - uint32 iL; - uint32 sizeL = ptrA->arrE.sizeE; - int16* dstL = ptrA->arrE.arrPtrE; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( int32 )dstL[ iL ] * fL + 32768 ) >> 16; - } - - return fL; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_zeroAverage( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) -{ - uint16 iL; - uint16 sizeL = ptrA->arrE.sizeE; - int16* dstL = ptrA->arrE.arrPtrE; - int16 avgL = bts_Flt16Vec_avg( cpA, ptrA ); - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] -= avgL; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_normalize( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) -{ - uint32 normL = bts_Flt16Vec_norm( cpA, ptrA ); - - if( normL == 0 ) - { - /* vector is zero - do nothing */ - return; - } - else - { - int16* dstL = ptrA->arrE.arrPtrE; - uint16 iL; - uint16 sizeL = ptrA->arrE.sizeE; - int16 expL = 0; - int32 fL; - - /* let norm occupy 17 bits */ - if( ( normL & 0xFFFE0000 ) != 0 ) - { - while( ( ( normL >> -expL ) & 0xFFFE0000 ) != 0 ) expL--; - normL >>= -expL; - } - else - { - while( ( ( normL << expL ) & 0xFFFF0000 ) == 0 ) expL++; - normL <<= expL; - } - - /* fL is positive and occupies only 16 bits - a product with int16 fits in int32 */ - fL = ( uint32 )0xFFFFFFFF / normL; - - /* multiply with factor */ - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( ( ( int32 )dstL[ iL ] * fL ) >> 15 ) + 1 ) >> 1; - - /* set exponent */ - ptrA->expE = expL - 16; - } -/* - { - uint32 testNormL = bts_Flt16Vec_norm( cpA, ptrA ); - printf( "test norm %f\n", ( float )testNormL / ( 1 << -ptrA->expE ) ); - } -*/ -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_setZero( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) -{ - bbs_Int16Arr_fill( cpA, &ptrA->arrE, 0 ); - ptrA->expE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_mul( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA, int32 valA, int16 expA ) -{ - int32 valL = valA; - int16 expL = expA; - - if( valL == 0 ) - { - bts_Flt16Vec_setZero( cpA, ptrA ); - return; - } - else - { - uint32 iL; - uint32 sizeL = ptrA->arrE.sizeE; - int16* dstL = ptrA->arrE.arrPtrE; - - /* adjust valL to maximum 16 bit accuracy */ - uint32 absValL = valL > 0 ? valL : -valL; - if( ( absValL & 0xFFFF8000 ) != 0 ) - { - int32 shrL = 0; - while( ( absValL & 0xFFFF8000 ) != 0 ) - { - absValL >>= 1; - shrL++; - } - - if( shrL > 0 ) - { - valL = ( ( valL >> ( shrL - 1 ) ) + 1 ) >> 1; - expL += shrL; - if( valL >= 0x08000 ) valL = 0x07FFF; /* saturate */ - } - } - else - { - int32 shlL = 0; - while( ( absValL & 0xFFFFC000 ) == 0 ) - { - absValL <<= 1; - shlL++; - } - - valL <<= shlL; - expL -= shlL; - } - - for( iL = 0; iL < sizeL; iL++ ) - { - dstL[ iL ] = ( ( ( ( int32 )dstL[ iL ] * valL ) >> 15 ) + 1 ) >> 1; - } - ptrA->expE += expL + 16; - } -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_dotPtrd( struct bbs_Context* cpA, struct bts_Flt16Vec* vp1A, struct bts_Flt16Vec* vp2A, int32* manPtrA, int32* expPtrA ) -{ - bbs_DEF_fNameL( "void bts_Flt16Vec_dotPtrd( struct bbs_Context* cpA, struct bts_Flt16Vec* vp1A, struct bts_Flt16Vec* vp2A, int32* matPtrA, int32* expPtrA )" ) - uint16 iL; - uint16 sizeL = vp1A->arrE.sizeE; - const int16* arr1L = vp1A->arrE.arrPtrE; - const int16* arr2L = vp2A->arrE.arrPtrE; - int16 shrm1L = -1; /* shift minus 1 */ - int32 sumL; - - if( vp1A->arrE.sizeE != vp2A->arrE.sizeE ) - { - bbs_ERROR1( "%s:\nVectors have different size", fNameL ); - return; - } - - sumL = 0; - /* shrm1L == -1 */ - for( iL = 0; iL < sizeL; iL++ ) - { - sumL += ( int32 )arr1L[ iL ] * ( int32 )arr2L[ iL ]; - if( ( ( ( sumL > 0 ) ? sumL : -sumL ) & 0xC0000000 ) != 0 ) break; - } - - if( iL < sizeL ) - { - /* danger of overflow: increase shift; adjust sum */ - shrm1L++; - sumL = ( ( sumL >> 1 ) + 1 ) >> 1; - - /* shrm1L == 0 */ - for( iL = 0; iL < sizeL; iL++ ) - { - sumL += ( int32 )( ( arr1L[ iL ] + 1 ) >> 1 ) * ( int32 )( ( arr2L[ iL ] + 1 ) >> 1 ); - if( ( ( ( sumL > 0 ) ? sumL : -sumL ) & 0xC0000000 ) != 0 ) break; - } - - for( iL = 0; iL < sizeL; iL++ ) - { - if( ( ( ( sumL > 0 ) ? sumL : -sumL ) & 0xC0000000 ) != 0 ) - { - /* danger of overflow: increase shift; adjust sum */ - shrm1L++; - sumL = ( ( sumL >> 1 ) + 1 ) >> 1; - } - - sumL += ( int32 )( ( ( arr1L[ iL ] >> shrm1L ) + 1 ) >> 1 ) * ( int32 )( ( ( arr2L[ iL ] >> shrm1L ) + 1 ) >> 1 ); - } - } - - if( manPtrA != NULL ) *manPtrA = sumL; - if( expPtrA != NULL ) *expPtrA = vp1A->expE + vp2A->expE + ( ( shrm1L + 1 ) << 1 ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec_append( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA, struct bts_Flt16Vec* srcPtrA ) -{ - if( ptrA->arrE.sizeE == 0 ) - { - bts_Flt16Vec_copy( cpA, ptrA, srcPtrA ); - } - else - { - uint32 idxL = ptrA->arrE.sizeE; - bts_Flt16Vec_size( cpA, ptrA, idxL + srcPtrA->arrE.sizeE ); - - /* copy data */ - bbs_memcpy16( ptrA->arrE.arrPtrE + idxL, srcPtrA->arrE.arrPtrE, srcPtrA->arrE.sizeE ); - - /* equalize exponent */ - if( ptrA->expE > srcPtrA->expE ) - { - uint32 iL; - uint32 sizeL = srcPtrA->arrE.sizeE; - uint32 shrL = ptrA->expE - srcPtrA->expE; - int16* dstL = ptrA->arrE.arrPtrE + idxL; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( dstL[ iL ] >> ( shrL - 1 ) ) + 1 ) >> 1; - } - else if( ptrA->expE < srcPtrA->expE ) - { - uint32 iL; - uint32 sizeL = idxL; - uint32 shrL = srcPtrA->expE - ptrA->expE; - int16* dstL = ptrA->arrE.arrPtrE; - for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( dstL[ iL ] >> ( shrL - 1 ) ) + 1 ) >> 1; - ptrA->expE = srcPtrA->expE; - } - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Vec.h b/Embedded/common/src/b_TensorEm/Flt16Vec.h deleted file mode 100644 index 9c004f5..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Vec.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FLT_16_VEC_EM_H -#define bts_FLT_16_VEC_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/MemSeg.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_TensorEm/Functions.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** - * Vector with 16 bit components - * The vector operations are implemented with respect to maintain high accuracy and - * overflow safety for all possible vector configurations. - */ -struct bts_Flt16Vec -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** array of vector elements */ - struct bbs_Int16Arr arrE; - - /** exponent to elements */ - int16 expE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes vector */ -void bts_Flt16Vec_init( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA ); - -/** destroys vector */ -void bts_Flt16Vec_exit( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copies vector */ -void bts_Flt16Vec_copy( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - const struct bts_Flt16Vec* srcPtrA ); - -/** compares vector */ -flag bts_Flt16Vec_equal( struct bbs_Context* cpA, - const struct bts_Flt16Vec* ptrA, - const struct bts_Flt16Vec* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns average of vector without exponent */ -int16 bts_Flt16Vec_avg( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ); - -/** returns norm of vector without exponent */ -uint32 bts_Flt16Vec_norm( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ); - -/** returns maximum absulute value without exponent */ -uint16 bts_Flt16Vec_maxAbs( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates vector */ -void bts_Flt16Vec_create( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** resize vector (sizeA must be smaller or equal to allocated size)*/ -void bts_Flt16Vec_size( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - uint32 sizeA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size in words (16-bit) object needs when written to memory */ -uint32 bts_Flt16Vec_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Vec* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_Flt16Vec_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Vec* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_Flt16Vec_memRead( struct bbs_Context* cpA, - struct bts_Flt16Vec* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** maximize mantisse values to reduce error propagation through multiple vector operations */ -void bts_Flt16Vec_maximizeMantisse( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ); - -/** scales vector such that max abs is as near as possible to 0x7FFF; returns scale factor used in format 16.16; returns 0 when vector is 0 */ -uint32 bts_Flt16Vec_maximizeAbsValue( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ); - -/** tranlates vector to zero average */ -void bts_Flt16Vec_zeroAverage( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ); - -/** normalizes vector (euclidean norm) */ -void bts_Flt16Vec_normalize( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ); - -/** sets vector to zero */ -void bts_Flt16Vec_setZero( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ); - -/** multiplies a scalar to vector */ -void bts_Flt16Vec_mul( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA, int32 valA, int16 expA ); - -/** computes dot product; returns product as mantisse + exponent */ -void bts_Flt16Vec_dotPtrd( struct bbs_Context* cpA, struct bts_Flt16Vec* vp1A, struct bts_Flt16Vec* vp2A, int32* manPtrA, int32* expPtrA ); - -/** appends a vector */ -void bts_Flt16Vec_append( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA, struct bts_Flt16Vec* srcPtrA ); - -#endif /* bts_FLT_16_VEC_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Vec2D.c b/Embedded/common/src/b_TensorEm/Flt16Vec2D.c deleted file mode 100644 index a65c621..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Vec2D.c +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Flt16Vec2D.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec2D_init( struct bts_Flt16Vec2D* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec2D_exit( struct bts_Flt16Vec2D* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec2D_copy( struct bts_Flt16Vec2D* ptrA, const struct bts_Flt16Vec2D* srcPtrA ) -{ - ptrA->bbpE = srcPtrA->bbpE; - ptrA->xE = srcPtrA->xE; - ptrA->yE = srcPtrA->yE; -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Flt16Vec2D_equal( const struct bts_Flt16Vec2D* ptrA, const struct bts_Flt16Vec2D* srcPtrA ) -{ - int32 bbpDiffL = ptrA->bbpE - srcPtrA->bbpE; - if( bbpDiffL == 0 ) - { - if( ptrA->xE != srcPtrA->xE ) return FALSE; - if( ptrA->yE != srcPtrA->yE ) return FALSE; - return TRUE; - } - - if( bbpDiffL > 0 ) - { - int32 xL = ( int32 ) srcPtrA->xE << bbpDiffL; - int32 yL = ( int32 ) srcPtrA->yE << bbpDiffL; - if( ptrA->xE != xL ) return FALSE; - if( ptrA->yE != yL ) return FALSE; - /* check if bits were lost by the shifting */ - if( srcPtrA->xE != ( xL >> bbpDiffL ) ) return FALSE; - if( srcPtrA->yE != ( yL >> bbpDiffL ) ) return FALSE; - return TRUE; - } - - if( bbpDiffL < 0 ) - { - int32 xL = ( int32 ) ptrA->xE << -bbpDiffL; - int32 yL = ( int32 ) ptrA->yE << -bbpDiffL; - if( xL != srcPtrA->xE ) return FALSE; - if( yL != srcPtrA->yE ) return FALSE; - /* check if bits were lost by the shifting */ - if( ptrA->xE != ( xL >> -bbpDiffL ) ) return FALSE; - if( ptrA->yE != ( yL >> -bbpDiffL ) ) return FALSE; - return TRUE; - } - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Vec2D_create16( int16 xA, int16 yA, int16 bbpA ) -{ - struct bts_Flt16Vec2D vecL; - vecL.xE = xA; - vecL.yE = yA; - vecL.bbpE = bbpA; - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Vec2D_createVec16( struct bts_Int16Vec2D vecA, int16 bbpA ) -{ - struct bts_Flt16Vec2D vecL; - vecL.xE = vecA.xE; - vecL.yE = vecA.yE; - vecL.bbpE = bbpA; - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Vec2D_create32( int32 xA, int32 yA, int32 bbpA ) -{ - struct bts_Flt16Vec2D vecL; - if( ( xA | yA ) == 0 ) - { - vecL.xE = 0; - vecL.yE = 0; - vecL.bbpE = 0; - } - else - { - int32 shiftL = bts_maxAbsIntLog2Of2( xA, yA ) - 13; - - if( shiftL > 0 ) - { - int32 sh1L = shiftL - 1; - vecL.xE = ( ( xA >> sh1L ) + 1 ) >> 1; - vecL.yE = ( ( yA >> sh1L ) + 1 ) >> 1; - } - else - { - vecL.xE = xA << -shiftL; - vecL.yE = yA << -shiftL; - } - vecL.bbpE = bbpA - shiftL; - } - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -int32 bts_Flt16Vec2D_dotPrd( const struct bts_Flt16Vec2D* vec1PtrA, - const struct bts_Flt16Vec2D* vec2PtrA ) -{ - return ( int32 ) vec1PtrA->xE * vec2PtrA->xE + ( int32 ) vec1PtrA->yE * vec2PtrA->yE; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec2D_norm2( const struct bts_Flt16Vec2D* ptrA ) -{ - return ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE; -} - -/* ------------------------------------------------------------------------- */ - -uint16 bts_Flt16Vec2D_norm( const struct bts_Flt16Vec2D* ptrA ) -{ - return bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec2D_normalize( struct bts_Flt16Vec2D* ptrA ) -{ - int32 normL = bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE ); - int32 xL = ( ( int32 ) ptrA->xE << 16 ) / normL; - int32 yL = ( ( int32 ) ptrA->yE << 16 ) / normL; - *ptrA = bts_Flt16Vec2D_create32( xL, yL, 16 ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Vec2D_normalized( const struct bts_Flt16Vec2D* ptrA ) -{ - struct bts_Flt16Vec2D vecL = *ptrA; - bts_Flt16Vec2D_normalize( &vecL ); - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -phase16 bts_Flt16Vec2D_angle( const struct bts_Flt16Vec2D* vecPtrA ) -{ - return bbs_phase16( vecPtrA->xE, vecPtrA->yE ); -} - -/* ------------------------------------------------------------------------- */ - -phase16 bts_Flt16Vec2D_enclosedAngle( const struct bts_Flt16Vec2D* vec1PtrA, - const struct bts_Flt16Vec2D* vec2PtrA ) -{ - int32 xL = ( int32 ) vec1PtrA->xE * vec2PtrA->xE + ( int32 ) vec1PtrA->yE * vec2PtrA->yE; - int32 yL = ( int32 ) vec1PtrA->yE * vec2PtrA->xE - ( int32 ) vec1PtrA->xE * vec2PtrA->yE; - return bbs_phase16( xL, yL ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Vec2D_add( struct bts_Flt16Vec2D vec1A, struct bts_Flt16Vec2D vec2A ) -{ - int32 xL, yL, bbpL; - int32 shiftL = vec1A.bbpE - vec2A.bbpE; - - if( shiftL > 0 ) - { - xL = ( ( int32 ) vec2A.xE << shiftL ) + vec1A.xE; - yL = ( ( int32 ) vec2A.yE << shiftL ) + vec1A.yE; - bbpL = vec1A.bbpE; - } - else - { - xL = ( ( int32 ) vec1A.xE << -shiftL ) + vec2A.xE; - yL = ( ( int32 ) vec1A.yE << -shiftL ) + vec2A.yE; - bbpL = vec2A.bbpE; - } - - return bts_Flt16Vec2D_create32( xL, yL, bbpL ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Vec2D_sub( struct bts_Flt16Vec2D vec1A, struct bts_Flt16Vec2D vec2A ) -{ - int32 xL, yL, bbpL; - int32 shiftL = vec1A.bbpE - vec2A.bbpE; - - if( shiftL > 0 ) - { - xL = ( int32 ) vec1A.xE - ( ( int32 ) vec2A.xE << shiftL ); - yL = ( int32 ) vec1A.yE - ( ( int32 ) vec2A.yE << shiftL ); - bbpL = vec1A.bbpE; - } - else - { - xL = ( ( int32 ) vec1A.xE << -shiftL ) - vec2A.xE; - yL = ( ( int32 ) vec1A.yE << -shiftL ) - vec2A.yE; - bbpL = vec2A.bbpE; - } - - return bts_Flt16Vec2D_create32( xL, yL, bbpL ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_Flt16Vec2D_mul( struct bts_Flt16Vec2D vecA, int16 factorA, int32 bbpFactorA ) -{ - int32 xL = ( int32 ) vecA.xE * factorA; - int32 yL = ( int32 ) vecA.yE * factorA; - return bts_Flt16Vec2D_create32( xL, yL, bbpFactorA + vecA.bbpE ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Vec2D bts_Flt16Vec2D_int16Vec2D( struct bts_Flt16Vec2D vecA, int32 dstBbpA ) -{ - struct bts_Int16Vec2D vecL; - int32 shiftL = vecA.bbpE - dstBbpA; - - if( shiftL > 0 ) - { - vecL.xE = ( ( vecA.xE >> ( shiftL - 1 ) ) + 1 ) >> 1; - vecL.yE = ( ( vecA.yE >> ( shiftL - 1 ) ) + 1 ) >> 1; - } - else - { - vecL.xE = vecA.xE << ( -shiftL ); - vecL.yE = vecA.yE << ( -shiftL ); - } - - return vecL; -} - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/Flt16Vec2D.h b/Embedded/common/src/b_TensorEm/Flt16Vec2D.h deleted file mode 100644 index ce6828c..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Vec2D.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FLT16VEC2D_EM_H -#define bts_FLT16VEC2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" -#include "b_TensorEm/Int16Vec2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d vector with floating point */ -struct bts_Flt16Vec2D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** x component */ - int16 xE; - - /** y component */ - int16 yE; - - /** point position */ - int16 bbpE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes vector */ -void bts_Flt16Vec2D_init( struct bts_Flt16Vec2D* ptrA ); - -/** destroys vector */ -void bts_Flt16Vec2D_exit( struct bts_Flt16Vec2D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_Flt16Vec2D_copy( struct bts_Flt16Vec2D* ptrA, const struct bts_Flt16Vec2D* srcPtrA ); - -/** equal operator */ -flag bts_Flt16Vec2D_equal( const struct bts_Flt16Vec2D* ptrA, const struct bts_Flt16Vec2D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** creates vector from 16 bit values */ -struct bts_Flt16Vec2D bts_Flt16Vec2D_create16( int16 xA, int16 yA, int16 bbpA ); - -/** creates vector from 16 bit vactor */ -struct bts_Flt16Vec2D bts_Flt16Vec2D_createVec16( struct bts_Int16Vec2D vecA, int16 bbpA ); - -/** creates vector from 32 bit values (automatic adjustment of bbp value) */ -struct bts_Flt16Vec2D bts_Flt16Vec2D_create32( int32 xA, int32 yA, int32 bbpA ); - - -/** dot product of vectors; return bbp is vec1PtrA->bbpE + vec2PtrA->bbpE */ -int32 bts_Flt16Vec2D_dotPrd( const struct bts_Flt16Vec2D* vec1PtrA, - const struct bts_Flt16Vec2D* vec2PtrA ); - -/** returns square norm of vector; return bbp is ptrA->bbpE * 2 */ -uint32 bts_Flt16Vec2D_norm2( const struct bts_Flt16Vec2D* ptrA ); - -/** returns norm of vector; return bbp is ptrA->bbpE*/ -uint16 bts_Flt16Vec2D_norm( const struct bts_Flt16Vec2D* ptrA ); - -/** normalizes vector; bbpA defines number of bits behind the point */ -void bts_Flt16Vec2D_normalize( struct bts_Flt16Vec2D* ptrA ); - -/** returns normalized vector; bbpA defines number of bits behind the point */ -struct bts_Flt16Vec2D bts_Flt16Vec2D_normalized( const struct bts_Flt16Vec2D* ptrA ); - -/** computes angle between vector and x axis*/ -phase16 bts_Flt16Vec2D_angle( const struct bts_Flt16Vec2D* vecPtrA ); - -/** computes angle between two vectors */ -phase16 bts_Flt16Vec2D_enclosedAngle( const struct bts_Flt16Vec2D* vec1PtrA, - const struct bts_Flt16Vec2D* vec2PtrA ); - -/** adds two vectors; returns resulting vector */ -struct bts_Flt16Vec2D bts_Flt16Vec2D_add( struct bts_Flt16Vec2D vec1A, struct bts_Flt16Vec2D vec2A ); - -/** subtracts vec1A - vec2A; returns resulting vector */ -struct bts_Flt16Vec2D bts_Flt16Vec2D_sub( struct bts_Flt16Vec2D vec1A, struct bts_Flt16Vec2D vec2A ); - -/** multiplies vecor with scalar; returns resulting vector */ -struct bts_Flt16Vec2D bts_Flt16Vec2D_mul( struct bts_Flt16Vec2D vecA, int16 factorA, int32 bbpFactorA ); - -/** converts vecA into bts_Int16Vec2D */ -struct bts_Int16Vec2D bts_Flt16Vec2D_int16Vec2D( struct bts_Flt16Vec2D vecA, int32 dstBbpA ); - -#endif /* bts_FLT16VEC2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Vec3D.c b/Embedded/common/src/b_TensorEm/Flt16Vec3D.c deleted file mode 100644 index 032fc20..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Vec3D.c +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Flt16Vec3D.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec3D_init( struct bts_Flt16Vec3D* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->zE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec3D_exit( struct bts_Flt16Vec3D* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; - ptrA->zE = 0; - ptrA->bbpE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -flag bts_Flt16Vec3D_equal( const struct bts_Flt16Vec3D* ptrA, const struct bts_Flt16Vec3D* srcPtrA ) -{ - int32 bbpDiffL = ptrA->bbpE - srcPtrA->bbpE; - if( bbpDiffL == 0 ) - { - if( ptrA->xE != srcPtrA->xE ) return FALSE; - if( ptrA->yE != srcPtrA->yE ) return FALSE; - if( ptrA->zE != srcPtrA->zE ) return FALSE; - return TRUE; - } - - if( bbpDiffL > 0 ) - { - int32 xL = ( int32 ) srcPtrA->xE << bbpDiffL; - int32 yL = ( int32 ) srcPtrA->yE << bbpDiffL; - int32 zL = ( int32 ) srcPtrA->zE << bbpDiffL; - if( ptrA->xE != xL ) return FALSE; - if( ptrA->yE != yL ) return FALSE; - if( ptrA->zE != zL ) return FALSE; - return TRUE; - } - - if( bbpDiffL < 0 ) - { - int32 xL = ( int32 ) ptrA->xE << -bbpDiffL; - int32 yL = ( int32 ) ptrA->yE << -bbpDiffL; - int32 zL = ( int32 ) ptrA->zE << -bbpDiffL; - if( xL != srcPtrA->xE ) return FALSE; - if( yL != srcPtrA->yE ) return FALSE; - if( zL != srcPtrA->zE ) return FALSE; - return TRUE; - } - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec3D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Vec3D *ptrA ) -{ - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec3D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Vec3D* ptrA, - uint16* memPtrA ) -{ - bbs_ERROR0( "not implemented" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec3D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Vec3D* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - bbs_ERROR0( "not implemented" ); - return 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Vec3D_create16( int16 xA, int16 yA, int16 zA, int16 bbpA ) -{ - struct bts_Flt16Vec3D vecL; - vecL.xE = xA; - vecL.yE = yA; - vecL.zE = zA; - vecL.bbpE = bbpA; - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Vec3D_create32( int32 xA, int32 yA, int32 zA, int32 bbpA ) -{ - struct bts_Flt16Vec3D vecL; - if( ( xA | yA | zA ) == 0 ) - { - vecL.xE = 0; - vecL.yE = 0; - vecL.zE = 0; - vecL.bbpE = 0; - } - else - { - int32 shiftL = bts_maxAbsIntLog2Of3( xA, yA, zA ) - 13; - - if( shiftL > 0 ) - { - int32 sh1L = shiftL - 1; - vecL.xE = ( ( xA >> sh1L ) + 1 ) >> 1; - vecL.yE = ( ( yA >> sh1L ) + 1 ) >> 1; - vecL.zE = ( ( zA >> sh1L ) + 1 ) >> 1; - } - else - { - vecL.xE = xA << -shiftL; - vecL.yE = yA << -shiftL; - vecL.zE = zA << -shiftL; - } - vecL.bbpE = bbpA - shiftL; - } - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Flt16Vec3D_norm2( const struct bts_Flt16Vec3D* ptrA ) -{ - return ( int32 ) ptrA->xE * ptrA->xE + - ( int32 ) ptrA->yE * ptrA->yE + - ( int32 ) ptrA->zE * ptrA->zE; -} - -/* ------------------------------------------------------------------------- */ - -uint16 bts_Flt16Vec3D_norm( const struct bts_Flt16Vec3D* ptrA ) -{ - return bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + - ( int32 ) ptrA->yE * ptrA->yE + - ( int32 ) ptrA->zE * ptrA->zE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Flt16Vec3D_normalize( struct bts_Flt16Vec3D* ptrA ) -{ - int32 normL = bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + - ( int32 ) ptrA->yE * ptrA->yE + - ( int32 ) ptrA->zE * ptrA->zE ); - - int32 xL = ( ( int32 ) ptrA->xE << 16 ) / normL; - int32 yL = ( ( int32 ) ptrA->yE << 16 ) / normL; - int32 zL = ( ( int32 ) ptrA->zE << 16 ) / normL; - *ptrA = bts_Flt16Vec3D_create32( xL, yL, zL, 16 ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Vec3D_normalized( const struct bts_Flt16Vec3D* ptrA ) -{ - struct bts_Flt16Vec3D vecL = *ptrA; - bts_Flt16Vec3D_normalize( &vecL ); - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Vec3D_add( struct bts_Flt16Vec3D vec1A, struct bts_Flt16Vec3D vec2A ) -{ - int32 xL, yL, zL, bbpL; - int32 shiftL = vec1A.bbpE - vec2A.bbpE; - - if( shiftL > 0 ) - { - xL = vec1A.xE + ( ( int32 ) vec2A.xE << shiftL ); - yL = vec1A.yE + ( ( int32 ) vec2A.yE << shiftL ); - zL = vec1A.zE + ( ( int32 ) vec2A.zE << shiftL ); - bbpL = vec1A.bbpE; - } - else - { - xL = ( ( int32 ) vec1A.xE << -shiftL ) + vec2A.xE; - yL = ( ( int32 ) vec1A.yE << -shiftL ) + vec2A.yE; - zL = ( ( int32 ) vec1A.zE << -shiftL ) + vec2A.zE; - bbpL = vec2A.bbpE; - } - - return bts_Flt16Vec3D_create32( xL, yL, zL, bbpL ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Vec3D_sub( struct bts_Flt16Vec3D vec1A, struct bts_Flt16Vec3D vec2A ) -{ - int32 xL, yL, zL, bbpL; - int32 shiftL = vec1A.bbpE - vec2A.bbpE; - - if( shiftL > 0 ) - { - xL = vec1A.xE - ( ( int32 ) vec2A.xE << shiftL ); - yL = vec1A.yE - ( ( int32 ) vec2A.yE << shiftL ); - zL = vec1A.zE - ( ( int32 ) vec2A.zE << shiftL ); - bbpL = vec1A.bbpE; - } - else - { - xL = ( ( int32 ) vec1A.xE << -shiftL ) - vec2A.xE; - yL = ( ( int32 ) vec1A.yE << -shiftL ) - vec2A.yE; - zL = ( ( int32 ) vec1A.zE << -shiftL ) - vec2A.zE; - bbpL = vec2A.bbpE; - } - - return bts_Flt16Vec3D_create32( xL, yL, zL, bbpL ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec3D bts_Flt16Vec3D_mul( struct bts_Flt16Vec3D vecA, int16 factorA, int32 bbpFactorA ) -{ - int32 xL = ( int32 ) vecA.xE * factorA; - int32 yL = ( int32 ) vecA.yE * factorA; - int32 zL = ( int32 ) vecA.zE * factorA; - return bts_Flt16Vec3D_create32( xL, yL, zL, bbpFactorA + vecA.bbpE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Flt16Vec3D.h b/Embedded/common/src/b_TensorEm/Flt16Vec3D.h deleted file mode 100644 index eab1714..0000000 --- a/Embedded/common/src/b_TensorEm/Flt16Vec3D.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FLT16VEC3D_EM_H -#define bts_FLT16VEC3D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 3d vector with floating point */ -struct bts_Flt16Vec3D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** x component */ - int16 xE; - - /** y component */ - int16 yE; - - /** z component */ - int16 zE; - - /** point position */ - int16 bbpE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes vector */ -void bts_Flt16Vec3D_init( struct bts_Flt16Vec3D* ptrA ); - -/** destroys vector */ -void bts_Flt16Vec3D_exit( struct bts_Flt16Vec3D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** equal operator */ -flag bts_Flt16Vec3D_equal( const struct bts_Flt16Vec3D* ptrA, const struct bts_Flt16Vec3D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Flt16Vec3D_memSize( struct bbs_Context* cpA, - const struct bts_Flt16Vec3D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Flt16Vec3D_memWrite( struct bbs_Context* cpA, - const struct bts_Flt16Vec3D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Flt16Vec3D_memRead( struct bbs_Context* cpA, - struct bts_Flt16Vec3D* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** creates vector from 16 bit values */ -struct bts_Flt16Vec3D bts_Flt16Vec3D_create16( int16 xA, int16 yA, int16 zA, int16 bbpA ); - -/** creates vector from 32 bit values (automatic adjustment of bbp value) */ -struct bts_Flt16Vec3D bts_Flt16Vec3D_create32( int32 xA, int32 yA, int32 zA, int32 bbpA ); - -/** returns square norm of vector; return bbp is ptrA->bbpE * 2 */ -uint32 bts_Flt16Vec3D_norm2( const struct bts_Flt16Vec3D* ptrA ); - -/** returns norm of vector; return bbp is ptrA->bbpE*/ -uint16 bts_Flt16Vec3D_norm( const struct bts_Flt16Vec3D* ptrA ); - -/** normalizes vector; bbpA defines number of bits behind the point */ -void bts_Flt16Vec3D_normalize( struct bts_Flt16Vec3D* ptrA ); - -/** returns normalized vector; bbpA defines number of bits behind the point */ -struct bts_Flt16Vec3D bts_Flt16Vec3D_normalized( const struct bts_Flt16Vec3D* ptrA ); - -/** adds two vectors; returns resulting vector */ -struct bts_Flt16Vec3D bts_Flt16Vec3D_add( struct bts_Flt16Vec3D vec1A, struct bts_Flt16Vec3D vec2A ); - -/** subtracts vec1A - vec2A; returns resulting vector */ -struct bts_Flt16Vec3D bts_Flt16Vec3D_sub( struct bts_Flt16Vec3D vec1A, struct bts_Flt16Vec3D vec2A ); - -/** multiplies vecor with scalar; returns resulting vector */ -struct bts_Flt16Vec3D bts_Flt16Vec3D_mul( struct bts_Flt16Vec3D vecA, int16 factorA, int32 bbpFactorA ); - -#endif /* bts_FLT16VEC3D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Functions.c b/Embedded/common/src/b_TensorEm/Functions.c deleted file mode 100644 index ae9f3ae..0000000 --- a/Embedded/common/src/b_TensorEm/Functions.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ external functions } ----------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_absIntLog2( int32 vA ) -{ - return bbs_intLog2( bbs_abs( vA ) ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_maxAbsIntLog2Of2( int32 v1A, int32 v2A ) -{ - uint32 maxL = bbs_max( ( uint32 )bbs_abs( v1A ), ( uint32 )bbs_abs( v2A ) ); - return bbs_intLog2( maxL ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_maxAbsIntLog2Of3( int32 v1A, int32 v2A, int32 v3A ) -{ - uint32 maxL = bbs_abs( v1A ); - maxL = bbs_max( maxL, ( uint32 )bbs_abs( v2A ) ); - maxL = bbs_max( maxL, ( uint32 )bbs_abs( v3A ) ); - return bbs_intLog2( maxL ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_maxAbsIntLog2Of4( int32 v1A, int32 v2A, int32 v3A, int32 v4A ) -{ - uint32 maxL = bbs_abs( v1A ); - maxL = bbs_max( maxL, ( uint32 )bbs_abs( v2A ) ); - maxL = bbs_max( maxL, ( uint32 )bbs_abs( v3A ) ); - maxL = bbs_max( maxL, ( uint32 )bbs_abs( v4A ) ); - return bbs_intLog2( maxL ); -} - -/* ------------------------------------------------------------------------- */ diff --git a/Embedded/common/src/b_TensorEm/Functions.h b/Embedded/common/src/b_TensorEm/Functions.h deleted file mode 100644 index 8cc9533..0000000 --- a/Embedded/common/src/b_TensorEm/Functions.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_FUNCTIONS_EM_H -#define bts_FUNCTIONS_EM_H - -/** - * This file contains general purpose functions. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -enum bts_AltType -{ - bts_ALT_IDENTITY = 1, /* identity transformation */ - bts_ALT_TRANS, /* restricted to translation only */ - bts_ALT_TRANS_SCALE, /* restricted to translation and scale only */ - bts_ALT_RIGID, /* restricted to rigid transformation (translation + scale + rotation) */ - bts_ALT_LINEAR, /* allows all degrees of freedom for affine linear transformation */ - bts_ALT_TRANS_SCALE_XYZ /* restricted to translation and scaling in x,y,z directions */ -}; - -enum bts_RBFType -{ - bts_RBF_IDENTITY = 1, /* no rbf deformation */ - bts_RBF_LINEAR /* linear, i.e. ||r|| */ -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/** compute the integer logarithm of the absolute value */ -uint32 bts_absIntLog2( int32 vA ); - -/** compute the integer logarithm of the maximal absolute value of all arguments */ -uint32 bts_maxAbsIntLog2Of2( int32 v1A, int32 v2A ); - -/** compute the integer logarithm of the maximal absolute value of all arguments */ -uint32 bts_maxAbsIntLog2Of3( int32 v1A, int32 v2A, int32 v3A ); - -/** compute the integer logarithm of the maximal absolute value of all arguments */ -uint32 bts_maxAbsIntLog2Of4( int32 v1A, int32 v2A, int32 v3A, int32 v4A ); - -#endif /* bts_FUNCTIONS_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/IdCluster2D.c b/Embedded/common/src/b_TensorEm/IdCluster2D.c deleted file mode 100644 index d04344c..0000000 --- a/Embedded/common/src/b_TensorEm/IdCluster2D.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Math.h" -#include "b_TensorEm/IdCluster2D.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_init( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA ) -{ - bts_Cluster2D_init( cpA, &ptrA->clusterE ); - bbs_Int16Arr_init( cpA, &ptrA->idArrE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_exit( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA ) -{ - bts_Cluster2D_exit( cpA, &ptrA->clusterE ); - bbs_Int16Arr_exit( cpA, &ptrA->idArrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_copy( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - const struct bts_IdCluster2D* srcPtrA ) -{ - bts_Cluster2D_copy( cpA, &ptrA->clusterE, &srcPtrA->clusterE ); - bbs_Int16Arr_copy( cpA, &ptrA->idArrE, &srcPtrA->idArrE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bts_IdCluster2D_equal( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA, - const struct bts_IdCluster2D* srcPtrA ) -{ - if( !bts_Cluster2D_equal( cpA, &ptrA->clusterE, &srcPtrA->clusterE ) ) return FALSE; - if( !bbs_Int16Arr_equal( cpA, &ptrA->idArrE, &srcPtrA->idArrE ) ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Vec2D bts_IdCluster2D_center( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA ) -{ - return bts_Cluster2D_center( cpA, &ptrA->clusterE ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Rect bts_IdCluster2D_boundingBox( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA ) -{ - return bts_Cluster2D_boundingBox( cpA, &ptrA->clusterE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_create( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - bts_Cluster2D_create( cpA, &ptrA->clusterE, sizeA, mspA ); - bbs_Int16Arr_create( cpA, &ptrA->idArrE, sizeA, mspA ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_size( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - uint32 sizeA ) -{ - bts_Cluster2D_size( cpA, &ptrA->clusterE, sizeA ); - bbs_Int16Arr_size( cpA, &ptrA->idArrE, sizeA ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_transform( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - struct bts_Flt16Alt2D altA ) -{ - bts_Cluster2D_transform( cpA, &ptrA->clusterE, altA ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_copyTransform( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - const struct bts_IdCluster2D* srcPtrA, - struct bts_Flt16Alt2D altA, - uint32 dstBbpA ) -{ - bts_Cluster2D_copyTransform( cpA, &ptrA->clusterE, &srcPtrA->clusterE, altA, dstBbpA ); - bbs_Int16Arr_copy( cpA, &ptrA->idArrE, &srcPtrA->idArrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_IdCluster2D_memSize( struct bbs_Context* cpA, - const struct bts_IdCluster2D *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bts_Cluster2D_memSize( cpA, &ptrA->clusterE ) - + bbs_Int16Arr_memSize( cpA, &ptrA->idArrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_IdCluster2D_memWrite( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_IdCluster2D_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_ID_CLUSTER2D_VERSION, memPtrA ); - memPtrA += bts_Cluster2D_memWrite( cpA, &ptrA->clusterE, memPtrA ); - memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->idArrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_IdCluster2D_memRead( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL; - uint32 versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_ID_CLUSTER2D_VERSION, memPtrA ); - memPtrA += bts_Cluster2D_memRead( cpA, &ptrA->clusterE, memPtrA, mspA ); - memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->idArrE, memPtrA, mspA ); - if( memSizeL != bts_IdCluster2D_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_IdCluster2D_memRead( const struct bts_IdCluster2D* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_IdCluster2D_convertToEqivalentClusters( struct bbs_Context* cpA, - const struct bts_IdCluster2D* inCluster1PtrA, - const struct bts_IdCluster2D* inCluster2PtrA, - struct bts_Cluster2D* outCluster1PtrA, - struct bts_Cluster2D* outCluster2PtrA ) -{ - uint32 iL, jL; - uint32 countL = 0; - - uint32 size1L = inCluster1PtrA->clusterE.sizeE; - uint32 size2L = inCluster2PtrA->clusterE.sizeE; - - const int16* idArr1L = inCluster1PtrA->idArrE.arrPtrE; - const int16* idArr2L = inCluster2PtrA->idArrE.arrPtrE; - - const struct bts_Int16Vec2D* srcVecArr1E = inCluster1PtrA->clusterE.vecArrE; - const struct bts_Int16Vec2D* srcVecArr2E = inCluster2PtrA->clusterE.vecArrE; - - struct bts_Int16Vec2D* dstVecArr1E = outCluster1PtrA->vecArrE; - struct bts_Int16Vec2D* dstVecArr2E = outCluster2PtrA->vecArrE; - - uint32 maxOutSizeL = bbs_min( outCluster1PtrA->allocatedSizeE, outCluster2PtrA->allocatedSizeE ); - bts_Cluster2D_size( cpA, outCluster1PtrA, maxOutSizeL ); - bts_Cluster2D_size( cpA, outCluster2PtrA, maxOutSizeL ); - - for( iL = 0; iL < size1L; iL++ ) - { - int32 idL = idArr1L[ iL ]; - if( idL >= 0 ) - { - for( jL = 0; jL < size2L; jL++ ) - { - if( idL == idArr2L[ jL ] ) break; - } - - if( jL < size2L ) - { - if( countL == maxOutSizeL ) - { - bbs_ERROR0( "void bts_IdCluster2D_convertToEqivalentClusters( .... ):\n" - "Destination clusters are insufficiently allocated" ); - return; - } - - dstVecArr1E[ countL ] = srcVecArr1E[ iL ]; - dstVecArr2E[ countL ] = srcVecArr2E[ jL ]; - countL++; - } - } - } - - bts_Cluster2D_size( cpA, outCluster1PtrA, countL ); - bts_Cluster2D_size( cpA, outCluster2PtrA, countL ); - - outCluster1PtrA->bbpE = inCluster1PtrA->clusterE.bbpE; - outCluster2PtrA->bbpE = inCluster2PtrA->clusterE.bbpE; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Flt16Alt2D bts_IdCluster2D_alt( struct bbs_Context* cpA, - const struct bts_IdCluster2D* srcPtrA, - struct bts_IdCluster2D* dstPtrA, - enum bts_AltType altTypeA, - struct bts_Cluster2D* tmpPtr1A, /* temporary cluster 1 */ - struct bts_Cluster2D* tmpPtr2A ) /* temporary cluster 2 */ -{ - bts_IdCluster2D_convertToEqivalentClusters( cpA, srcPtrA, dstPtrA, tmpPtr1A, tmpPtr2A ); - return bts_Cluster2D_alt( cpA, tmpPtr1A, tmpPtr2A, altTypeA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/IdCluster2D.h b/Embedded/common/src/b_TensorEm/IdCluster2D.h deleted file mode 100644 index e76ce21..0000000 --- a/Embedded/common/src/b_TensorEm/IdCluster2D.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_ID_CLUSTER2D_EM_H -#define bts_ID_CLUSTER2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_TensorEm/Cluster2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bts_ID_CLUSTER2D_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** 2d vector array with node id information */ -struct bts_IdCluster2D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /* vector array */ - struct bts_Cluster2D clusterE; - - /** array of id numbers */ - struct bbs_Int16Arr idArrE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes cluster */ -void bts_IdCluster2D_init( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA ); - -/** destroys cluster */ -void bts_IdCluster2D_exit( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copies cluster */ -void bts_IdCluster2D_copy( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - const struct bts_IdCluster2D* srcPtrA ); - -/** compares cluster */ -flag bts_IdCluster2D_equal( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA, - const struct bts_IdCluster2D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/** returns center of gravity */ -struct bts_Flt16Vec2D bts_IdCluster2D_center( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA ); - -/** returns bounding box */ -struct bts_Int16Rect bts_IdCluster2D_boundingBox( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA ); - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates cluster */ -void bts_IdCluster2D_create( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** resize cluster (sizeA must be smaller or equal to allocated size)*/ -void bts_IdCluster2D_size( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - uint32 sizeA ); - -/** transforms cluster according to alt (function does not change bbp of cluster) */ -void bts_IdCluster2D_transform( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - struct bts_Flt16Alt2D altA ); - -/** copies src cluster and simultaneously transforms vectors according to alt using dstBbpA as resulting cluster format */ -void bts_IdCluster2D_copyTransform( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - const struct bts_IdCluster2D* srcPtrA, - struct bts_Flt16Alt2D altA, - uint32 dstBbpA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_IdCluster2D_memSize( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_IdCluster2D_memWrite( struct bbs_Context* cpA, - const struct bts_IdCluster2D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_IdCluster2D_memRead( struct bbs_Context* cpA, - struct bts_IdCluster2D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/* This function extracts equivalent 2d sub clusters which positions - * correponts to those nodes that have a non-negative id occurring - * in both input clusters. - * Note: Nodes with negative ids are ignored - * Non-Negative ids must not occur twice in one cluster. - */ -void bts_IdCluster2D_convertToEqivalentClusters( struct bbs_Context* cpA, - const struct bts_IdCluster2D* inCluster1PtrA, - const struct bts_IdCluster2D* inCluster2PtrA, - struct bts_Cluster2D* outCluster1PtrA, - struct bts_Cluster2D* outCluster2PtrA ); - -/** Computes the best affine linear transformation from *srcPtrA to *dstPtrA using matching id values. - * Constrains of trafo are given by altTypeA - * - * This function selects and matches nodes with corresponsing non-negative id values of source - * an destination clusters. Nodes with negative id values are ignored. Id values >= 0 must be unique - * per node. - */ -struct bts_Flt16Alt2D bts_IdCluster2D_alt( struct bbs_Context* cpA, - const struct bts_IdCluster2D* srcPtrA, - struct bts_IdCluster2D* dstPtrA, - enum bts_AltType altTypeA, - struct bts_Cluster2D* tmpPtr1A, /* temporary cluster 1 */ - struct bts_Cluster2D* tmpPtr2A ); /* temporary cluster 2 */ - - -#endif /* bts_ID_CLUSTER2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Int16Mat2D.c b/Embedded/common/src/b_TensorEm/Int16Mat2D.c deleted file mode 100644 index af5e12d..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Mat2D.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Int16Mat2D.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Mat2D bts_Int16Mat2D_createIdentity() -{ - struct bts_Int16Mat2D matL = { 1 << 14, 0, 0, 1 << 14, 14 }; - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Mat2D bts_Int16Mat2D_createRotation( phase16 angleA ) -{ - int16 cL = bbs_cos16( angleA ); - int16 sL = bbs_sin16( angleA ); - struct bts_Int16Mat2D matL; - matL.xxE = cL; - matL.xyE = -sL; - matL.yxE = sL; - matL.yyE = cL; - matL.bbpE = 14; - return matL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Mat2D bts_Int16Mat2D_createRigid( phase16 angleA, struct flt16 scaleA ) -{ - struct bts_Int16Mat2D matL = bts_Int16Mat2D_createRotation( angleA ); - bts_Int16Mat2D_scale( &matL, scaleA ); - return matL; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Int16Mat2D_scale( struct bts_Int16Mat2D* ptrA, struct flt16 scaleA ) -{ - int32 xxL = ( int32 ) ptrA->xxE * scaleA.valE; - int32 xyL = ( int32 ) ptrA->xyE * scaleA.valE; - int32 yxL = ( int32 ) ptrA->yxE * scaleA.valE; - int32 yyL = ( int32 ) ptrA->yyE * scaleA.valE; - - uint32 shiftL = bts_maxAbsIntLog2Of4( xxL, xyL, yxL, yyL ) - 15; - - ptrA->xxE = xxL >> shiftL; - ptrA->xyE = xyL >> shiftL; - ptrA->yxE = yxL >> shiftL; - ptrA->yyE = yyL >> shiftL; - - ptrA->bbpE += scaleA.bbpE - shiftL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Vec2D bts_Int16Mat2D_map( const struct bts_Int16Mat2D* matPtrA, - const struct bts_Int16Vec2D* vecPtrA ) -{ - struct bts_Int16Vec2D vecL; - vecL.xE = ( ( int32 ) matPtrA->xxE * vecPtrA->xE + ( int32 ) matPtrA->xyE * vecPtrA->yE ) >> matPtrA->bbpE; - vecL.yE = ( ( int32 ) matPtrA->yxE * vecPtrA->xE + ( int32 ) matPtrA->yyE * vecPtrA->yE ) >> matPtrA->bbpE; - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Mat2D bts_Int16Mat2D_mul( const struct bts_Int16Mat2D* mat1PtrA, - const struct bts_Int16Mat2D* mat2PtrA ) -{ - struct bts_Int16Mat2D matL; - int32 xxL = ( int32 ) mat1PtrA->xxE * mat2PtrA->xxE + ( int32 ) mat1PtrA->xyE * mat2PtrA->yxE; - int32 xyL = ( int32 ) mat1PtrA->xxE * mat2PtrA->xyE + ( int32 ) mat1PtrA->xyE * mat2PtrA->yyE; - int32 yxL = ( int32 ) mat1PtrA->yxE * mat2PtrA->xxE + ( int32 ) mat1PtrA->yyE * mat2PtrA->yxE; - int32 yyL = ( int32 ) mat1PtrA->yxE * mat2PtrA->xyE + ( int32 ) mat1PtrA->yyE * mat2PtrA->yyE; - - uint32 shiftL = bts_maxAbsIntLog2Of4( xxL, xyL, yxL, yyL ) - 15; - - matL.xxE = xxL >> shiftL; - matL.xyE = xyL >> shiftL; - matL.yxE = yxL >> shiftL; - matL.yyE = yyL >> shiftL; - - matL.bbpE = mat1PtrA->bbpE + mat2PtrA->bbpE - shiftL; - - return matL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/Int16Mat2D.h b/Embedded/common/src/b_TensorEm/Int16Mat2D.h deleted file mode 100644 index d07fb5f..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Mat2D.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_INT16MAT2D_EM_H -#define bts_INT16MAT2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" -#include "b_TensorEm/Int16Vec2D.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d matrix */ -struct bts_Int16Mat2D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** xx component */ - int16 xxE; - - /** xy component */ - int16 xyE; - - /** yx component */ - int16 yxE; - - /** yy component */ - int16 yyE; - - /** fixed point position */ - int16 bbpE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** creates identity matrix */ -struct bts_Int16Mat2D bts_Int16Mat2D_createIdentity( void ); - -/** creates rotation matrix */ -struct bts_Int16Mat2D bts_Int16Mat2D_createRotation( phase16 angleA ); - -/** creates rigid matrix (scale & rotation) */ -struct bts_Int16Mat2D bts_Int16Mat2D_createRigid( phase16 angleA, struct flt16 scaleA ); - -/** scales matrix by a factor */ -void bts_Int16Mat2D_scale( struct bts_Int16Mat2D* ptrA, struct flt16 scaleA ); - -/** multiplies matrix with vecA; returns resulting vector */ -struct bts_Int16Vec2D bts_Int16Mat2D_map( const struct bts_Int16Mat2D* matPtrA, - const struct bts_Int16Vec2D* vecPtrA ); - -/** multiplies matrix with matA; returns resulting matrix */ -struct bts_Int16Mat2D bts_Int16Mat2D_mul( const struct bts_Int16Mat2D* mat1PtrA, - const struct bts_Int16Mat2D* mat2PtrA ); - -#endif /* bts_INT16MAT2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Int16Rect.c b/Embedded/common/src/b_TensorEm/Int16Rect.c deleted file mode 100644 index 2d5824e..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Rect.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Int16Rect.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Int16Rect_init( struct bbs_Context* cpA, struct bts_Int16Rect* ptrA ) -{ - ptrA->x1E = 0; - ptrA->y1E = 0; - ptrA->x2E = 0; - ptrA->y2E = 0; -} - -void bts_Int16Rect_exit( struct bbs_Context* cpA, struct bts_Int16Rect* ptrA ) -{ - ptrA->x1E = 0; - ptrA->y1E = 0; - ptrA->x2E = 0; - ptrA->y2E = 0; -} - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Rect bts_Int16Rect_create( int16 x1A, int16 y1A, int16 x2A, int16 y2A ) -{ - struct bts_Int16Rect rectL; - rectL.x1E = x1A; - rectL.y1E = y1A; - rectL.x2E = x2A; - rectL.y2E = y2A; - return rectL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Rect_memSize( struct bbs_Context* cpA, - const struct bts_Int16Rect *ptrA ) -{ - return bbs_SIZEOF16( struct bts_Int16Rect ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Rect_memWrite( struct bbs_Context* cpA, - const struct bts_Int16Rect* ptrA, - uint16* memPtrA ) -{ - memPtrA += bbs_memWrite16( &ptrA->x1E, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->y1E, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->x2E, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->y2E, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Rect_memRead( struct bbs_Context* cpA, - struct bts_Int16Rect* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead16( &ptrA->x1E, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->y1E, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->x2E, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->y2E, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/Int16Rect.h b/Embedded/common/src/b_TensorEm/Int16Rect.h deleted file mode 100644 index be37407..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Rect.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_INT16RECT_EM_H -#define bts_INT16RECT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d vector */ -struct bts_Int16Rect -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** upper left component */ - int16 x1E; - - /** upper left component */ - int16 y1E; - - /** lower right component */ - int16 x2E; - - /** lower right component */ - int16 y2E; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes rectangle */ -void bts_Int16Rect_init( struct bbs_Context* cpA, struct bts_Int16Rect* ptrA ); - -/** destroys rectangle */ -void bts_Int16Rect_exit( struct bbs_Context* cpA, struct bts_Int16Rect* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** initialize rectangle */ -struct bts_Int16Rect bts_Int16Rect_create( int16 x1A, int16 y1A, int16 x2A, int16 y2A ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Int16Rect_memSize( struct bbs_Context* cpA, - const struct bts_Int16Rect* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Int16Rect_memWrite( struct bbs_Context* cpA, - const struct bts_Int16Rect* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Int16Rect_memRead( struct bbs_Context* cpA, - struct bts_Int16Rect* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - - -#endif /* bts_INT16RECT_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Int16Vec2D.c b/Embedded/common/src/b_TensorEm/Int16Vec2D.c deleted file mode 100644 index 198ed0f..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Vec2D.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Int16Vec2D.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Int16Vec2D_init( struct bts_Int16Vec2D* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Int16Vec2D_exit( struct bts_Int16Vec2D* ptrA ) -{ - ptrA->xE = 0; - ptrA->yE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec2D_memSize( struct bbs_Context* cpA, - const struct bts_Int16Vec2D *ptrA ) -{ - return bbs_SIZEOF16( struct bts_Int16Vec2D ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec2D_memWrite( struct bbs_Context* cpA, - const struct bts_Int16Vec2D* ptrA, - uint16* memPtrA ) -{ - memPtrA += bbs_memWrite16( &ptrA->xE, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->yE, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec2D_memRead( struct bbs_Context* cpA, - struct bts_Int16Vec2D* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead16( &ptrA->xE, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->yE, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -int32 bts_Int16Vec2D_dotPrd( const struct bts_Int16Vec2D* vec1PtrA, - const struct bts_Int16Vec2D* vec2PtrA ) -{ - return ( int32 ) vec1PtrA->xE * vec2PtrA->xE + ( int32 ) vec1PtrA->yE * vec2PtrA->yE; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec2D_norm2( const struct bts_Int16Vec2D* ptrA ) -{ - return ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE; -} - -/* ------------------------------------------------------------------------- */ - -uint16 bts_Int16Vec2D_norm( const struct bts_Int16Vec2D* ptrA ) -{ - return bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Int16Vec2D_normalize( struct bts_Int16Vec2D* ptrA, int32 bbpA ) -{ - int32 normL = bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE ); - int32 xL = ( ( int32 ) ptrA->xE << 16 ) / normL; - int32 yL = ( ( int32 ) ptrA->yE << 16 ) / normL; - ptrA->xE = xL >> ( 16 - bbpA ); - ptrA->yE = yL >> ( 16 - bbpA ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Vec2D bts_Int16Vec2D_normalized( const struct bts_Int16Vec2D* ptrA, int32 bbpA ) -{ - struct bts_Int16Vec2D vecL = *ptrA; - bts_Int16Vec2D_normalize( &vecL, bbpA ); - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -phase16 bts_Int16Vec2D_angle( const struct bts_Int16Vec2D* vecPtrA ) -{ - return bbs_phase16( vecPtrA->xE, vecPtrA->yE ); -} - -/* ------------------------------------------------------------------------- */ - -phase16 bts_Int16Vec2D_enclosedAngle( const struct bts_Int16Vec2D* vec1PtrA, - const struct bts_Int16Vec2D* vec2PtrA ) -{ - int32 xL = ( int32 ) vec1PtrA->xE * vec2PtrA->xE + ( int32 ) vec1PtrA->yE * vec2PtrA->yE; - int32 yL = ( int32 ) vec1PtrA->yE * vec2PtrA->xE - ( int32 ) vec1PtrA->xE * vec2PtrA->yE; - return bbs_phase16( xL, yL ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/Int16Vec2D.h b/Embedded/common/src/b_TensorEm/Int16Vec2D.h deleted file mode 100644 index 3f0a4e0..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Vec2D.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_INT16VEC2D_EM_H -#define bts_INT16VEC2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Phase.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d vector */ -struct bts_Int16Vec2D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** x component */ - int16 xE; - - /** y component */ - int16 yE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes vector */ -void bts_Int16Vec2D_init( struct bts_Int16Vec2D* ptrA ); - -/** destroys vector */ -void bts_Int16Vec2D_exit( struct bts_Int16Vec2D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Int16Vec2D_memSize( struct bbs_Context* cpA, - const struct bts_Int16Vec2D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Int16Vec2D_memWrite( struct bbs_Context* cpA, - const struct bts_Int16Vec2D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Int16Vec2D_memRead( struct bbs_Context* cpA, - struct bts_Int16Vec2D* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** dot product of vectors */ -int32 bts_Int16Vec2D_dotPrd( const struct bts_Int16Vec2D* vec1PtrA, - const struct bts_Int16Vec2D* vec2PtrA ); - -/** returns square norm of vector */ -uint32 bts_Int16Vec2D_norm2( const struct bts_Int16Vec2D* ptrA ); - -/** returns norm of vector */ -uint16 bts_Int16Vec2D_norm( const struct bts_Int16Vec2D* ptrA ); - -/** normalizes vector; bbpA defines number of bits behind the point */ -void bts_Int16Vec2D_normalize( struct bts_Int16Vec2D* ptrA, int32 bbpA ); - -/** returns normalized vector; bbpA defines number of bits behind the point */ -struct bts_Int16Vec2D bts_Int16Vec2D_normalized( const struct bts_Int16Vec2D* ptrA, int32 bbpA ); - -/** computes angle between vector and x axis*/ -phase16 bts_Int16Vec2D_angle( const struct bts_Int16Vec2D* vecPtrA ); - -/** computes angle between two vectors */ -phase16 bts_Int16Vec2D_enclosedAngle( const struct bts_Int16Vec2D* vec1PtrA, - const struct bts_Int16Vec2D* vec2PtrA ); - -#endif /* bts_INT16VEC2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Int16Vec3D.c b/Embedded/common/src/b_TensorEm/Int16Vec3D.c deleted file mode 100644 index 587a6cc..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Vec3D.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Int16Vec3D.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec3D_memSize( struct bbs_Context* cpA, - const struct bts_Int16Vec3D *ptrA ) -{ - return bbs_SIZEOF16( struct bts_Int16Vec3D ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec3D_memWrite( struct bbs_Context* cpA, - const struct bts_Int16Vec3D* ptrA, - uint16* memPtrA ) -{ - memPtrA += bbs_memWrite16( &ptrA->xE, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->yE, memPtrA ); - memPtrA += bbs_memWrite16( &ptrA->zE, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec3D_memRead( struct bbs_Context* cpA, - struct bts_Int16Vec3D* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead16( &ptrA->xE, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->yE, memPtrA ); - memPtrA += bbs_memRead16( &ptrA->zE, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int16Vec3D_norm2( const struct bts_Int16Vec3D* ptrA ) -{ - return ( int32 ) ptrA->xE * ptrA->xE + - ( int32 ) ptrA->yE * ptrA->yE + - ( int32 ) ptrA->zE * ptrA->zE; -} - -/* ------------------------------------------------------------------------- */ - -uint16 bts_Int16Vec3D_norm( const struct bts_Int16Vec3D* ptrA ) -{ - return bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + - ( int32 ) ptrA->yE * ptrA->yE + - ( int32 ) ptrA->zE * ptrA->zE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Int16Vec3D_normalize( struct bts_Int16Vec3D* ptrA, int32 bbpA ) -{ - int32 normL = bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + - ( int32 ) ptrA->yE * ptrA->yE + - ( int32 ) ptrA->zE * ptrA->zE ); - - int32 xL = ( ( int32 )ptrA->xE << 16 ) / normL; - int32 yL = ( ( int32 )ptrA->yE << 16 ) / normL; - int32 zL = ( ( int32 )ptrA->zE << 16 ) / normL; - ptrA->xE = xL >> ( 16 - bbpA ); - ptrA->yE = yL >> ( 16 - bbpA ); - ptrA->zE = zL >> ( 16 - bbpA ); -} - -/* ------------------------------------------------------------------------- */ - -struct bts_Int16Vec3D bts_Int16Vec3D_normalized( const struct bts_Int16Vec3D* ptrA, int32 bbpA ) -{ - struct bts_Int16Vec3D vecL = *ptrA; - bts_Int16Vec3D_normalize( &vecL, bbpA ); - return vecL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Int16Vec3D.h b/Embedded/common/src/b_TensorEm/Int16Vec3D.h deleted file mode 100644 index 943bff6..0000000 --- a/Embedded/common/src/b_TensorEm/Int16Vec3D.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_INT16VEC3D_EM_H -#define bts_INT16VEC3D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 3d vector */ -struct bts_Int16Vec3D -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** x component */ - int16 xE; - - /** y component */ - int16 yE; - - /** z component */ - int16 zE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Int16Vec3D_memSize( struct bbs_Context* cpA, - const struct bts_Int16Vec3D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Int16Vec3D_memWrite( struct bbs_Context* cpA, - const struct bts_Int16Vec3D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Int16Vec3D_memRead( struct bbs_Context* cpA, - struct bts_Int16Vec3D* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** returns square norm of vector */ -uint32 bts_Int16Vec3D_norm2( const struct bts_Int16Vec3D* ptrA ); - -/** returns norm of vector */ -uint16 bts_Int16Vec3D_norm( const struct bts_Int16Vec3D* ptrA ); - -/** normalizes vector; bbpA defines number of bits behind the point */ -void bts_Int16Vec3D_normalize( struct bts_Int16Vec3D* ptrA, int32 bbpA ); - -/** returns normalized vector; bbpA defines number of bits behind the point */ -struct bts_Int16Vec3D bts_Int16Vec3D_normalized( const struct bts_Int16Vec3D* ptrA, int32 bbpA ); - -#endif /* bts_INT16VEC3D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Int32Mat.c b/Embedded/common/src/b_TensorEm/Int32Mat.c deleted file mode 100644 index 768fd97..0000000 --- a/Embedded/common/src/b_TensorEm/Int32Mat.c +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Int32Mat.h" -#include "b_TensorEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Int32Mat_reduceToNBits( int32* ptrA, uint32 sizeA, int32* bbpPtrA, uint32 nBitsA ) -{ - int32 shiftL; - - /* find max element */ - int32 maxL = 0; - int32* ptrL = ptrA; - int32 iL = sizeA; - while( iL-- ) - { - int32 xL = *ptrL++; - if( xL < 0 ) xL = -xL; - if( xL > maxL ) maxL = xL; - } - - /* determine shift */ - shiftL = bts_absIntLog2( maxL ) + 1 - nBitsA; - - if( shiftL > 0 ) - { - ptrL = ptrA; - iL = sizeA; - while( iL-- ) - { - *ptrL = ( ( *ptrL >> ( shiftL - 1 ) ) + 1 ) >> 1; - ptrL++; - } - - *bbpPtrA -= shiftL; - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Int32Mat_init( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA ) -{ - ptrA->widthE = 0; - bbs_Int32Arr_init( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Int32Mat_exit( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA ) -{ - ptrA->widthE = 0; - bbs_Int32Arr_exit( cpA, &ptrA->arrE ); -} -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Int32Mat_create( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA, - int32 widthA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - bbs_Int32Arr_create( cpA, &ptrA->arrE, widthA * widthA, mspA ); - ptrA->widthE = widthA; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Int32Mat_copy( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA, - const struct bts_Int32Mat* srcPtrA ) -{ - if( ptrA->widthE != srcPtrA->widthE ) - { - bbs_ERROR0( "void bts_Int32Mat_copy( struct bts_Int32Mat* ptrA, struct bts_Int32Mat* srcPtrA ):\n" - "size mismatch" ); - return; - } - - bbs_Int32Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int32Mat_memSize( struct bbs_Context* cpA, - const struct bts_Int32Mat *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->widthE ) - + bbs_Int32Arr_memSize( cpA, &ptrA->arrE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int32Mat_memWrite( struct bbs_Context* cpA, - const struct bts_Int32Mat* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_Int32Mat_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_INT32MAT_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_Int32Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Int32Mat_memRead( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_INT32MAT_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->widthE, memPtrA ); - memPtrA += bbs_Int32Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); - - if( memSizeL != bts_Int32Mat_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Int32Mat_memRead( const struct bts_Int32Mat* ptrA, const void* memPtrA ):\n" - "size mismatch" ); - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -flag bts_Int32Mat_solve( struct bbs_Context* cpA, - const int32* matA, - int32 matWidthA, - const int32* inVecA, - int32* outVecA, - int32 bbpA, - int32* tmpMatA, - int32* tmpVecA ) -{ - bbs_memcpy32( tmpMatA, matA, ( matWidthA * matWidthA ) * bbs_SIZEOF32( int32 ) ); - - return bts_Int32Mat_solve2( cpA, - tmpMatA, - matWidthA, - inVecA, - outVecA, - bbpA, - tmpVecA ); -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Int32Mat_solve2( struct bbs_Context* cpA, - int32* matA, - int32 matWidthA, - const int32* inVecA, - int32* outVecA, - int32 bbpA, - int32* tmpVecA ) -{ - int32 sizeL = matWidthA; - int32 bbpL = bbpA; - int32 iL, jL, kL; - int32 iPivL; - int32 jPivL; - - int32* vecL = outVecA; - int32* matL = matA; - int32* checkArrL = tmpVecA; - - for( iL = 0; iL < sizeL; iL++ ) - { - checkArrL[ iL ] = 0; - } - - bbs_memcpy32( outVecA, inVecA, sizeL * bbs_SIZEOF32( int32 ) ); - - iPivL = 0; - - for( kL = 0; kL < sizeL; kL++ ) - { - /* find pivot */ - int32 maxAbsL = 0; - int32* pivRowL; - - int32 bbp_pivRowL, bbp_vecL, shiftL; - - jPivL = -1; - for( iL = 0; iL < sizeL; iL++ ) - { - if( checkArrL[ iL ] != 1 ) - { - int32* rowL = matL + ( iL * sizeL ); - for( jL = 0; jL < sizeL; jL++ ) - { - if( checkArrL[ jL ] == 0 ) - { - int32 absElemL = rowL[ jL ]; - if( absElemL < 0 ) absElemL = -absElemL; - if( maxAbsL < absElemL ) - { - maxAbsL = absElemL; - iPivL = iL; - jPivL = jL; - } - } - else if( checkArrL[ jL ] > 1 ) - { - return FALSE; - } - } - } - } - - /* successfull ? */ - if( jPivL < 0 ) - { - return FALSE; - } - - checkArrL[ jPivL ]++; - - /* exchange rows to put pivot on diagonal, if neccessary */ - if( iPivL != jPivL ) - { - int32* row1PtrL = matL + ( iPivL * sizeL ); - int32* row2PtrL = matL + ( jPivL * sizeL ); - for( jL = 0; jL < sizeL; jL++ ) - { - int32 tmpL = *row1PtrL; - *row1PtrL++ = *row2PtrL; - *row2PtrL++ = tmpL; - } - - { - int32 tmpL = vecL[ jPivL ]; - vecL[ jPivL ] = vecL[ iPivL ]; - vecL[ iPivL ] = tmpL; - } - } - /* now index jPivL specifies pivot row and maximum element */ - - - /** Overflow protection: only if the highest bit of the largest matrix element is set, - * we need to shift the whole matrix and the right side vector 1 bit to the right, - * to make sure there can be no overflow when the pivot row gets subtracted from the - * other rows. - * Getting that close to overflow is a rare event, so this shift will happen only - * occasionally, or not at all. - */ - if( maxAbsL & 1073741824 ) /*( 1 << 30 )*/ - { - /* right shift matrix by 1 */ - int32 iL = sizeL * sizeL; - int32* ptrL = matL; - while( iL-- ) - { - *ptrL = ( *ptrL + 1 ) >> 1; - ptrL++; - } - - /* right shift right side vector by 1 */ - iL = sizeL; - ptrL = vecL; - while( iL-- ) - { - *ptrL = ( *ptrL + 1 ) >> 1; - ptrL++; - } - - /* decrement bbpL */ - bbpL--; - } - - - /* reduce elements of pivot row to 15 bit */ - pivRowL = matL + jPivL * sizeL; - bbp_pivRowL = bbpL; - bts_Int32Mat_reduceToNBits( pivRowL, sizeL, &bbp_pivRowL, 15 ); - - /* scale pivot row such that maximum equals 1 */ - { - int32 maxL = pivRowL[ jPivL ]; - int32 bbp_maxL = bbp_pivRowL; - int32 factorL = 1073741824 / maxL; /*( 1 << 30 )*/ - - for( jL = 0; jL < sizeL; jL++ ) - { - pivRowL[ jL ] = ( pivRowL[ jL ] * factorL + ( 1 << 14 ) ) >> 15; - } - bbp_pivRowL = 15; - - /* set to 1 to avoid computational errors */ - pivRowL[ jPivL ] = ( int32 )1 << bbp_pivRowL; - - shiftL = 30 - bts_absIntLog2( vecL[ jPivL ] ); - - vecL[ jPivL ] = ( vecL[ jPivL ] << shiftL ) / maxL; - bbp_vecL = bbpL + shiftL - bbp_maxL; - - bbs_int32ReduceToNBits( &( vecL[ jPivL ] ), &bbp_vecL, 15 ); - } - - /* subtract pivot row from all other rows */ - for( iL = 0; iL < sizeL; iL++ ) - { - if( iL != jPivL ) - { - int32* rowPtrL = matL + iL * sizeL; - - int32 tmpL = *( rowPtrL + jPivL ); - int32 bbp_tmpL = bbpL; - bbs_int32ReduceToNBits( &tmpL, &bbp_tmpL, 15 ); - - shiftL = bbp_tmpL + bbp_pivRowL - bbpL; - if( shiftL > 0 ) - { - for( jL = 0; jL < sizeL; jL++ ) - { - *rowPtrL++ -= ( ( ( tmpL * pivRowL[ jL ] ) >> ( shiftL - 1 ) ) + 1 ) >> 1; - } - } - else - { - for( jL = 0; jL < sizeL; jL++ ) - { - *rowPtrL++ -= ( tmpL * pivRowL[ jL ] ) << -shiftL; - } - } - - shiftL = bbp_tmpL + bbp_vecL - bbpL; - if( shiftL > 0 ) - { - vecL[ iL ] -= ( ( ( tmpL * vecL[ jPivL ] ) >> ( shiftL - 1 ) ) + 1 ) >> 1; - } - else - { - vecL[ iL ] -= ( tmpL * vecL[ jPivL ] ) << -shiftL; - } - } - } - - /* change bbp of pivot row back to bbpL */ - shiftL = bbpL - bbp_pivRowL; - if( shiftL >= 0 ) - { - for( jL = 0; jL < sizeL; jL++ ) - { - pivRowL[ jL ] <<= shiftL; - } - } - else - { - shiftL = -shiftL; - for( jL = 0; jL < sizeL; jL++ ) - { - pivRowL[ jL ] = ( ( pivRowL[ jL ] >> ( shiftL - 1 ) ) + 1 ) >> 1; - } - } - - shiftL = bbpL - bbp_vecL; - if( shiftL >= 0 ) - { - vecL[ jPivL ] <<= shiftL; - } - else - { - shiftL = -shiftL; - vecL[ jPivL ] = ( ( vecL[ jPivL ] >> ( shiftL - 1 ) ) + 1 ) >> 1; - } -/* -if( sizeL <= 5 ) bts_Int32Mat_print( matL, vecL, sizeL, bbpL ); -*/ - } /* of kL */ - - /* in case bbpL has been decreased by the overflow protection, change it back now */ - if( bbpA > bbpL ) - { - /* find largest element of solution vector */ - int32 maxL = 0; - int32 iL, shiftL; - for( iL = 0; iL < sizeL; iL++ ) - { - int32 xL = vecL[ iL ]; - if( xL < 0 ) xL = -xL; - if( xL > maxL ) maxL = xL; - } - - /* check whether we can left shift without overflow */ - shiftL = 30 - bts_absIntLog2( maxL ); - if( shiftL < ( bbpA - bbpL ) ) - { - /* - bbs_WARNING1( "flag bts_Int32Mat_solve2( ... ): getting overflow when trying to " - "compute solution vector with bbp = %d. Choose smaller bbp.\n", bbpA ); - */ - - return FALSE; - } - - /* shift left */ - shiftL = bbpA - bbpL; - for( iL = 0; iL < sizeL; iL++ ) vecL[ iL ] <<= shiftL; - } - - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Int32Mat.h b/Embedded/common/src/b_TensorEm/Int32Mat.h deleted file mode 100644 index 02bb1ee..0000000 --- a/Embedded/common/src/b_TensorEm/Int32Mat.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_INT32MAT_EM_H -#define bts_INT32MAT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Int32Arr.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bts_INT32MAT_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** square matrix */ -struct bts_Int32Mat -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /* width = height of square matrix */ - uint32 widthE; - - /* array of matrix elements (data is arranged by rows) */ - struct bbs_Int32Arr arrE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes matrix */ -void bts_Int32Mat_init( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA ); - -/** destroys matric */ -void bts_Int32Mat_exit( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* copies matrices */ -void bts_Int32Mat_copy( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA, - const struct bts_Int32Mat* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates square matrix */ -void bts_Int32Mat_create( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA, - int32 widthA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Int32Mat_memSize( struct bbs_Context* cpA, - const struct bts_Int32Mat* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Int32Mat_memWrite( struct bbs_Context* cpA, - const struct bts_Int32Mat* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Int32Mat_memRead( struct bbs_Context* cpA, - struct bts_Int32Mat* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** computes the solution to matrix * outVecA = inVecA, returns false if the - * function was not successful; - * internally calls solve2() which is overflow safe; - * use large bbpA if you need high accuracy; - * - * matA: the square matrix, array of size ( matWidthA * matWidthA ) - * matWidthA: width of the matrix - * inVecA: array of size matWidthA - * outVecA: array of size matWidthA - * bbpA: bbp for all matrices and vectors - * tmpMatA: matrix of same size as matA - * tmpVecA: array of size matWidthA - */ -flag bts_Int32Mat_solve( struct bbs_Context* cpA, - const int32* matA, - int32 matWidthA, - const int32* inVecA, - int32* outVecA, - int32 bbpA, - int32* tmpMatA, - int32* tmpVecA ); - -/** same as _solve(), but matA gets overwritten, and tmpMatA is not needed: - * saves memory when matA is large; - * overflow safe; - * use large bbpA if you need high accuracy; - */ -flag bts_Int32Mat_solve2( struct bbs_Context* cpA, - int32* matA, - int32 matWidthA, - const int32* inVecA, - int32* outVecA, - int32 bbpA, - int32* tmpVecA ); - -#endif /* bts_INT32MAT_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/MapSequence.c b/Embedded/common/src/b_TensorEm/MapSequence.c deleted file mode 100644 index a2e1ad0..0000000 --- a/Embedded/common/src/b_TensorEm/MapSequence.c +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_TensorEm/MapSequence.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_MapSequence_init( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA ) -{ - ptrA->ptrArrE = NULL; - bts_Flt16Vec_init( cpA, &ptrA->vecE ); - bts_VectorMap_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bts_VM_MAP_SEQUENCE; - ptrA->baseE.vpMapE = bts_MapSequence_map; - ptrA->sizeE = 0; - ptrA->vecSizeE = 0; - bbs_UInt16Arr_init( cpA, &ptrA->objBufE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_MapSequence_exit( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA ) -{ - uint16 iL; - for( iL = 0; iL < ptrA->sizeE; iL++ ) bts_vectorMapExit( cpA, ptrA->ptrArrE[ iL ] ); - ptrA->ptrArrE = NULL; - bts_Flt16Vec_exit( cpA, &ptrA->vecE ); - ptrA->sizeE = 0; - ptrA->vecSizeE = 0; - bbs_UInt16Arr_exit( cpA, &ptrA->objBufE ); - - bts_VectorMap_exit( cpA, &ptrA->baseE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_MapSequence_copy( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA, - const struct bts_MapSequence* srcPtrA ) -{ - bbs_ERROR0( "bts_MapSequence_copy:\n Function is not available" ); -} - -/* ------------------------------------------------------------------------- */ - -flag bts_MapSequence_equal( struct bbs_Context* cpA, - const struct bts_MapSequence* ptrA, - const struct bts_MapSequence* srcPtrA ) -{ - bbs_ERROR0( "bts_MapSequence_equal:\n Function is not available" ); - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_MapSequence_memSize( struct bbs_Context* cpA, - const struct bts_MapSequence* ptrA ) -{ - uint16 iL; - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bts_VectorMap_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_SIZEOF16( ptrA->sizeE ); - memSizeL += bbs_SIZEOF16( ptrA->vecSizeE ); - for( iL = 0; iL < ptrA->sizeE; iL++ ) memSizeL += bts_vectorMapMemSize( cpA, ptrA->ptrArrE[ iL ] ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_MapSequence_memWrite( struct bbs_Context* cpA, - const struct bts_MapSequence* ptrA, - uint16* memPtrA ) -{ - uint16 iL; - uint32 memSizeL = bts_MapSequence_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_MAP_SEQUENCE_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->vecSizeE, memPtrA ); - for( iL = 0; iL < ptrA->sizeE; iL++ ) memPtrA += bts_vectorMapMemWrite( cpA, ptrA->ptrArrE[ iL ], memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_MapSequence_memRead( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint16 iL; - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - struct bbs_MemSeg* sspL = bbs_MemTbl_sharedSegPtr( cpA, &memTblL, 0 ); - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_MAP_SEQUENCE_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->sizeE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->vecSizeE, memPtrA ); - - /* put buffer vector on shared memory */ - bts_Flt16Vec_create( cpA, &ptrA->vecE, ptrA->vecSizeE, sspL ); - - /* check maps & allocate data buffer */ - { - const uint16* memPtrL = memPtrA; - uint32 dataSizeL = ptrA->sizeE * bbs_SIZEOF16( struct bts_VectorMap* ); - - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - enum bts_VectorMapType typeL = ( enum bts_VectorMapType )bbs_memPeek32( memPtrL + 4 ); - dataSizeL += bts_vectorMapSizeOf16( cpA, typeL ); - memPtrL += bbs_memPeek32( memPtrL ); - } - - bbs_UInt16Arr_create( cpA, &ptrA->objBufE, dataSizeL, espL ); - if( bbs_Context_error( cpA ) ) return 0; - } - - /* load maps & initialize pointers */ - { - uint16* dataPtrL = ptrA->objBufE.arrPtrE; - ptrA->ptrArrE = ( struct bts_VectorMap** )dataPtrL; - dataPtrL += ptrA->sizeE * bbs_SIZEOF16( struct bts_VectorMap* ); - for( iL = 0; iL < ptrA->sizeE; iL++ ) - { - enum bts_VectorMapType typeL = ( enum bts_VectorMapType )bbs_memPeek32( memPtrA + 4 ); - ptrA->ptrArrE[ iL ] = ( struct bts_VectorMap* )dataPtrL; - bts_vectorMapInit( cpA, ptrA->ptrArrE[ iL ], typeL ); - memPtrA += bts_vectorMapMemRead( cpA, ptrA->ptrArrE[ iL ], memPtrA, &memTblL ); - dataPtrL += bts_vectorMapSizeOf16( cpA, typeL ); - } - } - - if( memSizeL != bts_MapSequence_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_MapSequence_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_MapSequence_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ) -{ - struct bts_MapSequence* ptrL = ( struct bts_MapSequence* )ptrA; - if( ptrL->sizeE == 0 ) - { - bts_Flt16Vec_copy( cpA, outVecPtrA, inVecPtrA ); - } - else if( ptrL->sizeE == 1 ) - { - struct bts_VectorMap* mapPtrL = ptrL->ptrArrE[ 0 ]; - mapPtrL->vpMapE( cpA, mapPtrL, inVecPtrA, outVecPtrA ); - } - else - { - uint32 iL; - struct bts_Flt16Vec* vp1L = &ptrL->vecE; - struct bts_Flt16Vec* vp2L = outVecPtrA; - struct bts_VectorMap* mapPtrL = ptrL->ptrArrE[ 0 ]; - mapPtrL->vpMapE( cpA, mapPtrL, inVecPtrA, vp1L ); - - for( iL = 1; iL < ptrL->sizeE; iL++ ) - { - mapPtrL = ptrL->ptrArrE[ iL ]; - mapPtrL->vpMapE( cpA, mapPtrL, vp1L, vp2L ); - - /* swap vectors */ - { - struct bts_Flt16Vec* vpL = vp1L; - vp1L = vp2L; - vp2L = vpL; - } - } - - /* vp1 holds output */ - if( vp1L != outVecPtrA ) bts_Flt16Vec_copy( cpA, outVecPtrA, vp1L ); - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/MapSequence.h b/Embedded/common/src/b_TensorEm/MapSequence.h deleted file mode 100644 index 2a701d5..0000000 --- a/Embedded/common/src/b_TensorEm/MapSequence.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_MAP_SEQUENCE_EM_H -#define bts_MAP_SEQUENCE_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Int32Arr.h" -#include "b_BasicEm/UInt16Arr.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/VectorMap.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** data format version number */ -#define bts_MAP_SEQUENCE_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** sequence of vector maps */ -struct bts_MapSequence -{ - /* ---- public data ---------------------------------------------------- */ - - /** base element (must be first element) */ - struct bts_VectorMap baseE; - - /* ---- private data --------------------------------------------------- */ - - /** internal vector */ - struct bts_Flt16Vec vecE; - - /* ---- public data ---------------------------------------------------- */ - - /** map sequence size */ - uint32 sizeE; - - /** preallocation size for internal vector */ - uint32 vecSizeE; - - /** object buffer */ - struct bbs_UInt16Arr objBufE; - - /** map pointer arrray */ - struct bts_VectorMap** ptrArrE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bts_MapSequence */ -void bts_MapSequence_init( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA ); - -/** resets bts_MapSequence */ -void bts_MapSequence_exit( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_MapSequence_copy( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA, - const struct bts_MapSequence* srcPtrA ); - -/** equal operator */ -flag bts_MapSequence_equal( struct bbs_Context* cpA, - const struct bts_MapSequence* ptrA, - const struct bts_MapSequence* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bts_MapSequence_memSize( struct bbs_Context* cpA, - const struct bts_MapSequence* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_MapSequence_memWrite( struct bbs_Context* cpA, - const struct bts_MapSequence* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_MapSequence_memRead( struct bbs_Context* cpA, - struct bts_MapSequence* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Vector map operation. - * Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - */ -void bts_MapSequence_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ); - -#endif /* bts_MAP_SEQUENCE_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Mat.c b/Embedded/common/src/b_TensorEm/Mat.c deleted file mode 100644 index 3525225..0000000 --- a/Embedded/common/src/b_TensorEm/Mat.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_TensorEm/Mat.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Mat_init( struct bbs_Context* cpA, - struct bts_Mat* ptrA ) -{ - bts_VectorMap_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bts_VM_MAT; - ptrA->baseE.vpMapE = bts_Mat_map; - - bts_CompactMat_init( cpA, &ptrA->matE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_Mat_exit( struct bbs_Context* cpA, - struct bts_Mat* ptrA ) -{ - bts_CompactMat_exit( cpA, &ptrA->matE ); - - bts_VectorMap_exit( cpA, &ptrA->baseE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Mat_copy( struct bbs_Context* cpA, - struct bts_Mat* ptrA, - const struct bts_Mat* srcPtrA ) -{ - bts_CompactMat_copy( cpA, &ptrA->matE, &srcPtrA->matE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Mat_equal( struct bbs_Context* cpA, - const struct bts_Mat* ptrA, - const struct bts_Mat* srcPtrA ) -{ - bbs_ERROR0( "bts_Mat_equal:\n Function is not available" ); - return FALSE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Mat_memSize( struct bbs_Context* cpA, - const struct bts_Mat* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - - memSizeL += bts_VectorMap_memSize( cpA, &ptrA->baseE ); - memSizeL += bts_CompactMat_memSize( cpA, &ptrA->matE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Mat_memWrite( struct bbs_Context* cpA, - const struct bts_Mat* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_Mat_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_MAT_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bts_CompactMat_memWrite( cpA, &ptrA->matE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Mat_memRead( struct bbs_Context* cpA, - struct bts_Mat* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - struct bbs_MemTbl memTblL = *mtpA; - struct bbs_MemSeg* espL = bbs_MemTbl_segPtr( cpA, &memTblL, 0 ); - - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_MAT_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bts_CompactMat_memRead( cpA, &ptrA->matE, memPtrA, espL ); - - if( memSizeL != bts_Mat_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Mat_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Mat_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ) -{ - bbs_DEF_fNameL( "bts_Mat_map" ) - const struct bts_Mat* ptrL = ( const struct bts_Mat* )ptrA; - - if( inVecPtrA->arrE.sizeE != ptrL->matE.widthE ) - { - bbs_ERROR1( "%s:\ninput vector has incorrect size", fNameL ); - return; - } - - if( outVecPtrA->arrE.allocatedSizeE < ptrL->matE.heightE ) - { - bbs_ERROR1( "%s:\noutput vector is insufficiently allocated", fNameL ); - return; - } - - bts_Flt16Vec_size( cpA, outVecPtrA, ptrL->matE.heightE ); - - { - int16 expL = 0; - int32 outExpL = inVecPtrA->expE; - bts_CompactMat_map( cpA, &ptrL->matE, inVecPtrA->arrE.arrPtrE, outVecPtrA->arrE.arrPtrE, &expL ); - outExpL += expL; - - /* precision underflow */ - if( outExpL < -32767 ) bts_Flt16Vec_setZero( cpA, outVecPtrA ); - } - - bts_Flt16Vec_maximizeMantisse( cpA, outVecPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Mat.h b/Embedded/common/src/b_TensorEm/Mat.h deleted file mode 100644 index 04c7a95..0000000 --- a/Embedded/common/src/b_TensorEm/Mat.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_MAT_EM_H -#define bts_MAT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/VectorMap.h" -#include "b_TensorEm/CompactMat.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** data format version number */ -#define bts_MAT_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** affine linear transformation to vector */ -struct bts_Mat -{ - /* ---- public data ---------------------------------------------------- */ - - /** base element (must be first element) */ - struct bts_VectorMap baseE; - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /* linear transformation */ - struct bts_CompactMat matE; - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bts_Mat */ -void bts_Mat_init( struct bbs_Context* cpA, - struct bts_Mat* ptrA ); - -/** resets bts_Mat */ -void bts_Mat_exit( struct bbs_Context* cpA, - struct bts_Mat* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_Mat_copy( struct bbs_Context* cpA, - struct bts_Mat* ptrA, - const struct bts_Mat* srcPtrA ); - -/** equal operator */ -flag bts_Mat_equal( struct bbs_Context* cpA, - const struct bts_Mat* ptrA, - const struct bts_Mat* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bts_Mat_memSize( struct bbs_Context* cpA, - const struct bts_Mat* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_Mat_memWrite( struct bbs_Context* cpA, - const struct bts_Mat* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_Mat_memRead( struct bbs_Context* cpA, - struct bts_Mat* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Vector map operation. - * Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - */ -void bts_Mat_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ); - -#endif /* bts_MAT_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Normalizer.c b/Embedded/common/src/b_TensorEm/Normalizer.c deleted file mode 100644 index b6b26a2..0000000 --- a/Embedded/common/src/b_TensorEm/Normalizer.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_TensorEm/Normalizer.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Normalizer_init( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA ) -{ - bts_VectorMap_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bts_VM_NORMALIZER; - ptrA->baseE.vpMapE = bts_Normalizer_map; -} - -/* ------------------------------------------------------------------------- */ - -void bts_Normalizer_exit( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA ) -{ - bts_VectorMap_exit( cpA, &ptrA->baseE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Normalizer_copy( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA, - const struct bts_Normalizer* srcPtrA ) -{ -} - -/* ------------------------------------------------------------------------- */ - -flag bts_Normalizer_equal( struct bbs_Context* cpA, - const struct bts_Normalizer* ptrA, - const struct bts_Normalizer* srcPtrA ) -{ - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Normalizer_memSize( struct bbs_Context* cpA, - const struct bts_Normalizer* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - memSizeL += bts_VectorMap_memSize( cpA, &ptrA->baseE ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Normalizer_memWrite( struct bbs_Context* cpA, - const struct bts_Normalizer* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_Normalizer_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_NORMALIZER_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memWrite( cpA, &ptrA->baseE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Normalizer_memRead( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_NORMALIZER_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memRead( cpA, &ptrA->baseE, memPtrA ); - - if( memSizeL != bts_Normalizer_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Normalizer_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_Normalizer_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ) -{ - bts_Flt16Vec_copy( cpA, outVecPtrA, inVecPtrA ); - bts_Flt16Vec_normalize( cpA, outVecPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/Normalizer.h b/Embedded/common/src/b_TensorEm/Normalizer.h deleted file mode 100644 index 20e9d02..0000000 --- a/Embedded/common/src/b_TensorEm/Normalizer.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_NORMALIZER_EM_H -#define bts_NORMALIZER_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/VectorMap.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** data format version number */ -#define bts_NORMALIZER_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** applies euclidean normalization to vector */ -struct bts_Normalizer -{ - /* ---- public data ---------------------------------------------------- */ - - /** base element (must be first element) */ - struct bts_VectorMap baseE; - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bts_Normalizer */ -void bts_Normalizer_init( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA ); - -/** resets bts_Normalizer */ -void bts_Normalizer_exit( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_Normalizer_copy( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA, - const struct bts_Normalizer* srcPtrA ); - -/** equal operator */ -flag bts_Normalizer_equal( struct bbs_Context* cpA, - const struct bts_Normalizer* ptrA, - const struct bts_Normalizer* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bts_Normalizer_memSize( struct bbs_Context* cpA, - const struct bts_Normalizer* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_Normalizer_memWrite( struct bbs_Context* cpA, - const struct bts_Normalizer* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_Normalizer_memRead( struct bbs_Context* cpA, - struct bts_Normalizer* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Vector map operation. - * Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - */ -void bts_Normalizer_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ); - -#endif /* bts_NORMALIZER_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/RBFMap2D.c b/Embedded/common/src/b_TensorEm/RBFMap2D.c deleted file mode 100644 index 722ce15..0000000 --- a/Embedded/common/src/b_TensorEm/RBFMap2D.c +++ /dev/null @@ -1,585 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/RBFMap2D.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_RBFMap2D_init( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA ) -{ - ptrA->RBFTypeE = bts_RBF_LINEAR; - bts_Cluster2D_init( cpA, &ptrA->srcClusterE ); - bts_Cluster2D_init( cpA, &ptrA->rbfCoeffClusterE ); - ptrA->altTypeE = bts_ALT_LINEAR; - bts_Flt16Alt2D_init( &ptrA->altE ); - - ptrA->altOnlyE = FALSE; - - bts_Int32Mat_init( cpA, &ptrA->matE ); - bts_Int32Mat_init( cpA, &ptrA->tempMatE ); - bbs_Int32Arr_init( cpA, &ptrA->inVecE ); - bbs_Int32Arr_init( cpA, &ptrA->outVecE ); - bbs_Int32Arr_init( cpA, &ptrA->tempVecE ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_RBFMap2D_exit( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA ) -{ - ptrA->RBFTypeE = bts_RBF_LINEAR; - bts_Cluster2D_exit( cpA, &ptrA->srcClusterE ); - bts_Cluster2D_exit( cpA, &ptrA->rbfCoeffClusterE ); - ptrA->altTypeE = bts_ALT_LINEAR; - bts_Flt16Alt2D_exit( &ptrA->altE ); - - ptrA->altOnlyE = FALSE; - - bts_Int32Mat_exit( cpA, &ptrA->matE ); - bts_Int32Mat_exit( cpA, &ptrA->tempMatE ); - bbs_Int32Arr_exit( cpA, &ptrA->inVecE ); - bbs_Int32Arr_exit( cpA, &ptrA->outVecE ); - bbs_Int32Arr_exit( cpA, &ptrA->tempVecE ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_RBFMap2D_copy( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - const struct bts_RBFMap2D* srcPtrA ) -{ - ptrA->RBFTypeE = srcPtrA->RBFTypeE; - bts_Cluster2D_copy( cpA, &ptrA->srcClusterE, &srcPtrA->srcClusterE ); - bts_Cluster2D_copy( cpA, &ptrA->rbfCoeffClusterE, &srcPtrA->rbfCoeffClusterE ); - ptrA->altTypeE = srcPtrA->altTypeE; - bts_Flt16Alt2D_copy( &ptrA->altE, &srcPtrA->altE ); -} - -/* ------------------------------------------------------------------------- */ - -flag bts_RBFMap2D_equal( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - const struct bts_RBFMap2D* srcPtrA ) -{ - if( ptrA->RBFTypeE != srcPtrA->RBFTypeE ) return FALSE; - if( ! bts_Cluster2D_equal( cpA, &ptrA->srcClusterE, &srcPtrA->srcClusterE ) ) return FALSE; - if( ! bts_Cluster2D_equal( cpA, &ptrA->rbfCoeffClusterE, &srcPtrA->rbfCoeffClusterE ) ) return FALSE; - if( ptrA->altTypeE != srcPtrA->altTypeE ) return FALSE; - if( ! bts_Flt16Alt2D_equal( &ptrA->altE, &srcPtrA->altE ) ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_RBFMap2D_create( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ) -{ - if( bbs_Context_error( cpA ) ) return; - bts_Cluster2D_create( cpA, &ptrA->srcClusterE, sizeA, mspA ); - bts_Cluster2D_create( cpA, &ptrA->rbfCoeffClusterE, sizeA, mspA ); - - bts_Int32Mat_create( cpA, &ptrA->matE, sizeA, mspA ); - bts_Int32Mat_create( cpA, &ptrA->tempMatE, sizeA, mspA ); - bbs_Int32Arr_create( cpA, &ptrA->inVecE, sizeA, mspA ); - bbs_Int32Arr_create( cpA, &ptrA->outVecE, sizeA, mspA ); - bbs_Int32Arr_create( cpA, &ptrA->tempVecE, sizeA, mspA ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_RBFMap2D_compute( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - const struct bts_Cluster2D* srcPtrA, - const struct bts_Cluster2D* dstPtrA ) -{ - const uint32 sizeL = srcPtrA->sizeE; - int32 bbp_internalL = 15; - int32 bbp_rbfCoeffL = 12; - - int32 internalShiftL = bbp_internalL - srcPtrA->bbpE; - int32 rbfCoeffShiftL; - - uint32 iL, jL; - - if( dstPtrA->sizeE != srcPtrA->sizeE ) - { - bbs_ERROR2( "void bts_RBFMap2D_compute( ... ): size mismatch, src cluster has size %d," - "but dst cluster has size %d\n", srcPtrA->sizeE, dstPtrA->sizeE ); - return; - } - - ptrA->altOnlyE = FALSE; - - /* if bbp of src cluster should be larger than bbp_internal, use it instead */ - if( internalShiftL < 0 ) - { - internalShiftL = 0; - bbp_internalL = srcPtrA->bbpE; - } - - /* also checks for sizeL > allocated size */ - bts_Cluster2D_size( cpA, &ptrA->rbfCoeffClusterE, sizeL ); - - /* set rbf coefficients to 0 in case they don't get computed */ - for( iL =0; iL < sizeL; iL++ ) - { - ptrA->rbfCoeffClusterE.vecArrE[ iL ].xE = 0; - ptrA->rbfCoeffClusterE.vecArrE[ iL ].yE = 0; - } - - /* 1. Compute rigid transformation: if cluster size == 0 returns identity */ - ptrA->altE = bts_Cluster2D_alt( cpA, srcPtrA, dstPtrA, ptrA->altTypeE ); - - /* if cluster size is less than 3 affine trafo covers whole transformation */ - if( sizeL < 3 ) - { - bts_Cluster2D_copy( cpA, &ptrA->srcClusterE, srcPtrA ); - ptrA->altOnlyE = TRUE; - return; - } - - /* 2. Compute RBF trafo */ - ptrA->matE.widthE = sizeL; - ptrA->tempMatE.widthE = sizeL; - - /* Set up linear matrix to invert */ - switch( ptrA->RBFTypeE ) - { - case bts_RBF_IDENTITY: - { - return; - } - - case bts_RBF_LINEAR: - { - /* ||r|| */ - for( iL = 0; iL < sizeL; iL++ ) - { - struct bts_Int16Vec2D vec0L = srcPtrA->vecArrE[ iL ]; - int32* ptrL = ptrA->matE.arrE.arrPtrE + iL * sizeL; - - /* set diagonal elements having null distance */ - *( ptrL + iL ) = 0; - - for( jL = 0; jL < iL; jL++ ) /* use symmetry */ - { - int32 normL = 0; - struct bts_Int16Vec2D vecL = srcPtrA->vecArrE[ jL ]; - vecL.xE -= vec0L.xE; - vecL.yE -= vec0L.yE; - normL = bts_Int16Vec2D_norm( &vecL ); - *ptrL++ = normL << internalShiftL; - } - } - } - break; - - /* Add a new RBF type here */ - - default: - { - bbs_ERROR1( "void bts_RBFMap2D_compute( ... ): RBFType %d is not handled\n", ptrA->RBFTypeE ); - return; - } - } - - /* use symmetry: set symmetric elements in matrix */ - for( iL = 0; iL < sizeL; iL++ ) - { - int32* basePtrL = ptrA->matE.arrE.arrPtrE; - uint32 jL; - for( jL = iL + 1; jL < sizeL; jL++ ) - { - *( basePtrL + iL * sizeL + jL ) = *( basePtrL + jL * sizeL + iL ); - } - } - - /* Precompute alt transformed cluster, srcClusterE will be restored at the end */ - bts_Cluster2D_copy( cpA, &ptrA->srcClusterE, srcPtrA ); - bts_Cluster2D_transformBbp( cpA, &ptrA->srcClusterE, ptrA->altE, dstPtrA->bbpE ); - - bbs_Int32Arr_size( cpA, &ptrA->inVecE, sizeL ); - bbs_Int32Arr_size( cpA, &ptrA->outVecE, sizeL ); - bbs_Int32Arr_size( cpA, &ptrA->tempVecE, sizeL ); - - { - flag successL; - - /* compute right side vector of linear system to be solved, for x */ - int32* inPtrL = ptrA->inVecE.arrPtrE; - struct bts_Int16Vec2D* dstVecL = dstPtrA->vecArrE; - struct bts_Int16Vec2D* altVecL = ptrA->srcClusterE.vecArrE; - - int32 shiftL = srcPtrA->bbpE - ptrA->srcClusterE.bbpE + internalShiftL; - if( shiftL >= 0 ) - { - for( iL = 0; iL < sizeL; iL++ ) inPtrL[ iL ] = ( int32 )( dstVecL[ iL ].xE - altVecL[ iL ].xE ) << shiftL; - } - else - { - for( iL = 0; iL < sizeL; iL++ ) inPtrL[ iL ] = ( ( ( int32 )( dstVecL[ iL ].xE - altVecL[ iL ].xE ) >> ( ( -shiftL ) - 1 ) ) + 1 ) >> 1; - } - - /* solve linear system in x */ - successL = bts_Int32Mat_solve( cpA, - ptrA->matE.arrE.arrPtrE, - sizeL, - ptrA->inVecE.arrPtrE, - ptrA->outVecE.arrPtrE, - bbp_internalL, - ptrA->tempMatE.arrE.arrPtrE, - ptrA->tempVecE.arrPtrE ); - - /* no error condition here! system must be failsafe */ - if( !successL ) ptrA->altOnlyE = TRUE; - - /* store rbf coefficients, x component */ - rbfCoeffShiftL = bbp_internalL - bbp_rbfCoeffL; - for( iL = 0; iL < sizeL; iL++ ) - { - int32 rbfCoeffL = ptrA->outVecE.arrPtrE[ iL ] >> rbfCoeffShiftL; - if( rbfCoeffL < -32768 || rbfCoeffL > 32767 ) ptrA->altOnlyE = TRUE; /* check for overflow */ - ptrA->rbfCoeffClusterE.vecArrE[ iL ].xE = rbfCoeffL; - } - - - /* compute right side vector of linear system to be solved, for y */ - if( shiftL >= 0 ) - { - for( iL = 0; iL < sizeL; iL++ ) inPtrL[ iL ] = ( int32 )( dstVecL[ iL ].yE - altVecL[ iL ].yE ) << shiftL; - } - else - { - for( iL = 0; iL < sizeL; iL++ ) inPtrL[ iL ] = ( ( ( int32 )( dstVecL[ iL ].yE - altVecL[ iL ].yE ) >> ( ( -shiftL ) - 1 ) ) + 1 ) >> 1; - } - - /* solve linear system in y */ - successL = bts_Int32Mat_solve( cpA, - ptrA->matE.arrE.arrPtrE, - sizeL, - ptrA->inVecE.arrPtrE, - ptrA->outVecE.arrPtrE, - bbp_internalL, - ptrA->tempMatE.arrE.arrPtrE, - ptrA->tempVecE.arrPtrE ); - if( !successL ) - { - /* no error condition here! system must be failsafe */ - ptrA->altOnlyE = TRUE; - } - - /* store rbf coefficients, y component */ - for( iL = 0; iL < sizeL; iL++ ) - { - int32 rbfCoeffL = ptrA->outVecE.arrPtrE[ iL ] >> rbfCoeffShiftL; - if( rbfCoeffL < -32768 || rbfCoeffL > 32767 ) ptrA->altOnlyE = TRUE; /* check for overflow */ - ptrA->rbfCoeffClusterE.vecArrE[ iL ].yE = rbfCoeffL; - } - - /* set bbp of coeff cluster */ - ptrA->rbfCoeffClusterE.bbpE = bbp_rbfCoeffL; - } - - /** after having used srcClusterE for temporary storage of the alt src cluster, - restore the orig src cluster as needed for the RBF trafo */ - bts_Cluster2D_copy( cpA, &ptrA->srcClusterE, srcPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_RBFMap2D_memSize( struct bbs_Context* cpA, - const struct bts_RBFMap2D *ptrA ) -{ - return bbs_SIZEOF16( uint32 ) - + bbs_SIZEOF16( uint32 ) /* version */ - + bbs_SIZEOF16( ptrA->RBFTypeE ) - + bts_Cluster2D_memSize( cpA, &ptrA->srcClusterE ) - + bts_Cluster2D_memSize( cpA, &ptrA->rbfCoeffClusterE ) - + bbs_SIZEOF16( ptrA->altTypeE ) - + bts_Flt16Alt2D_memSize( cpA, &ptrA->altE ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_RBFMap2D_memWrite( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_RBFMap2D_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_IRBFMAP2D_VERSION, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->RBFTypeE, memPtrA ); - memPtrA += bts_Cluster2D_memWrite( cpA, &ptrA->srcClusterE, memPtrA ); - memPtrA += bts_Cluster2D_memWrite( cpA, &ptrA->rbfCoeffClusterE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->altTypeE, memPtrA ); - memPtrA += bts_Flt16Alt2D_memWrite( cpA, &ptrA->altE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_RBFMap2D_memRead( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_IRBFMAP2D_VERSION, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->RBFTypeE, memPtrA ); - memPtrA += bts_Cluster2D_memRead( cpA, &ptrA->srcClusterE, memPtrA, mspA ); - memPtrA += bts_Cluster2D_memRead( cpA, &ptrA->rbfCoeffClusterE, memPtrA, mspA ); - memPtrA += bbs_memRead32( &ptrA->altTypeE, memPtrA ); - memPtrA += bts_Flt16Alt2D_memRead( cpA, &ptrA->altE, memPtrA ); - - bts_Int32Mat_create( cpA, &ptrA->matE, ptrA->srcClusterE.sizeE, mspA ); - bts_Int32Mat_create( cpA, &ptrA->tempMatE, ptrA->srcClusterE.sizeE, mspA ); - - if( memSizeL != bts_RBFMap2D_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_RBFMap2D_memRead( ... ): size mismatch\n" ); - return 0; - } - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ -/** R, A are rbf and A affine linear transformations - * T( x ) = R( x ) + A( x ) - */ -struct bts_Flt16Vec2D bts_RBFMap2D_mapVector( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - struct bts_Flt16Vec2D vecA ) -{ - const uint32 sizeL = ptrA->srcClusterE.sizeE; - const int32 bbp_internalL = ptrA->rbfCoeffClusterE.bbpE; - uint32 iL; - int32 shL; - - int32 outXL; - int32 outYL; - int32 outBbpL; - - /* 1. Compute rigid transformation, i.e. A( x ) */ - struct bts_Flt16Vec2D altVecL = bts_Flt16Alt2D_mapFlt( &ptrA->altE, &vecA ); - - /* compute output on 32 bit here to prevent temporary overflows (j.s.) */ - outXL = altVecL.xE; - outYL = altVecL.yE; - outBbpL = altVecL.bbpE; - - /* if bbp was altered, change it back to bbp of vecA ( det A is always close to 1 here ) */ - shL = vecA.bbpE - outBbpL; - if( shL > 0 ) - { - outXL <<= shL; - outYL <<= shL; - } - else if( shL < 0 ) - { - outXL = ( ( outXL >> ( -shL - 1 ) ) + 1 ) >> 1; - outYL = ( ( outYL >> ( -shL - 1 ) ) + 1 ) >> 1; - } - outBbpL = vecA.bbpE; - - /* stop here if rbf coefficients could not be computed */ - if( ptrA->altOnlyE ) - { - return bts_Flt16Vec2D_create32( outXL, outYL, outBbpL ); - } - - /* 2. Compute RBF transformation, i.e. R( x ) depending on type */ - switch( ptrA->RBFTypeE ) - { - case bts_RBF_IDENTITY: - break; - - case bts_RBF_LINEAR: - { - int32 xSumL = 0; - int32 ySumL = 0; - int32 internalShiftL = bbp_internalL - ptrA->srcClusterE.bbpE; - - /* first adapt vecA to bbp of srcCluster */ - int32 xL = vecA.xE; - int32 yL = vecA.yE; - int32 shiftL = ptrA->srcClusterE.bbpE - vecA.bbpE; - if( shiftL > 0 ) - { - xL <<= shiftL; - yL <<= shiftL; - } - else if( shiftL < 0 ) - { - xL = ( ( xL >> ( -shiftL - 1 ) ) + 1 ) >> 1; - yL = ( ( yL >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } - - shiftL = ptrA->srcClusterE.bbpE; - - for( iL = 0; iL < sizeL; iL++ ) - { - struct bts_Int16Vec2D vecL = ptrA->srcClusterE.vecArrE[ iL ]; - int32 normL = 0; - vecL.xE -= xL; - vecL.yE -= yL; - normL = bts_Int16Vec2D_norm( &vecL ); - -/* printf( "iL = %d, norm = %d\n", iL, normL ); */ - - xSumL += ( normL * ptrA->rbfCoeffClusterE.vecArrE[ iL ].xE ) >> shiftL; - ySumL += ( normL * ptrA->rbfCoeffClusterE.vecArrE[ iL ].yE ) >> shiftL; - -/* printf( "iL = %d, xSumL = %d, ySumL = %d\n", iL, xSumL, ySumL ); */ - - } - - xSumL >>= internalShiftL; - ySumL >>= internalShiftL; - - /* change bbp of result back to bbp of vecA */ - /* shiftL = vecA.bbpE - ptrA->srcClusterE.bbpE - internalShiftL; */ - shiftL = vecA.bbpE - ptrA->srcClusterE.bbpE; - if( shiftL > 0 ) - { - xSumL <<= shiftL; - ySumL <<= shiftL; - } - else if( shiftL < 0 ) - { - xSumL = ( ( xSumL >> ( -shiftL - 1 ) ) + 1 ) >> 1; - ySumL = ( ( ySumL >> ( -shiftL - 1 ) ) + 1 ) >> 1; - } - - /* add rbf part to already computed alt part */ - outXL += xSumL; - outYL += ySumL; - } - break; - - /* Add a new RBF type here */ - - default: - { - bbs_ERROR1( "struct bts_Flt16Vec2D bts_RBFMap2D_mapVector( ... ): " - "RBFType %d is not handled\n", ptrA->RBFTypeE ); - return bts_Flt16Vec2D_create32( outXL, outYL, outBbpL ); - } - } - - return bts_Flt16Vec2D_create32( outXL, outYL, outBbpL ); -} - -/* ------------------------------------------------------------------------- */ - -void bts_RBFMap2D_mapCluster( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - const struct bts_Cluster2D* srcPtrA, - struct bts_Cluster2D* dstPtrA, - int32 dstBbpA ) -{ - if( dstPtrA->sizeE != srcPtrA->sizeE ) - { - /* resizing of clusters is allowed as long as allocated size is not exceeded */ - bts_Cluster2D_size( cpA, dstPtrA, srcPtrA->sizeE ); - } - - { - uint32 iL; - int16 bbpL = srcPtrA->bbpE; - - dstPtrA->bbpE = dstBbpA; - - for( iL = 0; iL < srcPtrA->sizeE; iL++ ) - { - struct bts_Int16Vec2D vecL = srcPtrA->vecArrE[ iL ]; - struct bts_Flt16Vec2D srcVecL = bts_Flt16Vec2D_create16( vecL.xE, vecL.yE, bbpL ); - struct bts_Flt16Vec2D dstVecL = bts_RBFMap2D_mapVector( cpA, ptrA, srcVecL ); - dstPtrA->vecArrE[ iL ].xE = bbs_convertS32( dstVecL.xE, dstVecL.bbpE, dstBbpA ); - dstPtrA->vecArrE[ iL ].yE = bbs_convertS32( dstVecL.yE, dstVecL.bbpE, dstBbpA ); - } - } -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/RBFMap2D.h b/Embedded/common/src/b_TensorEm/RBFMap2D.h deleted file mode 100644 index ba30867..0000000 --- a/Embedded/common/src/b_TensorEm/RBFMap2D.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_RBFMAP2D_EM_H -#define bts_RBFMAP2D_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/Int16Arr.h" -#include "b_TensorEm/Int16Vec2D.h" -#include "b_TensorEm/Flt16Vec2D.h" -#include "b_TensorEm/Flt16Alt2D.h" -#include "b_TensorEm/Functions.h" -#include "b_TensorEm/Cluster2D.h" -#include "b_TensorEm/Int32Mat.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* data format version number */ -#define bts_IRBFMAP2D_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** - * radial basis function transformation (RBF). - * T( x ) = A( x ) + R( x ) where, - * T is the resulting overall tranformation - * A is a possibly linear tranformation of type altTypeE - * R is the rbf ( non-linear ) transformation of type typeE - * See member declaration for more information on typeE and altTypeE. - * See also - * 'Image Warping Using few Anchor Points and Radial Functions', - * Nur Arad and Daniel Reisfeld, 1994 - */ -struct bts_RBFMap2D -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** type of radial basis function (enum bts_RBFType). - * one of: - * bts_RBF_IDENTITY : no rbf deformation - * bts_RBF_LINEAr : linear, i.e. ||r|| - */ - int32 RBFTypeE; - - /** src cluster, part of the RBF trafo */ - struct bts_Cluster2D srcClusterE; - - /** cluster of rbf coefficients, x and y */ - struct bts_Cluster2D rbfCoeffClusterE; - - /** type of linear transformation (enum bts_AltType) */ - int32 altTypeE; - - /** affine linear transformation */ - struct bts_Flt16Alt2D altE; - - /** apply only affine lnear transformation */ - flag altOnlyE; - - /* ---- temporary data ------------------------------------------------- */ - - /** matrix needed for computation of rbf coefficients */ - struct bts_Int32Mat matE; - struct bts_Int32Mat tempMatE; - - /** arrays needed for computation of rbf coefficients */ - struct bbs_Int32Arr inVecE; - struct bbs_Int32Arr outVecE; - struct bbs_Int32Arr tempVecE; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes RBFMap */ -void bts_RBFMap2D_init( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA ); - -/** destroys RBFMap */ -void bts_RBFMap2D_exit( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copies RBFMap */ -void bts_RBFMap2D_copy( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - const struct bts_RBFMap2D* srcPtrA ); - -/** compares RBFMap */ -flag bts_RBFMap2D_equal( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - const struct bts_RBFMap2D* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/** allocates RBFMap */ -void bts_RBFMap2D_create( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - uint32 sizeA, - struct bbs_MemSeg* mspA ); - -/** computes rbf transform from 2 given clusters of same size and bbp */ -void bts_RBFMap2D_compute( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - const struct bts_Cluster2D* srcPtrA, - const struct bts_Cluster2D* dstPtrA ); - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_RBFMap2D_memSize( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_RBFMap2D_memWrite( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_RBFMap2D_memRead( struct bbs_Context* cpA, - struct bts_RBFMap2D* ptrA, - const uint16* memPtrA, - struct bbs_MemSeg* mspA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** vector map operation: apply rbf to a vector */ -struct bts_Flt16Vec2D bts_RBFMap2D_mapVector( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - struct bts_Flt16Vec2D vecA ); - -/** cluster map operation: apply rbf to all vectors in cluster */ -void bts_RBFMap2D_mapCluster( struct bbs_Context* cpA, - const struct bts_RBFMap2D* ptrA, - const struct bts_Cluster2D* srcPtrA, - struct bts_Cluster2D* dstPtrA, - int32 dstBbpA ); - -#endif /* bts_RBFMAP2D_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/SubVecMap.c b/Embedded/common/src/b_TensorEm/SubVecMap.c deleted file mode 100644 index 1e98338..0000000 --- a/Embedded/common/src/b_TensorEm/SubVecMap.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_TensorEm/SubVecMap.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_SubVecMap_init( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA ) -{ - bts_VectorMap_init( cpA, &ptrA->baseE ); - ptrA->baseE.typeE = ( uint32 )bts_VM_SUB_VEC_MAP; - ptrA->baseE.vpMapE = bts_SubVecMap_map; - ptrA->offsetE = 0; - ptrA->sizeE = -1; -} - -/* ------------------------------------------------------------------------- */ - -void bts_SubVecMap_exit( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA ) -{ - bts_VectorMap_exit( cpA, &ptrA->baseE ); - ptrA->offsetE = 0; - ptrA->sizeE = -1; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_SubVecMap_copy( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA, - const struct bts_SubVecMap* srcPtrA ) -{ - ptrA->offsetE = srcPtrA->offsetE; - ptrA->sizeE = srcPtrA->sizeE; -} - -/* ------------------------------------------------------------------------- */ - -flag bts_SubVecMap_equal( struct bbs_Context* cpA, - const struct bts_SubVecMap* ptrA, - const struct bts_SubVecMap* srcPtrA ) -{ - if( ptrA->offsetE != srcPtrA->offsetE ) return FALSE; - if( ptrA->sizeE != srcPtrA->sizeE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_SubVecMap_memSize( struct bbs_Context* cpA, - const struct bts_SubVecMap* ptrA ) -{ - uint32 memSizeL = bbs_SIZEOF16( uint32 ) + - bbs_SIZEOF16( uint32 ); /* version */ - memSizeL += bts_VectorMap_memSize( cpA, &ptrA->baseE ); - memSizeL += bbs_SIZEOF16( ptrA->offsetE ); - memSizeL += bbs_SIZEOF16( ptrA->sizeE ); - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_SubVecMap_memWrite( struct bbs_Context* cpA, - const struct bts_SubVecMap* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_SubVecMap_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); - memPtrA += bbs_memWriteUInt32( bts_SUB_VEC_MAP_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memWrite( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->offsetE, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->sizeE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_SubVecMap_memRead( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - uint32 memSizeL, versionL; - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &memSizeL, memPtrA ); - memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_SUB_VEC_MAP_VERSION, memPtrA ); - memPtrA += bts_VectorMap_memRead( cpA, &ptrA->baseE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->offsetE, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->sizeE, memPtrA ); - - if( memSizeL != bts_SubVecMap_memSize( cpA, ptrA ) ) - { - bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_SubVecMap_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" - "size mismatch" ); - return 0; - } - - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_SubVecMap_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ) -{ - bbs_DEF_fNameL( "bts_SubVecMap_map" ) - struct bts_SubVecMap* ptrL = ( struct bts_SubVecMap* )ptrA; - - int32 sizeL = ( ptrL->sizeE != -1 ) ? ptrL->sizeE : ( int32 )inVecPtrA->arrE.sizeE - ptrL->offsetE; - if( sizeL < 0 ) sizeL = 0; - - if( ( ptrL->offsetE + sizeL ) > ( int32 )inVecPtrA->arrE.sizeE ) - { - bbs_ERROR1( "%s:\ninput vector too small", fNameL ); - return; - } - - if( outVecPtrA->arrE.allocatedSizeE < ( uint32 )sizeL ) - { - bbs_ERROR1( "%s:\noutput vector is insufficiently allocated", fNameL ); - return; - } - - bts_Flt16Vec_size( cpA, outVecPtrA, sizeL ); - outVecPtrA->expE = inVecPtrA->expE; - bbs_memcpy16( outVecPtrA->arrE.arrPtrE, inVecPtrA->arrE.arrPtrE + ptrL->offsetE, sizeL ); - - bts_Flt16Vec_maximizeMantisse( cpA, outVecPtrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/SubVecMap.h b/Embedded/common/src/b_TensorEm/SubVecMap.h deleted file mode 100644 index 629d2a4..0000000 --- a/Embedded/common/src/b_TensorEm/SubVecMap.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_SUB_VEC_MAP_EM_H -#define bts_SUB_VEC_MAP_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/VectorMap.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/** data format version number */ -#define bts_SUB_VEC_MAP_VERSION 100 - -/* ---- object definition -------------------------------------------------- */ - -/** extracts a section from the input vector and returns it as sub-vector */ -struct bts_SubVecMap -{ - /* ---- public data ---------------------------------------------------- */ - - /** base element (must be first element) */ - struct bts_VectorMap baseE; - - /* ---- private data --------------------------------------------------- */ - - /** vector offset */ - int32 offsetE; - - /** vector size (-1: size = input size - offsetE) */ - int32 sizeE; - - /* ---- public data ---------------------------------------------------- */ - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bts_SubVecMap */ -void bts_SubVecMap_init( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA ); - -/** resets bts_SubVecMap */ -void bts_SubVecMap_exit( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_SubVecMap_copy( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA, - const struct bts_SubVecMap* srcPtrA ); - -/** equal operator */ -flag bts_SubVecMap_equal( struct bbs_Context* cpA, - const struct bts_SubVecMap* ptrA, - const struct bts_SubVecMap* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bts_SubVecMap_memSize( struct bbs_Context* cpA, - const struct bts_SubVecMap* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_SubVecMap_memWrite( struct bbs_Context* cpA, - const struct bts_SubVecMap* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_SubVecMap_memRead( struct bbs_Context* cpA, - struct bts_SubVecMap* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** Vector map operation. - * Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - */ -void bts_SubVecMap_map( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ); - -#endif /* bts_SUB_VEC_MAP_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/Uint32Rect.c b/Embedded/common/src/b_TensorEm/Uint32Rect.c deleted file mode 100644 index d43f0d0..0000000 --- a/Embedded/common/src/b_TensorEm/Uint32Rect.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_TensorEm/Uint32Rect.h" -#include "b_BasicEm/Functions.h" -#include "b_BasicEm/Math.h" -#include "b_BasicEm/Memory.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Uint32Rect_memSize( struct bbs_Context* cpA, - const struct bts_Uint32Rect *ptrA ) -{ - return bbs_SIZEOF16( struct bts_Uint32Rect ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Uint32Rect_memWrite( struct bbs_Context* cpA, - const struct bts_Uint32Rect* ptrA, - uint16* memPtrA ) -{ - memPtrA += bbs_memWrite32( &ptrA->x1E, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->y1E, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->x2E, memPtrA ); - memPtrA += bbs_memWrite32( &ptrA->y2E, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_Uint32Rect_memRead( struct bbs_Context* cpA, - struct bts_Uint32Rect* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &ptrA->x1E, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->y1E, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->x2E, memPtrA ); - memPtrA += bbs_memRead32( &ptrA->y2E, memPtrA ); - return bbs_SIZEOF16( *ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - - diff --git a/Embedded/common/src/b_TensorEm/Uint32Rect.h b/Embedded/common/src/b_TensorEm/Uint32Rect.h deleted file mode 100644 index e7745cb..0000000 --- a/Embedded/common/src/b_TensorEm/Uint32Rect.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_UINT32RECT_EM_H -#define bts_UINT32RECT_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** 2d vector */ -struct bts_Uint32Rect -{ - - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** upper left component */ - uint32 x1E; - - /** upper left component */ - uint32 y1E; - - /** lower right component */ - uint32 x2E; - - /** lower right component */ - uint32 y2E; -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** size object needs when written to memory */ -uint32 bts_Uint32Rect_memSize( struct bbs_Context* cpA, - const struct bts_Uint32Rect* ptrA ); - -/** writes object to memory; returns number of bytes written */ -uint32 bts_Uint32Rect_memWrite( struct bbs_Context* cpA, - const struct bts_Uint32Rect* ptrA, - uint16* memPtrA ); - -/** reads object from memory; returns number of bytes read */ -uint32 bts_Uint32Rect_memRead( struct bbs_Context* cpA, - struct bts_Uint32Rect* ptrA, - const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - - -#endif /* bts_UINT32RECT_EM_H */ - diff --git a/Embedded/common/src/b_TensorEm/VectorMap.c b/Embedded/common/src/b_TensorEm/VectorMap.c deleted file mode 100644 index c641c15..0000000 --- a/Embedded/common/src/b_TensorEm/VectorMap.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Functions.h" -#include "b_TensorEm/VectorMap.h" - -#include "b_TensorEm/MapSequence.h" -#include "b_TensorEm/Normalizer.h" -#include "b_TensorEm/Alt.h" -#include "b_TensorEm/Mat.h" -#include "b_TensorEm/SubVecMap.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ constructor / destructor } ----------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_VectorMap_init( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA ) -{ - ptrA->typeE = 0; - ptrA->vpMapE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -void bts_VectorMap_exit( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA ) -{ - ptrA->typeE = 0; - ptrA->vpMapE = NULL; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ operators } -------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_VectorMap_copy( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, - const struct bts_VectorMap* srcPtrA ) -{ - ptrA->typeE = srcPtrA->typeE; - ptrA->vpMapE = srcPtrA->vpMapE; -} - -/* ------------------------------------------------------------------------- */ - -flag bts_VectorMap_equal( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_VectorMap* srcPtrA ) -{ - - if( ptrA->typeE != srcPtrA->typeE ) return FALSE; - if( ptrA->vpMapE != srcPtrA->vpMapE ) return FALSE; - return TRUE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ query functions } -------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ modify functions } ------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ I/O } -------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -uint32 bts_VectorMap_memSize( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA ) -{ - uint32 memSizeL = 0; - memSizeL += bbs_SIZEOF16( ptrA->typeE ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_VectorMap_memWrite( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - uint16* memPtrA ) -{ - uint32 memSizeL = bts_VectorMap_memSize( cpA, ptrA ); - memPtrA += bbs_memWrite32( &ptrA->typeE, memPtrA ); - return memSizeL; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_VectorMap_memRead( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, - const uint16* memPtrA ) -{ - if( bbs_Context_error( cpA ) ) return 0; - memPtrA += bbs_memRead32( &ptrA->typeE, memPtrA ); - return bts_VectorMap_memSize( cpA, ptrA ); -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- \ghd{ exec functions } --------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void bts_vectorMapInit( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, - enum bts_VectorMapType typeA ) -{ - switch( typeA ) - { - case bts_VM_MAP_SEQUENCE: bts_MapSequence_init( cpA, ( struct bts_MapSequence* )ptrA ); return; - case bts_VM_NORMALIZER: bts_Normalizer_init( cpA, ( struct bts_Normalizer* )ptrA ); return; - case bts_VM_MAT: bts_Mat_init( cpA, ( struct bts_Mat* )ptrA ); return; - case bts_VM_ALT: bts_Alt_init( cpA, ( struct bts_Alt* )ptrA ); return; - case bts_VM_SUB_VEC_MAP: bts_SubVecMap_init( cpA, ( struct bts_SubVecMap* )ptrA ); return; - - default: bbs_ERROR0( "bts_vectorMapInit: invalid type" ); - } -} - -/* ------------------------------------------------------------------------- */ - -void bts_vectorMapExit( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA ) -{ - switch( ptrA->typeE ) - { - case bts_VM_MAP_SEQUENCE: bts_MapSequence_exit( cpA, ( struct bts_MapSequence* )ptrA ); return; - case bts_VM_NORMALIZER: bts_Normalizer_exit( cpA, ( struct bts_Normalizer* )ptrA ); return; - case bts_VM_MAT: bts_Mat_exit( cpA, ( struct bts_Mat* )ptrA ); return; - case bts_VM_ALT: bts_Alt_exit( cpA, ( struct bts_Alt* )ptrA ); return; - case bts_VM_SUB_VEC_MAP: bts_SubVecMap_exit( cpA, ( struct bts_SubVecMap* )ptrA ); return; - - default: bbs_ERROR0( "bts_vectorMapExit: invalid type" ); - } -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_vectorMapMemSize( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA ) -{ - switch( ptrA->typeE ) - { - case bts_VM_MAP_SEQUENCE: return bts_MapSequence_memSize( cpA, ( struct bts_MapSequence* )ptrA ); - case bts_VM_NORMALIZER: return bts_Normalizer_memSize( cpA, ( struct bts_Normalizer* )ptrA ); - case bts_VM_MAT: return bts_Mat_memSize( cpA, ( struct bts_Mat* )ptrA ); - case bts_VM_ALT: return bts_Alt_memSize( cpA, ( struct bts_Alt* )ptrA ); - case bts_VM_SUB_VEC_MAP: return bts_SubVecMap_memSize( cpA, ( struct bts_SubVecMap* )ptrA ); - - default: bbs_ERROR0( "bts_vectorMapExit: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_vectorMapMemWrite( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, uint16* memPtrA ) -{ - switch( ptrA->typeE ) - { - case bts_VM_MAP_SEQUENCE: return bts_MapSequence_memWrite( cpA, ( struct bts_MapSequence* )ptrA, memPtrA ); - case bts_VM_NORMALIZER: return bts_Normalizer_memWrite( cpA, ( struct bts_Normalizer* )ptrA, memPtrA ); - case bts_VM_MAT: return bts_Mat_memWrite( cpA, ( struct bts_Mat* )ptrA, memPtrA ); - case bts_VM_ALT: return bts_Alt_memWrite( cpA, ( struct bts_Alt* )ptrA, memPtrA ); - case bts_VM_SUB_VEC_MAP: return bts_SubVecMap_memWrite( cpA, ( struct bts_SubVecMap* )ptrA, memPtrA ); - - default: bbs_ERROR0( "bts_vectorMapMemWrite: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_vectorMapMemRead( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ) -{ - switch( ptrA->typeE ) - { - case bts_VM_MAP_SEQUENCE: return bts_MapSequence_memRead( cpA, ( struct bts_MapSequence* )ptrA, memPtrA, mtpA ); - case bts_VM_NORMALIZER: return bts_Normalizer_memRead( cpA, ( struct bts_Normalizer* )ptrA, memPtrA, mtpA ); - case bts_VM_MAT: return bts_Mat_memRead( cpA, ( struct bts_Mat* )ptrA, memPtrA, mtpA ); - case bts_VM_ALT: return bts_Alt_memRead( cpA, ( struct bts_Alt* )ptrA, memPtrA, mtpA ); - case bts_VM_SUB_VEC_MAP: return bts_SubVecMap_memRead( cpA, ( struct bts_SubVecMap* )ptrA, memPtrA, mtpA ); - - default: bbs_ERROR0( "bts_vectorMapMemRead: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -uint32 bts_vectorMapSizeOf16( struct bbs_Context* cpA, enum bts_VectorMapType typeA ) -{ - switch( typeA ) - { - case bts_VM_MAP_SEQUENCE: return bbs_SIZEOF16( struct bts_MapSequence ); - case bts_VM_NORMALIZER: return bbs_SIZEOF16( struct bts_Normalizer ); - case bts_VM_MAT: return bbs_SIZEOF16( struct bts_Mat ); - case bts_VM_ALT: return bbs_SIZEOF16( struct bts_Alt ); - case bts_VM_SUB_VEC_MAP: return bbs_SIZEOF16( struct bts_SubVecMap ); - - default: bbs_ERROR0( "bts_vectorMapSizeOf16: invalid type" ); - } - return 0; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ - diff --git a/Embedded/common/src/b_TensorEm/VectorMap.h b/Embedded/common/src/b_TensorEm/VectorMap.h deleted file mode 100644 index 7dbec9e..0000000 --- a/Embedded/common/src/b_TensorEm/VectorMap.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef bts_VECTOR_MAP_EM_H -#define bts_VECTOR_MAP_EM_H - -/* ---- includes ----------------------------------------------------------- */ - -#include "b_BasicEm/Context.h" -#include "b_BasicEm/Basic.h" -#include "b_BasicEm/MemTbl.h" -#include "b_TensorEm/Flt16Vec.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** Object Type */ -enum bts_VectorMapType -{ - bts_VM_UNDEFINED = 0, - bts_VM_MAP_SEQUENCE, /* sequence of vector maps */ - bts_VM_NORMALIZER, /* normalizes a vector using euclidean norm */ - bts_VM_MAT, /* linear transformation (matrix) */ - bts_VM_ALT, /* affine linear transformation */ - bts_VM_SUB_VEC_MAP /* sub vector extraction */ -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- object definition -------------------------------------------------- */ - -/** base object for vector maps (occurs as first element in all vector map objects) */ -struct bts_VectorMap -{ - /* ---- private data --------------------------------------------------- */ - - /* ---- public data ---------------------------------------------------- */ - - /** vector map type */ - uint32 typeE; - - /* ---- virtual functions ---------------------------------------------- */ - - /** vector map operation. - * Maps vector inVec to outVec (overflow-safe) - * Memory areas of vectors may not overlap - */ - void ( *vpMapE )( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_Flt16Vec* inVecPtrA, - struct bts_Flt16Vec* outVecPtrA ); - -}; - -/* ---- associated objects ------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -/* ---- \ghd{ constructor/destructor } ------------------------------------- */ - -/** initializes bts_VectorMap */ -void bts_VectorMap_init( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA ); - -/** resets bts_VectorMap */ -void bts_VectorMap_exit( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA ); - -/* ---- \ghd{ operators } -------------------------------------------------- */ - -/** copy operator */ -void bts_VectorMap_copy( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, - const struct bts_VectorMap* srcPtrA ); - -/** equal operator */ -flag bts_VectorMap_equal( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, - const struct bts_VectorMap* srcPtrA ); - -/* ---- \ghd{ query functions } -------------------------------------------- */ - -/* ---- \ghd{ modify functions } ------------------------------------------- */ - -/* ---- \ghd{ memory I/O } ------------------------------------------------- */ - -/** word size (16-bit) object needs when written to memory */ -uint32 bts_VectorMap_memSize( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA ); - -/** writes object to memory; returns number of words (16-bit) written */ -uint32 bts_VectorMap_memWrite( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, uint16* memPtrA ); - -/** reads object from memory; returns number of words (16-bit) read */ -uint32 bts_VectorMap_memRead( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, const uint16* memPtrA ); - -/* ---- \ghd{ exec functions } --------------------------------------------- */ - -/** virtual init function */ -void bts_vectorMapInit( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, - enum bts_VectorMapType typeA ); - -/** virtual exit function */ -void bts_vectorMapExit( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA ); - -/** virtual mem size function */ -uint32 bts_vectorMapMemSize( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA ); - -/** virtual mem write function */ -uint32 bts_vectorMapMemWrite( struct bbs_Context* cpA, - const struct bts_VectorMap* ptrA, uint16* memPtrA ); - -/** virtual mem read function */ -uint32 bts_vectorMapMemRead( struct bbs_Context* cpA, - struct bts_VectorMap* ptrA, - const uint16* memPtrA, - struct bbs_MemTbl* mtpA ); - -/** virtual sizeof operator for 16bit units */ -uint32 bts_vectorMapSizeOf16( struct bbs_Context* cpA, enum bts_VectorMapType typeA ); - -#endif /* bts_VECTOR_MAP_EM_H */ - diff --git a/FaceDetector_jni.cpp b/FaceDetector_jni.cpp deleted file mode 100644 index a4ceeec..0000000 --- a/FaceDetector_jni.cpp +++ /dev/null @@ -1,316 +0,0 @@ -/* - * Copyright (C) 2006 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <fcntl.h> -#include <unistd.h> - -#include <utils/misc.h> -#include <utils/String8.h> -#include <utils/Log.h> - -#include <core/SkBitmap.h> - -#include "jni.h" -#include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" - -using namespace android; - -extern "C" -{ - #include <fd_emb_sdk.h> -} - -struct FaceData -{ - float confidence; - float midpointx; - float midpointy; - float eyedist; -}; - -struct FaceOffsets -{ - jfieldID confidence; - jfieldID midpointx; - jfieldID midpointy; - jfieldID eyedist; - jfieldID eulerx; - jfieldID eulery; - jfieldID eulerz; -} gFaceOffsets; - -struct FaceDetectorOffsets -{ - jfieldID fd; - jfieldID sdk; - jfieldID dcr; - jfieldID width; - jfieldID height; - jfieldID maxFaces; - jfieldID bwbuffer; -} gFaceDetectorOffsets; - -jfieldID nativeBitmapID; - -// --------------------------------------------------------------------------- - -static void getFaceData(btk_HDCR hdcr, FaceData* fdata) -{ - btk_Node leftEye, rightEye; - - btk_DCR_getNode(hdcr, 0, &leftEye); - btk_DCR_getNode(hdcr, 1, &rightEye); - - fdata->eyedist = (float)(rightEye.x - leftEye.x) / (1 << 16); - fdata->midpointx = (float)(rightEye.x + leftEye.x) / (1 << 17); - fdata->midpointy = (float)(rightEye.y + leftEye.y) / (1 << 17); - fdata->confidence = (float)btk_DCR_confidence(hdcr) / (1 << 24); -} - -// --------------------------------------------------------------------------- - -static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL) -{ - jclass npeClazz = env->FindClass(exc); - env->ThrowNew(npeClazz, msg); -} - -static void -nativeClassInit -(JNIEnv *_env, jclass _this) -{ - gFaceDetectorOffsets.fd = _env->GetFieldID(_this, "mFD", "I"); - gFaceDetectorOffsets.sdk = _env->GetFieldID(_this, "mSDK", "I"); - gFaceDetectorOffsets.dcr = _env->GetFieldID(_this, "mDCR", "I"); - gFaceDetectorOffsets.width = _env->GetFieldID(_this, "mWidth", "I"); - gFaceDetectorOffsets.height = _env->GetFieldID(_this, "mHeight", "I"); - gFaceDetectorOffsets.maxFaces = _env->GetFieldID(_this, "mMaxFaces", "I"); - gFaceDetectorOffsets.bwbuffer = _env->GetFieldID(_this, "mBWBuffer", "[B"); - - jclass faceClass = _env->FindClass("android/media/FaceDetector$Face"); - gFaceOffsets.confidence = _env->GetFieldID(faceClass, "mConfidence", "F"); - gFaceOffsets.midpointx = _env->GetFieldID(faceClass, "mMidPointX", "F"); - gFaceOffsets.midpointy = _env->GetFieldID(faceClass, "mMidPointY", "F"); - gFaceOffsets.eyedist = _env->GetFieldID(faceClass, "mEyesDist", "F"); - gFaceOffsets.eulerx = _env->GetFieldID(faceClass, "mPoseEulerX", "F"); - gFaceOffsets.eulery = _env->GetFieldID(faceClass, "mPoseEulerY", "F"); - gFaceOffsets.eulerz = _env->GetFieldID(faceClass, "mPoseEulerZ", "F"); - - jclass bitmapClass = _env->FindClass("android/graphics/Bitmap"); - nativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I"); -} - -// --------------------------------------------------------------------------- - -static jint -initialize(JNIEnv *_env, jobject _this, - jint w, jint h, jint maxFaces) -{ - // load the configuration file - const char* root = getenv("ANDROID_ROOT"); - String8 path(root); - path.appendPath("usr/share/bmd/RFFstd_501.bmd"); - // path.appendPath("usr/share/bmd/RFFspeed_501.bmd"); - - const int MAX_FILE_SIZE = 65536; - void* initData = malloc( MAX_FILE_SIZE ); /* enough to fit entire file */ - int filedesc = open(path.string(), O_RDONLY); - int initDataSize = read(filedesc, initData, MAX_FILE_SIZE); - close(filedesc); - - // -------------------------------------------------------------------- - btk_HSDK sdk = NULL; - btk_SDKCreateParam sdkParam = btk_SDK_defaultParam(); - sdkParam.fpMalloc = malloc; - sdkParam.fpFree = free; - sdkParam.maxImageWidth = w; - sdkParam.maxImageHeight = h; - - btk_Status status = btk_SDK_create(&sdkParam, &sdk); - // make sure everything went well - if (status != btk_STATUS_OK) { - // XXX: be more precise about what went wrong - doThrow(_env, "java/lang/OutOfMemoryError", NULL); - return 0; - } - - btk_HDCR dcr = NULL; - btk_DCRCreateParam dcrParam = btk_DCR_defaultParam(); - btk_DCR_create( sdk, &dcrParam, &dcr ); - - btk_HFaceFinder fd = NULL; - btk_FaceFinderCreateParam fdParam = btk_FaceFinder_defaultParam(); - fdParam.pModuleParam = initData; - fdParam.moduleParamSize = initDataSize; - fdParam.maxDetectableFaces = maxFaces; - status = btk_FaceFinder_create( sdk, &fdParam, &fd ); - btk_FaceFinder_setRange(fd, 20, w/2); /* set eye distance range */ - - // make sure everything went well - if (status != btk_STATUS_OK) { - // XXX: be more precise about what went wrong - doThrow(_env, "java/lang/OutOfMemoryError", NULL); - return 0; - } - - // free the configuration file - free(initData); - - // initialize the java object - _env->SetIntField(_this, gFaceDetectorOffsets.fd, (jint)fd); - _env->SetIntField(_this, gFaceDetectorOffsets.sdk, (jint)sdk); - _env->SetIntField(_this, gFaceDetectorOffsets.dcr, (jint)dcr); - - return 1; -} - -static void -destroy(JNIEnv *_env, jobject _this) -{ - btk_HFaceFinder hfd = - (btk_HFaceFinder)(_env->GetIntField(_this, gFaceDetectorOffsets.fd)); - btk_FaceFinder_close( hfd ); - - btk_HDCR hdcr = (btk_HDCR)(_env->GetIntField(_this, gFaceDetectorOffsets.dcr)); - btk_DCR_close( hdcr ); - - btk_HSDK hsdk = (btk_HSDK)(_env->GetIntField(_this, gFaceDetectorOffsets.sdk)); - btk_SDK_close( hsdk ); -} - -static jint -detect(JNIEnv *_env, jobject _this, - jobject bitmap) -{ - // get the fields we need - btk_HDCR hdcr = (btk_HDCR)(_env->GetIntField(_this, gFaceDetectorOffsets.dcr)); - btk_HFaceFinder hfd = - (btk_HFaceFinder)(_env->GetIntField(_this, gFaceDetectorOffsets.fd)); - u32 maxFaces = _env->GetIntField(_this, gFaceDetectorOffsets.maxFaces); - u32 width = _env->GetIntField(_this, gFaceDetectorOffsets.width); - u32 height = _env->GetIntField(_this, gFaceDetectorOffsets.height); - - jbyteArray bwbufferObject = (jbyteArray) - _env->GetObjectField(_this, gFaceDetectorOffsets.bwbuffer); - - // get to the native bitmap - SkBitmap const * nativeBitmap = - (SkBitmap const *)_env->GetIntField(bitmap, nativeBitmapID); - - // get to our BW temporary buffer - jbyte* bwbuffer = _env->GetByteArrayElements(bwbufferObject, 0); - - // convert the image to B/W - uint8_t* dst = (uint8_t*)bwbuffer; - - // manage the life-time of locking our pixels - SkAutoLockPixels alp(*nativeBitmap); - - uint16_t const* src = (uint16_t const*)nativeBitmap->getPixels(); - int wpr = nativeBitmap->rowBytes() / 2; - for (u32 y=0 ; y<height; y++) { - for (u32 x=0 ; x<width ; x++) { - uint16_t rgb = src[x]; - int r = rgb >> 11; - int g2 = (rgb >> 5) & 0x3F; - int b = rgb & 0x1F; - // L coefficients 0.299 0.587 0.11 - int L = (r<<1) + (g2<<1) + (g2>>1) + b; - *dst++ = L; - } - src += wpr; - } - - // run detection - btk_DCR_assignGrayByteImage(hdcr, bwbuffer, width, height); - - int numberOfFaces = 0; - if (btk_FaceFinder_putDCR(hfd, hdcr) == btk_STATUS_OK) { - numberOfFaces = btk_FaceFinder_faces(hfd); - } - - // release the arrays we're using - _env->ReleaseByteArrayElements(bwbufferObject, bwbuffer, 0); - return numberOfFaces; -} - -static void -get_face(JNIEnv *_env, jobject _this, - jobject face, jint index) -{ - btk_HDCR hdcr = (btk_HDCR)(_env->GetIntField(_this, gFaceDetectorOffsets.dcr)); - btk_HFaceFinder hfd = - (btk_HFaceFinder)(_env->GetIntField(_this, gFaceDetectorOffsets.fd)); - - FaceData faceData; - btk_FaceFinder_getDCR(hfd, hdcr); - getFaceData(hdcr, &faceData); - - const float X2F = 1.0f / 65536.0f; - _env->SetFloatField(face, gFaceOffsets.confidence, faceData.confidence); - _env->SetFloatField(face, gFaceOffsets.midpointx, faceData.midpointx); - _env->SetFloatField(face, gFaceOffsets.midpointy, faceData.midpointy); - _env->SetFloatField(face, gFaceOffsets.eyedist, faceData.eyedist); - _env->SetFloatField(face, gFaceOffsets.eulerx, 0); - _env->SetFloatField(face, gFaceOffsets.eulery, 0); - _env->SetFloatField(face, gFaceOffsets.eulerz, 0); -} - -// --------------------------------------------------------------------------- - -static const char *classPathName = "android/media/FaceDetector"; - -static JNINativeMethod methods[] = { -{"nativeClassInit", "()V", (void*)nativeClassInit }, -{"fft_initialize", "(III)I", (void*)initialize }, -{"fft_detect", "(Landroid/graphics/Bitmap;)I", (void*)detect }, -{"fft_get_face", "(Landroid/media/FaceDetector$Face;I)V",(void*)get_face }, -{"fft_destroy", "()V", (void*)destroy }, -}; - -int register_android_media_FaceDetector(JNIEnv *_env) -{ - return android::AndroidRuntime::registerNativeMethods( - _env, classPathName, methods, NELEM(methods)); -} - -// --------------------------------------------------------------------------- - -jint JNI_OnLoad(JavaVM* vm, void* reserved) -{ - JNIEnv* env = NULL; - jint result = -1; - - if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { - LOGE("ERROR: GetEnv failed\n"); - goto bail; - } - assert(env != NULL); - - if (register_android_media_FaceDetector(env) < 0) { - LOGE("ERROR: MediaPlayer native registration failed\n"); - goto bail; - } - - /* success -- return valid version number */ - result = JNI_VERSION_1_4; - -bail: - return result; -} diff --git a/FaceRecEm/common/src/b_FDSDK/DCR.c b/FaceRecEm/common/src/b_FDSDK/DCR.c deleted file mode 100644 index 1779731..0000000 --- a/FaceRecEm/common/src/b_FDSDK/DCR.c +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "DCR_Internal.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- functions ---------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void btk_DCR_init( struct bbs_Context* cpA, struct btk_DCR* ptrA ) -{ - ptrA->hsdkE = NULL; - ptrA->hidE = btk_HID_DCR; - bpi_DCR_init( cpA, &ptrA->dcrE ); -} - -/* ------------------------------------------------------------------------- */ - -void btk_DCR_exit( struct bbs_Context* cpA, struct btk_DCR* ptrA ) -{ - ptrA->hsdkE = NULL; - ptrA->hidE = btk_HID_DCR; - bpi_DCR_exit( cpA, &ptrA->dcrE ); -} - -/* ------------------------------------------------------------------------- */ - -btk_DCRCreateParam btk_DCR_defaultParam() -{ - btk_DCRCreateParam paramL; - paramL.reserved = 0; - return paramL; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_create( btk_HSDK hsdkA, - const btk_DCRCreateParam* pCreateParamA, - btk_HDCR* hpdcrA ) -{ - btk_HDCR hdcrL = NULL; - - if( hpdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( *hpdcrA != NULL ) return btk_STATUS_INVALID_HANDLE; - if( hsdkA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hsdkA->hidE != btk_HID_SDK ) return btk_STATUS_INVALID_HANDLE; - if( pCreateParamA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - hdcrL = ( btk_HDCR )bbs_MemSeg_alloc( &hsdkA->contextE, hsdkA->contextE.memTblE.espArrE[ 0 ], bbs_SIZEOF16( struct btk_DCR ) ); - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_ERROR; - - btk_DCR_init( &hsdkA->contextE, hdcrL ); - hdcrL->hsdkE = hsdkA; - - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_ERROR; - - bpi_DCR_create( &hsdkA->contextE, - &hdcrL->dcrE, - hsdkA->maxImageWidthE, - hsdkA->maxImageHeightE, -#ifdef btk_FRSDK - 6000 >> 1, -#else - 0, -#endif - &hsdkA->contextE.memTblE ); - - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_ERROR; - - *hpdcrA = hdcrL; - hsdkA->refCtrE++; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_close( btk_HDCR hdcrA ) -{ - btk_HSDK hsdkL = NULL; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA->hidE != btk_HID_DCR ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA->hsdkE == NULL ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hdcrA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - hsdkL->refCtrE--; - - btk_DCR_exit( &hsdkL->contextE, hdcrA ); - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - bbs_MemSeg_free( &hsdkL->contextE, hsdkL->contextE.memTblE.espArrE[ 0 ], hdcrA ); - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_assignGrayByteImage( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA ) -{ - return btk_DCR_assignImage( hdcrA, pDataA, widthA, heightA ); -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_assignImage( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA ) -{ - const char* fNameL = "btk_DCR_assignImage"; - - btk_HSDK hsdkL = NULL; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA->hidE != btk_HID_DCR ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hdcrA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - if( pDataA == NULL ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nAssigned image references inavlid memory", fNameL ) ); - - return btk_STATUS_ERROR; - } - - if( widthA == 0 || heightA == 0 ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nAssigned image has size 0", fNameL ) ); - - return btk_STATUS_ERROR; - } - - bpi_DCR_assignGrayByteImage( &hsdkL->contextE, &hdcrA->dcrE, pDataA, widthA, heightA ); - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_assignGrayByteImageROI( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA, - const btk_Rect* pRectA ) -{ - return btk_DCR_assignImageROI( hdcrA, pDataA, widthA, heightA, pRectA ); -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_assignImageROI( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA, - const btk_Rect* pRectA ) -{ - const char* fNameL = "btk_DCR_assignGrayByteImageROI"; - - btk_HSDK hsdkL = NULL; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA->hidE != btk_HID_DCR ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hdcrA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - if( pDataA == NULL ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nAssigned image references invalid memory", fNameL ) ); - return btk_STATUS_ERROR; - } - - if( widthA == 0 || heightA == 0 ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nAssigned image has size 0", fNameL ) ); - return btk_STATUS_ERROR; - } - - if( pRectA == NULL ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nAssigned ROI rectangle references invalid memory", fNameL ) ); - return btk_STATUS_ERROR; - } - - if( pRectA->xMax <= pRectA->xMin || pRectA->yMax <= pRectA->yMin ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nAssigned ROI rectangle is inverted (max<min) or zero", fNameL ) ); - return btk_STATUS_ERROR; - } - - { - struct bts_Int16Rect rectL; - rectL = bts_Int16Rect_create( pRectA->xMin >> 16, - pRectA->yMin >> 16, - pRectA->xMax >> 16, - pRectA->yMax >> 16 ); - - /* rect must stay within image boundaries - adjust coordinates if necessary */ - rectL.x1E = rectL.x1E < 0 ? 0 : rectL.x1E; - rectL.y1E = rectL.y1E < 0 ? 0 : rectL.y1E; - rectL.x2E = rectL.x2E > ( int32 )widthA ? widthA : rectL.x2E; - rectL.y2E = rectL.y2E > ( int32 )heightA ? heightA : rectL.y2E; - - bpi_DCR_assignGrayByteImageROI( &hsdkL->contextE, &hdcrA->dcrE, pDataA, widthA, heightA, &rectL ); - } - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -u32 btk_DCR_nodeCount( btk_HDCR hdcrA ) -{ - if( hdcrA == NULL ) return 0; - if( hdcrA->hidE != btk_HID_DCR ) return 0; - return hdcrA->dcrE.sdkClusterE.clusterE.sizeE; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_getNode( btk_HDCR hdcrA, - u32 indexA, - btk_Node* nodePtrA ) -{ - const char* fNameL = "btk_DCR_getNode"; - - btk_HSDK hsdkL = NULL; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA->hidE != btk_HID_DCR ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hdcrA->hsdkE; - if( nodePtrA == NULL ) return btk_STATUS_INVALID_HANDLE; - - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - if( indexA >= hdcrA->dcrE.sdkClusterE.clusterE.sizeE ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nIndex is out of range", fNameL ) ); - return btk_STATUS_ERROR; - } - - nodePtrA->id = hdcrA->dcrE.sdkClusterE.idArrE.arrPtrE[ indexA ]; - nodePtrA->x = ( ( s16p16 )hdcrA->dcrE.sdkClusterE.clusterE.vecArrE[ indexA ].xE ) << ( 16 - hdcrA->dcrE.sdkClusterE.clusterE.bbpE ); - nodePtrA->y = ( ( s16p16 )hdcrA->dcrE.sdkClusterE.clusterE.vecArrE[ indexA ].yE ) << ( 16 - hdcrA->dcrE.sdkClusterE.clusterE.bbpE ); - if( hdcrA->dcrE.roiRectE.x1E > 0 ) nodePtrA->x += ( int32 )hdcrA->dcrE.roiRectE.x1E << 16; - if( hdcrA->dcrE.roiRectE.y1E > 0 ) nodePtrA->y += ( int32 )hdcrA->dcrE.roiRectE.y1E << 16; - nodePtrA->x += ( int32 )hdcrA->dcrE.offsE.xE << 16; - nodePtrA->y += ( int32 )hdcrA->dcrE.offsE.yE << 16; - - nodePtrA->reserved = 0; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_DCR_getRect( btk_HDCR hdcrA, - btk_Rect* pRectA ) -{ - const char* fNameL = "btk_DCR_getRect"; - - btk_HSDK hsdkL = NULL; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA->hidE != btk_HID_DCR ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hdcrA->hsdkE; - if( pRectA == NULL ) return btk_STATUS_INVALID_HANDLE; - - /* find eye nodes */ - { - const struct bbs_Int16Arr* pIdArrL = &hdcrA->dcrE.sdkClusterE.idArrE; - int32 lIndexL = -1; - int32 rIndexL = -1; - uint32 iL; - for( iL = 0; iL < pIdArrL->sizeE; iL++ ) - { - if( pIdArrL->arrPtrE[ iL ] == 0 ) - { - lIndexL = iL; - } - else if( pIdArrL->arrPtrE[ iL ] == 1 ) - { - rIndexL = iL; - } - } - - if( lIndexL == -1 || rIndexL == -1 ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nFace rectangle is not available", fNameL ) ); - return btk_STATUS_ERROR; - } - - { - int32 bbpL = hdcrA->dcrE.sdkClusterE.clusterE.bbpE; - int32 lxL = ( hdcrA->dcrE.sdkClusterE.clusterE.vecArrE[ lIndexL ].xE + ( 1 << ( bbpL - 1 ) ) ) >> bbpL; - int32 lyL = ( hdcrA->dcrE.sdkClusterE.clusterE.vecArrE[ lIndexL ].yE + ( 1 << ( bbpL - 1 ) ) ) >> bbpL; - int32 rxL = ( hdcrA->dcrE.sdkClusterE.clusterE.vecArrE[ rIndexL ].xE + ( 1 << ( bbpL - 1 ) ) ) >> bbpL; - int32 ryL = ( hdcrA->dcrE.sdkClusterE.clusterE.vecArrE[ rIndexL ].yE + ( 1 << ( bbpL - 1 ) ) ) >> bbpL; - int32 doffL = ( rxL - lxL ) >> 1; - - pRectA->xMin = ( lxL - doffL ) << 16; - pRectA->xMax = ( rxL + doffL ) << 16; - pRectA->yMin = ( ( ( lyL + ryL + 1 ) >> 1 ) - doffL ) << 16; - pRectA->yMax = ( pRectA->yMin + ( pRectA->xMax - pRectA->xMin ) ); - if( hdcrA->dcrE.roiRectE.x1E > 0 ) - { - pRectA->xMin += ( int32 )hdcrA->dcrE.roiRectE.x1E << 16; - pRectA->xMax += ( int32 )hdcrA->dcrE.roiRectE.x1E << 16; - } - if( hdcrA->dcrE.roiRectE.y1E > 0 ) - { - pRectA->yMin += ( int32 )hdcrA->dcrE.roiRectE.y1E << 16; - pRectA->yMax += ( int32 )hdcrA->dcrE.roiRectE.y1E << 16; - } - - pRectA->xMin += ( int32 )hdcrA->dcrE.offsE.xE << 16; - pRectA->yMin += ( int32 )hdcrA->dcrE.offsE.yE << 16; - pRectA->xMax += ( int32 )hdcrA->dcrE.offsE.xE << 16; - pRectA->yMax += ( int32 )hdcrA->dcrE.offsE.yE << 16; - - } - } - - return btk_STATUS_OK; -} - - -/* ------------------------------------------------------------------------- */ - -s8p24 btk_DCR_confidence( btk_HDCR hdcrA ) -{ - btk_HSDK hsdkL = NULL; - if( hdcrA == NULL ) return 0; - if( hdcrA->hidE != btk_HID_DCR ) return 0; - hsdkL = hdcrA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return 0; - - return hdcrA->dcrE.confidenceE; -} - -/* ------------------------------------------------------------------------- */ - -u32 btk_DCR_approved( btk_HDCR hdcrA ) -{ - btk_HSDK hsdkL = NULL; - if( hdcrA == NULL ) return 0; - if( hdcrA->hidE != btk_HID_DCR ) return 0; - hsdkL = hdcrA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return 0; - - return ( u32 )hdcrA->dcrE.approvedE; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/FaceRecEm/common/src/b_FDSDK/DCR.h b/FaceRecEm/common/src/b_FDSDK/DCR.h deleted file mode 100644 index 4fbc275..0000000 --- a/FaceRecEm/common/src/b_FDSDK/DCR.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_DCR_EM_H -#define btk_DCR_EM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Data Carrier object - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "SDK.h" - -/* ---- related objects --------------------------------------------------- */ - -/** data carrier object */ -struct btk_DCR; - -/* ---- typedefs ----------------------------------------------------------- */ - -/** handle for data carrier object */ -typedef struct btk_DCR* btk_HDCR; - -/** node data structure */ -typedef struct -{ - s16p16 x; /* x-coordinate */ - s16p16 y; /* y-coordinate */ - s32 id; /* node id */ - s16p16 reserved; /* reserved for future versions (0) */ -} btk_Node; - -/** rectangle data structure */ -typedef struct -{ - s16p16 xMin; /* x min coordinate */ - s16p16 yMin; /* y min coordinate */ - s16p16 xMax; /* x max coordinate */ - s16p16 yMax; /* y max coordinate */ -} btk_Rect; - -/** DCR creation parameters */ -typedef struct -{ - /* reserved parameter (0) */ - u32 reserved; - -} btk_DCRCreateParam; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- functions ---------------------------------------------------------- */ - -/** returns default data carrier parameters */ -btk_DECLSPEC -btk_DCRCreateParam btk_DCR_defaultParam( void ); - -/** creates a data carrier object */ -btk_DECLSPEC -btk_Status btk_DCR_create( btk_HSDK hsdkA, - const btk_DCRCreateParam* pCreateParamA, - btk_HDCR* hpdcrA ); - -/** closes a data carrier object */ -btk_DECLSPEC -btk_Status btk_DCR_close( btk_HDCR hdcrA ); - -/** deprecated (use assignImage) */ -btk_DECLSPEC -btk_Status btk_DCR_assignGrayByteImage( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA ); - -/** assigns a byte gray image referenced by pDataA to the data carrier */ -btk_DECLSPEC -btk_Status btk_DCR_assignImage( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA ); - -/** deprecated (use assignImageROI) */ -btk_DECLSPEC -btk_Status btk_DCR_assignGrayByteImageROI( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA, - const btk_Rect* pRectA ); - -/** assigns a byte gray image referenced by pDataA to the data carrier and - * a region of interest given by pRectA. - */ -btk_DECLSPEC -btk_Status btk_DCR_assignImageROI( btk_HDCR hdcrA, - const void* pDataA, - u32 widthA, - u32 heightA, - const btk_Rect* pRectA ); - -/** extracts facial rectangle */ -btk_DECLSPEC -btk_Status btk_DCR_getRect( btk_HDCR hdcrA, - btk_Rect* pRectA ); - -/** returns number of available landmark nodes */ -btk_DECLSPEC -u32 btk_DCR_nodeCount( btk_HDCR hdcrA ); - -/** extracts information about indexed node */ -btk_DECLSPEC -btk_Status btk_DCR_getNode( btk_HDCR hdcrA, - u32 indexA, - btk_Node* pNodeA ); - -/** returns confidence 8.24 fixed format */ -btk_DECLSPEC -s8p24 btk_DCR_confidence( btk_HDCR hdcrA ); - -/** returns approval flag (0=false; 1=true)*/ -btk_DECLSPEC -u32 btk_DCR_approved( btk_HDCR hdcrA ); - - -#ifdef __cplusplus -} -#endif - -#endif /* btk_DCR_EM_H */ diff --git a/FaceRecEm/common/src/b_FDSDK/DCR_Internal.h b/FaceRecEm/common/src/b_FDSDK/DCR_Internal.h deleted file mode 100644 index 0e848cb..0000000 --- a/FaceRecEm/common/src/b_FDSDK/DCR_Internal.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_DCR_Internal_EM_H -#define btk_DCR_Internal_EM_H - -/** - * DCR object - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "DCR.h" -#include "SDK_Internal.h" -#include "b_APIEm/DCR.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** data carrier object */ -struct btk_DCR -{ - /** SDK context handle */ - btk_HSDK hsdkE; - - /** handle id */ - btk_HandleId hidE; - - /** API DCR */ - struct bpi_DCR dcrE; -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- functions ---------------------------------------------------------- */ - -#endif /* btk_DCR_Internal_EM_H */ diff --git a/FaceRecEm/common/src/b_FDSDK/FaceFinder.c b/FaceRecEm/common/src/b_FDSDK/FaceFinder.c deleted file mode 100644 index b24ac11..0000000 --- a/FaceRecEm/common/src/b_FDSDK/FaceFinder.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "FaceFinder_Internal.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/* ---- constants ---------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- functions ---------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void btk_FaceFinder_init( struct bbs_Context* cpA, struct btk_FaceFinder* ptrA ) -{ - ptrA->hsdkE = NULL; - ptrA->hidE = btk_HID_FF; - - bpi_FaceFinderRef_init( cpA, &ptrA->ffE ); - - ptrA->facesE = 0; - ptrA->faceIndexE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void btk_FaceFinder_exit( struct bbs_Context* cpA, struct btk_FaceFinder* ptrA ) -{ - ptrA->hsdkE = NULL; - ptrA->hidE = btk_HID_FF; - - bpi_FaceFinderRef_exit( cpA, &ptrA->ffE ); - - ptrA->facesE = 0; - ptrA->faceIndexE = 0; -} - -/* ------------------------------------------------------------------------- */ - -btk_FaceFinderCreateParam btk_FaceFinder_defaultParam() -{ - btk_FaceFinderCreateParam paramL; - paramL.reserved = 0; - paramL.pModuleParam = NULL; - paramL.moduleParamSize = 0; - paramL.maxDetectableFaces = 0; - return paramL; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_FaceFinder_create( btk_HSDK hsdkA, /* sdk handle */ - const btk_FaceFinderCreateParam* pCreateParamA, - btk_HFaceFinder* hpFaceFinderA ) -{ - const char* fNameL = "btk_FaceFinder_create"; - - btk_HFaceFinder hFaceFinderL = NULL; - - if( hpFaceFinderA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( *hpFaceFinderA != NULL ) return btk_STATUS_INVALID_HANDLE; - if( hsdkA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hsdkA->hidE != btk_HID_SDK ) return btk_STATUS_INVALID_HANDLE; - if( pCreateParamA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - hFaceFinderL = ( btk_HFaceFinder )bbs_MemSeg_alloc( &hsdkA->contextE, hsdkA->contextE.memTblE.espArrE[ 0 ], bbs_SIZEOF16( struct btk_FaceFinder ) ); - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_ERROR; - - btk_FaceFinder_init( &hsdkA->contextE, hFaceFinderL ); - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_ERROR; - - hFaceFinderL->hsdkE = hsdkA; - - if( btk_SDK_paramConsistencyTest( hsdkA, pCreateParamA->pModuleParam, pCreateParamA->moduleParamSize, fNameL ) == btk_STATUS_ERROR ) return btk_STATUS_ERROR; - - if( hsdkA->maxImageWidthE * hsdkA->maxImageHeightE == 0 ) - { - bbs_Context_pushError( &hsdkA->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nSDK parameter maxImageWidth or maxImageWidth is 0!\n" - "Since SDK version 1.3.0 the maximum image size must be specified when creating the SDK handle.\n" - "Set the values in *pCreateParamA when you call function btk_SDK_create.", fNameL ) ); - return btk_STATUS_ERROR; - } - - bpi_FaceFinderRef_memRead( &hsdkA->contextE, - &hFaceFinderL->ffE, - hsdkA->maxImageWidthE, - hsdkA->maxImageHeightE, - pCreateParamA->pModuleParam, - &hsdkA->contextE.memTblE ); - - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_ERROR; - - *hpFaceFinderA = hFaceFinderL; - hsdkA->refCtrE++; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_FaceFinder_close( btk_HFaceFinder hFaceFinderA ) -{ - btk_HSDK hsdkL = NULL; - if( hFaceFinderA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hFaceFinderA->hidE != btk_HID_FF ) return btk_STATUS_INVALID_HANDLE; - if( hFaceFinderA->hsdkE == NULL ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hFaceFinderA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - hsdkL->refCtrE--; - - btk_FaceFinder_exit( &hsdkL->contextE, hFaceFinderA ); - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - bbs_MemSeg_free( &hsdkL->contextE, hsdkL->contextE.memTblE.espArrE[ 0 ], hFaceFinderA ); - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_FaceFinder_setRange( btk_HFaceFinder hFaceFinderA, - u32 minDistA, - u32 maxDistA ) -{ - btk_HSDK hsdkL = NULL; - if( hFaceFinderA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hFaceFinderA->hidE != btk_HID_FF ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hFaceFinderA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - bpi_FaceFinderRef_setRange( &hsdkL->contextE, &hFaceFinderA->ffE, minDistA, maxDistA ); - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_FaceFinder_putDCR( btk_HFaceFinder hFaceFinderA, - btk_HDCR hdcrA ) -{ - const char* fNameL = "btk_FaceFinder_putDCR"; - - btk_HSDK hsdkL = NULL; - if( hFaceFinderA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hFaceFinderA->hidE != btk_HID_FF ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hFaceFinderA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - if( hdcrA->dcrE.imageDataPtrE == NULL ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, - "%s:\nNo image was assigned to data carrier", fNameL ) ); - } - - hFaceFinderA->facesE = bpi_FaceFinderRef_putDcr( &hsdkL->contextE, - &hFaceFinderA->ffE, - &hdcrA->dcrE ); - - hFaceFinderA->faceIndexE = 0; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -u32 btk_FaceFinder_faces( btk_HFaceFinder hFaceFinderA ) -{ - if( hFaceFinderA == NULL ) return 0; - if( hFaceFinderA->hidE != btk_HID_FF ) return 0; - return hFaceFinderA->facesE - hFaceFinderA->faceIndexE; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_FaceFinder_getDCR( btk_HFaceFinder hFaceFinderA, - btk_HDCR hdcrA ) -{ - btk_HSDK hsdkL = NULL; - if( hFaceFinderA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hFaceFinderA->hidE != btk_HID_FF ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hFaceFinderA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - if( hFaceFinderA->faceIndexE < hFaceFinderA->facesE ) - { - bpi_FaceFinderRef_getDcr( &hsdkL->contextE, - &hFaceFinderA->ffE, - hFaceFinderA->faceIndexE, - &hdcrA->dcrE ); - - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - hdcrA->dcrE.approvedE = TRUE; - hFaceFinderA->faceIndexE++; - } - else - { - bpi_FaceFinderRef_getDcr( &hsdkL->contextE, - &hFaceFinderA->ffE, - 0, - &hdcrA->dcrE ); - hdcrA->dcrE.approvedE = FALSE; - } - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_FaceFinder_process( btk_HFaceFinder hFaceFinderA, - btk_HDCR hdcrA ) -{ - const char* fNameL = "btk_FaceFinder_process"; - int32 confL; - - btk_HSDK hsdkL = NULL; - if( hFaceFinderA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hFaceFinderA->hidE != btk_HID_FF ) return btk_STATUS_INVALID_HANDLE; - if( hdcrA == NULL ) return btk_STATUS_INVALID_HANDLE; - hsdkL = hFaceFinderA->hsdkE; - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - if( hdcrA->dcrE.imageDataPtrE == NULL ) - { - bbs_Context_pushError( &hsdkL->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, - "%s:\nNo image was assigned to data carrier", fNameL ) ); - } - - confL = bpi_FaceFinderRef_process( &hsdkL->contextE, - &hFaceFinderA->ffE, - &hdcrA->dcrE ); - - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - hdcrA->dcrE.confidenceE = confL; - hdcrA->dcrE.approvedE = confL > ( ( int32 )1 << 23 ); - - hFaceFinderA->faceIndexE = 0; - hFaceFinderA->facesE = 0; - - bts_IdCluster2D_copy( &hsdkL->contextE, - &hdcrA->dcrE.sdkClusterE, - &hdcrA->dcrE.mainClusterE ); - - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/FaceRecEm/common/src/b_FDSDK/FaceFinder.h b/FaceRecEm/common/src/b_FDSDK/FaceFinder.h deleted file mode 100644 index 02d4d1a..0000000 --- a/FaceRecEm/common/src/b_FDSDK/FaceFinder.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_FaceFinder_EM_H -#define btk_FaceFinder_EM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Face Finder object - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "DCR.h" - -/* ---- related objects --------------------------------------------------- */ - -/** face finder object */ -struct btk_FaceFinder; - -/* ---- typedefs ----------------------------------------------------------- */ - -/** handle for face finder object */ -typedef struct btk_FaceFinder* btk_HFaceFinder; - -/** FaceFinder creation parameters */ -typedef struct -{ - /* reserved parameter */ - u32 reserved; - - /* obaque module parameters */ - void* pModuleParam; - - /* size of module parameters */ - u32 moduleParamSize; - - /* maximum number of detectable faces */ - u32 maxDetectableFaces; - -} btk_FaceFinderCreateParam; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- functions ---------------------------------------------------------- */ - -/** returns default FaceFinder parameters */ -btk_DECLSPEC -btk_FaceFinderCreateParam btk_FaceFinder_defaultParam( void ); - -/** creates a face finder object */ -btk_DECLSPEC -btk_Status btk_FaceFinder_create( btk_HSDK hsdkA, /* sdk handle */ - const btk_FaceFinderCreateParam* pCreateParamA, - btk_HFaceFinder* hpFaceFinderA ); - -/** closes a face finder object */ -btk_DECLSPEC -btk_Status btk_FaceFinder_close( btk_HFaceFinder hFaceFinderA ); - -/** sets eye distance range */ -btk_DECLSPEC -btk_Status btk_FaceFinder_setRange( btk_HFaceFinder hFaceFinderA, - u32 minDistA, - u32 maxDistA ); - -/** passes a DCR object and triggers image processing */ -btk_DECLSPEC -btk_Status btk_FaceFinder_putDCR( btk_HFaceFinder hFaceFinderA, - btk_HDCR hdcrA ); - -/** returns number of faces that can be retrieved from face finder with function btk_FaceFinder_getDCR */ -btk_DECLSPEC -u32 btk_FaceFinder_faces( btk_HFaceFinder hFaceFinderA ); - -/** retrieves a DCR object for each detected face */ -btk_DECLSPEC -btk_Status btk_FaceFinder_getDCR( btk_HFaceFinder hFaceFinderA, - btk_HDCR hdcrA ); - -/** processes DCR for single face detection */ -btk_DECLSPEC -btk_Status btk_FaceFinder_process( btk_HFaceFinder hFaceFinderA, - btk_HDCR hdcrA ); - -#ifdef __cplusplus -} -#endif - -#endif /* btk_FaceFinder_EM_H */ diff --git a/FaceRecEm/common/src/b_FDSDK/FaceFinder_Internal.h b/FaceRecEm/common/src/b_FDSDK/FaceFinder_Internal.h deleted file mode 100644 index 02eb3d3..0000000 --- a/FaceRecEm/common/src/b_FDSDK/FaceFinder_Internal.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_FaceFinder_Internal_EM_H -#define btk_FaceFinder_Internal_EM_H - -/** - * FaceFinder object - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "FaceFinder.h" -#include "DCR_Internal.h" -#include "b_APIEm/FaceFinderRef.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** face finder object */ -struct btk_FaceFinder -{ - /** SDK context handle */ - btk_HSDK hsdkE; - - /** handle id */ - btk_HandleId hidE; - - /** internal module */ - struct bpi_FaceFinderRef ffE; - - /** number of available faces */ - uint32 facesE; - - /** index into face - array */ - uint32 faceIndexE; -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- functions ---------------------------------------------------------- */ - -#endif /* btk_FaceFinder_Internal_EM_H */ diff --git a/FaceRecEm/common/src/b_FDSDK/SDK.c b/FaceRecEm/common/src/b_FDSDK/SDK.c deleted file mode 100644 index 7085bf3..0000000 --- a/FaceRecEm/common/src/b_FDSDK/SDK.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "SDK_Internal.h" -#include "b_BasicEm/Functions.h" - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ -/* */ -/* ---- functions ---------------------------------------------------------- */ -/* */ -/* ========================================================================= */ - -/* ------------------------------------------------------------------------- */ - -void btk_SDK_init( struct btk_SDK* ptrA ) -{ - bbs_Context_init( &ptrA->contextE ); - ptrA->hidE = btk_HID_SDK; - ptrA->refCtrE = 0; - ptrA->mallocFPtrE = NULL; - ptrA->freeFPtrE = NULL; - ptrA->errorFPtrE = NULL; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -void btk_SDK_exit( struct btk_SDK* ptrA ) -{ - bbs_Context_exit( &ptrA->contextE ); - ptrA->hidE = btk_HID_SDK; - ptrA->refCtrE = 0; - ptrA->mallocFPtrE = NULL; - ptrA->freeFPtrE = NULL; - ptrA->errorFPtrE = NULL; - ptrA->maxImageWidthE = 0; - ptrA->maxImageHeightE = 0; -} - -/* ------------------------------------------------------------------------- */ - -/* malloc wrapper */ -void* btk_malloc( struct bbs_Context* cpA, - const struct bbs_MemSeg* memSegPtrA, - uint32 sizeA ) -{ - btk_HSDK hsdkL = ( btk_HSDK )cpA; - if( hsdkL->mallocFPtrE != NULL ) - { - return hsdkL->mallocFPtrE( sizeA ); - } - else - { - return NULL; - } -} - -/* ------------------------------------------------------------------------- */ - -/** error handler wrapper */ -void btk_error( struct bbs_Context* cpA ) -{ - btk_HSDK hsdkL = ( btk_HSDK )cpA; - if( hsdkL->errorFPtrE != NULL ) - { - hsdkL->errorFPtrE( hsdkL ); - } -} - -/* ------------------------------------------------------------------------- */ - -btk_SDKCreateParam btk_SDK_defaultParam() -{ - btk_SDKCreateParam paramL; - paramL.fpError = NULL; - paramL.fpMalloc = NULL; - paramL.fpFree = NULL; - paramL.pExMem = NULL; - paramL.sizeExMem = 0; - paramL.pShMem = NULL; - paramL.sizeShMem = 0; - paramL.licenseKey = NULL; - paramL.maxImageWidth = 0; - paramL.maxImageHeight = 0; - return paramL; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_SDK_create( const btk_SDKCreateParam* pCreateParamA, - btk_HSDK* hpsdkA ) -{ - btk_HSDK hsdkL = NULL; - if( hpsdkA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( *hpsdkA != NULL ) return btk_STATUS_INVALID_HANDLE; - - if( pCreateParamA->fpMalloc != NULL ) - { - if( pCreateParamA->fpFree == NULL ) return btk_STATUS_INVALID_HANDLE; - - /* allocate context */ - hsdkL = ( btk_HSDK )pCreateParamA->fpMalloc( bbs_SIZEOF8( struct btk_SDK ) ); - if( hsdkL == NULL ) return btk_STATUS_INVALID_HANDLE; - - btk_SDK_init( hsdkL ); - - /* initialize SDK context */ - hsdkL->mallocFPtrE = pCreateParamA->fpMalloc; - hsdkL->freeFPtrE = pCreateParamA->fpFree; - hsdkL->errorFPtrE = pCreateParamA->fpError; - - /* initialize core context */ - bbs_Context_quickInit( &hsdkL->contextE, btk_malloc, pCreateParamA->fpFree, btk_error ); - if( bbs_Context_error( &hsdkL->contextE ) ) return btk_STATUS_ERROR; - } - else - { - uint16* exMemPtrL = ( uint16* )pCreateParamA->pExMem; - uint32 exMemSizeL = pCreateParamA->sizeExMem >> 1; - - if( pCreateParamA->pExMem == NULL ) return btk_STATUS_INVALID_HANDLE; - if( pCreateParamA->pShMem == NULL ) return btk_STATUS_INVALID_HANDLE; - if( pCreateParamA->pExMem == pCreateParamA->pShMem ) return btk_STATUS_INVALID_HANDLE; - - if( pCreateParamA->sizeExMem < bbs_SIZEOF16( struct btk_SDK ) ) return btk_STATUS_INVALID_HANDLE; - - /* allocate context */ - hsdkL = ( btk_HSDK )exMemPtrL; - exMemPtrL += bbs_SIZEOF16( struct btk_SDK ); - exMemSizeL -= bbs_SIZEOF16( struct btk_SDK ); - - btk_SDK_init( hsdkL ); - - hsdkL->errorFPtrE = pCreateParamA->fpError; - hsdkL->contextE.errorHandlerE = btk_error; - - /* initialize core context */ - bbs_Context_addStaticSeg( &hsdkL->contextE, exMemPtrL, exMemSizeL, FALSE, 0 ); - bbs_Context_addStaticSeg( &hsdkL->contextE, pCreateParamA->pShMem, pCreateParamA->sizeShMem >> 1, TRUE, 0 ); - } - - hsdkL->maxImageWidthE = pCreateParamA->maxImageWidth; - hsdkL->maxImageHeightE = pCreateParamA->maxImageHeight; - - *hpsdkA = hsdkL; - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_SDK_close( btk_HSDK hsdkA ) -{ - const char* fNameL = "btk_SDK_close"; - - if( hsdkA == NULL ) return btk_STATUS_INVALID_HANDLE; - if( hsdkA->hidE != btk_HID_SDK ) return btk_STATUS_INVALID_HANDLE; - if( bbs_Context_error( &hsdkA->contextE ) ) return btk_STATUS_PREEXISTING_ERROR; - - if( hsdkA->refCtrE > 0 ) - { - bbs_Context_pushError( &hsdkA->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, "%s:\nThis SDK context is still in use by %i objects!\n" - "Close all instances of the context scope first.\n", - fNameL, - hsdkA->refCtrE ) ); - - return btk_STATUS_ERROR; - } - - if( hsdkA->freeFPtrE ) - { - btk_fpFree freeFPtrL = hsdkA->freeFPtrE; - btk_SDK_exit( hsdkA ); - freeFPtrL( hsdkA ); - } - else - { - btk_SDK_exit( hsdkA ); - } - - /* btk_SDK_exit clears error stack and does not produce an error condition */ - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -btk_Error btk_SDK_getError( btk_HSDK hsdkA, char* msgBufA, u32 msgBufSizeA ) -{ - if( hsdkA == NULL ) return btk_ERR_CORRUPT_DATA; - if( hsdkA->hidE != btk_HID_SDK ) return btk_STATUS_INVALID_HANDLE; - - if( bbs_Context_error( &hsdkA->contextE ) ) - { - struct bbs_Error errL = bbs_Context_popError( &hsdkA->contextE ); - if( msgBufA != NULL ) bbs_strncpy( msgBufA, errL.textE, msgBufSizeA ); - switch( errL.errorE ) - { - case bbs_ERR_OUT_OF_MEMORY: return btk_ERR_MEMORY; - case bbs_ERR_MEMORY_OVERFLOW: return btk_ERR_MEMORY; - case bbs_ERR_WRONG_VERSION: return btk_ERR_VERSION; - case bbs_ERR_CORRUPT_DATA: return btk_ERR_CORRUPT_DATA; - default: return btk_ERR_INTERNAL; - } - } - - return btk_ERR_NO_ERROR; -} - -/* ------------------------------------------------------------------------- */ - -u32 btk_SDK_exAllocSize( btk_HSDK hsdkA ) -{ - if( hsdkA == NULL ) return 0; - if( hsdkA->hidE != btk_HID_SDK ) return 0; - return ( bbs_Context_exclAllocSize( &hsdkA->contextE, 0 ) * 2 ) + bbs_SIZEOF8( struct btk_SDK ); -} - -/* ------------------------------------------------------------------------- */ - -u32 btk_SDK_shAllocSize( btk_HSDK hsdkA ) -{ - if( hsdkA == NULL ) return 0; - if( hsdkA->hidE != btk_HID_SDK ) return 0; - return bbs_Context_shrdAllocSize( &hsdkA->contextE, 0 ) * 2; -} - -/* ------------------------------------------------------------------------- */ - -u32 btk_SDK_allocSize( btk_HSDK hsdkA ) -{ - return btk_SDK_exAllocSize( hsdkA ) + btk_SDK_shAllocSize( hsdkA ); -} - -/* ------------------------------------------------------------------------- */ - -btk_Status btk_SDK_paramConsistencyTest( struct btk_SDK* hsdkA, - const void* memPtrA, - u32 memSizeA, - const char* fNameA ) -{ - const uint16* memPtrL = ( uint16* )memPtrA; - uint32 memSizeL; - uint32 iL; - uint16 sumL = 0; - - if( memSizeA < sizeof( memSizeL ) ) - { - bbs_Context_pushError( &hsdkA->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, - "%s:\nCorrupt parameter data.", fNameA ) ); - return btk_STATUS_ERROR; - } - - memPtrL += bbs_memRead32( &memSizeL, memPtrL ); - - if( memSizeA < ( memSizeL << 1 ) ) - { - bbs_Context_pushError( &hsdkA->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, - "%s:\nCorrupt parameter data.", fNameA ) ); - return btk_STATUS_ERROR; - } - - memPtrL = ( uint16* )memPtrA; - - for( iL = 0; iL < memSizeL; iL++ ) - { - uint16 valL = 0; - memPtrL += bbs_memRead16( &valL, memPtrL ); - sumL += valL; - } - - if( sumL != 0xFFFF ) - { - bbs_Context_pushError( &hsdkA->contextE, - bbs_Error_create( bbs_ERR_ERROR, 0, NULL, - "%s:\nChecksum error; corrupt parameter data.", fNameA ) ); - return btk_STATUS_ERROR; - } - - return btk_STATUS_OK; -} - -/* ------------------------------------------------------------------------- */ - -/* ========================================================================= */ diff --git a/FaceRecEm/common/src/b_FDSDK/SDK.h b/FaceRecEm/common/src/b_FDSDK/SDK.h deleted file mode 100644 index 33742e5..0000000 --- a/FaceRecEm/common/src/b_FDSDK/SDK.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_SDK_EM_H -#define btk_SDK_EM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Visual Sensing SDK - * SDK Context object - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "Types.h" - -/* ---- related objects --------------------------------------------------- */ - -/** SDK context object */ -struct btk_SDK; - -/* ---- typedefs ----------------------------------------------------------- */ - -/** handle for SDK context */ -typedef struct btk_SDK* btk_HSDK; - -/** malloc function pointer */ -typedef void* ( *btk_fpMalloc )( u32 sizeA ); - -/** free function pointer */ -typedef void ( *btk_fpFree )( void* memPtrA ); - -/** error handler function pointer */ -typedef void ( *btk_fpError )( btk_HSDK hsdkA ); - -/** SDK creation parameters */ -typedef struct -{ - /** (optional) handler to error-handler function */ - btk_fpError fpError; - - /** handler to malloc function */ - btk_fpMalloc fpMalloc; - - /** handler to free function */ - btk_fpFree fpFree; - - /** pointer to preallocated exclusive (=persistent) memory (alternative to fpMalloc) */ - void* pExMem; - - /** size of external memory */ - u32 sizeExMem; - - /** pointer to preallocated shared memory (alternative to fpMalloc) */ - void* pShMem; - - /** size of external memory */ - u32 sizeShMem; - - /** pointer to 0-terminated license key string */ - const char* licenseKey; - - /** maximum image witdh used */ - u32 maxImageWidth; - - /** maximum image height used */ - u32 maxImageHeight; - -} btk_SDKCreateParam; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- functions ---------------------------------------------------------- */ - -/** returns default SDK parameters */ -btk_DECLSPEC -btk_SDKCreateParam btk_SDK_defaultParam( void ); - -/** creates an SDK context using dynamic memory management */ -btk_DECLSPEC -btk_Status btk_SDK_create( const btk_SDKCreateParam* pCreateParamA, - btk_HSDK* hpsdkA ); - -/** closes an SDK context */ -btk_DECLSPEC -btk_Status btk_SDK_close( btk_HSDK hsdkA ); - -/** returns last occurred error and removes it from the error stack */ -btk_DECLSPEC -btk_Error btk_SDK_getError( btk_HSDK hsdkA, - char* msgBufA, - u32 msgBufSizeA ); - -/** returns amount of allocated exclusive memory in bytes */ -btk_DECLSPEC -u32 btk_SDK_exAllocSize( btk_HSDK hsdkA ); - -/** returns amount of allocated shared memory in bytes */ -btk_DECLSPEC -u32 btk_SDK_shAllocSize( btk_HSDK hsdkA ); - -/** returns total amount of allocated memory in bytes */ -btk_DECLSPEC -u32 btk_SDK_allocSize( btk_HSDK hsdkA ); - -#ifdef __cplusplus -} -#endif - -#endif /* btk_SDK_EM_H */ diff --git a/FaceRecEm/common/src/b_FDSDK/SDK_Internal.h b/FaceRecEm/common/src/b_FDSDK/SDK_Internal.h deleted file mode 100644 index b8d7378..0000000 --- a/FaceRecEm/common/src/b_FDSDK/SDK_Internal.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_SDK_Internal_EM_H -#define btk_SDK_Internal_EM_H - -/** - * SDK object - */ - -/* ---- includes ----------------------------------------------------------- */ - -#include "SDK.h" -#include "b_BasicEm/Context.h" - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** function return status */ -typedef enum -{ - /** sdk handle id */ - btk_HID_SDK, - - /** dcr handle id */ - btk_HID_DCR, - - /** face finder handle id */ - btk_HID_FF - -} btk_HandleId; - - -/** SDK context object */ -struct btk_SDK -{ - /** context (must occur as first element) */ - struct bbs_Context contextE; - - /** handle id */ - btk_HandleId hidE; - - /** reference counter */ - u32 refCtrE; - - /** ptr to malloc function */ - btk_fpMalloc mallocFPtrE; - - /** ptr to free function */ - btk_fpFree freeFPtrE; - - /** error handler function pointer */ - btk_fpError errorFPtrE; - - /* maximum image witdh used */ - u32 maxImageWidthE; - - /* maximum image height used */ - u32 maxImageHeightE; -}; - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- functions ---------------------------------------------------------- */ - -/** tests parameter consistency */ -btk_Status btk_SDK_paramConsistencyTest( struct btk_SDK* hsdkA, - const void* memPtrA, - u32 memSizeA, - const char* fNameA ); - -#endif /* btk_SDK_Internal_EM_H */ diff --git a/FaceRecEm/common/src/b_FDSDK/Types.h b/FaceRecEm/common/src/b_FDSDK/Types.h deleted file mode 100644 index 0a3da30..0000000 --- a/FaceRecEm/common/src/b_FDSDK/Types.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_TYPES_EM_H -#define btk_TYPES_EM_H - -/** - * This file contains general purpose types. - */ - -/* ---- includes ----------------------------------------------------------- */ - -/* ---- related objects --------------------------------------------------- */ - -/* ---- typedefs ----------------------------------------------------------- */ - -/** elementary data types */ - -/** integer data formats */ -typedef signed short s16; -typedef unsigned short u16; - -#if defined HW_TMS320C6x - - typedef signed int s32; - typedef unsigned int u32; - -#elif defined HW_TMS320C5x - - typedef signed long s32; - typedef unsigned long u32; - -#else - - typedef signed int s32; - typedef unsigned int u32; - -#endif - -/** signed 16.16 fixed point format */ -typedef s32 s16p16; - -/** signed 8.24 fixed point format */ -typedef s32 s8p24; - -/** function return status */ -typedef enum -{ - /** execution finished without error */ - btk_STATUS_OK, - - /** execution could not continue because the object handle was invalid */ - btk_STATUS_INVALID_HANDLE, - - /** execution could not continue because of a preexisting unhandled error condition */ - btk_STATUS_PREEXISTING_ERROR, - - /** execution caused a new error condition */ - btk_STATUS_ERROR - -} btk_Status; - - -/** gallery type */ -typedef enum -{ - /** album gallery */ - btk_GALLERY_ALBUM, - - /** reference gallery */ - btk_GALLERY_REFERENCE - -} btk_GalleryType; - -/** database arrangement type */ -typedef enum -{ - /** database entries are arranged in one coherent memory block without spaces */ - btk_COHERENT, - - /** database entries are arbitrarily distributed in memory and are referenced through pointers */ - btk_DISTRIBUTED - -} btk_DataArrangement; - - -/** error types */ -typedef enum -{ - /** execution finished without error */ - btk_ERR_NO_ERROR, /* no error */ - btk_ERR_INTERNAL, /* internal error */ - btk_ERR_MEMORY, /* failure to allocate memory */ - btk_ERR_VERSION, /* version conflict (software version is older than parameter version) */ - btk_ERR_CORRUPT_DATA /* corrup parameter data or corrupt internal structure */ - -} btk_Error; - -/** the following definitions are used to specify dll handling */ -#if ( defined WIN32 || defined _WIN32_WCE || defined __SYMBIAN32__ ) && !defined btk_NO_DLL - #ifdef btk_EXPORTING - #define btk_DECLSPEC __declspec(dllexport) - #else - #define btk_DECLSPEC __declspec(dllimport) - #endif -#else - #define btk_DECLSPEC -#endif - -/* ---- constants ---------------------------------------------------------- */ - -/* ---- external functions ------------------------------------------------- */ - -#endif /* btk_TYPES_EM_H */ diff --git a/FaceRecEm/common/src/b_FDSDK/fd_emb_sdk.h b/FaceRecEm/common/src/b_FDSDK/fd_emb_sdk.h deleted file mode 100644 index 4f6e3bc..0000000 --- a/FaceRecEm/common/src/b_FDSDK/fd_emb_sdk.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef btk_FD_SDK_H -#define btk_FD_SDK_H - -/* header file including all neccessary headers of this library */ - -#include "DCR.h" -#include "FaceFinder.h" -#include "SDK.h" -#include "Types.h" - -#endif /* btk_FD_SDK_H */ diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2 deleted file mode 100644 index e69de29..0000000 --- a/MODULE_LICENSE_APACHE2 +++ /dev/null @@ -1,11 +0,0 @@ - ========================================================================= - == NOTICE file corresponding to the section 4 d of == - == the Apache License, Version 2.0, == - == in this case for the Neven code. == - ========================================================================= - -Neven Code -Copyright (C) 2008 The Android Open Source Project - -This product includes software developed as part of -The Android Open Source Project (http://source.android.com). |