1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17/* ---- includes ----------------------------------------------------------- */ 18 19#include "b_BasicEm/Functions.h" 20#include "b_BasicEm/Math.h" 21#include "b_BitFeatureEm/L01Tld1x1Ftr.h" 22#include "b_BitFeatureEm/Functions.h" 23 24/* ------------------------------------------------------------------------- */ 25 26/* ========================================================================= */ 27/* */ 28/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ 29/* */ 30/* ========================================================================= */ 31 32/* ------------------------------------------------------------------------- */ 33 34/* ========================================================================= */ 35/* */ 36/* ---- \ghd{ constructor / destructor } ----------------------------------- */ 37/* */ 38/* ========================================================================= */ 39 40/* ------------------------------------------------------------------------- */ 41 42void bbf_L01Tld1x1Ftr_init( struct bbs_Context* cpA, 43 struct bbf_L01Tld1x1Ftr* ptrA ) 44{ 45 bbf_Feature_init( cpA, &ptrA->baseE ); 46 ptrA->baseE.typeE = ( uint32 )bbf_FT_L01_TLD_1X1_FTR; 47 ptrA->baseE.vpActivityE = bbf_L01Tld1x1Ftr_activity; 48 bbs_UInt32Arr_init( cpA, &ptrA->dataArrE ); 49 ptrA->activityFactorE = 0; 50} 51 52/* ------------------------------------------------------------------------- */ 53 54void bbf_L01Tld1x1Ftr_exit( struct bbs_Context* cpA, 55 struct bbf_L01Tld1x1Ftr* ptrA ) 56{ 57 bbf_Feature_exit( cpA, &ptrA->baseE ); 58 bbs_UInt32Arr_exit( cpA, &ptrA->dataArrE ); 59 ptrA->activityFactorE = 0; 60} 61 62/* ------------------------------------------------------------------------- */ 63 64/* ========================================================================= */ 65/* */ 66/* ---- \ghd{ operators } -------------------------------------------------- */ 67/* */ 68/* ========================================================================= */ 69 70/* ------------------------------------------------------------------------- */ 71 72void bbf_L01Tld1x1Ftr_copy( struct bbs_Context* cpA, 73 struct bbf_L01Tld1x1Ftr* ptrA, 74 const struct bbf_L01Tld1x1Ftr* srcPtrA ) 75{ 76 bbf_Feature_copy( cpA, &ptrA->baseE, &srcPtrA->baseE ); 77 bbs_UInt32Arr_copy( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ); 78 ptrA->activityFactorE = srcPtrA->activityFactorE; 79} 80 81/* ------------------------------------------------------------------------- */ 82 83flag bbf_L01Tld1x1Ftr_equal( struct bbs_Context* cpA, 84 const struct bbf_L01Tld1x1Ftr* ptrA, 85 const struct bbf_L01Tld1x1Ftr* srcPtrA ) 86{ 87 if( !bbf_Feature_equal( cpA, &ptrA->baseE, &srcPtrA->baseE ) ) return FALSE; 88 if( !bbs_UInt32Arr_equal( cpA, &ptrA->dataArrE, &srcPtrA->dataArrE ) ) return FALSE; 89 if( ptrA->activityFactorE != srcPtrA->activityFactorE ) return FALSE; 90 return TRUE; 91} 92 93/* ------------------------------------------------------------------------- */ 94 95/* ========================================================================= */ 96/* */ 97/* ---- \ghd{ query functions } -------------------------------------------- */ 98/* */ 99/* ========================================================================= */ 100 101/* ------------------------------------------------------------------------- */ 102 103/* ========================================================================= */ 104/* */ 105/* ---- \ghd{ modify functions } ------------------------------------------- */ 106/* */ 107/* ========================================================================= */ 108 109/* ------------------------------------------------------------------------- */ 110 111/* ========================================================================= */ 112/* */ 113/* ---- \ghd{ I/O } -------------------------------------------------------- */ 114/* */ 115/* ========================================================================= */ 116 117/* ------------------------------------------------------------------------- */ 118 119uint32 bbf_L01Tld1x1Ftr_memSize( struct bbs_Context* cpA, 120 const struct bbf_L01Tld1x1Ftr* ptrA ) 121{ 122 uint32 memSizeL = bbs_SIZEOF16( uint32 ) + 123 bbs_SIZEOF16( uint32 ); /* version */ 124 125 memSizeL += bbf_Feature_memSize( cpA, &ptrA->baseE ); 126 memSizeL += bbs_UInt32Arr_memSize( cpA, &ptrA->dataArrE ); 127 memSizeL += bbs_SIZEOF16( ptrA->activityFactorE ); 128 129 return memSizeL; 130} 131 132/* ------------------------------------------------------------------------- */ 133 134uint32 bbf_L01Tld1x1Ftr_memWrite( struct bbs_Context* cpA, 135 const struct bbf_L01Tld1x1Ftr* ptrA, 136 uint16* memPtrA ) 137{ 138 uint32 memSizeL = bbf_L01Tld1x1Ftr_memSize( cpA, ptrA ); 139 memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); 140 memPtrA += bbs_memWriteUInt32( bbf_L01_TLD_1X1_FTR_VERSION, memPtrA ); 141 memPtrA += bbf_Feature_memWrite( cpA, &ptrA->baseE, memPtrA ); 142 memPtrA += bbs_UInt32Arr_memWrite( cpA, &ptrA->dataArrE, memPtrA ); 143 memPtrA += bbs_memWrite32( &ptrA->activityFactorE, memPtrA ); 144 return memSizeL; 145} 146 147/* ------------------------------------------------------------------------- */ 148 149uint32 bbf_L01Tld1x1Ftr_memRead( struct bbs_Context* cpA, 150 struct bbf_L01Tld1x1Ftr* ptrA, 151 const uint16* memPtrA, 152 struct bbs_MemTbl* mtpA ) 153{ 154 uint32 memSizeL, versionL; 155 struct bbs_MemTbl memTblL = *mtpA; 156 struct bbs_MemSeg* espL = bbs_MemTbl_fastestSegPtr( cpA, &memTblL, 0 ); 157 if( bbs_Context_error( cpA ) ) return 0; 158 memPtrA += bbs_memRead32( &memSizeL, memPtrA ); 159 memPtrA += bbs_memReadVersion32( cpA, &versionL, bbf_L01_TLD_1X1_FTR_VERSION, memPtrA ); 160 memPtrA += bbf_Feature_memRead( cpA, &ptrA->baseE, memPtrA ); 161 memPtrA += bbs_UInt32Arr_memRead( cpA, &ptrA->dataArrE, memPtrA, espL ); 162 memPtrA += bbs_memRead32( &ptrA->activityFactorE, memPtrA ); 163 if( memSizeL != bbf_L01Tld1x1Ftr_memSize( cpA, ptrA ) ) 164 { 165 bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bbf_L01Tld1x1Ftr_memRead( struct bem_ScanGradientMove* ptrA, const uint16* memPtrA ):\n" 166 "size mismatch" ); 167 return 0; 168 } 169 170 return memSizeL; 171} 172 173/* ------------------------------------------------------------------------- */ 174 175/* ========================================================================= */ 176/* */ 177/* ---- \ghd{ exec functions } --------------------------------------------- */ 178/* */ 179/* ========================================================================= */ 180 181/* ------------------------------------------------------------------------- */ 182 183int32 bbf_L01Tld1x1Ftr_activity( const struct bbf_Feature* ptrA, const uint32* patchA ) 184{ 185 const struct bbf_L01Tld1x1Ftr* ptrL = ( struct bbf_L01Tld1x1Ftr* )ptrA; 186 187 int32 iL; 188 189 const uint32* dataPtrL = ptrL->dataArrE.arrPtrE; 190 const uint32* patchL = patchA; 191 192 uint32 bsL = 0; 193 194 for( iL = ptrL->baseE.patchWidthE >> 2; iL > 0; iL-- ) 195 { 196 uint32 vL; 197 vL = ( patchL[ 0 ] ^ dataPtrL[ 0 ] ) & dataPtrL[ 1 ]; 198 bsL += bbf_BIT_SUM_32( vL ); 199 200 vL = ( patchL[ 1 ] ^ dataPtrL[ 2 ] ) & dataPtrL[ 3 ]; 201 bsL += bbf_BIT_SUM_32( vL ); 202 203 vL = ( patchL[ 2 ] ^ dataPtrL[ 4 ] ) & dataPtrL[ 5 ]; 204 bsL += bbf_BIT_SUM_32( vL ); 205 206 vL = ( patchL[ 3 ] ^ dataPtrL[ 6 ] ) & dataPtrL[ 7 ]; 207 bsL += bbf_BIT_SUM_32( vL ); 208 209 dataPtrL += 8; 210 patchL += 4; 211 } 212 213 return bsL * ptrL->activityFactorE; 214} 215 216/* ------------------------------------------------------------------------- */ 217 218/* ========================================================================= */ 219 220