Home | History | Annotate | Download | only in b_BitFeatureEm
      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 
     42 void 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 
     54 void 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 
     72 void 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 
     83 flag 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 
    119 uint32 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 
    134 uint32 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 
    149 uint32 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 
    183 int32 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