Changeset 773 in 3DVCSoftware for trunk/source/Lib/TLibEncoder/TEncSbac.cpp
- Timestamp:
- 16 Jan 2014, 09:56:13 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibEncoder/TEncSbac.cpp
r758 r773 95 95 #if H_3D_DIM_DMM 96 96 , m_cDmm1DataSCModel ( 1, 1, NUM_DMM1_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 97 #if !SEC_DMM3_RBC_F014798 , m_cDmm3DataSCModel ( 1, 1, NUM_DMM3_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels)99 #endif100 #endif101 #if H_3D_DIM_RBC102 , m_cRbcDataSCModel ( 1, 1, NUM_RBC_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels)103 97 #endif 104 98 #if H_3D_DIM_SDC … … 176 170 #if H_3D_DIM_DMM 177 171 m_cDmm1DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA ); 178 #if !SEC_DMM3_RBC_F0147179 m_cDmm3DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM3_DATA );180 #endif181 #endif182 #if H_3D_DIM_RBC183 m_cRbcDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_RBC_DATA );184 172 #endif 185 173 #if H_3D_DIM_SDC … … 266 254 #if H_3D_DIM_DMM 267 255 curCost += m_cDmm1DataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DMM1_DATA ); 268 #if !SEC_DMM3_RBC_F0147269 curCost += m_cDmm3DataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DMM3_DATA );270 #endif271 #endif272 #if H_3D_DIM_RBC273 curCost += m_cRbcDataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_RBC_DATA );274 256 #endif 275 257 } … … 337 319 #if H_3D_DIM_DMM 338 320 m_cDmm1DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA ); 339 #if !SEC_DMM3_RBC_F0147340 m_cDmm3DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM3_DATA );341 #endif342 #endif343 #if H_3D_DIM_RBC344 m_cRbcDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_RBC_DATA );345 321 #endif 346 322 #if H_3D_DIM_SDC … … 526 502 } 527 503 528 #if QC_DIM_DELTADC_UNIFY_F0132529 504 Void TEncSbac::xCodeDimDeltaDC( Pel valDeltaDC, UInt uiNumSeg ) 530 505 { … … 536 511 } 537 512 } 538 #else539 Void TEncSbac::xCodeDimDeltaDC( Pel valDeltaDC, UInt dimType )540 {541 xWriteExGolombLevel( UInt( abs( valDeltaDC ) ), m_cDdcDataSCModel.get(0, 0, (RBC_IDX == dimType) ? 1 : 0) );542 if( valDeltaDC != 0 )543 {544 UInt uiSign = valDeltaDC > 0 ? 0 : 1;545 m_pcBinIf->encodeBinEP( uiSign );546 }547 }548 #endif549 513 550 514 #if H_3D_DIM_DMM … … 557 521 } 558 522 559 #if !SEC_DMM3_RBC_F0147 560 Void TEncSbac::xCodeDmm3WedgeIdx( UInt uiIntraIdx, Int iNumBit ) 561 { 562 for( Int i = 0; i < iNumBit; i++ ) 563 { 564 m_pcBinIf->encodeBin( ( uiIntraIdx >> i ) & 1, m_cDmm3DataSCModel.get(0, 0, 0) ); 565 } 566 } 567 #endif 568 #endif 569 #if H_3D_DIM_RBC 570 Void TEncSbac::xCodeRbcEdge( TComDataCU* pcCU, UInt uiAbsPartIdx ) 571 { 572 UInt uiDepth = pcCU->getDepth( uiAbsPartIdx ) + (pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ? 1 : 0); 573 UChar* pucSymbolList = pcCU->getEdgeCode ( uiAbsPartIdx ); 574 UChar ucEdgeNumber = pcCU->getEdgeNumber ( uiAbsPartIdx ); 575 Bool bLeft = pcCU->getEdgeLeftFirst( uiAbsPartIdx ); 576 UChar ucStart = pcCU->getEdgeStartPos ( uiAbsPartIdx ); 577 UInt uiSymbol; 578 579 // 1. Top(0) or Left(1) 580 uiSymbol = (bLeft == false) ? 0 : 1; 581 m_pcBinIf->encodeBinEP( uiSymbol ); 582 583 // 2. Start position (lowest bit first) 584 uiSymbol = ucStart; 585 for( UInt ui = 6; ui > uiDepth; ui-- ) // 64(0)->6, 32(1)->5, 16(2)->4, 8(3)->3, 4(4)->2 586 { 587 m_pcBinIf->encodeBinEP( uiSymbol & 0x1 ); 588 uiSymbol >>= 1; 589 } 590 591 // 3. Number of edges 592 uiSymbol = ucEdgeNumber > 0 ? ucEdgeNumber - 1 : 0; 593 for( UInt ui = 7; ui > uiDepth; ui-- ) // 64(0)->7, 32(1)->6, 16(2)->5, 8(3)->4, 4(4)->3 594 { 595 m_pcBinIf->encodeBinEP( uiSymbol & 0x1 ); 596 uiSymbol >>= 1; 597 } 598 599 if(uiSymbol != 0) 600 { 601 printf(" ucEdgeNumber %d at depth %d\n",ucEdgeNumber, uiDepth); 602 assert(false); 603 } 604 605 // 4. Edges 606 for( Int iPtr2 = 0; iPtr2 < ucEdgeNumber; iPtr2++ ) 607 { 608 UInt uiReorderSymbol = pucSymbolList[iPtr2]; 609 for( UInt ui = 0; ui < uiReorderSymbol; ui++ ) 610 { 611 m_pcBinIf->encodeBin( 1, m_cRbcDataSCModel.get( 0, 0, 0 ) ); 612 } 613 614 if( uiReorderSymbol != 6 ) 615 m_pcBinIf->encodeBin( 0, m_cRbcDataSCModel.get( 0, 0, 0 ) ); 616 } 617 } 618 #endif 523 #endif 524 619 525 #if H_3D_DIM_SDC 620 526 Void TEncSbac::xCodeSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment ) … … 632 538 633 539 #if H_3D_DIM_DLT 634 #if DLT_DIFF_CODING_IN_PPS635 540 UInt uiMaxResidualBits = pcCU->getSlice()->getPPS()->getDLT()->getBitsPerDepthValue( pcCU->getSlice()->getLayerIdInVps() ); 636 #else637 UInt uiMaxResidualBits = pcCU->getSlice()->getVPS()->getBitsPerDepthValue( pcCU->getSlice()->getLayerIdInVps() );638 #endif639 541 #else 640 542 UInt uiMaxResidualBits = g_bitDepthY; … … 655 557 DTRACE_CU("sdc_residual_sign_flag[i]", uiSign) 656 558 #endif 657 658 #if H_3D_DIM_DLT 659 #if DLT_DIFF_CODING_IN_PPS 660 UInt uiNumDepthValues = pcCU->getSlice()->getPPS()->getDLT()->getNumDepthValues( pcCU->getSlice()->getLayerIdInVps() ); 661 #else 662 UInt uiNumDepthValues = pcCU->getSlice()->getVPS()->getNumDepthValues( pcCU->getSlice()->getLayerIdInVps() ); 663 #endif 559 #if H_3D_DIM_DLT 560 UInt uiNumDepthValues = pcCU->getSlice()->getPPS()->getDLT()->getNumDepthValues( pcCU->getSlice()->getLayerIdInVps() ); 664 561 #else 665 562 UInt uiNumDepthValues = ((1 << g_bitDepthY)-1); 666 563 #endif 564 667 565 assert(uiAbsIdx <= uiNumDepthValues); 668 566 … … 1239 1137 xCodeDmm1WedgeIdx( pcCU->getDmmWedgeTabIdx( dimType, absPartIdx ), g_dmm1TabIdxBits[pcCU->getIntraSizeIdx(absPartIdx)] ); 1240 1138 } break; 1241 #if !SEC_DMM3_RBC_F01471242 case( DMM3_IDX ):1243 {1244 xCodeDmm3WedgeIdx( pcCU->getDmm3IntraTabIdx( absPartIdx ), g_dmm3IntraTabIdxBits[pcCU->getIntraSizeIdx(absPartIdx)] );1245 } break;1246 #endif1247 1139 case( DMM4_IDX ): break; 1248 1140 #endif 1249 #if H_3D_DIM_RBC1250 case( RBC_IDX ):1251 {1252 assert( pcCU->getWidth( absPartIdx ) < 64 );1253 xCodeRbcEdge( pcCU, absPartIdx );1254 } break;1255 #endif1256 1141 default: break; 1257 1142 } 1258 1143 1259 #if H_3D_DIM_SDC && !QC_DIM_DELTADC_UNIFY_F0132 1260 if( pcCU->getSDCFlag( absPartIdx ) ) 1261 { 1262 assert(pcCU->getPartitionSize(absPartIdx)==SIZE_2Nx2N); 1263 UInt uiNumSegments = ( dir == DC_IDX || dir == PLANAR_IDX )? 1 : 2; 1264 for(UInt uiSeg=0; uiSeg<uiNumSegments; uiSeg++) 1265 { 1266 xCodeSDCResidualData(pcCU, absPartIdx, uiSeg); 1267 } 1268 } 1269 else 1270 { 1271 #endif 1272 #if QC_DIM_DELTADC_UNIFY_F0132 1273 if( dimType < DIM_NUM_TYPE || pcCU->getSDCFlag( absPartIdx ) ) 1274 #else 1275 if( dimType < DIM_NUM_TYPE ) 1276 #endif 1277 { 1278 #if QC_DIM_DELTADC_UNIFY_F0132 1279 UInt dimDeltaDC; 1280 Pel deltaDC; 1281 UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2; 1282 if( pcCU->getSDCFlag( absPartIdx ) ) 1283 { 1284 if( uiNumSegments==1 ) 1285 { 1286 dimDeltaDC = pcCU->getSDCSegmentDCOffset(0, absPartIdx) ? 1 : 0; 1287 } 1288 else 1289 { 1290 dimDeltaDC = ( pcCU->getSDCSegmentDCOffset(0, absPartIdx) || pcCU->getSDCSegmentDCOffset(1, absPartIdx) ) ? 1 : 0; 1291 } 1144 if( dimType < DIM_NUM_TYPE || pcCU->getSDCFlag( absPartIdx ) ) 1145 { 1146 UInt dimDeltaDC; 1147 Pel deltaDC; 1148 UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2; 1149 if( pcCU->getSDCFlag( absPartIdx ) ) 1150 { 1151 if( uiNumSegments==1 ) 1152 { 1153 dimDeltaDC = pcCU->getSDCSegmentDCOffset(0, absPartIdx) ? 1 : 0; 1292 1154 } 1293 1155 else 1294 1156 { 1295 dimDeltaDC = isDimDeltaDC( dir ); 1296 } 1297 1298 m_pcBinIf->encodeBin( dimDeltaDC, m_cDdcFlagSCModel.get(0, 0, uiNumSegments-1) ); 1299 1300 if( dimDeltaDC ) 1301 { 1302 for( UInt segment = 0; segment < uiNumSegments; segment++ ) 1303 { 1304 deltaDC = pcCU->getSDCFlag( absPartIdx ) ? pcCU->getSDCSegmentDCOffset(segment, absPartIdx) : pcCU->getDimDeltaDC( dimType, segment, absPartIdx ); 1305 xCodeDimDeltaDC( deltaDC, uiNumSegments ); 1306 } 1307 } 1308 #else 1309 UInt dimDeltaDC = isDimDeltaDC( dir ); 1310 m_pcBinIf->encodeBin( dimDeltaDC, m_cDdcFlagSCModel.get(0, 0, (RBC_IDX == dimType) ? 1 : 0) ); 1311 if( dimDeltaDC ) 1312 { 1313 for( UInt segment = 0; segment < 2; segment++ ) 1314 { 1315 xCodeDimDeltaDC( pcCU->getDimDeltaDC( dimType, segment, absPartIdx ), dimType ); 1316 } 1317 } 1318 #endif 1319 } 1320 #if H_3D_DIM_SDC && !QC_DIM_DELTADC_UNIFY_F0132 1321 } 1322 #endif 1157 dimDeltaDC = ( pcCU->getSDCSegmentDCOffset(0, absPartIdx) || pcCU->getSDCSegmentDCOffset(1, absPartIdx) ) ? 1 : 0; 1158 } 1159 } 1160 else 1161 { 1162 dimDeltaDC = isDimDeltaDC( dir ); 1163 } 1164 1165 m_pcBinIf->encodeBin( dimDeltaDC, m_cDdcFlagSCModel.get(0, 0, uiNumSegments-1) ); 1166 1167 if( dimDeltaDC ) 1168 { 1169 for( UInt segment = 0; segment < uiNumSegments; segment++ ) 1170 { 1171 deltaDC = pcCU->getSDCFlag( absPartIdx ) ? pcCU->getSDCSegmentDCOffset(segment, absPartIdx) : pcCU->getDimDeltaDC( dimType, segment, absPartIdx ); 1172 xCodeDimDeltaDC( deltaDC, uiNumSegments ); 1173 } 1174 } 1175 } 1323 1176 } 1324 1177 1325 1178 Void TEncSbac::codeIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx ) 1326 1179 { 1327 #if SEC_DMM3_RBC_F01471328 1180 UInt codeWordTable[3][7] = {{0, 0, 0, 1, 0, 0, 0},{0, 2, 6, 14, 15, 0, 0},{0, 1, 0, 0, 0, 0, 0}}; 1329 1181 UInt codeWordLenTable[3][7] = {{0, 1, 0, 1, 0, 0, 0},{1, 2, 3, 4, 4, 0, 0},{1, 1, 0, 0, 0, 0, 0}}; 1330 #else1331 UInt codeWordTable[3][7] = {{0, 0, 0, 2, 0,6, 7},{0, 0, 2, 7, 3, 6, 2},{0, 1, 0, 0, 0, 0, 0}};1332 UInt codeWordLenTable[3][7] = {{0, 1, 0, 2, 0,3, 3},{1, 1, 2, 3, 2, 3, 2},{1, 1, 0, 0, 0, 0, 0}};1333 #endif1334 1182 UInt dir = pcCU->getLumaIntraDir( absPartIdx ); 1335 1183 UInt puIdx = (pcCU->getWidth(absPartIdx) == 64) ? 2 : ( (pcCU->getPartitionSize(absPartIdx) == SIZE_NxN && pcCU->getWidth(absPartIdx) == 8) ? 0 : 1 ); … … 1346 1194 case DMM1_IDX: codeIdx = 3; break; 1347 1195 case DMM4_IDX: codeIdx = 4; break; 1348 #if !SEC_DMM3_RBC_F01471349 case DMM3_IDX: codeIdx = 5; break;1350 case RBC_IDX: codeIdx = 6; break;1351 #endif1352 1196 default: break; 1353 1197 } … … 1362 1206 default: codeIdx = 2; break; 1363 1207 } 1364 }1365 #endif1366 #if !SEC_DMM3_RBC_F01471367 if( puIdx==1 )1368 {1369 if( codeIdx==1 || codeIdx==2 || codeIdx==4 )1370 {1371 m_pcBinIf->encodeBinEP( 0 );1372 }1373 else1374 {1375 m_pcBinIf->encodeBinEP( 1 );1376 }1377 1208 } 1378 1209 #endif
Note: See TracChangeset for help on using the changeset viewer.