Changeset 1214 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibCommon
- Timestamp:
- 8 Jul 2015, 23:35:39 (10 years ago)
- Location:
- branches/SHM-dev/source/Lib/TLibCommon
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-dev/source/Lib/TLibCommon/TCom3DAsymLUT.cpp
r1213 r1214 10 10 11 11 #if CGS_3D_ASYMLUT 12 13 12 const Int TCom3DAsymLUT::m_nVertexIdxOffset[4][3] = { { 0 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 1 , 1 } , { 1 , 1 , 1 } }; 14 13 … … 28 27 } 29 28 30 Void TCom3DAsymLUT::create( Int nMaxOctantDepth , Int nInputBitDepth , Int nInputBitDepthC , Int nOutputBitDepth , Int nOutputBitDepthC , Int nMaxYPartNumLog2 31 #if R0151_CGS_3D_ASYMLUT_IMPROVE 32 , Int nAdaptCThresholdU , Int nAdaptCThresholdV 33 #endif 34 ) 29 Void TCom3DAsymLUT::create( Int nMaxOctantDepth, Int nInputBitDepth, Int nInputBitDepthC, Int nOutputBitDepth, Int nOutputBitDepthC, Int nMaxYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThresholdV ) 35 30 { 36 31 m_nMaxOctantDepth = nMaxOctantDepth; … … 44 39 m_nMaxPartNumLog2 = 3 * m_nMaxOctantDepth + m_nMaxYPartNumLog2; 45 40 46 xUpdatePartitioning( nMaxOctantDepth , nMaxYPartNumLog2 47 #if R0151_CGS_3D_ASYMLUT_IMPROVE 48 , nAdaptCThresholdU , nAdaptCThresholdV 49 #endif 50 ); 41 xUpdatePartitioning( nMaxOctantDepth, nMaxYPartNumLog2, nAdaptCThresholdU, nAdaptCThresholdV ); 51 42 52 43 m_nYSize = 1 << ( m_nMaxOctantDepth + m_nMaxYPartNumLog2 ); … … 77 68 78 69 79 Void TCom3DAsymLUT::xUpdatePartitioning( Int nCurOctantDepth , Int nCurYPartNumLog2 80 #if R0151_CGS_3D_ASYMLUT_IMPROVE 81 , Int nAdaptCThresholdU , Int nAdaptCThresholdV 82 #endif 83 ) 70 Void TCom3DAsymLUT::xUpdatePartitioning( Int nCurOctantDepth, Int nCurYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThresholdV ) 84 71 { 85 72 assert( nCurOctantDepth <= m_nMaxOctantDepth ); … … 94 81 m_nYShift2Idx = m_nInputBitDepthY - m_nCurOctantDepth - m_nCurYPartNumLog2; 95 82 m_nUShift2Idx = m_nVShift2Idx = m_nInputBitDepthC - m_nCurOctantDepth; 96 #if R0151_CGS_3D_ASYMLUT_IMPROVE 83 97 84 m_nMappingShift = 10 + m_nInputBitDepthY - m_nOutputBitDepthY; 98 85 m_nAdaptCThresholdU = nAdaptCThresholdU; 99 86 m_nAdaptCThresholdV = nAdaptCThresholdV; 100 #else 101 m_nMappingShift = m_nYShift2Idx + m_nUShift2Idx; 102 #endif 87 103 88 m_nMappingOffset = 1 << ( m_nMappingShift - 1 ); 104 89 … … 201 186 202 187 SYUVP sPred; 203 #if R0151_CGS_3D_ASYMLUT_IMPROVE 188 204 189 sPred.Y = sPred.U = sPred.V = 0; 190 205 191 if( nVertexIdx == 0 ) 192 { 206 193 sPred.Y = xGetNormCoeffOne() << ( m_nOutputBitDepthY - m_nInputBitDepthY ); 194 } 207 195 else if( nVertexIdx == 1 ) 196 { 208 197 sPred.U = xGetNormCoeffOne() << ( m_nOutputBitDepthY - m_nInputBitDepthY ); 198 } 209 199 else if( nVertexIdx == 2 ) 200 { 210 201 sPred.V = xGetNormCoeffOne() << ( m_nOutputBitDepthY - m_nInputBitDepthY ); 211 #else 212 sPred.Y = ( yIdx + m_nVertexIdxOffset[nVertexIdx][0] ) << ( m_nYShift2Idx + m_nDeltaBitDepth ); 213 sPred.U = ( uIdx + m_nVertexIdxOffset[nVertexIdx][1] ) << ( m_nUShift2Idx + m_nDeltaBitDepthC ); 214 sPred.V = ( vIdx + m_nVertexIdxOffset[nVertexIdx][2] ) << ( m_nVShift2Idx + m_nDeltaBitDepthC ); 215 #endif 216 return( sPred ); 202 } 203 204 return sPred; 217 205 } 218 206 … … 221 209 SCuboid*** pCuboid = pCurCuboid ? pCurCuboid : m_pCuboid ; 222 210 223 #if R0151_CGS_3D_ASYMLUT_IMPROVE224 211 SYUVP sPred; 225 212 if( yIdx == 0 ) … … 233 220 sPred = pCuboid[yIdx-1][uIdx][vIdx].P[nVertexIdx]; 234 221 } 235 #else 236 // PredA 237 SYUVP sPredA = xGetCuboidVertexPredA( yIdx , uIdx , vIdx , nVertexIdx ); 238 239 // PredB 240 SYUVP sPredB; 241 memset( &sPredB , 0 , sizeof( sPredB ) ); 242 if( yIdx > 0 ) 243 { 244 SYUVP & recNeighborP = pCuboid[yIdx-1][uIdx][vIdx].P[nVertexIdx]; 245 SYUVP sPredNeighbor = xGetCuboidVertexPredA( yIdx - 1 , uIdx , vIdx , nVertexIdx ); 246 sPredB.Y += recNeighborP.Y - sPredNeighbor.Y ; 247 sPredB.U += recNeighborP.U - sPredNeighbor.U ; 248 sPredB.V += recNeighborP.V - sPredNeighbor.V ; 249 250 Pel min = - ( 1 << ( getOutputBitDepthY() - 2 ) ); 251 Pel max = - min; 252 sPredB.Y = Clip3( min , max , sPredB.Y ); 253 min = - ( 1 << ( getOutputBitDepthC() - 2 ) ); 254 max = - min; 255 sPredB.U = Clip3( min , max , sPredB.U ); 256 sPredB.V = Clip3( min , max , sPredB.V ); 257 } 258 259 SYUVP sPred; 260 sPred.Y = sPredA.Y + sPredB.Y; 261 sPred.U = sPredA.U + sPredB.U; 262 sPred.V = sPredA.V + sPredB.V; 263 #endif 222 264 223 return sPred ; 265 224 } … … 294 253 Pel TCom3DAsymLUT::xMapY( Pel y , Pel u , Pel v ) 295 254 { 296 #if R0151_CGS_3D_ASYMLUT_IMPROVE297 255 const SCuboid & rCuboid = m_pCuboid[xGetYIdx(y)][xGetUIdx(u)][xGetVIdx(v)]; 298 256 Pel dstY = ( ( rCuboid.P[0].Y * y + rCuboid.P[1].Y * u + rCuboid.P[2].Y * v + m_nMappingOffset ) >> m_nMappingShift ) + rCuboid.P[3].Y; 299 #else 300 const SCuboid & rCuboid = m_pCuboid[y>>m_nYShift2Idx][u>>m_nUShift2Idx][v>>m_nVShift2Idx]; 301 Pel dstY = rCuboid.P[0].Y; 302 Int deltaY = y - ( y >> m_nYShift2Idx << m_nYShift2Idx ); 303 Int deltaU = u - ( u >> m_nUShift2Idx << m_nUShift2Idx ); 304 Int deltaV = v - ( v >> m_nVShift2Idx << m_nVShift2Idx ); 305 dstY += ( Pel )( ( ( ( deltaY * ( rCuboid.P[3].Y - rCuboid.P[2].Y ) ) << m_nUShift2Idx ) 306 + ( ( deltaU * ( rCuboid.P[1].Y - rCuboid.P[0].Y ) ) << m_nYShift2Idx ) 307 + ( ( deltaV * ( rCuboid.P[2].Y - rCuboid.P[1].Y ) ) << m_nYShift2Idx ) 308 + m_nMappingOffset ) >> m_nMappingShift ); 309 #endif 257 310 258 return( dstY ); 311 259 } … … 313 261 SYUVP TCom3DAsymLUT::xMapUV( Pel y , Pel u , Pel v ) 314 262 { 315 #if R0151_CGS_3D_ASYMLUT_IMPROVE316 263 const SCuboid & rCuboid = m_pCuboid[xGetYIdx(y)][xGetUIdx(u)][xGetVIdx(v)]; 317 264 SYUVP dst; … … 319 266 dst.U = ( ( rCuboid.P[0].U * y + rCuboid.P[1].U * u + rCuboid.P[2].U * v + m_nMappingOffset ) >> m_nMappingShift ) + rCuboid.P[3].U; 320 267 dst.V = ( ( rCuboid.P[0].V * y + rCuboid.P[1].V * u + rCuboid.P[2].V * v + m_nMappingOffset ) >> m_nMappingShift ) + rCuboid.P[3].V; 321 #else 322 const SCuboid & rCuboid = m_pCuboid[y>>m_nYShift2Idx][u>>m_nUShift2Idx][v>>m_nVShift2Idx]; 323 SYUVP dst = rCuboid.P[0]; 324 Int deltaY = y - ( y >> m_nYShift2Idx << m_nYShift2Idx ); 325 Int deltaU = u - ( u >> m_nUShift2Idx << m_nUShift2Idx ); 326 Int deltaV = v - ( v >> m_nVShift2Idx << m_nVShift2Idx ); 327 dst.U += ( Pel )( ( ( ( deltaY * ( rCuboid.P[3].U - rCuboid.P[2].U ) ) << m_nUShift2Idx ) 328 + ( ( deltaU * ( rCuboid.P[1].U - rCuboid.P[0].U ) ) << m_nYShift2Idx ) 329 + ( ( deltaV * ( rCuboid.P[2].U - rCuboid.P[1].U ) ) << m_nYShift2Idx ) 330 + m_nMappingOffset ) >> m_nMappingShift ); 331 dst.V += ( Pel )( ( ( ( deltaY * ( rCuboid.P[3].V - rCuboid.P[2].V ) ) << m_nUShift2Idx ) 332 + ( ( deltaU * ( rCuboid.P[1].V - rCuboid.P[0].V ) ) << m_nYShift2Idx ) 333 + ( ( deltaV * ( rCuboid.P[2].V - rCuboid.P[1].V ) ) << m_nYShift2Idx ) 334 + m_nMappingOffset ) >> m_nMappingShift ); 335 #endif 268 336 269 return( dst ); 337 270 } … … 349 282 { 350 283 assert( pSrc->getMaxOctantDepth() == getMaxOctantDepth() && pSrc->getMaxYPartNumLog2() == getMaxYPartNumLog2() ); 351 xUpdatePartitioning( pSrc->getCurOctantDepth() , pSrc->getCurYPartNumLog2() 352 #if R0151_CGS_3D_ASYMLUT_IMPROVE 353 , pSrc->getAdaptChromaThresholdU() , pSrc->getAdaptChromaThresholdV() 354 #endif 355 ); 284 xUpdatePartitioning( pSrc->getCurOctantDepth(), pSrc->getCurYPartNumLog2(), pSrc->getAdaptChromaThresholdU(), pSrc->getAdaptChromaThresholdV() ); 356 285 setResQuantBit( pSrc->getResQuantBit() ); 357 286 xSaveCuboids( pSrc->m_pCuboid ); -
branches/SHM-dev/source/Lib/TLibCommon/TCom3DAsymLUT.h
r1213 r1214 27 27 virtual ~TCom3DAsymLUT(); 28 28 29 virtual Void 30 virtual Void 29 virtual Void create( Int nMaxOctantDepth, Int nInputBitDepth, Int nInputBitDepthC, Int nOutputBitDepth, Int nOutputBitDepthC, Int nMaxYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThresholdV ); 30 virtual Void destroy(); 31 31 32 32 Int getMaxOctantDepth() { return m_nMaxOctantDepth; } … … 55 55 Bool isRefLayer( UInt uiRefLayerId ); 56 56 57 #if R0151_CGS_3D_ASYMLUT_IMPROVE58 57 Void setAdaptChromaThresholdU( Int n ) { m_nAdaptCThresholdU = n; } 59 58 Int getAdaptChromaThresholdU() { return m_nAdaptCThresholdU; } 60 59 Void setAdaptChromaThresholdV( Int n ) { m_nAdaptCThresholdV = n; } 61 60 Int getAdaptChromaThresholdV() { return m_nAdaptCThresholdV; } 62 #endif 61 63 62 #if R0179_ENC_OPT_3DLUT_SIZE 64 63 Int getMaxYSize() { return 1<<(m_nMaxOctantDepth+m_nMaxYPartNumLog2); } … … 108 107 const static Int m_nVertexIdxOffset[4][3]; 109 108 std::vector<UInt> m_vRefLayerId; 110 #if R0151_CGS_3D_ASYMLUT_IMPROVE 109 111 110 Int m_nAdaptCThresholdU; 112 111 Int m_nAdaptCThresholdV; 113 #endif 112 114 113 #if R0164_CGS_LUT_BUGFIX_CHECK 115 114 Bool *** m_pCuboidExplicit; … … 125 124 Void xFree3DArray( T *** &p ); 126 125 127 Void xUpdatePartitioning( Int nCurOctantDepth , Int nCurYPartNumLog2 128 #if R0151_CGS_3D_ASYMLUT_IMPROVE 129 , Int nAdaptCThresholdU , Int nAdaptCThreshodV 130 #endif 131 ); 126 Void xUpdatePartitioning( Int nCurOctantDepth, Int nCurYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThreshodV ); 132 127 SYUVP xGetCuboidVertexPredA( Int yIdx , Int uIdx , Int vIdx , Int nVertexIdx ); 133 128 Pel xMapY( Pel y , Pel u , Pel v ); … … 137 132 Int xGetUSize() { return m_nUSize; } 138 133 Int xGetVSize() { return m_nVSize; } 139 #if R0151_CGS_3D_ASYMLUT_IMPROVE140 134 Int xGetYIdx(Pel y) { return( y >> m_nYShift2Idx ); } 141 135 Int xGetUIdx(Pel u) { return( m_nCurOctantDepth == 1 ? u >= m_nAdaptCThresholdU : u >> m_nUShift2Idx ); } 142 136 Int xGetVIdx(Pel v) { return( m_nCurOctantDepth == 1 ? v >= m_nAdaptCThresholdV : v >> m_nVShift2Idx ); } 143 137 Int xGetNormCoeffOne() { return( 1 << m_nMappingShift ); } 144 #else145 Int xGetYShift2Idx() { return m_nYShift2Idx; }146 Int xGetUShift2Idx() { return m_nUShift2Idx; }147 Int xGetVShift2Idx() { return m_nVShift2Idx; }148 #endif149 138 SCuboid & xGetCuboid( Int yIdx , Int uIdx , Int vIdx ){ return m_pCuboid[yIdx][uIdx][vIdx]; } 150 139 Void xSaveCuboids( SCuboid *** pSrcCuboid ); -
branches/SHM-dev/source/Lib/TLibCommon/TypeDef.h
r1213 r1214 58 58 #if CGS_3D_ASYMLUT 59 59 #define CGS_GCC_NO_VECTORIZATION 1 60 #define R0151_CGS_3D_ASYMLUT_IMPROVE 1 ///< JCTVC-R0151: Non-uniform chroma partitioning and improved LUT coefficient coding61 60 #define R0164_CGS_LUT_BUGFIX 1 ///< JCTVC-R0164: Bug fix with LUT syntax 62 61 #define R0164_CGS_LUT_BUGFIX_CHECK 0 ///< JCTVC-R0164: Add traces explicitly/non-explicitly encoded vertices and check if 3DLUT is correctly filled
Note: See TracChangeset for help on using the changeset viewer.