Changeset 443 in 3DVCSoftware for trunk/source/Lib/TLibEncoder/TEncSbac.cpp
- Timestamp:
- 26 May 2013, 15:41:34 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibEncoder/TEncSbac.cpp
r332 r443 42 42 #include <algorithm> 43 43 44 #if RWTH_SDC_DLT_B003645 #define GetNumDepthValues() (pcCU->getSlice()->getSPS()->getNumDepthValues())46 #define GetBitsPerDepthValue() (pcCU->getSlice()->getSPS()->getBitsPerDepthValue())47 #endif48 49 44 //! \ingroup TLibEncoder 50 45 //! \{ … … 72 67 #if H3D_IVRP 73 68 , m_cResPredFlagSCModel ( 1, 1, NUM_RES_PRED_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 69 #endif 70 #if QC_ARP_D0177 71 , m_cCUPUARPW ( 1, 1, NUM_ARPW_CTX , m_contextModels + m_numContextModels, m_numContextModels) 74 72 #endif 75 73 , m_cCUPartSizeSCModel ( 1, 1, NUM_PART_SIZE_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 96 94 , m_cALFSvlcSCModel ( 1, 1, NUM_ALF_SVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 97 95 , m_cCUAMPSCModel ( 1, 1, NUM_CU_AMP_CTX , m_contextModels + m_numContextModels, m_numContextModels) 96 #if LGE_SAO_MIGRATION_D0091 97 , m_cSaoMergeSCModel ( 1, 1, NUM_SAO_MERGE_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 98 , m_cSaoTypeIdxSCModel ( 1, 1, NUM_SAO_TYPE_IDX_CTX , m_contextModels + m_numContextModels, m_numContextModels) 99 #else 98 100 , m_cSaoFlagSCModel ( 1, 1, NUM_SAO_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 99 101 , m_cSaoUvlcSCModel ( 1, 1, NUM_SAO_UVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 102 104 , m_cSaoMergeUpSCModel ( 1, 1, NUM_SAO_MERGE_UP_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 103 105 , m_cSaoTypeIdxSCModel ( 1, 1, NUM_SAO_TYPE_IDX_CTX , m_contextModels + m_numContextModels, m_numContextModels) 106 #endif 104 107 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 108 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 105 109 , m_cDmmFlagSCModel ( 1, 1, NUM_DMM_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 106 110 , m_cDmmModeSCModel ( 1, 1, NUM_DMM_MODE_CTX , m_contextModels + m_numContextModels, m_numContextModels) 111 #endif 107 112 , m_cDmmDataSCModel ( 1, 1, NUM_DMM_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 108 113 #endif … … 114 119 #endif 115 120 #if RWTH_SDC_DLT_B0036 121 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 116 122 , m_cSDCFlagSCModel ( 1, 1, SDC_NUM_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 123 #else 124 , m_cDepthModeModel ( 1, 1, DEPTH_MODE_NUM_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 125 , m_cDmmDeltaFlagModel ( 1, 1, DMM_DELTA_NUM_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 126 #endif 127 #if RWTH_SDC_CTX_SIMPL_D0032 128 , m_cSDCResidualFlagSCModel ( 1, 1, SDC_NUM_RESIDUAL_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 129 , m_cSDCResidualSCModel ( 1, 1, SDC_NUM_RESIDUAL_CTX , m_contextModels + m_numContextModels, m_numContextModels) 130 , m_cSDCPredModeSCModel ( 1, 3, SDC_NUM_PRED_MODE_CTX , m_contextModels + m_numContextModels, m_numContextModels) 131 #else 117 132 , m_cSDCResidualFlagSCModel ( 1, 2, SDC_NUM_RESIDUAL_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 118 133 , m_cSDCResidualSignFlagSCModel ( 1, 2, SDC_NUM_SIGN_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 119 134 , m_cSDCResidualSCModel ( 1, 2, SDC_NUM_RESIDUAL_CTX , m_contextModels + m_numContextModels, m_numContextModels) 120 135 , m_cSDCPredModeSCModel ( 1, 3, SDC_NUM_PRED_MODE_CTX , m_contextModels + m_numContextModels, m_numContextModels) 136 #endif 121 137 #endif 122 138 { … … 157 173 #if H3D_IVRP 158 174 m_cResPredFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_RES_PRED_FLAG ); 175 #endif 176 #if QC_ARP_D0177 177 m_cCUPUARPW.initBuffer ( eSliceType, iQp, (UChar*)INIT_ARPW ); 159 178 #endif 160 179 m_cCUPartSizeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PART_SIZE ); … … 180 199 m_cALFSvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ALF_SVLC ); 181 200 m_cCUTransSubdivFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_TRANS_SUBDIV_FLAG ); 201 #if LGE_SAO_MIGRATION_D0091 202 m_cSaoMergeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_FLAG ); 203 m_cSaoTypeIdxSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX ); 204 #else 182 205 m_cSaoFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_FLAG ); 183 206 m_cSaoUvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC ); … … 186 209 m_cSaoMergeUpSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 187 210 m_cSaoTypeIdxSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX ); 211 #endif 188 212 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 213 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 189 214 m_cDmmFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG ); 190 215 m_cDmmModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_MODE ); 216 #endif 191 217 m_cDmmDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_DATA ); 192 218 #endif … … 198 224 #endif 199 225 #if RWTH_SDC_DLT_B0036 226 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 200 227 m_cSDCFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG ); 228 #else 229 m_cDepthModeModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DEPTHMODE_FLAG ); 230 m_cDmmDeltaFlagModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMMDELTA_FLAG ); 231 #endif 201 232 m_cSDCResidualFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG ); 202 233 m_cSDCResidualSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL ); 234 #if !RWTH_SDC_CTX_SIMPL_D0032 203 235 m_cSDCResidualSignFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG ); 236 #endif 204 237 m_cSDCPredModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE ); 205 238 #endif … … 266 299 curCost += m_cALFSvlcSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_ALF_SVLC ); 267 300 curCost += m_cCUTransSubdivFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_TRANS_SUBDIV_FLAG ); 301 #if LGE_SAO_MIGRATION_D0091 302 curCost += m_cSaoMergeSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_MERGE_FLAG ); 303 curCost += m_cSaoTypeIdxSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_TYPE_IDX ); 304 #else 268 305 curCost += m_cSaoFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_FLAG ); 269 306 curCost += m_cSaoUvlcSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_UVLC ); … … 272 309 curCost += m_cSaoMergeUpSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 273 310 curCost += m_cSaoTypeIdxSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_TYPE_IDX ); 311 #endif 274 312 275 313 if (curCost < bestCost) … … 310 348 #if H3D_IVRP 311 349 m_cResPredFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_RES_PRED_FLAG ); 350 #endif 351 #if QC_ARP_D0177 352 m_cCUPUARPW.initBuffer ( eSliceType, iQp, (UChar*)INIT_ARPW ); 312 353 #endif 313 354 m_cCUPartSizeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PART_SIZE ); … … 333 374 m_cALFSvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ALF_SVLC ); 334 375 m_cCUTransSubdivFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_TRANS_SUBDIV_FLAG ); 376 #if LGE_SAO_MIGRATION_D0091 377 m_cSaoMergeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_FLAG ); 378 m_cSaoTypeIdxSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX ); 379 #else 335 380 m_cSaoFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_FLAG ); 336 381 m_cSaoUvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC ); … … 339 384 m_cSaoMergeUpSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 340 385 m_cSaoTypeIdxSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX ); 386 #endif 341 387 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 388 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 342 389 m_cDmmFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG ); 343 390 m_cDmmModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_MODE ); 391 #endif 344 392 m_cDmmDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_DATA ); 345 393 #endif 346 394 #if RWTH_SDC_DLT_B0036 395 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 347 396 m_cSDCFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG ); 397 #else 398 m_cDepthModeModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DEPTHMODE_FLAG ); 399 m_cDmmDeltaFlagModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMMDELTA_FLAG ); 400 #endif 348 401 m_cSDCResidualFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG ); 349 402 m_cSDCResidualSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL ); 403 #if !RWTH_SDC_CTX_SIMPL_D0032 350 404 m_cSDCResidualSignFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG ); 405 #endif 351 406 m_cSDCPredModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE ); 352 407 #endif … … 542 597 } 543 598 544 599 #if PKU_QC_DEPTH_INTRA_UNI_D0195 600 Void TEncSbac::loadDepthMode( TEncSbac* pSrc) 601 { 602 m_pcBinIf->copyState( pSrc->m_pcBinIf ); 603 604 this->m_cDepthModeModel .copyFrom( &pSrc->m_cDepthModeModel ); 605 this->m_cDmmDeltaFlagModel .copyFrom( &pSrc->m_cDmmDeltaFlagModel ); 606 } 607 #endif 545 608 Void TEncSbac::store( TEncSbac* pDest) 546 609 { … … 840 903 } 841 904 #endif 842 905 #if QC_ARP_D0177 906 Void TEncSbac::codeARPW( TComDataCU* pcCU, UInt uiAbsPartIdx ) 907 { 908 Int nW = pcCU->getARPW( uiAbsPartIdx ); 909 Int nMaxW = pcCU->getSlice()->getARPStepNum() - 1; 910 assert( 0 <= nW && nW <= nMaxW ); 911 assert(nMaxW > 0); 912 if( nMaxW > 0 ) 913 { 914 Int nOffset = pcCU->getCTXARPWFlag(uiAbsPartIdx); 915 assert( 0 <= nOffset && nOffset <= 2 ); 916 Int nBinNum = nW + ( nW != nMaxW ); 917 m_pcBinIf->encodeBin( nW != 0 , m_cCUPUARPW.get( 0, 0, 0 + nOffset ) ); 918 if( nBinNum > 1 ) 919 m_pcBinIf->encodeBin( nW == nMaxW , m_cCUPUARPW.get( 0, 0, 3 ) ); 920 } 921 } 922 #endif 843 923 Void TEncSbac::codeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 844 924 { … … 966 1046 } 967 1047 #endif 968 969 Void TEncSbac::codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx ) 1048 #if PKU_QC_DEPTH_INTRA_UNI_D0195 1049 Void TEncSbac::codeDepthIntraMode( TComDataCU* pcCU, UInt uiAbsPartIdx ) 1050 { 1051 UInt uiCodeWordTable[3][9] = {{0, 0, 0, 2, 0,6, 0, 0, 7},{0, 2, 3, 4, 5, 6, 14, 31, 30},{0, 2, 0, 0, 0, 0, 3, 0, 0}}; 1052 UInt uiCodeWordLenTable[3][9] = {{0, 1, 0, 2, 0,3, 0, 0, 3},{2, 3, 3, 3, 3, 3, 4, 5, 5},{1, 2, 0, 0, 0, 0, 2, 0, 0}}; 1053 UInt uiDir = pcCU->getLumaIntraDir(uiAbsPartIdx); 1054 Bool bSdcFlag = pcCU->getSDCFlag(uiAbsPartIdx); 1055 UInt uiPuIdx = ( pcCU->getWidth(uiAbsPartIdx) == 64 )? 2 : ( ( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_NxN && pcCU->getWidth(uiAbsPartIdx) == 8 ) ? 0 : 1 ); 1056 UInt uiCodeIdx = 0; 1057 if ( bSdcFlag ) 1058 { 1059 switch(uiDir) 1060 { 1061 case PLANAR_IDX: uiCodeIdx = 0; break; 1062 case DC_IDX: uiCodeIdx = 6; break; 1063 default: uiCodeIdx = 2; 1064 } 1065 } 1066 else if ( uiDir>=EDGE_INTRA_IDX ) 1067 { 1068 uiCodeIdx = 8; 1069 } 1070 else if ( uiDir<NUM_INTRA_MODE ) 1071 { 1072 uiCodeIdx = 1; 1073 } 1074 else 1075 { 1076 if (uiDir== DMM_WEDGE_FULL_IDX || uiDir==DMM_WEDGE_FULL_D_IDX ) {uiCodeIdx = 3;} 1077 if (uiDir== DMM_CONTOUR_PREDTEX_IDX|| uiDir==DMM_CONTOUR_PREDTEX_D_IDX) {uiCodeIdx = 4;} 1078 if (uiDir== DMM_WEDGE_PREDTEX_IDX || uiDir==DMM_WEDGE_PREDTEX_D_IDX ) {uiCodeIdx = 5;} 1079 if (uiDir== DMM_WEDGE_PREDDIR_IDX || uiDir==DMM_WEDGE_PREDDIR_D_IDX ) {uiCodeIdx = 7;} 1080 } 1081 //mode coding 1082 for (UInt i=0; i<uiCodeWordLenTable[uiPuIdx][uiCodeIdx]; i++) 1083 { 1084 UInt uiBit = uiCodeWordTable[uiPuIdx][uiCodeIdx] & ( 1<<(uiCodeWordLenTable[uiPuIdx][uiCodeIdx]-i-1) ); 1085 UInt uiCtxDepthMode = uiPuIdx*3 + ( i >= 2? 2 : i ); 1086 m_pcBinIf->encodeBin( uiBit!=0 , m_cDepthModeModel.get(0, 0, uiCtxDepthMode) ); 1087 } 1088 } 1089 Void TEncSbac::codeDepthModelingTable( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bSdcRD) 1090 { 1091 UInt uiDir = pcCU->getLumaIntraDir( uiAbsPartIdx ); 1092 Bool bSdcFlag = pcCU->getSDCFlag(uiAbsPartIdx); 1093 Bool bDmmFlag = (uiDir >= NUM_INTRA_MODE && uiDir < EDGE_INTRA_IDX &&(!bSdcFlag))? 1:0; 1094 1095 codeDepthIntraMode(pcCU,uiAbsPartIdx); 1096 1097 if (uiDir >= NUM_INTRA_MODE && uiDir < EDGE_INTRA_IDX )//DMM modes or SDC DMM1 1098 { 1099 assert(pcCU->getWidth(uiAbsPartIdx)<64); 1100 assert(pcCU->getWidth(uiAbsPartIdx)<64); 1101 if( uiDir == DMM_WEDGE_FULL_IDX || uiDir == DMM_WEDGE_FULL_D_IDX) { xCodeWedgeFullInfo ( pcCU, uiAbsPartIdx ); } 1102 else if( uiDir == DMM_WEDGE_PREDTEX_IDX || uiDir == DMM_WEDGE_PREDTEX_D_IDX ) { xCodeWedgePredTexInfo ( pcCU, uiAbsPartIdx ); } 1103 else if( uiDir == DMM_WEDGE_PREDDIR_IDX || uiDir == DMM_WEDGE_PREDDIR_D_IDX) { xCodeWedgePredDirInfo ( pcCU, uiAbsPartIdx ); } 1104 } 1105 else if(uiDir >= EDGE_INTRA_IDX)//CCM mode 1106 { 1107 assert(pcCU->getWidth(uiAbsPartIdx)<64); 1108 xCodeEdgeIntraInfo( pcCU, uiAbsPartIdx ); 1109 } 1110 1111 if (bDmmFlag) 1112 { 1113 m_pcBinIf->encodeBin( (uiDir&1) , m_cDmmDeltaFlagModel.get(0, 0, 0) ); 1114 if (uiDir&1) 1115 { 1116 Int iDeltaDC1 = 0,iDeltaDC2 = 0; 1117 if ( uiDir == DMM_WEDGE_FULL_D_IDX ) 1118 { 1119 iDeltaDC1 = pcCU->getWedgeFullDeltaDC1( uiAbsPartIdx ); 1120 iDeltaDC2 = pcCU->getWedgeFullDeltaDC2( uiAbsPartIdx ); 1121 } 1122 else if ( uiDir == DMM_WEDGE_PREDTEX_D_IDX ) 1123 { 1124 iDeltaDC1 = pcCU->getWedgePredTexDeltaDC1( uiAbsPartIdx ); 1125 iDeltaDC2 = pcCU->getWedgePredTexDeltaDC2( uiAbsPartIdx ); 1126 } 1127 else if ( uiDir == DMM_WEDGE_PREDDIR_D_IDX ) 1128 { 1129 iDeltaDC1 = pcCU->getWedgePredDirDeltaDC1( uiAbsPartIdx ); 1130 iDeltaDC2 = pcCU->getWedgePredDirDeltaDC2( uiAbsPartIdx ); 1131 } 1132 else if ( uiDir == DMM_CONTOUR_PREDTEX_D_IDX ) 1133 { 1134 iDeltaDC1 = pcCU->getContourPredTexDeltaDC1( uiAbsPartIdx ); 1135 iDeltaDC2 = pcCU->getContourPredTexDeltaDC2( uiAbsPartIdx ); 1136 1137 } 1138 1139 for ( Int i = 0; i < 2; i++ ) 1140 { 1141 Int iDeltaDC = (i==0)? iDeltaDC1 : iDeltaDC2; 1142 xWriteExGolombLevel( UInt( abs( iDeltaDC ) ), m_cDmmDataSCModel.get(0, 0, 1) ); 1143 if ( iDeltaDC != 0 ) 1144 { 1145 UInt uiSign = iDeltaDC > 0 ? 0 : 1; 1146 m_pcBinIf->encodeBinEP( uiSign ); 1147 } 1148 } 1149 } 1150 } 1151 else if (uiDir>=EDGE_INTRA_IDX) 1152 { 1153 m_pcBinIf->encodeBin( (uiDir == EDGE_INTRA_DELTA_IDX), m_cEdgeIntraDeltaDCSCModel.get(0, 0, 0) ); 1154 if( uiDir == EDGE_INTRA_DELTA_IDX ) 1155 { 1156 Int iDeltaDC0 = pcCU->getEdgeDeltaDC0( uiAbsPartIdx ); 1157 Int iDeltaDC1 = pcCU->getEdgeDeltaDC1( uiAbsPartIdx ); 1158 1159 for ( Int i = 0; i < 2; i++ ) 1160 { 1161 Int iDeltaDC = (i==0)? iDeltaDC0 : iDeltaDC1; 1162 xWriteExGolombLevel( UInt( abs( iDeltaDC ) ), m_cEdgeIntraDeltaDCSCModel.get(0, 0, 1) ); 1163 if ( iDeltaDC != 0 ) 1164 { 1165 UInt uiSign = iDeltaDC > 0 ? 0 : 1; 1166 m_pcBinIf->encodeBinEP( uiSign ); 1167 } 1168 } 1169 } 1170 } 1171 if (pcCU->getSDCFlag(uiAbsPartIdx))//SDC mode 1172 { 1173 assert(pcCU->getPartitionSize(uiAbsPartIdx)==SIZE_2Nx2N); 1174 UInt uiNumSegments = ( uiDir == DC_IDX || uiDir == PLANAR_IDX )? 1 : 2; 1175 if(!bSdcRD) 1176 { 1177 for (int uiSeg=0; uiSeg<uiNumSegments; uiSeg++) 1178 { 1179 codeSDCResidualData(pcCU, uiAbsPartIdx, uiSeg); 1180 } 1181 } 1182 } 1183 } 1184 #endif 1185 Void TEncSbac::codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx 1186 #if PKU_QC_DEPTH_INTRA_UNI_D0195 1187 , Bool bSdcRD 1188 #endif 1189 ) 970 1190 { 971 1191 UInt uiDir = pcCU->getLumaIntraDir( uiAbsPartIdx ); 972 1192 1193 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 973 1194 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 974 1195 if( pcCU->getSlice()->getSPS()->getUseDMM() && pcCU->getWidth( uiAbsPartIdx ) <= DMM_WEDGEMODEL_MAX_SIZE ) … … 1070 1291 } 1071 1292 #endif 1072 1293 #else 1294 if (pcCU->getSlice()->getSPS()->isDepth()) 1295 { 1296 codeDepthModelingTable(pcCU, uiAbsPartIdx, bSdcRD); 1297 } 1298 if (pcCU->getLumaIntraDir(uiAbsPartIdx)<NUM_INTRA_MODE && !pcCU->getSDCFlag(uiAbsPartIdx)) 1299 { 1300 #endif 1073 1301 Int uiPreds[3] = {-1, -1, -1}; 1074 1302 Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); … … 1116 1344 1117 1345 m_pcBinIf->encodeBinsEP( uiDir, 5 ); 1346 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 1118 1347 #if LGE_EDGE_INTRA_A0070 1119 1348 if (bCodeEdgeIntra) 1120 1349 if (uiDir == 31) m_pcBinIf->encodeBinsEP(0,1); 1121 1350 #endif 1351 #endif 1122 1352 } 1353 #if PKU_QC_DEPTH_INTRA_UNI_D0195 1354 } 1355 #else 1123 1356 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 1124 1357 } 1125 1358 #endif 1359 #endif 1360 1126 1361 return; 1127 1362 } … … 1887 2122 } 1888 2123 } 1889 2124 #if LGE_SAO_MIGRATION_D0091 2125 Void TEncSbac::codeSAOSign( UInt code ) 2126 { 2127 m_pcBinIf->encodeBinEP( code ); 2128 } 2129 2130 Void TEncSbac::codeSaoMaxUvlc ( UInt code, UInt maxSymbol ) 2131 { 2132 if (maxSymbol == 0) 2133 { 2134 return; 2135 } 2136 2137 Int i; 2138 Bool bCodeLast = ( maxSymbol > code ); 2139 2140 if ( code == 0 ) 2141 { 2142 m_pcBinIf->encodeBinEP( 0 ); 2143 } 2144 else 2145 { 2146 m_pcBinIf->encodeBinEP( 1 ); 2147 for ( i=0; i<code-1; i++ ) 2148 { 2149 m_pcBinIf->encodeBinEP( 1 ); 2150 } 2151 if( bCodeLast ) 2152 { 2153 m_pcBinIf->encodeBinEP( 0 ); 2154 } 2155 } 2156 } 2157 2158 /** Code SAO EO class or BO band position 2159 * \param uiLength 2160 * \param uiCode 2161 */ 2162 Void TEncSbac::codeSaoUflc ( UInt uiLength, UInt uiCode ) 2163 { 2164 m_pcBinIf->encodeBinsEP ( uiCode, uiLength ); 2165 } 2166 /** Code SAO merge flags 2167 * \param uiCode 2168 * \param uiCompIdx 2169 */ 2170 Void TEncSbac::codeSaoMerge ( UInt uiCode ) 2171 { 2172 if (uiCode == 0) 2173 { 2174 m_pcBinIf->encodeBin(0, m_cSaoMergeSCModel.get( 0, 0, 0 )); 2175 } 2176 else 2177 { 2178 m_pcBinIf->encodeBin(1, m_cSaoMergeSCModel.get( 0, 0, 0 )); 2179 } 2180 } 2181 /** Code SAO type index 2182 * \param uiCode 2183 */ 2184 Void TEncSbac::codeSaoTypeIdx ( UInt uiCode) 2185 { 2186 if (uiCode == 0) 2187 { 2188 m_pcBinIf->encodeBin( 0, m_cSaoTypeIdxSCModel.get( 0, 0, 0 ) ); 2189 } 2190 else 2191 { 2192 m_pcBinIf->encodeBin( 1, m_cSaoTypeIdxSCModel.get( 0, 0, 0 ) ); 2193 m_pcBinIf->encodeBinEP( uiCode <= 4 ? 1 : 0 ); //determine edge or band 2194 } 2195 } 2196 #else 1890 2197 Void TEncSbac::codeSaoFlag ( UInt uiCode ) 1891 2198 { … … 2003 2310 } 2004 2311 } 2312 #endif 2005 2313 /*! 2006 2314 **************************************************************************** … … 2397 2705 2398 2706 #if RWTH_SDC_DLT_B0036 2707 #if !PKU_QC_DEPTH_INTRA_UNI_D0195 2399 2708 Void TEncSbac::codeSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx ) 2400 2709 { … … 2411 2720 { 2412 2721 UInt uiBit = (uiPredMode == g_auiSDCPredModes[uiMPModeIdx]) ? 1 : 0; 2722 #if INTEL_SDC64_D0193 2723 if( !(pcCU->getWidth(uiAbsPartIdx) == 64 && i == 1)) 2724 #endif 2413 2725 m_pcBinIf->encodeBin( uiBit, m_cSDCPredModeSCModel.get( 0, i, uiCtx ) ); 2414 2726 … … 2437 2749 2438 2750 } 2751 #endif 2439 2752 2440 2753 Void TEncSbac::codeSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment ) … … 2450 2763 UInt uiSign = segmentDCOffset < 0 ? 1 : 0; 2451 2764 UInt uiAbsIdx = abs(segmentDCOffset); 2765 #if !LGE_CONCATENATE_D0141 2452 2766 UInt uiBit = 0; 2453 2454 UInt uiMaxResidualBits = GetBitsPerDepthValue(); 2767 #endif 2768 2769 UInt uiMaxResidualBits = pcCU->getSlice()->getSPS()->getBitsPerDepthValue(); 2455 2770 assert( uiMaxResidualBits <= g_uiBitDepth ); 2456 2771 2457 2772 // residual flag 2773 #if RWTH_SDC_CTX_SIMPL_D0032 2774 m_pcBinIf->encodeBin( uiResidual, m_cSDCResidualFlagSCModel.get( 0, 0, 0 ) ); 2775 #else 2458 2776 m_pcBinIf->encodeBin( uiResidual, m_cSDCResidualFlagSCModel.get( 0, uiSegment, 0 ) ); //TODO depthmap: more sophisticated context selection 2777 #endif 2459 2778 2460 2779 if (uiResidual) 2461 2780 { 2462 2781 // encode sign bit of residual 2782 #if RWTH_SDC_CTX_SIMPL_D0032 2783 m_pcBinIf->encodeBinEP( uiSign ); 2784 #else 2463 2785 m_pcBinIf->encodeBin( uiSign, m_cSDCResidualSignFlagSCModel.get( 0, uiSegment, 0 ) ); //TODO depthmap: more sophisticated context selection 2786 #endif 2464 2787 2465 assert(uiAbsIdx < GetNumDepthValues()); 2788 UInt uiNumDepthValues = pcCU->getSlice()->getSPS()->getNumDepthValues(); 2789 assert(uiAbsIdx < uiNumDepthValues); 2466 2790 2467 2791 // encode residual magnitude 2468 2792 uiAbsIdx -= 1; 2793 #if LGE_CONCATENATE_D0141 2794 //prefix part 2795 if ( uiAbsIdx == 0 ) 2796 m_pcBinIf->encodeBin( 0, m_cSDCResidualSCModel.get(0, 0, 0) ); 2797 else 2798 { 2799 UInt l = uiAbsIdx; 2800 UInt k = 0; 2801 UInt uiPrefixThreshold = ((uiNumDepthValues * 3) >> 2); 2802 while ( l > 0 && k < uiPrefixThreshold ) 2803 { 2804 m_pcBinIf->encodeBin( 1, m_cSDCResidualSCModel.get(0, 0, 0) ); 2805 l--; 2806 k++; 2807 } 2808 if ( uiAbsIdx < uiPrefixThreshold ) 2809 m_pcBinIf->encodeBin( 0, m_cSDCResidualSCModel.get(0, 0, 0) ); 2810 //suffix part 2811 else 2812 { 2813 uiAbsIdx -= uiPrefixThreshold; 2814 UInt uiSuffixLength = ( (UInt)ceil( Log2(uiNumDepthValues - uiPrefixThreshold) ) ); 2815 UInt uiBitInfo = 0; 2816 for ( Int i = 0; i < uiSuffixLength; i++) 2817 { 2818 uiBitInfo = ( uiAbsIdx & ( 1 << i ) ) >> i; 2819 m_pcBinIf->encodeBinEP( uiBitInfo); 2820 } 2821 } 2822 } 2823 #else 2469 2824 for (Int i=0; i<uiMaxResidualBits; i++) 2470 2825 { 2471 2826 uiBit = (uiAbsIdx & (1<<i))>>i; 2472 2827 2828 #if RWTH_SDC_CTX_SIMPL_D0032 2829 m_pcBinIf->encodeBin( uiBit, m_cSDCResidualSCModel.get( 0, 0, i ) ); 2830 #else 2473 2831 m_pcBinIf->encodeBin( uiBit, m_cSDCResidualSCModel.get( 0, uiSegment, i ) ); //TODO depthmap: more sophisticated context selection 2474 } 2832 #endif 2833 } 2834 #endif 2475 2835 2476 2836 }
Note: See TracChangeset for help on using the changeset viewer.