Changeset 964 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComSampleAdaptiveOffset.cpp
- Timestamp:
- 5 Jul 2014, 05:16:45 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibCommon/TComSampleAdaptiveOffset.cpp
r872 r964 110 110 m_offsetClipTable[compIdx] = NULL; 111 111 } 112 #if !SAO_SGN_FUNC 112 113 m_signTable = NULL; 113 114 #endif 114 115 115 116 m_lineBufWidth = 0; … … 155 156 } 156 157 158 #if !SAO_SGN_FUNC 157 159 //look-up table for clipping 160 Int overallMaxSampleValue=0; 161 #endif 158 162 for(Int compIdx =0; compIdx < NUM_SAO_COMPONENTS; compIdx++) 159 163 { … … 161 165 Int maxSampleValue = (1<< bitDepthSample); //exclusive 162 166 Int maxOffsetValue = (g_saoMaxOffsetQVal[compIdx] << m_offsetStepLog2[compIdx]); 167 #if !SAO_SGN_FUNC 168 if (maxSampleValue>overallMaxSampleValue) overallMaxSampleValue=maxSampleValue; 169 #endif 163 170 164 171 m_offsetClipTable[compIdx] = new Int[(maxSampleValue + maxOffsetValue -1)+ (maxOffsetValue)+1 ]; //positive & negative range plus 0 … … 176 183 *(offsetClipPtr -k -1 ) = 0; 177 184 } 178 if(compIdx == SAO_Y) //g_bitDepthY is always larger than or equal to g_bitDepthC 179 { 180 m_signTable = new Short[ 2*(maxSampleValue-1) + 1 ]; 181 m_sign = &(m_signTable[maxSampleValue-1]); 185 } 186 187 #if !SAO_SGN_FUNC 188 m_signTable = new Short[ 2*(overallMaxSampleValue-1) + 1 ]; 189 m_sign = &(m_signTable[overallMaxSampleValue-1]); 182 190 183 191 m_sign[0] = 0; 184 for(Int k=1; k< maxSampleValue; k++)192 for(Int k=1; k< overallMaxSampleValue; k++) 185 193 { 186 194 m_sign[k] = 1; 187 195 m_sign[-k]= -1; 188 196 } 189 } 190 } 191 197 #endif 192 198 } 193 199 … … 208 214 } 209 215 } 216 #if !SAO_SGN_FUNC 210 217 if( m_signTable ) 211 218 { 212 219 delete[] m_signTable; m_signTable = NULL; 213 220 } 221 #endif 214 222 } 215 223 … … 388 396 for (y=0; y< height; y++) 389 397 { 398 #if SAO_SGN_FUNC 399 signLeft = (Char)sgn(srcLine[startX] - srcLine[startX-1]); 400 #else 390 401 signLeft = (Char)m_sign[srcLine[startX] - srcLine[startX-1]]; 402 #endif 391 403 for (x=startX; x< endX; x++) 392 404 { 405 #if SAO_SGN_FUNC 406 signRight = (Char)sgn(srcLine[x] - srcLine[x+1]); 407 #else 393 408 signRight = (Char)m_sign[srcLine[x] - srcLine[x+1]]; 409 #endif 394 410 edgeType = signRight + signLeft; 395 411 signLeft = -signRight; … … 419 435 for (x=0; x< width; x++) 420 436 { 437 #if SAO_SGN_FUNC 438 signUpLine[x] = (Char)sgn(srcLine[x] - srcLineAbove[x]); 439 #else 421 440 signUpLine[x] = (Char)m_sign[srcLine[x] - srcLineAbove[x]]; 441 #endif 422 442 } 423 443 … … 429 449 for (x=0; x< width; x++) 430 450 { 451 #if SAO_SGN_FUNC 452 signDown = (Char)sgn(srcLine[x] - srcLineBelow[x]); 453 #else 431 454 signDown = (Char)m_sign[srcLine[x] - srcLineBelow[x]]; 455 #endif 432 456 edgeType = signDown + signUpLine[x]; 433 457 signUpLine[x]= -signDown; … … 456 480 for (x=startX; x< endX+1; x++) 457 481 { 482 #if SAO_SGN_FUNC 483 signUpLine[x] = (Char)sgn(srcLineBelow[x] - srcLine[x- 1]); 484 #else 458 485 signUpLine[x] = (Char)m_sign[srcLineBelow[x] - srcLine[x- 1]]; 486 #endif 459 487 } 460 488 … … 465 493 for(x= firstLineStartX; x< firstLineEndX; x++) 466 494 { 495 #if SAO_SGN_FUNC 496 edgeType = sgn(srcLine[x] - srcLineAbove[x- 1]) - signUpLine[x+1]; 497 #else 467 498 edgeType = m_sign[srcLine[x] - srcLineAbove[x- 1]] - signUpLine[x+1]; 499 #endif 468 500 resLine[x] = offsetClip[srcLine[x] + offset[edgeType]]; 469 501 } … … 479 511 for (x=startX; x<endX; x++) 480 512 { 513 #if SAO_SGN_FUNC 514 signDown = (Char)sgn(srcLine[x] - srcLineBelow[x+ 1]); 515 #else 481 516 signDown = (Char)m_sign[srcLine[x] - srcLineBelow[x+ 1]] ; 517 #endif 482 518 edgeType = signDown + signUpLine[x]; 483 519 resLine[x] = offsetClip[srcLine[x] + offset[edgeType]]; … … 485 521 signDownLine[x+1] = -signDown; 486 522 } 523 #if SAO_SGN_FUNC 524 signDownLine[startX] = (Char)sgn(srcLineBelow[startX] - srcLine[startX-1]); 525 #else 487 526 signDownLine[startX] = (Char)m_sign[srcLineBelow[startX] - srcLine[startX-1]]; 527 #endif 488 528 489 529 signTmpLine = signUpLine; … … 501 541 for(x= lastLineStartX; x< lastLineEndX; x++) 502 542 { 543 #if SAO_SGN_FUNC 544 edgeType = sgn(srcLine[x] - srcLineBelow[x+ 1]) + signUpLine[x]; 545 #else 503 546 edgeType = m_sign[srcLine[x] - srcLineBelow[x+ 1]] + signUpLine[x]; 547 #endif 504 548 resLine[x] = offsetClip[srcLine[x] + offset[edgeType]]; 505 549 … … 519 563 for (x=startX-1; x< endX; x++) 520 564 { 565 #if SAO_SGN_FUNC 566 signUpLine[x] = (Char)sgn(srcLineBelow[x] - srcLine[x+1]); 567 #else 521 568 signUpLine[x] = (Char)m_sign[srcLineBelow[x] - srcLine[x+1]]; 569 #endif 522 570 } 523 571 … … 529 577 for(x= firstLineStartX; x< firstLineEndX; x++) 530 578 { 579 #if SAO_SGN_FUNC 580 edgeType = sgn(srcLine[x] - srcLineAbove[x+1]) -signUpLine[x-1]; 581 #else 531 582 edgeType = m_sign[srcLine[x] - srcLineAbove[x+1]] -signUpLine[x-1]; 583 #endif 532 584 resLine[x] = offsetClip[srcLine[x] + offset[edgeType]]; 533 585 } … … 542 594 for(x= startX; x< endX; x++) 543 595 { 596 #if SAO_SGN_FUNC 597 signDown = (Char)sgn(srcLine[x] - srcLineBelow[x-1]); 598 #else 544 599 signDown = (Char)m_sign[srcLine[x] - srcLineBelow[x-1]] ; 600 #endif 545 601 edgeType = signDown + signUpLine[x]; 546 602 resLine[x] = offsetClip[srcLine[x] + offset[edgeType]]; 547 603 signUpLine[x-1] = -signDown; 548 604 } 605 #if SAO_SGN_FUNC 606 signUpLine[endX-1] = (Char)sgn(srcLineBelow[endX-1] - srcLine[endX]); 607 #else 549 608 signUpLine[endX-1] = (Char)m_sign[srcLineBelow[endX-1] - srcLine[endX]]; 609 #endif 550 610 srcLine += srcStride; 551 611 resLine += resStride; … … 558 618 for(x= lastLineStartX; x< lastLineEndX; x++) 559 619 { 620 #if SAO_SGN_FUNC 621 edgeType = sgn(srcLine[x] - srcLineBelow[x-1]) + signUpLine[x]; 622 #else 560 623 edgeType = m_sign[srcLine[x] - srcLineBelow[x-1]] + signUpLine[x]; 624 #endif 561 625 resLine[x] = offsetClip[srcLine[x] + offset[edgeType]]; 562 626
Note: See TracChangeset for help on using the changeset viewer.