How to use Sum method of common Package

Best K6 code snippet using common.Sum

TEncRdCost.go

Source:TEncRdCost.go Github

copy

Full Screen

...118 w0 := wpCur.W119 offset := wpCur.Offset120 shift := uint(wpCur.Shift)121 round := wpCur.Round122 uiSum := uint(0)123 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)124 var iTemp int125 for ; iRows != 0; iRows-- {126 for n := 0; n < iCols; n++ {127 pred = TLibCommon.Pel(((w0*int(piCur[n]) + round) >> shift) + offset)128 iTemp = int(piOrg[n] - pred)129 uiSum += uint(iTemp*iTemp) >> uiShift130 }131 piOrg = piOrg[iStrideOrg:]132 piCur = piCur[iStrideCur:]133 }134 pcDtParam.uiComp = 255 // reset for DEBUG (assert test)135 return (uiSum)136}137func (this *TEncRdCostWeightPrediction) xGetSADw(pcDtParam *DistParam) uint {138 var pred TLibCommon.Pel139 piOrg := pcDtParam.pOrg140 piCur := pcDtParam.pCur141 iRows := pcDtParam.iRows142 iCols := pcDtParam.iCols143 iStrideCur := pcDtParam.iStrideCur144 iStrideOrg := pcDtParam.iStrideOrg145 uiComp := pcDtParam.uiComp146 //assert(uiComp<3);147 wpCur := (pcDtParam.wpCur[uiComp])148 w0 := wpCur.W149 offset := wpCur.Offset150 shift := uint(wpCur.Shift)151 round := wpCur.Round152 uiSum := uint(0)153 for ; iRows != 0; iRows-- {154 for n := 0; n < iCols; n++ {155 pred = TLibCommon.Pel(((w0*int(piCur[n]) + round) >> shift) + offset)156 uiSum += uint(TLibCommon.ABS(int(piOrg[n] - pred)).(int))157 }158 piOrg = piOrg[iStrideOrg:]159 piCur = piCur[iStrideCur:]160 }161 pcDtParam.uiComp = 255 // reset for DEBUG (assert test)162 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)163}164func (this *TEncRdCostWeightPrediction) xGetHADs4w(pcDtParam *DistParam) uint {165 piOrg := pcDtParam.pOrg166 piCur := pcDtParam.pCur167 iRows := pcDtParam.iRows168 iStrideCur := pcDtParam.iStrideCur169 iStrideOrg := pcDtParam.iStrideOrg170 iStep := pcDtParam.iStep171 var y int172 iOffsetOrg := iStrideOrg << 2173 iOffsetCur := iStrideCur << 2174 uiSum := uint(0)175 for y = 0; y < iRows; y += 4 {176 uiSum += this.xCalcHADs4x4w(piOrg, piCur, iStrideOrg, iStrideCur, iStep)177 piOrg = piOrg[iOffsetOrg:]178 piCur = piCur[iOffsetCur:]179 }180 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)181}182func (this *TEncRdCostWeightPrediction) xGetHADs8w(pcDtParam *DistParam) uint {183 piOrg := pcDtParam.pOrg184 piCur := pcDtParam.pCur185 iRows := pcDtParam.iRows186 iStrideCur := pcDtParam.iStrideCur187 iStrideOrg := pcDtParam.iStrideOrg188 iStep := pcDtParam.iStep189 var y int190 uiSum := uint(0)191 if iRows == 4 {192 uiSum += this.xCalcHADs4x4w(piOrg[0:], piCur, iStrideOrg, iStrideCur, iStep)193 uiSum += this.xCalcHADs4x4w(piOrg[4:], piCur[4*iStep:], iStrideOrg, iStrideCur, iStep)194 } else {195 iOffsetOrg := iStrideOrg << 3196 iOffsetCur := iStrideCur << 3197 for y = 0; y < iRows; y += 8 {198 uiSum += this.xCalcHADs8x8w(piOrg, piCur, iStrideOrg, iStrideCur, iStep)199 piOrg = piOrg[iOffsetOrg:]200 piCur = piCur[iOffsetCur:]201 }202 }203 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)204}205func (this *TEncRdCostWeightPrediction) xGetHADsw(pcDtParam *DistParam) uint {206 piOrg := pcDtParam.pOrg207 piCur := pcDtParam.pCur208 iRows := pcDtParam.iRows209 iCols := pcDtParam.iCols210 iStrideCur := pcDtParam.iStrideCur211 iStrideOrg := pcDtParam.iStrideOrg212 iStep := pcDtParam.iStep213 var x, y int214 uiComp := pcDtParam.uiComp215 //assert(uiComp<3);216 wpCur := (pcDtParam.wpCur[uiComp])217 this.xSetWPscale(wpCur.W, 0, wpCur.Shift, wpCur.Offset, wpCur.Round)218 uiSum := uint(0)219 if (iRows%8 == 0) && (iCols%8 == 0) {220 iOffsetOrg := iStrideOrg << 3221 iOffsetCur := iStrideCur << 3222 for y = 0; y < iRows; y += 8 {223 for x = 0; x < iCols; x += 8 {224 uiSum += this.xCalcHADs8x8w(piOrg[x:], piCur[x*iStep:], iStrideOrg, iStrideCur, iStep)225 }226 piOrg = piOrg[iOffsetOrg:]227 piCur = piCur[iOffsetCur:]228 }229 } else if (iRows%4 == 0) && (iCols%4 == 0) {230 iOffsetOrg := iStrideOrg << 2231 iOffsetCur := iStrideCur << 2232 for y = 0; y < iRows; y += 4 {233 for x = 0; x < iCols; x += 4 {234 uiSum += this.xCalcHADs4x4w(piOrg[x:], piCur[x*iStep:], iStrideOrg, iStrideCur, iStep)235 }236 piOrg = piOrg[iOffsetOrg:]237 piCur = piCur[iOffsetCur:]238 }239 } else {240 for y = 0; y < iRows; y += 2 {241 for x = 0; x < iCols; x += 2 {242 uiSum += this.xCalcHADs2x2w(piOrg[x:], piCur[x*iStep:], iStrideOrg, iStrideCur, iStep)243 }244 piOrg = piOrg[iStrideOrg:]245 piCur = piCur[iStrideCur:]246 }247 }248 this.m_xSetDone = false249 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)250}251func (this *TEncRdCostWeightPrediction) xCalcHADs2x2w(piOrg []TLibCommon.Pel, piCur []TLibCommon.Pel, iStrideOrg, iStrideCur, iStep int) uint {252 var satd int253 var diff, m [4]int254 //assert( m_xSetDone );255 var pred TLibCommon.Pel256 pred = TLibCommon.Pel(((this.m_w0*int(piCur[0*iStep]) + this.m_round) >> this.m_shift) + this.m_offset)257 diff[0] = int(piOrg[0] - pred)258 pred = TLibCommon.Pel(((this.m_w0*int(piCur[1*iStep]) + this.m_round) >> this.m_shift) + this.m_offset)259 diff[1] = int(piOrg[1] - pred)260 pred = TLibCommon.Pel(((this.m_w0*int(piCur[0*iStep+iStrideCur]) + this.m_round) >> this.m_shift) + this.m_offset)261 diff[2] = int(piOrg[iStrideOrg] - pred)262 pred = TLibCommon.Pel(((this.m_w0*int(piCur[1*iStep+iStrideCur]) + this.m_round) >> this.m_shift) + this.m_offset)263 diff[3] = int(piOrg[iStrideOrg+1] - pred)264 m[0] = diff[0] + diff[2]265 m[1] = diff[1] + diff[3]266 m[2] = diff[0] - diff[2]267 m[3] = diff[1] - diff[3]268 satd += TLibCommon.ABS(m[0] + m[1]).(int)269 satd += TLibCommon.ABS(m[0] - m[1]).(int)270 satd += TLibCommon.ABS(m[2] + m[3]).(int)271 satd += TLibCommon.ABS(m[2] - m[3]).(int)272 return uint(satd)273}274func (this *TEncRdCostWeightPrediction) xCalcHADs4x4w(piOrg []TLibCommon.Pel, piCur []TLibCommon.Pel, iStrideOrg, iStrideCur, iStep int) uint {275 var k, satd int276 var diff, m, d [16]int277 //assert( this.m_xSetDone );278 var pred TLibCommon.Pel279 for k = 0; k < 16; k += 4 {280 pred = TLibCommon.Pel(((this.m_w0*int(piCur[0*iStep]) + this.m_round) >> this.m_shift) + this.m_offset)281 diff[k+0] = int(piOrg[0] - pred)282 pred = TLibCommon.Pel(((this.m_w0*int(piCur[1*iStep]) + this.m_round) >> this.m_shift) + this.m_offset)283 diff[k+1] = int(piOrg[1] - pred)284 pred = TLibCommon.Pel(((this.m_w0*int(piCur[2*iStep]) + this.m_round) >> this.m_shift) + this.m_offset)285 diff[k+2] = int(piOrg[2] - pred)286 pred = TLibCommon.Pel(((this.m_w0*int(piCur[3*iStep]) + this.m_round) >> this.m_shift) + this.m_offset)287 diff[k+3] = int(piOrg[3] - pred)288 piCur = piCur[iStrideCur:]289 piOrg = piOrg[iStrideOrg:]290 }291 /*===== hadamard transform =====*/292 m[0] = diff[0] + diff[12]293 m[1] = diff[1] + diff[13]294 m[2] = diff[2] + diff[14]295 m[3] = diff[3] + diff[15]296 m[4] = diff[4] + diff[8]297 m[5] = diff[5] + diff[9]298 m[6] = diff[6] + diff[10]299 m[7] = diff[7] + diff[11]300 m[8] = diff[4] - diff[8]301 m[9] = diff[5] - diff[9]302 m[10] = diff[6] - diff[10]303 m[11] = diff[7] - diff[11]304 m[12] = diff[0] - diff[12]305 m[13] = diff[1] - diff[13]306 m[14] = diff[2] - diff[14]307 m[15] = diff[3] - diff[15]308 d[0] = m[0] + m[4]309 d[1] = m[1] + m[5]310 d[2] = m[2] + m[6]311 d[3] = m[3] + m[7]312 d[4] = m[8] + m[12]313 d[5] = m[9] + m[13]314 d[6] = m[10] + m[14]315 d[7] = m[11] + m[15]316 d[8] = m[0] - m[4]317 d[9] = m[1] - m[5]318 d[10] = m[2] - m[6]319 d[11] = m[3] - m[7]320 d[12] = m[12] - m[8]321 d[13] = m[13] - m[9]322 d[14] = m[14] - m[10]323 d[15] = m[15] - m[11]324 m[0] = d[0] + d[3]325 m[1] = d[1] + d[2]326 m[2] = d[1] - d[2]327 m[3] = d[0] - d[3]328 m[4] = d[4] + d[7]329 m[5] = d[5] + d[6]330 m[6] = d[5] - d[6]331 m[7] = d[4] - d[7]332 m[8] = d[8] + d[11]333 m[9] = d[9] + d[10]334 m[10] = d[9] - d[10]335 m[11] = d[8] - d[11]336 m[12] = d[12] + d[15]337 m[13] = d[13] + d[14]338 m[14] = d[13] - d[14]339 m[15] = d[12] - d[15]340 d[0] = m[0] + m[1]341 d[1] = m[0] - m[1]342 d[2] = m[2] + m[3]343 d[3] = m[3] - m[2]344 d[4] = m[4] + m[5]345 d[5] = m[4] - m[5]346 d[6] = m[6] + m[7]347 d[7] = m[7] - m[6]348 d[8] = m[8] + m[9]349 d[9] = m[8] - m[9]350 d[10] = m[10] + m[11]351 d[11] = m[11] - m[10]352 d[12] = m[12] + m[13]353 d[13] = m[12] - m[13]354 d[14] = m[14] + m[15]355 d[15] = m[15] - m[14]356 for k = 0; k < 16; k++ {357 satd += TLibCommon.ABS(d[k]).(int)358 }359 satd = ((satd + 1) >> 1)360 return uint(satd)361}362func (this *TEncRdCostWeightPrediction) xCalcHADs8x8w(piOrg []TLibCommon.Pel, piCur []TLibCommon.Pel, iStrideOrg, iStrideCur, iStep int) uint {363 var k, i, j, jj, sad int364 var diff [64]int365 var m1, m2, m3 [8][8]int366 iStep2 := iStep << 1367 iStep3 := iStep2 + iStep368 iStep4 := iStep3 + iStep369 iStep5 := iStep4 + iStep370 iStep6 := iStep5 + iStep371 iStep7 := iStep6 + iStep372 //assert( m_xSetDone );373 var pred TLibCommon.Pel374 for k = 0; k < 64; k += 8 {375 pred = TLibCommon.Pel(((this.m_w0*int(piCur[0]) + this.m_round) >> this.m_shift) + this.m_offset)376 diff[k+0] = int(piOrg[0] - pred)377 pred = TLibCommon.Pel(((this.m_w0*int(piCur[iStep]) + this.m_round) >> this.m_shift) + this.m_offset)378 diff[k+1] = int(piOrg[1] - pred)379 pred = TLibCommon.Pel(((this.m_w0*int(piCur[iStep2]) + this.m_round) >> this.m_shift) + this.m_offset)380 diff[k+2] = int(piOrg[2] - pred)381 pred = TLibCommon.Pel(((this.m_w0*int(piCur[iStep3]) + this.m_round) >> this.m_shift) + this.m_offset)382 diff[k+3] = int(piOrg[3] - pred)383 pred = TLibCommon.Pel(((this.m_w0*int(piCur[iStep4]) + this.m_round) >> this.m_shift) + this.m_offset)384 diff[k+4] = int(piOrg[4] - pred)385 pred = TLibCommon.Pel(((this.m_w0*int(piCur[iStep5]) + this.m_round) >> this.m_shift) + this.m_offset)386 diff[k+5] = int(piOrg[5] - pred)387 pred = TLibCommon.Pel(((this.m_w0*int(piCur[iStep6]) + this.m_round) >> this.m_shift) + this.m_offset)388 diff[k+6] = int(piOrg[6] - pred)389 pred = TLibCommon.Pel(((this.m_w0*int(piCur[iStep7]) + this.m_round) >> this.m_shift) + this.m_offset)390 diff[k+7] = int(piOrg[7] - pred)391 piCur = piCur[iStrideCur:]392 piOrg = piOrg[iStrideOrg:]393 }394 //horizontal395 for j = 0; j < 8; j++ {396 jj = j << 3397 m2[j][0] = diff[jj] + diff[jj+4]398 m2[j][1] = diff[jj+1] + diff[jj+5]399 m2[j][2] = diff[jj+2] + diff[jj+6]400 m2[j][3] = diff[jj+3] + diff[jj+7]401 m2[j][4] = diff[jj] - diff[jj+4]402 m2[j][5] = diff[jj+1] - diff[jj+5]403 m2[j][6] = diff[jj+2] - diff[jj+6]404 m2[j][7] = diff[jj+3] - diff[jj+7]405 m1[j][0] = m2[j][0] + m2[j][2]406 m1[j][1] = m2[j][1] + m2[j][3]407 m1[j][2] = m2[j][0] - m2[j][2]408 m1[j][3] = m2[j][1] - m2[j][3]409 m1[j][4] = m2[j][4] + m2[j][6]410 m1[j][5] = m2[j][5] + m2[j][7]411 m1[j][6] = m2[j][4] - m2[j][6]412 m1[j][7] = m2[j][5] - m2[j][7]413 m2[j][0] = m1[j][0] + m1[j][1]414 m2[j][1] = m1[j][0] - m1[j][1]415 m2[j][2] = m1[j][2] + m1[j][3]416 m2[j][3] = m1[j][2] - m1[j][3]417 m2[j][4] = m1[j][4] + m1[j][5]418 m2[j][5] = m1[j][4] - m1[j][5]419 m2[j][6] = m1[j][6] + m1[j][7]420 m2[j][7] = m1[j][6] - m1[j][7]421 }422 //vertical423 for i = 0; i < 8; i++ {424 m3[0][i] = m2[0][i] + m2[4][i]425 m3[1][i] = m2[1][i] + m2[5][i]426 m3[2][i] = m2[2][i] + m2[6][i]427 m3[3][i] = m2[3][i] + m2[7][i]428 m3[4][i] = m2[0][i] - m2[4][i]429 m3[5][i] = m2[1][i] - m2[5][i]430 m3[6][i] = m2[2][i] - m2[6][i]431 m3[7][i] = m2[3][i] - m2[7][i]432 m1[0][i] = m3[0][i] + m3[2][i]433 m1[1][i] = m3[1][i] + m3[3][i]434 m1[2][i] = m3[0][i] - m3[2][i]435 m1[3][i] = m3[1][i] - m3[3][i]436 m1[4][i] = m3[4][i] + m3[6][i]437 m1[5][i] = m3[5][i] + m3[7][i]438 m1[6][i] = m3[4][i] - m3[6][i]439 m1[7][i] = m3[5][i] - m3[7][i]440 m2[0][i] = m1[0][i] + m1[1][i]441 m2[1][i] = m1[0][i] - m1[1][i]442 m2[2][i] = m1[2][i] + m1[3][i]443 m2[3][i] = m1[2][i] - m1[3][i]444 m2[4][i] = m1[4][i] + m1[5][i]445 m2[5][i] = m1[4][i] - m1[5][i]446 m2[6][i] = m1[6][i] + m1[7][i]447 m2[7][i] = m1[6][i] - m1[7][i]448 }449 for j = 0; j < 8; j++ {450 for i = 0; i < 8; i++ {451 sad += TLibCommon.ABS(m2[j][i]).(int)452 }453 }454 sad = ((sad + 2) >> 2)455 return uint(sad)456}457/// RD cost computation class458type TEncRdCost struct {459 TEncRdCostWeightPrediction460 // for distortion461 m_iBlkWidth int462 m_iBlkHeight int463 //#if AMP_SAD464 m_afpDistortFunc [64]FpDistFunc // [eDFunc]465 //#else466 // FpDistFunc this.m_afpDistortFunc[33]; // [eDFunc]467 //#endif468 //#if WEIGHTED_CHROMA_DISTORTION469 m_cbDistortionWeight float64470 m_crDistortionWeight float64471 //#endif472 m_dLambda float64473 m_sqrtLambda float64474 m_uiLambdaMotionSAD uint475 m_uiLambdaMotionSSE uint476 m_dFrameLambda float64477 // for motion cost478 //#if FIX203479 m_mvPredictor TLibCommon.TComMv480 /*#else481 UInt* this.m_puiComponentCostOriginP;482 UInt* this.m_puiComponentCost;483 UInt* this.m_puiVerCost;484 UInt* this.m_puiHorCost;485 #endif*/486 m_uiCost uint487 m_iCostScale int488 /*#if !FIX203489 Int this.m_iSearchLimit;490 #endif*/491}492func NewTEncRdCost() *TEncRdCost {493 pRdCost := &TEncRdCost{}494 pRdCost.init()495 496 return pRdCost;497}498func (this *TEncRdCost) calcRdCost(uiBits, uiDistortion uint, bFlag bool, eDFunc TLibCommon.DFunc) float64 {499 dRdCost := float64(0.0)500 dLambda := float64(0.0)501 switch eDFunc {502 case TLibCommon.DF_SSE:503 //assert(0);504 case TLibCommon.DF_SAD:505 dLambda = float64(this.m_uiLambdaMotionSAD)506 case TLibCommon.DF_DEFAULT:507 dLambda = this.m_dLambda508 case TLibCommon.DF_SSE_FRAME:509 dLambda = this.m_dFrameLambda510 default:511 //assert (0);512 }513 if bFlag {514 // Intra8x8, Intra4x4 Block only...515 //#if SEQUENCE_LEVEL_LOSSLESS516 // dRdCost = (Double)(uiBits);517 //#else518 dRdCost = ((float64(uiDistortion)) + (float64(uiBits) * dLambda))519 //#endif520 } else {521 if eDFunc == TLibCommon.DF_SAD {522 dRdCost = (float64(uiDistortion) + float64(int(float64(uiBits)*dLambda+.5)>>16))523 dRdCost = float64(uint(math.Floor(dRdCost)))524 } else {525 //#if SEQUENCE_LEVEL_LOSSLESS526 // dRdCost = (Double)(uiBits);527 //#else528 dRdCost = (float64(uiDistortion) + float64(int(float64(uiBits)*dLambda+.5)))529 dRdCost = float64(uint(math.Floor(dRdCost)))530 //#endif531 }532 }533 return dRdCost534}535func (this *TEncRdCost) calcRdCost64(uiBits, uiDistortion uint64, bFlag bool, eDFunc TLibCommon.DFunc) float64 {536 dRdCost := float64(0.0)537 dLambda := float64(0.0)538 switch eDFunc {539 case TLibCommon.DF_SSE:540 // assert(0);541 case TLibCommon.DF_SAD:542 dLambda = float64(this.m_uiLambdaMotionSAD)543 case TLibCommon.DF_DEFAULT:544 dLambda = this.m_dLambda545 case TLibCommon.DF_SSE_FRAME:546 dLambda = this.m_dFrameLambda547 default:548 // assert (0);549 }550 if bFlag {551 // Intra8x8, Intra4x4 Block only...552 //#if SEQUENCE_LEVEL_LOSSLESS553 // dRdCost = (Double)(uiBits);554 //#else555 dRdCost = (float64(int64(uiDistortion)) + (float64(uiBits) * dLambda))556 //#endif557 } else {558 if eDFunc == TLibCommon.DF_SAD {559 dRdCost = (float64(int64(uiDistortion)) + float64(int(float64(uiBits)*dLambda+.5)>>16))560 dRdCost = float64(uint(math.Floor(dRdCost)))561 } else {562 //#if SEQUENCE_LEVEL_LOSSLESS563 // dRdCost = (Double)(uiBits);564 //#else565 dRdCost = (float64(int64(uiDistortion)) + float64(int(float64(uiBits)*dLambda+.5)))566 dRdCost = float64(uint(math.Floor(dRdCost)))567 //#endif568 }569 }570 return dRdCost571}572//#if WEIGHTED_CHROMA_DISTORTION573func (this *TEncRdCost) setCbDistortionWeight(cbDistortionWeight float64) {574 this.m_cbDistortionWeight = cbDistortionWeight575}576func (this *TEncRdCost) setCrDistortionWeight(crDistortionWeight float64) {577 this.m_crDistortionWeight = crDistortionWeight578}579//#endif580func (this *TEncRdCost) setLambda(dLambda float64) {581 this.m_dLambda = dLambda582 this.m_sqrtLambda = math.Sqrt(this.m_dLambda)583 this.m_uiLambdaMotionSAD = uint(math.Floor(65536.0 * this.m_sqrtLambda))584 this.m_uiLambdaMotionSSE = uint(math.Floor(65536.0 * this.m_dLambda))585}586func (this *TEncRdCost) setFrameLambda(dLambda float64) { this.m_dFrameLambda = dLambda }587func (this *TEncRdCost) getSqrtLambda() float64 { return this.m_sqrtLambda }588//#if RATE_CONTROL_LAMBDA_DOMAIN589func (this *TEncRdCost) getLambda() float64 { return this.m_dLambda }590//#endif591// Distortion Functions592func (this *TEncRdCost) init() {593 this.m_afpDistortFunc[0] = nil // for TLibCommon.DF_DEFAULT594 this.m_afpDistortFunc[1] = func(d *DistParam) uint { return this.xGetSSE(d) }595 this.m_afpDistortFunc[2] = func(d *DistParam) uint { return this.xGetSSE4(d) }596 this.m_afpDistortFunc[3] = func(d *DistParam) uint { return this.xGetSSE8(d) }597 this.m_afpDistortFunc[4] = func(d *DistParam) uint { return this.xGetSSE16(d) }598 this.m_afpDistortFunc[5] = func(d *DistParam) uint { return this.xGetSSE32(d) }599 this.m_afpDistortFunc[6] = func(d *DistParam) uint { return this.xGetSSE64(d) }600 this.m_afpDistortFunc[7] = func(d *DistParam) uint { return this.xGetSSE16N(d) }601 this.m_afpDistortFunc[8] = func(d *DistParam) uint { return this.xGetSAD(d) }602 this.m_afpDistortFunc[9] = func(d *DistParam) uint { return this.xGetSAD4(d) }603 this.m_afpDistortFunc[10] = func(d *DistParam) uint { return this.xGetSAD8(d) }604 this.m_afpDistortFunc[11] = func(d *DistParam) uint { return this.xGetSAD16(d) }605 this.m_afpDistortFunc[12] = func(d *DistParam) uint { return this.xGetSAD32(d) }606 this.m_afpDistortFunc[13] = func(d *DistParam) uint { return this.xGetSAD64(d) }607 this.m_afpDistortFunc[14] = func(d *DistParam) uint { return this.xGetSAD16N(d) }608 this.m_afpDistortFunc[15] = func(d *DistParam) uint { return this.xGetSAD(d) }609 this.m_afpDistortFunc[16] = func(d *DistParam) uint { return this.xGetSAD4(d) }610 this.m_afpDistortFunc[17] = func(d *DistParam) uint { return this.xGetSAD8(d) }611 this.m_afpDistortFunc[18] = func(d *DistParam) uint { return this.xGetSAD16(d) }612 this.m_afpDistortFunc[19] = func(d *DistParam) uint { return this.xGetSAD32(d) }613 this.m_afpDistortFunc[20] = func(d *DistParam) uint { return this.xGetSAD64(d) }614 this.m_afpDistortFunc[21] = func(d *DistParam) uint { return this.xGetSAD16N(d) }615 //#if AMP_SAD616 this.m_afpDistortFunc[43] = func(d *DistParam) uint { return this.xGetSAD12(d) }617 this.m_afpDistortFunc[44] = func(d *DistParam) uint { return this.xGetSAD24(d) }618 this.m_afpDistortFunc[45] = func(d *DistParam) uint { return this.xGetSAD48(d) }619 this.m_afpDistortFunc[46] = func(d *DistParam) uint { return this.xGetSAD12(d) }620 this.m_afpDistortFunc[47] = func(d *DistParam) uint { return this.xGetSAD24(d) }621 this.m_afpDistortFunc[48] = func(d *DistParam) uint { return this.xGetSAD48(d) }622 //#endif623 this.m_afpDistortFunc[22] = func(d *DistParam) uint { return this.xGetHADs(d) }624 this.m_afpDistortFunc[23] = func(d *DistParam) uint { return this.xGetHADs(d) }625 this.m_afpDistortFunc[24] = func(d *DistParam) uint { return this.xGetHADs(d) }626 this.m_afpDistortFunc[25] = func(d *DistParam) uint { return this.xGetHADs(d) }627 this.m_afpDistortFunc[26] = func(d *DistParam) uint { return this.xGetHADs(d) }628 this.m_afpDistortFunc[27] = func(d *DistParam) uint { return this.xGetHADs(d) }629 this.m_afpDistortFunc[28] = func(d *DistParam) uint { return this.xGetHADs(d) }630 /*#if !FIX203631 this.m_puiComponentCostOriginP = NULL;632 this.m_puiComponentCost = NULL;633 this.m_puiVerCost = NULL;634 this.m_puiHorCost = NULL;635 #endif*/636 this.m_uiCost = 0637 this.m_iCostScale = 0638 /*#if !FIX203639 this.m_iSearchLimit = 0xdeaddead;640 #endif*/641}642func (this *TEncRdCost) setDistParam1(uiBlkWidth, uiBlkHeight uint, eDFunc TLibCommon.DFunc, rcDistParam *DistParam) {643 // set Block Width / Height644 rcDistParam.iCols = int(uiBlkWidth)645 rcDistParam.iRows = int(uiBlkHeight)646 rcDistParam.DistFunc = this.m_afpDistortFunc[int(eDFunc)+int(TLibCommon.G_aucConvertToBit[rcDistParam.iCols])+1]647 // initialize648 rcDistParam.iSubShift = 0649}650func (this *TEncRdCost) setDistParam2(pcPatternKey *TLibCommon.TComPattern, piRefY []TLibCommon.Pel, iRefStride int, rcDistParam *DistParam) {651 // set Original & Curr Pointer / Stride652 rcDistParam.pOrg = pcPatternKey.GetROIY()653 rcDistParam.pCur = piRefY654 rcDistParam.iStrideOrg = pcPatternKey.GetPatternLStride()655 rcDistParam.iStrideCur = iRefStride656 // set Block Width / Height657 rcDistParam.iCols = pcPatternKey.GetROIYWidth()658 rcDistParam.iRows = pcPatternKey.GetROIYHeight()659 rcDistParam.DistFunc = this.m_afpDistortFunc[int(TLibCommon.DF_SAD)+int(TLibCommon.G_aucConvertToBit[rcDistParam.iCols])+1]660 //#if AMP_SAD661 if rcDistParam.iCols == 12 {662 rcDistParam.DistFunc = this.m_afpDistortFunc[43]663 } else if rcDistParam.iCols == 24 {664 rcDistParam.DistFunc = this.m_afpDistortFunc[44]665 } else if rcDistParam.iCols == 48 {666 rcDistParam.DistFunc = this.m_afpDistortFunc[45]667 }668 //#endif669 // initialize670 rcDistParam.iSubShift = 0671}672//#if NS_HAD673func (this *TEncRdCost) setDistParam3(pcPatternKey *TLibCommon.TComPattern, piRefY []TLibCommon.Pel, iRefStride, iStep int, rcDistParam *DistParam, bHADME bool) {674 // set Original & Curr Pointer / Stride675 rcDistParam.pOrg = pcPatternKey.GetROIY()676 rcDistParam.pCur = piRefY677 rcDistParam.iStrideOrg = pcPatternKey.GetPatternLStride()678 rcDistParam.iStrideCur = iRefStride * iStep679 // set Step for interpolated buffer680 rcDistParam.iStep = iStep681 // set Block Width / Height682 rcDistParam.iCols = pcPatternKey.GetROIYWidth()683 rcDistParam.iRows = pcPatternKey.GetROIYHeight()684 //#if NS_HAD685 // rcDistParam.bUseNSHAD = bUseNSHAD;686 //#endif687 // set distortion function688 if !bHADME {689 rcDistParam.DistFunc = this.m_afpDistortFunc[int(TLibCommon.DF_SADS)+int(TLibCommon.G_aucConvertToBit[rcDistParam.iCols])+1]690 //#if AMP_SAD691 if rcDistParam.iCols == 12 {692 rcDistParam.DistFunc = this.m_afpDistortFunc[46]693 } else if rcDistParam.iCols == 24 {694 rcDistParam.DistFunc = this.m_afpDistortFunc[47]695 } else if rcDistParam.iCols == 48 {696 rcDistParam.DistFunc = this.m_afpDistortFunc[48]697 }698 //#endif699 } else {700 rcDistParam.DistFunc = this.m_afpDistortFunc[int(TLibCommon.DF_HADS)+int(TLibCommon.G_aucConvertToBit[rcDistParam.iCols])+1]701 }702 // initialize703 rcDistParam.iSubShift = 0704}705func (this *TEncRdCost) setDistParam4(rcDP *DistParam, bitDepth int, p1 []TLibCommon.Pel, iStride1 int, p2 []TLibCommon.Pel, iStride2, iWidth, iHeight int, bHadamard bool) {706 rcDP.pOrg = p1707 rcDP.pCur = p2708 rcDP.iStrideOrg = iStride1709 rcDP.iStrideCur = iStride2710 rcDP.iCols = iWidth711 rcDP.iRows = iHeight712 rcDP.iStep = 1713 rcDP.iSubShift = 0714 rcDP.bitDepth = bitDepth715 if bHadamard {716 rcDP.DistFunc = this.m_afpDistortFunc[int(TLibCommon.DF_HADS)+int(TLibCommon.G_aucConvertToBit[iWidth])+1]717 } else {718 rcDP.DistFunc = this.m_afpDistortFunc[int(TLibCommon.DF_SADS)+int(TLibCommon.G_aucConvertToBit[iWidth])+1]719 }720 //#if NS_HAD721 // rcDP.bUseNSHAD = bUseNSHAD;722 //#endif723}724//#else725// Void setDistParam( TComPattern* pcPatternKey, TLibCommon.Pel* piRefY, Int iRefStride, Int iStep, DistParam& rcDistParam, Bool bHADME=false );726// Void setDistParam( DistParam& rcDP, Int bitDepth, TLibCommon.Pel* p1, Int iStride1, TLibCommon.Pel* p2, Int iStride2, Int iWidth, Int iHeight, Bool bHadamard = false );727//#endif728func (this *TEncRdCost) calcHAD(bitDepth int, pi0 []TLibCommon.Pel, iStride0 int, pi1 []TLibCommon.Pel, iStride1, iWidth, iHeight int) uint {729 uiSum := uint(0)730 var x, y int731 //fmt.Printf("iStride0=%d,iStride1=%d,iWidth=%d,iHeight=%d\n",iStride0, iStride1, iWidth, iHeight);732 if ((iWidth % 8) == 0) && ((iHeight % 8) == 0) {733 for y = 0; y < iHeight; y += 8 {734 for x = 0; x < iWidth; x += 8 {735 uiSum += this.xCalcHADs8x8(pi0[y*iStride0+x:], pi1[y*iStride1+x:], iStride0, iStride1, 1)736 }737 //pi0 = pi0[iStride0*8:]738 //pi1 = pi1[iStride1*8:]739 }740 } else if ((iWidth % 4) == 0) && ((iHeight % 4) == 0) {741 for y = 0; y < iHeight; y += 4 {742 for x = 0; x < iWidth; x += 4 {743 uiSum += this.xCalcHADs4x4(pi0[y*iStride0+x:], pi1[y*iStride1+x:], iStride0, iStride1, 1)744 }745 //pi0 = pi0[iStride0*4:]746 //pi1 = pi1[iStride1*4:]747 }748 } else {749 for y = 0; y < iHeight; y += 2 {750 for x = 0; x < iWidth; x += 2 {751 uiSum += this.xCalcHADs8x8(pi0[y*iStride0+x:], pi1[y*iStride1+x:], iStride0, iStride1, 1)752 }753 //pi0 = pi0[iStride0*2:]754 //pi1 = pi1[iStride1*2:]755 }756 }757 758 //fmt.Printf("uiSum=%d, iWidth=%d, iHeight=%d\n", uiSum, iWidth, iHeight);759 760 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(bitDepth-8)).(uint)761}762// for motion cost763//#if !FIX203764// Void initRateDistortionModel( Int iSubTLibCommon.PelSearchLimit );765// Void xUninit();766//#endif767func (this *TEncRdCost) xGetComponentBits(iVal int) uint {768 uiLength := uint(1)769 var uiTemp uint770 if iVal <= 0 {771 uiTemp = uint(-iVal<<1) + 1772 } else {773 uiTemp = uint(iVal << 1)774 }775 //assert ( uiTemp );776 for 1 != uiTemp {777 uiTemp >>= 1778 uiLength += 2779 }780 return uiLength781}782func (this *TEncRdCost) getMotionCost(bSad bool, iAdd int) {783 if bSad {784 this.m_uiCost = this.m_uiLambdaMotionSAD + uint(iAdd)785 } else {786 this.m_uiCost = this.m_uiLambdaMotionSSE + uint(iAdd)787 }788}789func (this *TEncRdCost) setPredictor(rcMv *TLibCommon.TComMv) {790 //#if FIX203791 this.m_mvPredictor = *rcMv792 //#else793 // this.m_puiHorCost = this.m_puiComponentCost - rcMv.getHor();794 // this.m_puiVerCost = this.m_puiComponentCost - rcMv.getVer();795 //#endif796}797func (this *TEncRdCost) setCostScale(iCostScale int) { this.m_iCostScale = iCostScale }798func (this *TEncRdCost) getCost2(x, y int) uint {799 //#if FIX203800 return this.m_uiCost * this.getBits(x, y) >> 16801 //#else802 // return (( this.m_uiCost * (this.m_puiHorCost[ x * (1<<this.m_iCostScale) ] + this.m_puiVerCost[ y * (1<<this.m_iCostScale) ]) ) >> 16);803 //#endif804}805func (this *TEncRdCost) getCost1(b uint) uint { return (this.m_uiCost * b) >> 16 }806func (this *TEncRdCost) getBits(x, y int) uint {807 //#if FIX203808 return this.xGetComponentBits((x<<uint(this.m_iCostScale))-int(this.m_mvPredictor.GetHor())) +809 this.xGetComponentBits((y<<uint(this.m_iCostScale))-int(this.m_mvPredictor.GetVer()))810 //#else811 // return this.m_puiHorCost[ x * (1<<this.m_iCostScale)] + this.m_puiVerCost[ y * (1<<this.m_iCostScale) ];812 //#endif813}814//#if WEIGHTED_CHROMA_DISTORTION815func (this *TEncRdCost) getDistPart(bitDepth int, piCur []TLibCommon.Pel, iCurStride int, piOrg []TLibCommon.Pel, iOrgStride int, uiBlkWidth, uiBlkHeight uint, eText TLibCommon.TextType, eDFunc TLibCommon.DFunc) uint {816 var cDtParam DistParam817 this.setDistParam1(uiBlkWidth, uiBlkHeight, eDFunc, &cDtParam)818 cDtParam.pOrg = piOrg819 cDtParam.pCur = piCur820 cDtParam.iStrideOrg = iOrgStride821 cDtParam.iStrideCur = iCurStride822 cDtParam.iStep = 1823 cDtParam.bApplyWeight = false824 cDtParam.uiComp = 255 // just for assert: to be sure it was set before use, since only values 0,1 or 2 are allowed.825 cDtParam.bitDepth = bitDepth826 //#if WEIGHTED_CHROMA_DISTORTION827 if eText == TLibCommon.TEXT_CHROMA_U {828 return uint(this.m_cbDistortionWeight * float64(cDtParam.DistFunc(&cDtParam)))829 } else if eText == TLibCommon.TEXT_CHROMA_V {830 return uint(this.m_crDistortionWeight * float64(cDtParam.DistFunc(&cDtParam)))831 }832 return cDtParam.DistFunc(&cDtParam)833 //#else834 // return cDtParam.DistFunc( &cDtParam );835 //#endif836}837//#else838// UInt getDistPart(Int bitDepth, TLibCommon.Pel* piCur, Int iCurStride, TLibCommon.Pel* piOrg, Int iOrgStride, UInt uiBlkWidth, UInt uiBlkHeight, TLibCommon.DFunc eDFunc = TLibCommon.DF_SSE );839//#endif840//#if RATE_CONTROL_LAMBDA_DOMAIN841func (this *TEncRdCost) getSADPart(bitDepth int, pelCur []TLibCommon.Pel, curStride int, pelOrg []TLibCommon.Pel, orgStride int, width, height int) uint {842 SAD := uint(0)843 shift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(bitDepth - 8)).(uint)844 for i := 0; i < height; i++ {845 for j := 0; j < width; j++ {846 SAD += uint(TLibCommon.ABS(int(pelCur[j]-pelOrg[j])).(int)) >> shift847 }848 pelCur = pelCur[curStride:]849 pelOrg = pelOrg[orgStride:]850 }851 return SAD852}853//#endif854func (this *TEncRdCost) xGetSSE(pcDtParam *DistParam) uint {855 if pcDtParam.bApplyWeight {856 return this.xGetSSEw(pcDtParam)857 }858 piOrg := pcDtParam.pOrg859 piCur := pcDtParam.pCur860 iRows := pcDtParam.iRows861 iCols := pcDtParam.iCols862 iStrideOrg := pcDtParam.iStrideOrg863 iStrideCur := pcDtParam.iStrideCur864 uiSum := uint(0)865 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)866 var iTemp int867 //for ; iRows != 0; iRows-- {868 for j:=0; j<iRows; j++ {869 jOrg := j*iStrideOrg;870 jCur := j*iStrideCur;871 872 for n := 0; n < iCols; n++ {873 iTemp = int(piOrg[jOrg+n] - piCur[jCur+n])874 uiSum += uint(iTemp*iTemp) >> uiShift875 }876 //piOrg = piOrg[iStrideOrg:]877 //piCur = piCur[iStrideCur:]878 }879 return uiSum880}881func (this *TEncRdCost) xGetSSE4(pcDtParam *DistParam) uint {882 if pcDtParam.bApplyWeight {883 //assert( pcDtParam.iCols == 4 );884 return this.xGetSSEw(pcDtParam)885 }886 piOrg := pcDtParam.pOrg887 piCur := pcDtParam.pCur888 iRows := pcDtParam.iRows889 iStrideOrg := pcDtParam.iStrideOrg890 iStrideCur := pcDtParam.iStrideCur891 uiSum := uint(0)892 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)893 var iTemp int894 //for ; iRows != 0; iRows-- {895 for j:=0; j<iRows; j++ {896 jOrg := j*iStrideOrg;897 jCur := j*iStrideCur;898 899 iTemp = int(piOrg[jOrg+0] - piCur[jCur+0])900 uiSum += uint(iTemp*iTemp) >> uiShift901 iTemp = int(piOrg[jOrg+1] - piCur[jCur+1])902 uiSum += uint(iTemp*iTemp) >> uiShift903 iTemp = int(piOrg[jOrg+2] - piCur[jCur+2])904 uiSum += uint(iTemp*iTemp) >> uiShift905 iTemp = int(piOrg[jOrg+3] - piCur[jCur+3])906 uiSum += uint(iTemp*iTemp) >> uiShift907 //piOrg = piOrg[iStrideOrg:]908 //piCur = piCur[iStrideCur:]909 }910 return (uiSum)911}912func (this *TEncRdCost) xGetSSE8(pcDtParam *DistParam) uint {913 if pcDtParam.bApplyWeight {914 //assert( pcDtParam.iCols == 8 );915 return this.xGetSSEw(pcDtParam)916 }917 piOrg := pcDtParam.pOrg918 piCur := pcDtParam.pCur919 iRows := pcDtParam.iRows920 iStrideOrg := pcDtParam.iStrideOrg921 iStrideCur := pcDtParam.iStrideCur922 uiSum := uint(0)923 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)924 var iTemp int925 //for ; iRows != 0; iRows-- {926 for j:=0; j<iRows; j++ {927 jOrg := j*iStrideOrg;928 jCur := j*iStrideCur;929 930 iTemp = int(piOrg[jOrg+0] - piCur[jCur+0])931 uiSum += uint(iTemp*iTemp) >> uiShift932 iTemp = int(piOrg[jOrg+1] - piCur[jCur+1])933 uiSum += uint(iTemp*iTemp) >> uiShift934 iTemp = int(piOrg[jOrg+2] - piCur[jCur+2])935 uiSum += uint(iTemp*iTemp) >> uiShift936 iTemp = int(piOrg[jOrg+3] - piCur[jCur+3])937 uiSum += uint(iTemp*iTemp) >> uiShift938 iTemp = int(piOrg[jOrg+4] - piCur[jCur+4])939 uiSum += uint(iTemp*iTemp) >> uiShift940 iTemp = int(piOrg[jOrg+5] - piCur[jCur+5])941 uiSum += uint(iTemp*iTemp) >> uiShift942 iTemp = int(piOrg[jOrg+6] - piCur[jCur+6])943 uiSum += uint(iTemp*iTemp) >> uiShift944 iTemp = int(piOrg[jOrg+7] - piCur[jCur+7])945 uiSum += uint(iTemp*iTemp) >> uiShift946 //piOrg = piOrg[iStrideOrg:]947 //piCur = piCur[iStrideCur:]948 }949 return (uiSum)950}951func (this *TEncRdCost) xGetSSE16(pcDtParam *DistParam) uint {952 if pcDtParam.bApplyWeight {953 //assert( pcDtParam.iCols == 16 );954 return this.xGetSSEw(pcDtParam)955 }956 piOrg := pcDtParam.pOrg957 piCur := pcDtParam.pCur958 iRows := pcDtParam.iRows959 iStrideOrg := pcDtParam.iStrideOrg960 iStrideCur := pcDtParam.iStrideCur961 uiSum := uint(0)962 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)963 var iTemp int964 //for ; iRows != 0; iRows-- {965 for j:=0; j<iRows; j++ {966 jOrg := j*iStrideOrg;967 jCur := j*iStrideCur;968 969 iTemp = int(piOrg[jOrg+0] - piCur[jCur+0])970 uiSum += uint(iTemp*iTemp) >> uiShift971 iTemp = int(piOrg[jOrg+1] - piCur[jCur+1])972 uiSum += uint(iTemp*iTemp) >> uiShift973 iTemp = int(piOrg[jOrg+2] - piCur[jCur+2])974 uiSum += uint(iTemp*iTemp) >> uiShift975 iTemp = int(piOrg[jOrg+3] - piCur[jCur+3])976 uiSum += uint(iTemp*iTemp) >> uiShift977 iTemp = int(piOrg[jOrg+4] - piCur[jCur+4])978 uiSum += uint(iTemp*iTemp) >> uiShift979 iTemp = int(piOrg[jOrg+5] - piCur[jCur+5])980 uiSum += uint(iTemp*iTemp) >> uiShift981 iTemp = int(piOrg[jOrg+6] - piCur[jCur+6])982 uiSum += uint(iTemp*iTemp) >> uiShift983 iTemp = int(piOrg[jOrg+7] - piCur[jCur+7])984 uiSum += uint(iTemp*iTemp) >> uiShift985 iTemp = int(piOrg[jOrg+8] - piCur[jCur+8])986 uiSum += uint(iTemp*iTemp) >> uiShift987 iTemp = int(piOrg[jOrg+9] - piCur[jCur+9])988 uiSum += uint(iTemp*iTemp) >> uiShift989 iTemp = int(piOrg[jOrg+10] - piCur[jCur+10])990 uiSum += uint(iTemp*iTemp) >> uiShift991 iTemp = int(piOrg[jOrg+11] - piCur[jCur+11])992 uiSum += uint(iTemp*iTemp) >> uiShift993 iTemp = int(piOrg[jOrg+12] - piCur[jCur+12])994 uiSum += uint(iTemp*iTemp) >> uiShift995 iTemp = int(piOrg[jOrg+13] - piCur[jCur+13])996 uiSum += uint(iTemp*iTemp) >> uiShift997 iTemp = int(piOrg[jOrg+14] - piCur[jCur+14])998 uiSum += uint(iTemp*iTemp) >> uiShift999 iTemp = int(piOrg[jOrg+15] - piCur[jCur+15])1000 uiSum += uint(iTemp*iTemp) >> uiShift1001 //piOrg = piOrg[iStrideOrg:]1002 //piCur = piCur[iStrideCur:]1003 }1004 return (uiSum)1005}1006func (this *TEncRdCost) xGetSSE32(pcDtParam *DistParam) uint {1007 if pcDtParam.bApplyWeight {1008 //assert( pcDtParam.iCols == 32 );1009 return this.xGetSSEw(pcDtParam)1010 }1011 piOrg := pcDtParam.pOrg1012 piCur := pcDtParam.pCur1013 iRows := pcDtParam.iRows1014 iStrideOrg := pcDtParam.iStrideOrg1015 iStrideCur := pcDtParam.iStrideCur1016 uiSum := uint(0)1017 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)1018 var iTemp int1019 //for ; iRows != 0; iRows-- {1020 for j:=0; j<iRows; j++ {1021 jOrg := j*iStrideOrg;1022 jCur := j*iStrideCur;1023 1024 iTemp = int(piOrg[jOrg+0] - piCur[jCur+0])1025 uiSum += uint(iTemp*iTemp) >> uiShift1026 iTemp = int(piOrg[jOrg+1] - piCur[jCur+1])1027 uiSum += uint(iTemp*iTemp) >> uiShift1028 iTemp = int(piOrg[jOrg+2] - piCur[jCur+2])1029 uiSum += uint(iTemp*iTemp) >> uiShift1030 iTemp = int(piOrg[jOrg+3] - piCur[jCur+3])1031 uiSum += uint(iTemp*iTemp) >> uiShift1032 iTemp = int(piOrg[jOrg+4] - piCur[jCur+4])1033 uiSum += uint(iTemp*iTemp) >> uiShift1034 iTemp = int(piOrg[jOrg+5] - piCur[jCur+5])1035 uiSum += uint(iTemp*iTemp) >> uiShift1036 iTemp = int(piOrg[jOrg+6] - piCur[jCur+6])1037 uiSum += uint(iTemp*iTemp) >> uiShift1038 iTemp = int(piOrg[jOrg+7] - piCur[jCur+7])1039 uiSum += uint(iTemp*iTemp) >> uiShift1040 iTemp = int(piOrg[jOrg+8] - piCur[jCur+8])1041 uiSum += uint(iTemp*iTemp) >> uiShift1042 iTemp = int(piOrg[jOrg+9] - piCur[jCur+9])1043 uiSum += uint(iTemp*iTemp) >> uiShift1044 iTemp = int(piOrg[jOrg+10] - piCur[jCur+10])1045 uiSum += uint(iTemp*iTemp) >> uiShift1046 iTemp = int(piOrg[jOrg+11] - piCur[jCur+11])1047 uiSum += uint(iTemp*iTemp) >> uiShift1048 iTemp = int(piOrg[jOrg+12] - piCur[jCur+12])1049 uiSum += uint(iTemp*iTemp) >> uiShift1050 iTemp = int(piOrg[jOrg+13] - piCur[jCur+13])1051 uiSum += uint(iTemp*iTemp) >> uiShift1052 iTemp = int(piOrg[jOrg+14] - piCur[jCur+14])1053 uiSum += uint(iTemp*iTemp) >> uiShift1054 iTemp = int(piOrg[jOrg+15] - piCur[jCur+15])1055 uiSum += uint(iTemp*iTemp) >> uiShift1056 iTemp = int(piOrg[jOrg+16] - piCur[jCur+16])1057 uiSum += uint(iTemp*iTemp) >> uiShift1058 iTemp = int(piOrg[jOrg+17] - piCur[jCur+17])1059 uiSum += uint(iTemp*iTemp) >> uiShift1060 iTemp = int(piOrg[jOrg+18] - piCur[jCur+18])1061 uiSum += uint(iTemp*iTemp) >> uiShift1062 iTemp = int(piOrg[jOrg+19] - piCur[jCur+19])1063 uiSum += uint(iTemp*iTemp) >> uiShift1064 iTemp = int(piOrg[jOrg+20] - piCur[jCur+20])1065 uiSum += uint(iTemp*iTemp) >> uiShift1066 iTemp = int(piOrg[jOrg+21] - piCur[jCur+21])1067 uiSum += uint(iTemp*iTemp) >> uiShift1068 iTemp = int(piOrg[jOrg+22] - piCur[jCur+22])1069 uiSum += uint(iTemp*iTemp) >> uiShift1070 iTemp = int(piOrg[jOrg+23] - piCur[jCur+23])1071 uiSum += uint(iTemp*iTemp) >> uiShift1072 iTemp = int(piOrg[jOrg+24] - piCur[jCur+24])1073 uiSum += uint(iTemp*iTemp) >> uiShift1074 iTemp = int(piOrg[jOrg+25] - piCur[jCur+25])1075 uiSum += uint(iTemp*iTemp) >> uiShift1076 iTemp = int(piOrg[jOrg+26] - piCur[jCur+26])1077 uiSum += uint(iTemp*iTemp) >> uiShift1078 iTemp = int(piOrg[jOrg+27] - piCur[jCur+27])1079 uiSum += uint(iTemp*iTemp) >> uiShift1080 iTemp = int(piOrg[jOrg+28] - piCur[jCur+28])1081 uiSum += uint(iTemp*iTemp) >> uiShift1082 iTemp = int(piOrg[jOrg+29] - piCur[jCur+29])1083 uiSum += uint(iTemp*iTemp) >> uiShift1084 iTemp = int(piOrg[jOrg+30] - piCur[jCur+30])1085 uiSum += uint(iTemp*iTemp) >> uiShift1086 iTemp = int(piOrg[jOrg+31] - piCur[jCur+31])1087 uiSum += uint(iTemp*iTemp) >> uiShift1088 //piOrg = piOrg[iStrideOrg:]1089 //piCur = piCur[iStrideCur:]1090 }1091 return (uiSum)1092}1093func (this *TEncRdCost) xGetSSE64(pcDtParam *DistParam) uint {1094 if pcDtParam.bApplyWeight {1095 //assert( pcDtParam.iCols == 64 );1096 return this.xGetSSEw(pcDtParam)1097 }1098 piOrg := pcDtParam.pOrg1099 piCur := pcDtParam.pCur1100 iRows := pcDtParam.iRows1101 iStrideOrg := pcDtParam.iStrideOrg1102 iStrideCur := pcDtParam.iStrideCur1103 uiSum := uint(0)1104 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)1105 var iTemp int1106 //for ; iRows != 0; iRows-- {1107 for j:=0; j<iRows; j++ {1108 jOrg := j*iStrideOrg;1109 jCur := j*iStrideCur;1110 1111 iTemp = int(piOrg[jOrg+0] - piCur[jCur+0])1112 uiSum += uint(iTemp*iTemp) >> uiShift1113 iTemp = int(piOrg[jOrg+1] - piCur[jCur+1])1114 uiSum += uint(iTemp*iTemp) >> uiShift1115 iTemp = int(piOrg[jOrg+2] - piCur[jCur+2])1116 uiSum += uint(iTemp*iTemp) >> uiShift1117 iTemp = int(piOrg[jOrg+3] - piCur[jCur+3])1118 uiSum += uint(iTemp*iTemp) >> uiShift1119 iTemp = int(piOrg[jOrg+4] - piCur[jCur+4])1120 uiSum += uint(iTemp*iTemp) >> uiShift1121 iTemp = int(piOrg[jOrg+5] - piCur[jCur+5])1122 uiSum += uint(iTemp*iTemp) >> uiShift1123 iTemp = int(piOrg[jOrg+6] - piCur[jCur+6])1124 uiSum += uint(iTemp*iTemp) >> uiShift1125 iTemp = int(piOrg[jOrg+7] - piCur[jCur+7])1126 uiSum += uint(iTemp*iTemp) >> uiShift1127 iTemp = int(piOrg[jOrg+8] - piCur[jCur+8])1128 uiSum += uint(iTemp*iTemp) >> uiShift1129 iTemp = int(piOrg[jOrg+9] - piCur[jCur+9])1130 uiSum += uint(iTemp*iTemp) >> uiShift1131 iTemp = int(piOrg[jOrg+10] - piCur[jCur+10])1132 uiSum += uint(iTemp*iTemp) >> uiShift1133 iTemp = int(piOrg[jOrg+11] - piCur[jCur+11])1134 uiSum += uint(iTemp*iTemp) >> uiShift1135 iTemp = int(piOrg[jOrg+12] - piCur[jCur+12])1136 uiSum += uint(iTemp*iTemp) >> uiShift1137 iTemp = int(piOrg[jOrg+13] - piCur[jCur+13])1138 uiSum += uint(iTemp*iTemp) >> uiShift1139 iTemp = int(piOrg[jOrg+14] - piCur[jCur+14])1140 uiSum += uint(iTemp*iTemp) >> uiShift1141 iTemp = int(piOrg[jOrg+15] - piCur[jCur+15])1142 uiSum += uint(iTemp*iTemp) >> uiShift1143 iTemp = int(piOrg[jOrg+16] - piCur[jCur+16])1144 uiSum += uint(iTemp*iTemp) >> uiShift1145 iTemp = int(piOrg[jOrg+17] - piCur[jCur+17])1146 uiSum += uint(iTemp*iTemp) >> uiShift1147 iTemp = int(piOrg[jOrg+18] - piCur[jCur+18])1148 uiSum += uint(iTemp*iTemp) >> uiShift1149 iTemp = int(piOrg[jOrg+19] - piCur[jCur+19])1150 uiSum += uint(iTemp*iTemp) >> uiShift1151 iTemp = int(piOrg[jOrg+20] - piCur[jCur+20])1152 uiSum += uint(iTemp*iTemp) >> uiShift1153 iTemp = int(piOrg[jOrg+21] - piCur[jCur+21])1154 uiSum += uint(iTemp*iTemp) >> uiShift1155 iTemp = int(piOrg[jOrg+22] - piCur[jCur+22])1156 uiSum += uint(iTemp*iTemp) >> uiShift1157 iTemp = int(piOrg[jOrg+23] - piCur[jCur+23])1158 uiSum += uint(iTemp*iTemp) >> uiShift1159 iTemp = int(piOrg[jOrg+24] - piCur[jCur+24])1160 uiSum += uint(iTemp*iTemp) >> uiShift1161 iTemp = int(piOrg[jOrg+25] - piCur[jCur+25])1162 uiSum += uint(iTemp*iTemp) >> uiShift1163 iTemp = int(piOrg[jOrg+26] - piCur[jCur+26])1164 uiSum += uint(iTemp*iTemp) >> uiShift1165 iTemp = int(piOrg[jOrg+27] - piCur[jCur+27])1166 uiSum += uint(iTemp*iTemp) >> uiShift1167 iTemp = int(piOrg[jOrg+28] - piCur[jCur+28])1168 uiSum += uint(iTemp*iTemp) >> uiShift1169 iTemp = int(piOrg[jOrg+29] - piCur[jCur+29])1170 uiSum += uint(iTemp*iTemp) >> uiShift1171 iTemp = int(piOrg[jOrg+30] - piCur[jCur+30])1172 uiSum += uint(iTemp*iTemp) >> uiShift1173 iTemp = int(piOrg[jOrg+31] - piCur[jCur+31])1174 uiSum += uint(iTemp*iTemp) >> uiShift1175 iTemp = int(piOrg[jOrg+32] - piCur[jCur+32])1176 uiSum += uint(iTemp*iTemp) >> uiShift1177 iTemp = int(piOrg[jOrg+33] - piCur[jCur+33])1178 uiSum += uint(iTemp*iTemp) >> uiShift1179 iTemp = int(piOrg[jOrg+34] - piCur[jCur+34])1180 uiSum += uint(iTemp*iTemp) >> uiShift1181 iTemp = int(piOrg[jOrg+35] - piCur[jCur+35])1182 uiSum += uint(iTemp*iTemp) >> uiShift1183 iTemp = int(piOrg[jOrg+36] - piCur[jCur+36])1184 uiSum += uint(iTemp*iTemp) >> uiShift1185 iTemp = int(piOrg[jOrg+37] - piCur[jCur+37])1186 uiSum += uint(iTemp*iTemp) >> uiShift1187 iTemp = int(piOrg[jOrg+38] - piCur[jCur+38])1188 uiSum += uint(iTemp*iTemp) >> uiShift1189 iTemp = int(piOrg[jOrg+39] - piCur[jCur+39])1190 uiSum += uint(iTemp*iTemp) >> uiShift1191 iTemp = int(piOrg[jOrg+40] - piCur[jCur+40])1192 uiSum += uint(iTemp*iTemp) >> uiShift1193 iTemp = int(piOrg[jOrg+41] - piCur[jCur+41])1194 uiSum += uint(iTemp*iTemp) >> uiShift1195 iTemp = int(piOrg[jOrg+42] - piCur[jCur+42])1196 uiSum += uint(iTemp*iTemp) >> uiShift1197 iTemp = int(piOrg[jOrg+43] - piCur[jCur+43])1198 uiSum += uint(iTemp*iTemp) >> uiShift1199 iTemp = int(piOrg[jOrg+44] - piCur[jCur+44])1200 uiSum += uint(iTemp*iTemp) >> uiShift1201 iTemp = int(piOrg[jOrg+45] - piCur[jCur+45])1202 uiSum += uint(iTemp*iTemp) >> uiShift1203 iTemp = int(piOrg[jOrg+46] - piCur[jCur+46])1204 uiSum += uint(iTemp*iTemp) >> uiShift1205 iTemp = int(piOrg[jOrg+47] - piCur[jCur+47])1206 uiSum += uint(iTemp*iTemp) >> uiShift1207 iTemp = int(piOrg[jOrg+48] - piCur[jCur+48])1208 uiSum += uint(iTemp*iTemp) >> uiShift1209 iTemp = int(piOrg[jOrg+49] - piCur[jCur+49])1210 uiSum += uint(iTemp*iTemp) >> uiShift1211 iTemp = int(piOrg[jOrg+50] - piCur[jCur+50])1212 uiSum += uint(iTemp*iTemp) >> uiShift1213 iTemp = int(piOrg[jOrg+51] - piCur[jCur+51])1214 uiSum += uint(iTemp*iTemp) >> uiShift1215 iTemp = int(piOrg[jOrg+52] - piCur[jCur+52])1216 uiSum += uint(iTemp*iTemp) >> uiShift1217 iTemp = int(piOrg[jOrg+53] - piCur[jCur+53])1218 uiSum += uint(iTemp*iTemp) >> uiShift1219 iTemp = int(piOrg[jOrg+54] - piCur[jCur+54])1220 uiSum += uint(iTemp*iTemp) >> uiShift1221 iTemp = int(piOrg[jOrg+55] - piCur[jCur+55])1222 uiSum += uint(iTemp*iTemp) >> uiShift1223 iTemp = int(piOrg[jOrg+56] - piCur[jCur+56])1224 uiSum += uint(iTemp*iTemp) >> uiShift1225 iTemp = int(piOrg[jOrg+57] - piCur[jCur+57])1226 uiSum += uint(iTemp*iTemp) >> uiShift1227 iTemp = int(piOrg[jOrg+58] - piCur[jCur+58])1228 uiSum += uint(iTemp*iTemp) >> uiShift1229 iTemp = int(piOrg[jOrg+59] - piCur[jCur+59])1230 uiSum += uint(iTemp*iTemp) >> uiShift1231 iTemp = int(piOrg[jOrg+60] - piCur[jCur+60])1232 uiSum += uint(iTemp*iTemp) >> uiShift1233 iTemp = int(piOrg[jOrg+61] - piCur[jCur+61])1234 uiSum += uint(iTemp*iTemp) >> uiShift1235 iTemp = int(piOrg[jOrg+62] - piCur[jCur+62])1236 uiSum += uint(iTemp*iTemp) >> uiShift1237 iTemp = int(piOrg[jOrg+63] - piCur[jCur+63])1238 uiSum += uint(iTemp*iTemp) >> uiShift1239 //piOrg = piOrg[iStrideOrg:]1240 //piCur = piCur[iStrideCur:]1241 }1242 return (uiSum)1243}1244func (this *TEncRdCost) xGetSSE16N(pcDtParam *DistParam) uint {1245 if pcDtParam.bApplyWeight {1246 return this.xGetSSEw(pcDtParam)1247 }1248 piOrg := pcDtParam.pOrg1249 piCur := pcDtParam.pCur1250 iRows := pcDtParam.iRows1251 iCols := pcDtParam.iCols1252 iStrideOrg := pcDtParam.iStrideOrg1253 iStrideCur := pcDtParam.iStrideCur1254 uiSum := uint(0)1255 uiShift := TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8) << 1).(uint)1256 var iTemp int1257 //for ; iRows != 0; iRows-- {1258 for j:=0; j<iRows; j++ {1259 jOrg := j*iStrideOrg;1260 jCur := j*iStrideCur;1261 1262 for n := 0; n < iCols; n += 16 {1263 iTemp = int(piOrg[jOrg+n+0] - piCur[jCur+n+0])1264 uiSum += uint(iTemp*iTemp) >> uiShift1265 iTemp = int(piOrg[jOrg+n+1] - piCur[jCur+n+1])1266 uiSum += uint(iTemp*iTemp) >> uiShift1267 iTemp = int(piOrg[jOrg+n+2] - piCur[jCur+n+2])1268 uiSum += uint(iTemp*iTemp) >> uiShift1269 iTemp = int(piOrg[jOrg+n+3] - piCur[jCur+n+3])1270 uiSum += uint(iTemp*iTemp) >> uiShift1271 iTemp = int(piOrg[jOrg+n+4] - piCur[jCur+n+4])1272 uiSum += uint(iTemp*iTemp) >> uiShift1273 iTemp = int(piOrg[jOrg+n+5] - piCur[jCur+n+5])1274 uiSum += uint(iTemp*iTemp) >> uiShift1275 iTemp = int(piOrg[jOrg+n+6] - piCur[jCur+n+6])1276 uiSum += uint(iTemp*iTemp) >> uiShift1277 iTemp = int(piOrg[jOrg+n+7] - piCur[jCur+n+7])1278 uiSum += uint(iTemp*iTemp) >> uiShift1279 iTemp = int(piOrg[jOrg+n+8] - piCur[jCur+n+8])1280 uiSum += uint(iTemp*iTemp) >> uiShift1281 iTemp = int(piOrg[jOrg+n+9] - piCur[jCur+n+9])1282 uiSum += uint(iTemp*iTemp) >> uiShift1283 iTemp = int(piOrg[jOrg+n+10] - piCur[jCur+n+10])1284 uiSum += uint(iTemp*iTemp) >> uiShift1285 iTemp = int(piOrg[jOrg+n+11] - piCur[jCur+n+11])1286 uiSum += uint(iTemp*iTemp) >> uiShift1287 iTemp = int(piOrg[jOrg+n+12] - piCur[jCur+n+12])1288 uiSum += uint(iTemp*iTemp) >> uiShift1289 iTemp = int(piOrg[jOrg+n+13] - piCur[jCur+n+13])1290 uiSum += uint(iTemp*iTemp) >> uiShift1291 iTemp = int(piOrg[jOrg+n+14] - piCur[jCur+n+14])1292 uiSum += uint(iTemp*iTemp) >> uiShift1293 iTemp = int(piOrg[jOrg+n+15] - piCur[jCur+n+15])1294 uiSum += uint(iTemp*iTemp) >> uiShift1295 }1296 //piOrg = piCur[jCur+iStrideOrg:]1297 //piCur = piCur[iStrideCur:]1298 }1299 return (uiSum)1300}1301func (this *TEncRdCost) xGetSAD(pcDtParam *DistParam) uint {1302 if pcDtParam.bApplyWeight {1303 return this.xGetSADw(pcDtParam)1304 }1305 piOrg := pcDtParam.pOrg1306 piCur := pcDtParam.pCur1307 iRows := pcDtParam.iRows1308 iCols := pcDtParam.iCols1309 iStrideCur := pcDtParam.iStrideCur1310 iStrideOrg := pcDtParam.iStrideOrg1311 uiSum := uint(0)1312 //for ; iRows != 0; iRows-- {1313 for j:=0; j<iRows; j++ {1314 jOrg := j*iStrideOrg;1315 jCur := j*iStrideCur;1316 for n := 0; n < iCols; n++ {1317 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n] - piCur[jCur+n])).(int))1318 }1319 //piOrg = piOrg[iStrideOrg:]1320 //piCur = piCur[iStrideCur:]1321 }1322 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1323}1324func (this *TEncRdCost) xGetSAD4(pcDtParam *DistParam) uint {1325 if pcDtParam.bApplyWeight {1326 return this.xGetSADw(pcDtParam)1327 }1328 piOrg := pcDtParam.pOrg1329 piCur := pcDtParam.pCur1330 iRows := pcDtParam.iRows1331 iSubShift := pcDtParam.iSubShift1332 iSubStep := (1 << uint(iSubShift))1333 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1334 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1335 uiSum := uint(0)1336 //for ; iRows != 0; iRows -= iSubStep {1337 for j:=0; j<iRows; j+=iSubStep {1338 jOrg := j*iStrideOrg;1339 jCur := j*iStrideCur;1340 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1341 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1342 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1343 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1344 //piOrg = piOrg[iStrideOrg:]1345 //piCur = piCur[iStrideCur:]1346 }1347 uiSum <<= uint(iSubShift)1348 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1349}1350func (this *TEncRdCost) xGetSAD8(pcDtParam *DistParam) uint {1351 if pcDtParam.bApplyWeight {1352 return this.xGetSADw(pcDtParam)1353 }1354 piOrg := pcDtParam.pOrg1355 piCur := pcDtParam.pCur1356 iRows := pcDtParam.iRows1357 iSubShift := pcDtParam.iSubShift1358 iSubStep := (1 << uint(iSubShift))1359 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1360 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1361 uiSum := uint(0)1362 //for ; iRows != 0; iRows -= iSubStep {1363 for j:=0; j<iRows; j+=iSubStep {1364 jOrg := j*iStrideOrg;1365 jCur := j*iStrideCur;1366 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1367 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1368 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1369 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1370 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+4] - piCur[jCur+4])).(int))1371 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+5] - piCur[jCur+5])).(int))1372 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+6] - piCur[jCur+6])).(int))1373 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+7] - piCur[jCur+7])).(int))1374 //piOrg = piOrg[iStrideOrg:]1375 //piCur = piCur[iStrideCur:]1376 }1377 uiSum <<= uint(iSubShift)1378 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1379}1380func (this *TEncRdCost) xGetSAD16(pcDtParam *DistParam) uint {1381 if pcDtParam.bApplyWeight {1382 return this.xGetSADw(pcDtParam)1383 }1384 piOrg := pcDtParam.pOrg1385 piCur := pcDtParam.pCur1386 iRows := pcDtParam.iRows1387 iSubShift := pcDtParam.iSubShift1388 iSubStep := (1 << uint(iSubShift))1389 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1390 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1391 uiSum := uint(0)1392 //for ; iRows != 0; iRows -= iSubStep {1393 for j:=0; j<iRows; j+=iSubStep {1394 jOrg := j*iStrideOrg;1395 jCur := j*iStrideCur;1396 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1397 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1398 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1399 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1400 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+4] - piCur[jCur+4])).(int))1401 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+5] - piCur[jCur+5])).(int))1402 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+6] - piCur[jCur+6])).(int))1403 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+7] - piCur[jCur+7])).(int))1404 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+8] - piCur[jCur+8])).(int))1405 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+9] - piCur[jCur+9])).(int))1406 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+10] - piCur[jCur+10])).(int))1407 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+11] - piCur[jCur+11])).(int))1408 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+12] - piCur[jCur+12])).(int))1409 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+13] - piCur[jCur+13])).(int))1410 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+14] - piCur[jCur+14])).(int))1411 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+15] - piCur[jCur+15])).(int))1412 //piOrg = piOrg[iStrideOrg:]1413 //piCur = piCur[iStrideCur:]1414 }1415 uiSum <<= uint(iSubShift)1416 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1417}1418func (this *TEncRdCost) xGetSAD32(pcDtParam *DistParam) uint {1419 if pcDtParam.bApplyWeight {1420 return this.xGetSADw(pcDtParam)1421 }1422 piOrg := pcDtParam.pOrg1423 piCur := pcDtParam.pCur1424 iRows := pcDtParam.iRows1425 iSubShift := pcDtParam.iSubShift1426 iSubStep := (1 << uint(iSubShift))1427 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1428 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1429 uiSum := uint(0)1430 //for ; iRows != 0; iRows -= iSubStep {1431 for j:=0; j<iRows; j+=iSubStep {1432 jOrg := j*iStrideOrg;1433 jCur := j*iStrideCur;1434 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1435 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1436 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1437 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1438 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+4] - piCur[jCur+4])).(int))1439 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+5] - piCur[jCur+5])).(int))1440 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+6] - piCur[jCur+6])).(int))1441 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+7] - piCur[jCur+7])).(int))1442 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+8] - piCur[jCur+8])).(int))1443 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+9] - piCur[jCur+9])).(int))1444 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+10] - piCur[jCur+10])).(int))1445 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+11] - piCur[jCur+11])).(int))1446 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+12] - piCur[jCur+12])).(int))1447 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+13] - piCur[jCur+13])).(int))1448 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+14] - piCur[jCur+14])).(int))1449 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+15] - piCur[jCur+15])).(int))1450 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+16] - piCur[jCur+16])).(int))1451 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+17] - piCur[jCur+17])).(int))1452 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+18] - piCur[jCur+18])).(int))1453 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+19] - piCur[jCur+19])).(int))1454 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+20] - piCur[jCur+20])).(int))1455 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+21] - piCur[jCur+21])).(int))1456 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+22] - piCur[jCur+22])).(int))1457 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+23] - piCur[jCur+23])).(int))1458 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+24] - piCur[jCur+24])).(int))1459 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+25] - piCur[jCur+25])).(int))1460 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+26] - piCur[jCur+26])).(int))1461 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+27] - piCur[jCur+27])).(int))1462 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+28] - piCur[jCur+28])).(int))1463 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+29] - piCur[jCur+29])).(int))1464 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+30] - piCur[jCur+30])).(int))1465 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+31] - piCur[jCur+31])).(int))1466 //piOrg = piOrg[iStrideOrg:]1467 //piCur = piCur[iStrideCur:]1468 }1469 uiSum <<= uint(iSubShift)1470 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1471}1472func (this *TEncRdCost) xGetSAD64(pcDtParam *DistParam) uint {1473 if pcDtParam.bApplyWeight {1474 return this.xGetSADw(pcDtParam)1475 }1476 piOrg := pcDtParam.pOrg1477 piCur := pcDtParam.pCur1478 iRows := pcDtParam.iRows1479 iSubShift := pcDtParam.iSubShift1480 iSubStep := (1 << uint(iSubShift))1481 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1482 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1483 uiSum := uint(0)1484 //for ; iRows != 0; iRows -= iSubStep {1485 for j:=0; j<iRows; j+=iSubStep {1486 jOrg := j*iStrideOrg;1487 jCur := j*iStrideCur;1488 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1489 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1490 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1491 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1492 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+4] - piCur[jCur+4])).(int))1493 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+5] - piCur[jCur+5])).(int))1494 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+6] - piCur[jCur+6])).(int))1495 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+7] - piCur[jCur+7])).(int))1496 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+8] - piCur[jCur+8])).(int))1497 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+9] - piCur[jCur+9])).(int))1498 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+10] - piCur[jCur+10])).(int))1499 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+11] - piCur[jCur+11])).(int))1500 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+12] - piCur[jCur+12])).(int))1501 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+13] - piCur[jCur+13])).(int))1502 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+14] - piCur[jCur+14])).(int))1503 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+15] - piCur[jCur+15])).(int))1504 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+16] - piCur[jCur+16])).(int))1505 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+17] - piCur[jCur+17])).(int))1506 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+18] - piCur[jCur+18])).(int))1507 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+19] - piCur[jCur+19])).(int))1508 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+20] - piCur[jCur+20])).(int))1509 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+21] - piCur[jCur+21])).(int))1510 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+22] - piCur[jCur+22])).(int))1511 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+23] - piCur[jCur+23])).(int))1512 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+24] - piCur[jCur+24])).(int))1513 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+25] - piCur[jCur+25])).(int))1514 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+26] - piCur[jCur+26])).(int))1515 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+27] - piCur[jCur+27])).(int))1516 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+28] - piCur[jCur+28])).(int))1517 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+29] - piCur[jCur+29])).(int))1518 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+30] - piCur[jCur+30])).(int))1519 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+31] - piCur[jCur+31])).(int))1520 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+32] - piCur[jCur+32])).(int))1521 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+33] - piCur[jCur+33])).(int))1522 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+34] - piCur[jCur+34])).(int))1523 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+35] - piCur[jCur+35])).(int))1524 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+36] - piCur[jCur+36])).(int))1525 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+37] - piCur[jCur+37])).(int))1526 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+38] - piCur[jCur+38])).(int))1527 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+39] - piCur[jCur+39])).(int))1528 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+40] - piCur[jCur+40])).(int))1529 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+41] - piCur[jCur+41])).(int))1530 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+42] - piCur[jCur+42])).(int))1531 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+43] - piCur[jCur+43])).(int))1532 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+44] - piCur[jCur+44])).(int))1533 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+45] - piCur[jCur+45])).(int))1534 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+46] - piCur[jCur+46])).(int))1535 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+47] - piCur[jCur+47])).(int))1536 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+48] - piCur[jCur+48])).(int))1537 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+49] - piCur[jCur+49])).(int))1538 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+50] - piCur[jCur+50])).(int))1539 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+51] - piCur[jCur+51])).(int))1540 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+52] - piCur[jCur+52])).(int))1541 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+53] - piCur[jCur+53])).(int))1542 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+54] - piCur[jCur+54])).(int))1543 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+55] - piCur[jCur+55])).(int))1544 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+56] - piCur[jCur+56])).(int))1545 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+57] - piCur[jCur+57])).(int))1546 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+58] - piCur[jCur+58])).(int))1547 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+59] - piCur[jCur+59])).(int))1548 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+60] - piCur[jCur+60])).(int))1549 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+61] - piCur[jCur+61])).(int))1550 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+62] - piCur[jCur+62])).(int))1551 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+63] - piCur[jCur+63])).(int))1552 //piOrg = piOrg[iStrideOrg:]1553 //piCur = piCur[iStrideCur:]1554 }1555 uiSum <<= uint(iSubShift)1556 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1557}1558func (this *TEncRdCost) xGetSAD16N(pcDtParam *DistParam) uint {1559 piOrg := pcDtParam.pOrg1560 piCur := pcDtParam.pCur1561 iRows := pcDtParam.iRows1562 iCols := pcDtParam.iCols1563 iSubShift := pcDtParam.iSubShift1564 iSubStep := (1 << uint(iSubShift))1565 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1566 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1567 uiSum := uint(0)1568 //for ; iRows != 0; iRows -= iSubStep {1569 for j:=0; j<iRows; j+=iSubStep {1570 jOrg := j*iStrideOrg;1571 jCur := j*iStrideCur;1572 for n := 0; n < iCols; n += 16 {1573 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+0] - piCur[jCur+n+0])).(int))1574 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+1] - piCur[jCur+n+1])).(int))1575 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+2] - piCur[jCur+n+2])).(int))1576 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+3] - piCur[jCur+n+3])).(int))1577 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+4] - piCur[jCur+n+4])).(int))1578 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+5] - piCur[jCur+n+5])).(int))1579 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+6] - piCur[jCur+n+6])).(int))1580 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+7] - piCur[jCur+n+7])).(int))1581 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+8] - piCur[jCur+n+8])).(int))1582 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+9] - piCur[jCur+n+9])).(int))1583 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+10] - piCur[jCur+n+10])).(int))1584 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+11] - piCur[jCur+n+11])).(int))1585 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+12] - piCur[jCur+n+12])).(int))1586 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+13] - piCur[jCur+n+13])).(int))1587 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+14] - piCur[jCur+n+14])).(int))1588 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+n+15] - piCur[jCur+n+15])).(int))1589 }1590 //piOrg = piOrg[iStrideOrg:]1591 //piCur = piCur[iStrideCur:]1592 }1593 uiSum <<= uint(iSubShift)1594 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1595}1596//#if AMP_SAD1597func (this *TEncRdCost) xGetSAD12(pcDtParam *DistParam) uint {1598 if pcDtParam.bApplyWeight {1599 return this.xGetSADw(pcDtParam)1600 }1601 piOrg := pcDtParam.pOrg1602 piCur := pcDtParam.pCur1603 iRows := pcDtParam.iRows1604 iSubShift := pcDtParam.iSubShift1605 iSubStep := (1 << uint(iSubShift))1606 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1607 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1608 uiSum := uint(0)1609 //for ; iRows != 0; iRows -= iSubStep {1610 for j:=0; j<iRows; j+=iSubStep {1611 jOrg := j*iStrideOrg;1612 jCur := j*iStrideCur;1613 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1614 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1615 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1616 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1617 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+4] - piCur[jCur+4])).(int))1618 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+5] - piCur[jCur+5])).(int))1619 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+6] - piCur[jCur+6])).(int))1620 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+7] - piCur[jCur+7])).(int))1621 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+8] - piCur[jCur+8])).(int))1622 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+9] - piCur[jCur+9])).(int))1623 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+10] - piCur[jCur+10])).(int))1624 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+11] - piCur[jCur+11])).(int))1625 //piOrg = piOrg[iStrideOrg:]1626 //piCur = piCur[iStrideCur:]1627 }1628 uiSum <<= uint(iSubShift)1629 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1630}1631func (this *TEncRdCost) xGetSAD24(pcDtParam *DistParam) uint {1632 if pcDtParam.bApplyWeight {1633 return this.xGetSADw(pcDtParam)1634 }1635 piOrg := pcDtParam.pOrg1636 piCur := pcDtParam.pCur1637 iRows := pcDtParam.iRows1638 iSubShift := pcDtParam.iSubShift1639 iSubStep := (1 << uint(iSubShift))1640 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1641 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1642 uiSum := uint(0)1643 //for ; iRows != 0; iRows -= iSubStep {1644 for j:=0; j<iRows; j+=iSubStep {1645 jOrg := j*iStrideOrg;1646 jCur := j*iStrideCur;1647 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1648 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1649 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1650 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1651 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+4] - piCur[jCur+4])).(int))1652 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+5] - piCur[jCur+5])).(int))1653 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+6] - piCur[jCur+6])).(int))1654 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+7] - piCur[jCur+7])).(int))1655 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+8] - piCur[jCur+8])).(int))1656 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+9] - piCur[jCur+9])).(int))1657 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+10] - piCur[jCur+10])).(int))1658 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+11] - piCur[jCur+11])).(int))1659 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+12] - piCur[jCur+12])).(int))1660 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+13] - piCur[jCur+13])).(int))1661 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+14] - piCur[jCur+14])).(int))1662 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+15] - piCur[jCur+15])).(int))1663 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+16] - piCur[jCur+16])).(int))1664 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+17] - piCur[jCur+17])).(int))1665 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+18] - piCur[jCur+18])).(int))1666 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+19] - piCur[jCur+19])).(int))1667 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+20] - piCur[jCur+20])).(int))1668 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+21] - piCur[jCur+21])).(int))1669 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+22] - piCur[jCur+22])).(int))1670 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+23] - piCur[jCur+23])).(int))1671 //piOrg = piOrg[iStrideOrg:]1672 //piCur = piCur[iStrideCur:]1673 }1674 uiSum <<= uint(iSubShift)1675 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1676}1677func (this *TEncRdCost) xGetSAD48(pcDtParam *DistParam) uint {1678 if pcDtParam.bApplyWeight {1679 return this.xGetSADw(pcDtParam)1680 }1681 piOrg := pcDtParam.pOrg1682 piCur := pcDtParam.pCur1683 iRows := pcDtParam.iRows1684 iSubShift := pcDtParam.iSubShift1685 iSubStep := (1 << uint(iSubShift))1686 iStrideCur := pcDtParam.iStrideCur;// * iSubStep1687 iStrideOrg := pcDtParam.iStrideOrg;// * iSubStep1688 uiSum := uint(0)1689 //for ; iRows != 0; iRows -= iSubStep {1690 for j:=0; j<iRows; j+=iSubStep {1691 jOrg := j*iStrideOrg;1692 jCur := j*iStrideCur;1693 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+0] - piCur[jCur+0])).(int))1694 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+1] - piCur[jCur+1])).(int))1695 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+2] - piCur[jCur+2])).(int))1696 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+3] - piCur[jCur+3])).(int))1697 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+4] - piCur[jCur+4])).(int))1698 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+5] - piCur[jCur+5])).(int))1699 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+6] - piCur[jCur+6])).(int))1700 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+7] - piCur[jCur+7])).(int))1701 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+8] - piCur[jCur+8])).(int))1702 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+9] - piCur[jCur+9])).(int))1703 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+10] - piCur[jCur+10])).(int))1704 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+11] - piCur[jCur+11])).(int))1705 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+12] - piCur[jCur+12])).(int))1706 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+13] - piCur[jCur+13])).(int))1707 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+14] - piCur[jCur+14])).(int))1708 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+15] - piCur[jCur+15])).(int))1709 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+16] - piCur[jCur+16])).(int))1710 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+17] - piCur[jCur+17])).(int))1711 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+18] - piCur[jCur+18])).(int))1712 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+19] - piCur[jCur+19])).(int))1713 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+20] - piCur[jCur+20])).(int))1714 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+21] - piCur[jCur+21])).(int))1715 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+22] - piCur[jCur+22])).(int))1716 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+23] - piCur[jCur+23])).(int))1717 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+24] - piCur[jCur+24])).(int))1718 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+25] - piCur[jCur+25])).(int))1719 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+26] - piCur[jCur+26])).(int))1720 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+27] - piCur[jCur+27])).(int))1721 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+28] - piCur[jCur+28])).(int))1722 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+29] - piCur[jCur+29])).(int))1723 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+30] - piCur[jCur+30])).(int))1724 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+31] - piCur[jCur+31])).(int))1725 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+32] - piCur[jCur+32])).(int))1726 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+33] - piCur[jCur+33])).(int))1727 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+34] - piCur[jCur+34])).(int))1728 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+35] - piCur[jCur+35])).(int))1729 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+36] - piCur[jCur+36])).(int))1730 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+37] - piCur[jCur+37])).(int))1731 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+38] - piCur[jCur+38])).(int))1732 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+39] - piCur[jCur+39])).(int))1733 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+40] - piCur[jCur+40])).(int))1734 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+41] - piCur[jCur+41])).(int))1735 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+42] - piCur[jCur+42])).(int))1736 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+43] - piCur[jCur+43])).(int))1737 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+44] - piCur[jCur+44])).(int))1738 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+45] - piCur[jCur+45])).(int))1739 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+46] - piCur[jCur+46])).(int))1740 uiSum += uint(TLibCommon.ABS(int(piOrg[jOrg+47] - piCur[jCur+47])).(int))1741 //piOrg = piOrg[iStrideOrg:]1742 //piCur = piCur[iStrideCur:]1743 }1744 uiSum <<= uint(iSubShift)1745 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1746}1747//#endif1748func (this *TEncRdCost) xGetHADs4(pcDtParam *DistParam) uint {1749 if pcDtParam.bApplyWeight {1750 return this.xGetHADs4w(pcDtParam)1751 }1752 piOrg := pcDtParam.pOrg1753 piCur := pcDtParam.pCur1754 iRows := pcDtParam.iRows1755 iStrideCur := pcDtParam.iStrideCur1756 iStrideOrg := pcDtParam.iStrideOrg1757 iStep := pcDtParam.iStep1758 //var y int1759 //iOffsetOrg := iStrideOrg << 21760 //iOffsetCur := iStrideCur << 21761 uiSum := uint(0)1762 for y := 0; y < iRows; y += 4 {1763 uiSum += this.xCalcHADs4x4(piOrg[y*iStrideOrg:], piCur[y*iStrideCur:], iStrideOrg, iStrideCur, iStep)1764 //piOrg = piOrg[iOffsetOrg:]1765 //piCur = piCur[iOffsetCur:]1766 }1767 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1768}1769func (this *TEncRdCost) xGetHADs8(pcDtParam *DistParam) uint {1770 if pcDtParam.bApplyWeight {1771 return this.xGetHADs8w(pcDtParam)1772 }1773 piOrg := pcDtParam.pOrg1774 piCur := pcDtParam.pCur1775 iRows := pcDtParam.iRows1776 iStrideCur := pcDtParam.iStrideCur1777 iStrideOrg := pcDtParam.iStrideOrg1778 iStep := pcDtParam.iStep1779 //var y int1780 uiSum := uint(0)1781 if iRows == 4 {1782 uiSum += this.xCalcHADs4x4(piOrg[0:], piCur, iStrideOrg, iStrideCur, iStep)1783 uiSum += this.xCalcHADs4x4(piOrg[4:], piCur[4*iStep:], iStrideOrg, iStrideCur, iStep)1784 } else {1785 //iOffsetOrg := iStrideOrg << 31786 //iOffsetCur := iStrideCur << 31787 for y := 0; y < iRows; y += 8 {1788 uiSum += this.xCalcHADs8x8(piOrg[y*iStrideOrg:], piCur[y*iStrideCur:], iStrideOrg, iStrideCur, iStep)1789 //piOrg = piOrg[iOffsetOrg:]1790 //piCur = piCur[iOffsetCur:]1791 }1792 }1793 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1794}1795func (this *TEncRdCost) xGetHADs(pcDtParam *DistParam) uint {1796 if pcDtParam.bApplyWeight {1797 return this.xGetHADsw(pcDtParam)1798 }1799 piOrg := pcDtParam.pOrg1800 piCur := pcDtParam.pCur1801 iRows := pcDtParam.iRows1802 iCols := pcDtParam.iCols1803 iStrideCur := pcDtParam.iStrideCur1804 iStrideOrg := pcDtParam.iStrideOrg1805 iStep := pcDtParam.iStep1806 //var x, y int1807 uiSum := uint(0)1808 //#if NS_HAD1809 // if( ( ( iRows % 8 == 0) && (iCols % 8 == 0) && ( iRows == iCols ) ) || ( ( iRows % 8 == 0 ) && (iCols % 8 == 0) && !pcDtParam.bUseNSHAD ) )1810 //#else1811 if (iRows%8 == 0) && (iCols%8 == 0) {1812 //#endif1813 //iOffsetOrg := iStrideOrg << 31814 //iOffsetCur := iStrideCur << 31815 for y := 0; y < iRows; y += 8 {1816 for x := 0; x < iCols; x += 8 {1817 uiSum += this.xCalcHADs8x8(piOrg[y*iStrideOrg+x:], piCur[y*iStrideCur+x*iStep:], iStrideOrg, iStrideCur, iStep)1818 }1819 //piOrg = piOrg[iOffsetOrg:]1820 //piCur = piCur[iOffsetCur:]1821 }1822 /*#if NS_HAD1823 else if ( ( iCols > 8 ) && ( iCols > iRows ) && pcDtParam.bUseNSHAD )1824 {1825 Int iOffsetOrg = iStrideOrg<<2;1826 Int iOffsetCur = iStrideCur<<2;1827 for ( y=0; y<iRows; y+= 4 )1828 {1829 for ( x=0; x<iCols; x+= 16 )1830 {1831 uiSum += xCalcHADs16x4( piOrg[x:], piCur[x*iStep:], iStrideOrg, iStrideCur, iStep );1832 }1833 piOrg =piOrg[ iOffsetOrg:];1834 piCur =piCur[ iOffsetCur:];1835 }1836 }1837 else if ( ( iRows > 8 ) && ( iCols < iRows ) && pcDtParam.bUseNSHAD )1838 {1839 Int iOffsetOrg = iStrideOrg<<4;1840 Int iOffsetCur = iStrideCur<<4;1841 for ( y=0; y<iRows; y+= 16 )1842 {1843 for ( x=0; x<iCols; x+= 4 )1844 {1845 uiSum += xCalcHADs4x16( piOrg[x:], piCur[x*iStep:], iStrideOrg, iStrideCur, iStep );1846 }1847 piOrg =piOrg[ iOffsetOrg:];1848 piCur =piCur[ iOffsetCur:];1849 }1850 }1851 #endif*/1852 } else if (iRows%4 == 0) && (iCols%4 == 0) {1853 //iOffsetOrg := iStrideOrg << 21854 //iOffsetCur := iStrideCur << 21855 for y := 0; y < iRows; y += 4 {1856 for x := 0; x < iCols; x += 4 {1857 uiSum += this.xCalcHADs4x4(piOrg[y*iStrideOrg+x:], piCur[y*iStrideCur+x*iStep:], iStrideOrg, iStrideCur, iStep)1858 }1859 //piOrg = piOrg[iOffsetOrg:]1860 //piCur = piCur[iOffsetCur:]1861 }1862 } else if (iRows%2 == 0) && (iCols%2 == 0) {1863 //iOffsetOrg := iStrideOrg << 11864 //iOffsetCur := iStrideCur << 11865 for y := 0; y < iRows; y += 2 {1866 for x := 0; x < iCols; x += 2 {1867 uiSum += this.xCalcHADs2x2(piOrg[y*iStrideOrg+x:], piCur[y*iStrideCur+x*iStep:], iStrideOrg, iStrideCur, iStep)1868 }1869 //piOrg = piOrg[iOffsetOrg:]1870 //piCur = piCur[iOffsetCur:]1871 }1872 } else {1873 // assert(false);1874 }1875 return uiSum >> TLibCommon.DISTORTION_PRECISION_ADJUSTMENT(uint(pcDtParam.bitDepth-8)).(uint)1876}1877func (this *TEncRdCost) xCalcHADs2x2(piOrg []TLibCommon.Pel, piCur []TLibCommon.Pel, iStrideOrg, iStrideCur, iStep int) uint {1878 satd := 01879 var diff, m [4]int1880 // assert( iStep == 1 );1881 diff[0] = int(piOrg[0] - piCur[0])1882 diff[1] = int(piOrg[1] - piCur[1])1883 diff[2] = int(piOrg[iStrideOrg+0] - piCur[iStrideCur+0])1884 diff[3] = int(piOrg[iStrideOrg+1] - piCur[iStrideCur+1])1885 m[0] = diff[0] + diff[2]1886 m[1] = diff[1] + diff[3]1887 m[2] = diff[0] - diff[2]1888 m[3] = diff[1] - diff[3]1889 satd += int(TLibCommon.ABS(m[0] + m[1]).(int))...

