Changeset 1187 in 3DVCSoftware for branches/HTM-14.0-dev0/source/Lib/TLibEncoder/TEncSbac.cpp
- Timestamp:
- 8 Apr 2015, 15:26:52 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.0-dev0/source/Lib/TLibEncoder/TEncSbac.cpp
r1185 r1187 255 255 curCost += m_CUTransquantBypassFlagSCModel.calcCost( curSliceType, qp, (UChar*)INIT_CU_TRANSQUANT_BYPASS_FLAG ); 256 256 #if H_3D_DIM 257 if( m_pcSlice->getIntraSdcWedgeFlag() || m_pcSlice->getIntraContourFlag() )258 {259 curCost += m_cDepthIntraModeSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DEPTH_INTRA_MODE );260 curCost += m_cDdcFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_FLAG );261 curCost += m_cDdcDataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_DATA );262 curCost += m_cAngleFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_ANGLE_FLAG );263 }257 if( m_pcSlice->getIntraSdcWedgeFlag() || m_pcSlice->getIntraContourFlag() ) 258 { 259 curCost += m_cDepthIntraModeSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DEPTH_INTRA_MODE ); 260 curCost += m_cDdcFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_FLAG ); 261 curCost += m_cDdcDataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_DATA ); 262 curCost += m_cAngleFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_ANGLE_FLAG ); 263 } 264 264 #endif 265 265 if (curCost < bestCost) … … 626 626 Bool bDepthMapDetect = (pcTexture != NULL); 627 627 Bool bIntraSliceDetect = (pcCU->getSlice()->getSliceType() == I_SLICE); 628 628 629 629 Bool rapPic = (pcCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL || pcCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP || pcCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA); 630 630 … … 664 664 return; 665 665 } 666 666 667 667 #if H_MV_ENC_DEC_TRAC 668 668 DTRACE_CU("part_mode", eSize ) … … 672 672 { 673 673 #endif 674 switch(eSize)675 {676 case SIZE_2Nx2N:677 {678 m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 0) );679 break;680 }681 case SIZE_2NxN:682 case SIZE_2NxnU:683 case SIZE_2NxnD:684 {685 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 0) );686 m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 1) );687 if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) )688 {689 if (eSize == SIZE_2NxN)690 {691 m_pcBinIf->encodeBin(1, m_cCUPartSizeSCModel.get( 0, 0, 3 ));692 }693 else694 {695 m_pcBinIf->encodeBin(0, m_cCUPartSizeSCModel.get( 0, 0, 3 ));696 m_pcBinIf->encodeBinEP((eSize == SIZE_2NxnU? 0: 1));697 }698 }699 break;700 }701 case SIZE_Nx2N:702 case SIZE_nLx2N:703 case SIZE_nRx2N:704 {705 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 0) );706 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 1) );707 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getWidth(uiAbsPartIdx) == 8 && pcCU->getHeight(uiAbsPartIdx) == 8 ) )708 {709 m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 2) );710 }711 if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) )712 {713 if (eSize == SIZE_Nx2N)714 {715 m_pcBinIf->encodeBin(1, m_cCUPartSizeSCModel.get( 0, 0, 3 ));716 }717 else718 {719 m_pcBinIf->encodeBin(0, m_cCUPartSizeSCModel.get( 0, 0, 3 ));720 m_pcBinIf->encodeBinEP((eSize == SIZE_nLx2N? 0: 1));721 }722 }723 break;724 }725 case SIZE_NxN:726 {727 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getWidth(uiAbsPartIdx) == 8 && pcCU->getHeight(uiAbsPartIdx) == 8 ) )728 {729 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 0) );730 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 1) );731 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 2) );732 }733 break;734 }735 default:736 {737 assert(0);738 }739 }674 switch(eSize) 675 { 676 case SIZE_2Nx2N: 677 { 678 m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 0) ); 679 break; 680 } 681 case SIZE_2NxN: 682 case SIZE_2NxnU: 683 case SIZE_2NxnD: 684 { 685 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 0) ); 686 m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 1) ); 687 if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) ) 688 { 689 if (eSize == SIZE_2NxN) 690 { 691 m_pcBinIf->encodeBin(1, m_cCUPartSizeSCModel.get( 0, 0, 3 )); 692 } 693 else 694 { 695 m_pcBinIf->encodeBin(0, m_cCUPartSizeSCModel.get( 0, 0, 3 )); 696 m_pcBinIf->encodeBinEP((eSize == SIZE_2NxnU? 0: 1)); 697 } 698 } 699 break; 700 } 701 case SIZE_Nx2N: 702 case SIZE_nLx2N: 703 case SIZE_nRx2N: 704 { 705 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 0) ); 706 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 1) ); 707 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getWidth(uiAbsPartIdx) == 8 && pcCU->getHeight(uiAbsPartIdx) == 8 ) ) 708 { 709 m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 2) ); 710 } 711 if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) ) 712 { 713 if (eSize == SIZE_Nx2N) 714 { 715 m_pcBinIf->encodeBin(1, m_cCUPartSizeSCModel.get( 0, 0, 3 )); 716 } 717 else 718 { 719 m_pcBinIf->encodeBin(0, m_cCUPartSizeSCModel.get( 0, 0, 3 )); 720 m_pcBinIf->encodeBinEP((eSize == SIZE_nLx2N? 0: 1)); 721 } 722 } 723 break; 724 } 725 case SIZE_NxN: 726 { 727 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getWidth(uiAbsPartIdx) == 8 && pcCU->getHeight(uiAbsPartIdx) == 8 ) ) 728 { 729 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 0) ); 730 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 1) ); 731 m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 2) ); 732 } 733 break; 734 } 735 default: 736 { 737 assert(0); 738 } 739 } 740 740 #if H_3D_QTLPC 741 741 } … … 1089 1089 { 1090 1090 #endif 1091 if(predIdx[j] != -1)1092 {1093 m_pcBinIf->encodeBinEP( predIdx[j] ? 1 : 0 );1094 if (predIdx[j])1095 {1096 m_pcBinIf->encodeBinEP( predIdx[j]-1 );1097 }1091 if(predIdx[j] != -1) 1092 { 1093 m_pcBinIf->encodeBinEP( predIdx[j] ? 1 : 0 ); 1094 if (predIdx[j]) 1095 { 1096 m_pcBinIf->encodeBinEP( predIdx[j]-1 ); 1097 } 1098 1098 #if H_MV_ENC_DEC_TRAC 1099 DTRACE_CU("mpm_idx", predIdx[j] );1100 #endif 1101 }1102 else1103 {1104 if (preds[j][0] > preds[j][1])1105 {1106 std::swap(preds[j][0], preds[j][1]);1107 }1108 if (preds[j][0] > preds[j][2])1109 {1110 std::swap(preds[j][0], preds[j][2]);1111 }1112 if (preds[j][1] > preds[j][2])1113 {1114 std::swap(preds[j][1], preds[j][2]);1115 }1116 for(Int i = (predNum[j] - 1); i >= 0; i--)1117 {1118 dir[j] = dir[j] > preds[j][i] ? dir[j] - 1 : dir[j];1119 }1120 m_pcBinIf->encodeBinsEP( dir[j], 5 );1099 DTRACE_CU("mpm_idx", predIdx[j] ); 1100 #endif 1101 } 1102 else 1103 { 1104 if (preds[j][0] > preds[j][1]) 1105 { 1106 std::swap(preds[j][0], preds[j][1]); 1107 } 1108 if (preds[j][0] > preds[j][2]) 1109 { 1110 std::swap(preds[j][0], preds[j][2]); 1111 } 1112 if (preds[j][1] > preds[j][2]) 1113 { 1114 std::swap(preds[j][1], preds[j][2]); 1115 } 1116 for(Int i = (predNum[j] - 1); i >= 0; i--) 1117 { 1118 dir[j] = dir[j] > preds[j][i] ? dir[j] - 1 : dir[j]; 1119 } 1120 m_pcBinIf->encodeBinsEP( dir[j], 5 ); 1121 1121 #if H_MV_ENC_DEC_TRAC 1122 DTRACE_CU("rem_intra_luma_pred_mode", dir[j] );1123 #endif 1124 }1122 DTRACE_CU("rem_intra_luma_pred_mode", dir[j] ); 1123 #endif 1124 } 1125 1125 #if H_3D_DIM 1126 1126 } … … 1467 1467 { 1468 1468 #endif 1469 piPCMSample = pcCU->getPCMSampleCb() + uiChromaOffset;1470 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2;1471 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2;1472 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma();1473 1474 for(uiY = 0; uiY < uiHeight; uiY++)1475 {1476 for(uiX = 0; uiX < uiWidth; uiX++)1477 {1478 UInt uiSample = piPCMSample[uiX];1479 1480 m_pcBinIf->xWritePCMCode(uiSample, uiSampleBits);1481 }1482 piPCMSample += uiWidth;1483 }1484 1485 piPCMSample = pcCU->getPCMSampleCr() + uiChromaOffset;1486 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2;1487 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2;1488 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma();1489 1490 for(uiY = 0; uiY < uiHeight; uiY++)1491 {1492 for(uiX = 0; uiX < uiWidth; uiX++)1493 {1494 UInt uiSample = piPCMSample[uiX];1495 1496 m_pcBinIf->xWritePCMCode(uiSample, uiSampleBits);1497 }1498 piPCMSample += uiWidth;1499 }1469 piPCMSample = pcCU->getPCMSampleCb() + uiChromaOffset; 1470 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2; 1471 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2; 1472 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma(); 1473 1474 for(uiY = 0; uiY < uiHeight; uiY++) 1475 { 1476 for(uiX = 0; uiX < uiWidth; uiX++) 1477 { 1478 UInt uiSample = piPCMSample[uiX]; 1479 1480 m_pcBinIf->xWritePCMCode(uiSample, uiSampleBits); 1481 } 1482 piPCMSample += uiWidth; 1483 } 1484 1485 piPCMSample = pcCU->getPCMSampleCr() + uiChromaOffset; 1486 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2; 1487 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2; 1488 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma(); 1489 1490 for(uiY = 0; uiY < uiHeight; uiY++) 1491 { 1492 for(uiX = 0; uiX < uiWidth; uiX++) 1493 { 1494 UInt uiSample = piPCMSample[uiX]; 1495 1496 m_pcBinIf->xWritePCMCode(uiSample, uiSampleBits); 1497 } 1498 piPCMSample += uiWidth; 1499 } 1500 1500 #if H_3D_DISABLE_CHROMA 1501 1501 }
Note: See TracChangeset for help on using the changeset viewer.