Full Screen

Full Screen

type_writer.go

Source:type_writer.go Github

copy

Full Screen

...293 }294 }295 return tw.sum, nil296}297func (tw *TypeWriter) Sum() int64 {298 return tw.sum299}...

Full Screen

Full Screen

main.go

Source:main.go Github

copy

Full Screen

...11 file, _ := os.Open("input.txt")12 data, _ := ioutil.ReadAll(file)13 buf := bytes.NewBuffer(data)14 p1, p2 := sumAnswers(buf)15 fmt.Printf("Sum of all answers: %v\n", p1)16 fmt.Printf("Sum of common answers: %v\n", p2)17}18func sumAnswers(data *bytes.Buffer) (int, int) {19 scanner := bufio.NewScanner(data)20 sumAllAnswers, sumCommonAnswers := 0, 021 answersSet := []string{}22 for scanner.Scan() {23 line := scanner.Text()24 if line == "" {25 sumAllAnswers += countAnswers(answersSet)26 sumCommonAnswers += countCommonAnswers(answersSet)27 answersSet = []string{}28 } else {29 answersSet = append(answersSet, line)30 }...

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import "fmt"2func main() {3 fmt.Println(common.Sum(2, 3))4}5import "fmt"6import "github.com/rohitmathur/golang-common/common"7func main() {8 fmt.Println(common.Sum(2, 3))9}10import "fmt"11import "github.com/rohitmathur/golang-common/common"12func main() {13 fmt.Println(common.Sum(2, 3))14}15import "fmt"16import "github.com/rohitmathur/golang-common/common"17func main() {18 fmt.Println(common.Sum(2, 3))19}20import "fmt"21import "github.com/rohitmathur/golang-common/common"22func main() {23 fmt.Println(common.Sum(2, 3))24}25import "fmt"26import "github.com/rohitmathur/golang-common/common"27func main() {28 fmt.Println(common.Sum(2, 3))29}30import "fmt"31import "github.com/rohitmathur/golang-common/common"32func main() {33 fmt.Println(common.Sum(2, 3))34}35import "fmt"36import "github.com/rohitmathur/golang-common/common"37func main() {38 fmt.Println(common.Sum(2, 3))39}40import "fmt"41import "github.com/rohitmathur/golang-common/common"42func main() {43 fmt.Println(common.Sum(2, 3))44}45import "fmt"46import "github.com/rohitmathur/golang-common/common"47func main() {

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println(common.Sum(1, 2))4}5import (6func main() {7 fmt.Println(common.Sum(1, 2))8}9func Sum(a, b int) int {10}

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1func main() {2 fmt.Println(common.Sum(1, 2))3}4func Sum(a, b int) int {5}6This is because the common package is not imported in the main package. To import the common package, you need to add the following line to the top of the 1.go file:7import "common"8To import a package from a different directory, you need to add the following line to the top of the 1.go file:9import "path/to/package"10In the above code, you need to replace the path/to/package with the actual path of the package that you want to import. For example, if you want to import the common package from the directory /home/user/golang, you need to add the following line to the top of the 1.go file:11import "/home/user/golang/common"

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println("Sum of a and b is:", c.Sum())4}5import (6func main() {7 fmt.Println("Sum of a and b is:", c.Sum())8}

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println("Sum of 2 and 3 = ", sum.Sum(2, 3))4}5import (6func main() {7 fmt.Println("Sum of 2 and 3 = ", sum.Sum(2, 3))8}9Example 3: Using Sum method of common class in another package with import path10import (11func main() {12 fmt.Println("Sum of 2 and 3 = ", sum.Sum(2, 3))13}14Example 4: Using Sum method of common class in another package with import path and alias15import (16func main() {17 fmt.Println("Sum of 2 and 3 = ", sum.Sum(2, 3))18}19Example 5: Using Sum method of common class in another package with import path and alias and using common class variable20import (21func main() {22 fmt.Println("Sum of 2 and 3 = ", sum.Sum(2, 3))23 fmt.Println("sum.Number = ", sum.Number)24}25Example 6: Using Sum method of common class in another package with import path and alias and using common class variable and modifying common class variable26import (27func main() {28 fmt.Println("Sum of 2 and

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import "fmt"2import "common"3func main() {4 fmt.Println("Sum =", common.Sum(10, 20))5}6func Sum(a, b int) int {7}8import "fmt"9import "common"10func main() {11 fmt.Println("Sum =", common.Sum(10, 20))12}13func Sum(a, b int) int {14}15import "fmt"16import "common"17func main() {18 fmt.Println("Sum =", common.Sum(10, 20))19}20func Sum(a, b int) int {21}

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import "fmt"2func main() {3 fmt.Println("Hello, playground")4 c:=common{1,2}5 fmt.Println(c.Sum())6}7import "fmt"8func main() {9 fmt.Println("Hello, playground")10 c:=common{1,2}11 fmt.Println(c.Sum())12}13import "fmt"14func main() {15 fmt.Println("Hello, playground")16 c:=common{1,2}17 fmt.Println(c.Sum())18}19import "fmt"20func main() {21 fmt.Println("Hello, playground")22 c:=common{1,2}23 fmt.Println(c.Sum())24}25import "fmt"26func main() {27 fmt.Println("Hello, playground")28 c:=common{1,2}29 fmt.Println(c.Sum())30}31import "fmt"32func main() {33 fmt.Println("Hello, playground")34 c:=common{1,2}35 fmt.Println(c.Sum())36}37import "fmt"38func main() {39 fmt.Println("Hello, playground")40 c:=common{1,2}41 fmt.Println(c.Sum())42}43import "fmt"44func main() {45 fmt.Println("Hello, playground")46 c:=common{1,2}47 fmt.Println(c.Sum())48}49import "fmt"50func main() {51 fmt.Println("Hello, playground")52 c:=common{1,2}53 fmt.Println(c.Sum())54}55import "fmt"56func main() {57 fmt.Println("Hello, playground")58 c:=common{1,2}59 fmt.Println(c.Sum())60}61import "fmt"62func main() {63 fmt.Println("Hello, playground")64 c:=common{1,2}65 fmt.Println(c.Sum())66}67import "fmt"68func main() {69 fmt.Println("Hello, playground")70 c:=common{1,2}71 fmt.Println(c.Sum())72}

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println(common.Sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))4}5func Sum(nums ...int) int {6 for _, num := range nums {7 }8}

Full Screen

Full Screen

Sum

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println(common.Sum(10, 20))4}5import (6func Sum(a, b int) int {7}8func main() {9 fmt.Println(Sum(10, 20))10}11import (12func main() {13 fmt.Println(common.Sum(10, 20))14}15import (16func Sum(a, b int) int {17}18func main() {19 fmt.Println(Sum(10, 20))20}21import (22func Sum(a, b int) int {23}24func main() {25 fmt.Println(Sum(10, 20))26}27import (

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful