Changeset 781 in 3DVCSoftware
- Timestamp:
- 20 Jan 2014, 04:34:18 (11 years ago)
- Location:
- branches/HTM-9.3-dev3-Qualcomm
- Files:
-
- 2 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibCommon/ContextTables.h
r773 r781 107 107 108 108 #if H_3D_DIM 109 #if QC_GENERIC_SDC_G0122 110 #define NUM_DEPTH_INTRA_MODE_CTX 1 ///< number of context models for depth intra modes 111 #else 109 112 #define NUM_DEPTH_INTRA_MODE_CTX 8 ///< number of context models for depth intra modes 113 #endif 110 114 #define NUM_DDC_FLAG_CTX 2 ///< number of context models for deltaDC flag (DMM or RBC) 111 115 #define NUM_DDC_DATA_CTX 1 ///< number of context models for deltaDC data (DMM or RBC) 112 116 #if H_3D_DIM_DMM 113 117 #define NUM_DMM1_DATA_CTX 1 ///< number of context models for DMM1 data 118 #endif 119 #if QC_GENERIC_SDC_G0122 120 #define NUM_ANGLE_FLAG_CTX 3 121 #define NUM_INTRASDC_FLAG_CTX 3 114 122 #endif 115 123 #endif … … 383 391 #endif 384 392 #if H_3D_DIM 393 #if QC_GENERIC_SDC_G0122 394 static const UChar 395 INIT_DEPTH_INTRA_MODE[3][NUM_DEPTH_INTRA_MODE_CTX] = 396 { 397 { 154, }, 398 { 154, }, 399 { 154, } 400 }; 401 #else 385 402 static const UChar 386 403 INIT_DEPTH_INTRA_MODE[3][NUM_DEPTH_INTRA_MODE_CTX] = … … 390 407 {64, 0, CNU, CNU, 168, 109, 0, 0} 391 408 }; 409 #endif 410 411 #if QC_GENERIC_SDC_G0122 412 static const UChar 413 INIT_ANGLE_FLAG[3][NUM_ANGLE_FLAG_CTX] = 414 { 415 { 154, 155, 156 }, 416 { 141, 185, 214 }, 417 { 155, 170, 157 }, 418 }; 419 static const UChar 420 INIT_INTRASDC_FLAG[3][NUM_INTRASDC_FLAG_CTX] = 421 { 422 { 214, 229, 230 }, 423 { 215, 202, 174 }, 424 { 213, 201, 246 }, 425 }; 426 #endif 392 427 393 428 static const UChar -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibCommon/TComDataCU.cpp
r773 r781 2401 2401 #endif 2402 2402 2403 #if QC_GENERIC_SDC_G0122 2404 UInt TComDataCU::getCtxSDCFlag( UInt uiAbsPartIdx ) 2405 { 2406 TComDataCU* pcTempCU; 2407 UInt uiTempPartIdx; 2408 UInt uiCtx = 0; 2409 2410 // Get BCBP of left PU 2411 pcTempCU = getPULeft( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx ); 2412 uiCtx = ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? pcTempCU->getSDCFlag( uiTempPartIdx ) : 0; 2413 2414 // Get BCBP of above PU 2415 pcTempCU = getPUAbove( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx ); 2416 uiCtx += ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? pcTempCU->getSDCFlag( uiTempPartIdx ) : 0; 2417 2418 return uiCtx; 2419 } 2420 2421 UInt TComDataCU::getCtxAngleFlag( UInt uiAbsPartIdx ) 2422 { 2423 TComDataCU* pcTempCU; 2424 UInt uiTempPartIdx; 2425 UInt uiCtx = 0; 2426 2427 // Get BCBP of left PU 2428 pcTempCU = getPULeft( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx ); 2429 uiCtx = ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? ( pcTempCU->getLumaIntraDir( uiTempPartIdx ) < NUM_INTRA_MODE ? 1 : 0 ) : 0; 2430 2431 // Get BCBP of above PU 2432 pcTempCU = getPUAbove( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx ); 2433 uiCtx += ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? ( pcTempCU->getLumaIntraDir( uiTempPartIdx ) < NUM_INTRA_MODE ? 1 : 0 ) : 0; 2434 2435 return uiCtx; 2436 } 2437 #endif 2438 2403 2439 UInt TComDataCU::getCtxInterDir( UInt uiAbsPartIdx ) 2404 2440 { … … 2627 2663 if( !getSlice()->getIsDepth() || !isIntra(uiAbsPartIdx) || getPartitionSize(uiAbsPartIdx) != SIZE_2Nx2N ) 2628 2664 return false; 2629 2665 #if QC_GENERIC_SDC_G0122 2666 if( isDimMode( getLumaIntraDir( uiAbsPartIdx ) ) && !isDimDeltaDC( getLumaIntraDir( uiAbsPartIdx ) ) ) 2667 { 2668 return true; 2669 } 2670 2671 if( getLumaIntraDir( uiAbsPartIdx ) < NUM_INTRA_MODE ) 2672 { 2673 return true; 2674 } 2675 2676 return false; 2677 #endif 2630 2678 // check prediction mode 2631 2679 UInt uiLumaPredMode = getLumaIntraDir( uiAbsPartIdx ); -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibCommon/TComDataCU.h
r773 r781 571 571 Pel getSDCSegmentDCOffset( UInt uiSeg, UInt uiPartIdx ) { return m_apSegmentDCOffset[uiSeg][uiPartIdx]; } 572 572 Void setSDCSegmentDCOffset( Pel pOffset, UInt uiSeg, UInt uiPartIdx) { m_apSegmentDCOffset[uiSeg][uiPartIdx] = pOffset; } 573 #if QC_GENERIC_SDC_G0122 574 UInt getCtxSDCFlag ( UInt uiAbsPartIdx ); 575 UInt getCtxAngleFlag ( UInt uiAbsPartIdx ); 576 #endif 573 577 #endif 574 578 #endif -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibCommon/TComPrediction.cpp
r773 r781 416 416 417 417 #if H_3D_DIM 418 Void TComPrediction::predIntraLumaDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc ) 418 Void TComPrediction::predIntraLumaDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc 419 #if QC_GENERIC_SDC_G0122 420 , TComWedgelet* dmm4Segmentation 421 #endif 422 ) 419 423 { 420 424 assert( iWidth == iHeight ); … … 442 446 case( DMM4_IDX ): 443 447 { 448 #if QC_GENERIC_SDC_G0122 449 if( dmm4Segmentation == NULL ) 450 { 451 dmmSegmentation = new TComWedgelet( iWidth, iHeight ); 452 xPredContourFromTex( pcCU, uiAbsPartIdx, iWidth, iHeight, dmmSegmentation ); 453 } 454 else 455 { 456 xPredContourFromTex( pcCU, uiAbsPartIdx, iWidth, iHeight, dmm4Segmentation ); 457 dmmSegmentation = dmm4Segmentation; 458 } 459 #else 444 460 dmmSegmentation = new TComWedgelet( iWidth, iHeight ); 445 461 xPredContourFromTex( pcCU, uiAbsPartIdx, iWidth, iHeight, dmmSegmentation ); 462 #endif 446 463 } break; 447 464 default: assert(0); … … 494 511 495 512 #if H_3D_DIM_DMM 513 #if QC_GENERIC_SDC_G0122 514 if( dimType == DMM4_IDX && dmm4Segmentation == NULL ) { dmmSegmentation->destroy(); delete dmmSegmentation; } 515 #else 496 516 if( dimType == DMM4_IDX ) { dmmSegmentation->destroy(); delete dmmSegmentation; } 517 #endif 497 518 #endif 498 519 } … … 2184 2205 Int iSumPix[2]; 2185 2206 memset(iSumPix, 0, sizeof(Int)*2); 2186 2207 #if QC_GENERIC_SDC_G0122 2208 for( Int i = 0; i < uiNumSegments; i++ ) 2209 { 2210 rpSegMeans[i] = 0; 2211 } 2212 #endif 2187 2213 if (orgDC == false) 2188 2214 { … … 2199 2225 rpSegMeans[ucSegmentRB] = pOrig[uiStride * (uiSize-1) + (uiSize-1) ]; 2200 2226 } 2227 #if QC_GENERIC_SDC_G0122 2228 else if( getDimType( uiIntraMode ) == DMM4_IDX ) 2229 { 2230 Pel *ptmpOrig = pOrig; 2231 Bool *ptmpMask = pMask, bBreak = false; 2232 UChar ucSegment = ptmpMask? (UChar) ptmpMask[0] : 0; 2233 UChar bFirstSeg = ucSegment; 2234 2235 rpSegMeans[ucSegment] = ptmpOrig[0]; 2236 for ( Int y = 0; y < uiSize; y++ ) 2237 { 2238 for ( Int x = 0; x < uiSize; x++ ) 2239 { 2240 ucSegment = ptmpMask[x]; 2241 assert( ucSegment < uiNumSegments ); 2242 2243 if( bFirstSeg != ucSegment ) 2244 { 2245 rpSegMeans[ucSegment] = ptmpOrig[x]; 2246 bBreak = true; 2247 break; 2248 } 2249 } 2250 2251 if( bBreak ) 2252 { 2253 break; 2254 } 2255 2256 ptmpOrig += uiStride; 2257 ptmpMask += uiMaskStride; 2258 } 2259 } 2260 else 2261 #else 2201 2262 else if (uiIntraMode == PLANAR_IDX) 2263 #endif 2202 2264 { 2203 2265 Pel* pLeftTop = pOrig; -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibCommon/TComPrediction.h
r773 r781 167 167 #if H_3D_DIM 168 168 // Depth intra 169 Void predIntraLumaDepth ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc = false ); 169 Void predIntraLumaDepth ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc = false 170 #if QC_GENERIC_SDC_G0122 171 , TComWedgelet* dmm4Segmentation = NULL 172 #endif 173 ); 170 174 #if H_3D_DIM_SDC 171 175 Void analyzeSegmentsSDC ( Pel* pOrig, UInt uiStride, UInt uiSize, Pel* rpSegMeans, UInt uiNumSegments, Bool* pMask, UInt uiMaskStride -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibCommon/TypeDef.h
r773 r781 235 235 #define H_3D_DELTA_DLT 1 236 236 #endif 237 #define QC_GENERIC_SDC_G0122 1 // Generalize SDC to all depth intra modes 237 238 238 239 #define H_3D_DIM_ENC 1 // Depth Intra encoder optimizations, includes: -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibDecoder/TDecCu.cpp
r773 r781 932 932 pcCU->getPattern()->initPattern ( pcCU, 0, uiAbsPartIdx ); 933 933 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, 0, m_pcPrediction->getPredicBuf(), m_pcPrediction->getPredicBufWidth(), m_pcPrediction->getPredicBufHeight(), bAboveAvail, bLeftAvail ); 934 934 #if QC_GENERIC_SDC_G0122 935 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 936 #endif 935 937 //===== get prediction signal ===== 936 938 #if H_3D_DIM 937 939 if( isDimMode( uiLumaPredMode ) ) 938 940 { 939 m_pcPrediction->predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight ); 941 m_pcPrediction->predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight 942 #if QC_GENERIC_SDC_G0122 943 , false, dmm4Segmentation 944 #endif 945 ); 940 946 } 941 947 else … … 963 969 uiMaskStride = pcWedgelet->getStride(); 964 970 } 965 971 #if QC_GENERIC_SDC_G0122 972 if( getDimType( uiLumaPredMode ) == DMM4_IDX ) 973 { 974 uiNumSegments = 2; 975 pbMask = dmm4Segmentation->getPattern(); 976 uiMaskStride = dmm4Segmentation->getStride(); 977 } 978 #endif 966 979 // get DC prediction for each segment 967 980 Pel apDCPredValues[2]; … … 1025 1038 pRecCr += uiStrideC; 1026 1039 } 1040 #if QC_GENERIC_SDC_G0122 1041 dmm4Segmentation->destroy(); delete dmm4Segmentation; 1042 #endif 1027 1043 } 1028 1044 #endif -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibDecoder/TDecSbac.cpp
r773 r781 87 87 , m_cDdcFlagSCModel ( 1, 1, NUM_DDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 88 88 , m_cDdcDataSCModel ( 1, 1, NUM_DDC_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 89 #if QC_GENERIC_SDC_G0122 90 , m_cAngleFlagSCModel ( 1, 1, NUM_ANGLE_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 91 , m_cIntraSdcFlagSCModel ( 1, 1, NUM_INTRASDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 92 #endif 89 93 #if H_3D_DIM_DMM 90 94 , m_cDmm1DataSCModel ( 1, 1, NUM_DMM1_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 170 174 m_cDdcFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_DDC_FLAG ); 171 175 m_cDdcDataSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_DDC_DATA ); 176 #if QC_GENERIC_SDC_G0122 177 m_cAngleFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_ANGLE_FLAG ); 178 m_cIntraSdcFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_INTRASDC_FLAG ); 179 #endif 172 180 #if H_3D_DIM_DMM 173 181 m_cDmm1DataSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_DMM1_DATA ); … … 239 247 m_cDdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG ); 240 248 m_cDdcDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_DATA ); 249 #if QC_GENERIC_SDC_G0122 250 m_cAngleFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG ); 251 m_cIntraSdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG ); 252 #endif 241 253 #if H_3D_DIM_DMM 242 254 m_cDmm1DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA ); … … 925 937 if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE ) 926 938 #if H_3D_DIM_SDC 939 #if QC_GENERIC_SDC_G0122 940 if( 1 ) 941 #else 927 942 if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) ) 943 #endif 928 944 #endif 929 945 { … … 943 959 if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE ) 944 960 #if H_3D_DIM_SDC 961 #if QC_GENERIC_SDC_G0122 962 if( 1 ) 963 #else 945 964 if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) ) 965 #endif 946 966 #endif 947 967 { … … 1049 1069 { 1050 1070 UInt symbol; 1071 #if QC_GENERIC_SDC_G0122 1072 UInt uiNumSegments = isDimMode( dir ) ? 2 : 1; 1073 #else 1051 1074 UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2; 1075 #endif 1052 1076 1053 1077 if( pcCU->getSDCFlag( absPartIdx ) ) … … 1089 1113 } 1090 1114 1115 #if QC_GENERIC_SDC_G0122 1116 Void TDecSbac::parseIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx, UInt depth ) 1117 { 1118 UInt uiSymbol, uiIsDimMode; 1119 1120 if( ( pcCU->getSlice()->getSPS()->getMaxCUWidth() >> pcCU->getDepth( absPartIdx ) ) < 64 ) //DMM and HEVC intra modes are both allowed 1121 { 1122 m_pcTDecBinIf->decodeBin( uiSymbol, m_cAngleFlagSCModel.get( 0, 0, pcCU->getCtxAngleFlag( absPartIdx ) ) ); 1123 } 1124 else 1125 { 1126 uiSymbol = 1; 1127 } 1128 uiIsDimMode = uiSymbol ? 0 : 1; 1129 pcCU->setLumaIntraDirSubParts( 0, absPartIdx, depth ); 1130 1131 if( pcCU->getPartitionSize( absPartIdx ) == SIZE_2Nx2N ) //SDC is allowed only in this case 1132 { 1133 m_pcTDecBinIf->decodeBin( uiSymbol, m_cIntraSdcFlagSCModel.get( 0, 0, pcCU->getCtxSDCFlag( absPartIdx ) ) ); 1134 } 1135 else 1136 { 1137 uiSymbol = 0; 1138 } 1139 1140 pcCU->setSDCFlagSubParts( uiSymbol, absPartIdx, depth ); 1141 1142 //decode DMM index 1143 if( uiIsDimMode ) 1144 { 1145 m_pcTDecBinIf->decodeBin( uiSymbol, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) ); 1146 if( !uiSymbol ) 1147 { 1148 pcCU->setLumaIntraDirSubParts( ( 2 * DMM1_IDX + DIM_OFFSET ), absPartIdx, depth ); 1149 } 1150 else 1151 { 1152 pcCU->setLumaIntraDirSubParts( ( 2 * DMM4_IDX + DIM_OFFSET ), absPartIdx, depth ); 1153 } 1154 } 1155 } 1156 #else 1091 1157 Void TDecSbac::parseIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx, UInt depth ) 1092 1158 { … … 1151 1217 #endif 1152 1218 } 1219 #endif 1153 1220 #endif 1154 1221 -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibDecoder/TDecSbac.h
r773 r781 211 211 ContextModel3DBuffer m_cDdcFlagSCModel; 212 212 ContextModel3DBuffer m_cDdcDataSCModel; 213 #if QC_GENERIC_SDC_G0122 214 ContextModel3DBuffer m_cAngleFlagSCModel; 215 ContextModel3DBuffer m_cIntraSdcFlagSCModel; 216 #endif 213 217 #if H_3D_DIM_DMM 214 218 ContextModel3DBuffer m_cDmm1DataSCModel; -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSbac.cpp
r773 r781 93 93 , m_cDdcFlagSCModel ( 1, 1, NUM_DDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 94 94 , m_cDdcDataSCModel ( 1, 1, NUM_DDC_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 95 #if QC_GENERIC_SDC_G0122 96 , m_cAngleFlagSCModel ( 1, 1, NUM_ANGLE_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 97 , m_cIntraSdcFlagSCModel ( 1, 1, NUM_INTRASDC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 98 #endif 95 99 #if H_3D_DIM_DMM 96 100 , m_cDmm1DataSCModel ( 1, 1, NUM_DMM1_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 168 172 m_cDdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG ); 169 173 m_cDdcDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_DATA ); 174 #if QC_GENERIC_SDC_G0122 175 m_cAngleFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG ); 176 m_cIntraSdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG ); 177 #endif 170 178 #if H_3D_DIM_DMM 171 179 m_cDmm1DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA ); … … 252 260 curCost += m_cDdcFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_FLAG ); 253 261 curCost += m_cDdcDataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DDC_DATA ); 262 #if QC_GENERIC_SDC_G0122 263 curCost += m_cAngleFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_ANGLE_FLAG ); 264 curCost += m_cIntraSdcFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_INTRASDC_FLAG ); 265 #endif 254 266 #if H_3D_DIM_DMM 255 267 curCost += m_cDmm1DataSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DMM1_DATA ); … … 317 329 m_cDdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG ); 318 330 m_cDdcDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DDC_DATA ); 331 #if QC_GENERIC_SDC_G0122 332 m_cAngleFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG ); 333 m_cIntraSdcFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG ); 334 #endif 319 335 #if H_3D_DIM_DMM 320 336 m_cDmm1DataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA ); … … 629 645 this->m_cDepthIntraModeSCModel .copyFrom( &pSrc->m_cDepthIntraModeSCModel ); 630 646 this->m_cDdcFlagSCModel .copyFrom( &pSrc->m_cDdcFlagSCModel ); 647 #if QC_GENERIC_SDC_G0122 648 this->m_cAngleFlagSCModel .copyFrom( &pSrc->m_cAngleFlagSCModel ); 649 this->m_cIntraSdcFlagSCModel .copyFrom( &pSrc->m_cIntraSdcFlagSCModel ); 650 #endif 631 651 } 632 652 #endif … … 1016 1036 if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE ) 1017 1037 #if H_3D_DIM_SDC 1038 #if QC_GENERIC_SDC_G0122 1039 if( 1 ) 1040 #else 1018 1041 if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) ) 1042 #endif 1019 1043 #endif 1020 1044 { … … 1042 1066 if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE ) 1043 1067 #if H_3D_DIM_SDC 1068 #if QC_GENERIC_SDC_G0122 1069 if( 1 ) 1070 #else 1044 1071 if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) ) 1072 #endif 1045 1073 #endif 1046 1074 { … … 1146 1174 UInt dimDeltaDC; 1147 1175 Pel deltaDC; 1176 #if QC_GENERIC_SDC_G0122 1177 UInt uiNumSegments = isDimMode( dir ) ? 2 : 1; 1178 #else 1148 1179 UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2; 1180 #endif 1149 1181 if( pcCU->getSDCFlag( absPartIdx ) ) 1150 1182 { … … 1176 1208 } 1177 1209 1210 #if QC_GENERIC_SDC_G0122 1211 Void TEncSbac::codeIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx ) 1212 { 1213 UInt dir = pcCU->getLumaIntraDir( absPartIdx ); 1214 1215 if( ( pcCU->getSlice()->getSPS()->getMaxCUWidth() >> pcCU->getDepth( absPartIdx ) ) < 64 ) //DMM and HEVC intra modes are both allowed 1216 { 1217 m_pcBinIf->encodeBin( isDimMode( dir ) ? 0 : 1, m_cAngleFlagSCModel.get( 0, 0, pcCU->getCtxAngleFlag( absPartIdx ) ) ); 1218 } 1219 1220 if( pcCU->getPartitionSize( absPartIdx ) == SIZE_2Nx2N ) //SDC is allowed only in this case 1221 { 1222 m_pcBinIf->encodeBin( pcCU->getSDCFlag( absPartIdx ) ? 1 : 0, m_cIntraSdcFlagSCModel.get( 0, 0, pcCU->getCtxSDCFlag( absPartIdx ) ) ); 1223 } 1224 1225 if( isDimMode( dir ) ) 1226 { 1227 UInt uiCodeIdx = 0; 1228 1229 switch( getDimType( dir ) ) 1230 { 1231 case DMM1_IDX: uiCodeIdx = 0; break; 1232 case DMM4_IDX: uiCodeIdx = 1; break; 1233 default: break; 1234 } 1235 //mode coding 1236 m_pcBinIf->encodeBin( uiCodeIdx == 0 ? 0 : 1, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) ); 1237 } 1238 } 1239 #else 1178 1240 Void TEncSbac::codeIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx ) 1179 1241 { … … 1216 1278 } 1217 1279 } 1280 #endif 1218 1281 #endif 1219 1282 -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSbac.h
r773 r781 247 247 ContextModel3DBuffer m_cDdcFlagSCModel; 248 248 ContextModel3DBuffer m_cDdcDataSCModel; 249 #if QC_GENERIC_SDC_G0122 250 ContextModel3DBuffer m_cAngleFlagSCModel; 251 ContextModel3DBuffer m_cIntraSdcFlagSCModel; 252 #endif 249 253 #if H_3D_DIM_DMM 250 254 ContextModel3DBuffer m_cDmm1DataSCModel; -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSearch.cpp
r773 r781 1862 1862 1863 1863 #if H_3D_DIM_SDC 1864 Void TEncSearch::xIntraCodingSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bResidual ) 1864 Void TEncSearch::xIntraCodingSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, 1865 #if QC_GENERIC_SDC_G0122 1866 Bool bZeroResidual, Int iSDCDeltaResi 1867 #else 1868 Bool bResidual 1869 #endif 1870 ) 1865 1871 { 1866 1872 UInt uiLumaPredMode = pcCU ->getLumaIntraDir( uiAbsPartIdx ); … … 1880 1886 AOF( pcCU->getSDCAvailable(uiAbsPartIdx) ); 1881 1887 AOF( pcCU->getSDCFlag(uiAbsPartIdx) ); 1888 #if !QC_GENERIC_SDC_G0122 1882 1889 AOF( uiLumaPredMode == DC_IDX || uiLumaPredMode == PLANAR_IDX || ( getDimType( uiLumaPredMode ) == DMM1_IDX && !isDimDeltaDC( uiLumaPredMode ) ) ); 1883 1890 AOF( uiLumaPredMode == DC_IDX || uiLumaPredMode == PLANAR_IDX || uiWidth < 64 ); 1891 #endif 1884 1892 1885 1893 //===== init availability pattern ===== … … 1888 1896 pcCU->getPattern()->initPattern ( pcCU, 0, uiAbsPartIdx ); 1889 1897 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, 0, m_piYuvExt, m_iYuvExtStride, m_iYuvExtHeight, bAboveAvail, bLeftAvail ); 1890 1898 #if QC_GENERIC_SDC_G0122 1899 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 1900 #endif 1891 1901 //===== get prediction signal ===== 1892 1902 #if H_3D_DIM 1893 1903 if( isDimMode( uiLumaPredMode ) ) 1894 1904 { 1895 predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, true ); 1905 predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, true 1906 #if QC_GENERIC_SDC_G0122 1907 , dmm4Segmentation 1908 #endif 1909 ); 1896 1910 } 1897 1911 else … … 1919 1933 uiMaskStride = pcWedgelet->getStride(); 1920 1934 } 1921 1935 #if QC_GENERIC_SDC_G0122 1936 if( getDimType( uiLumaPredMode ) == DMM4_IDX ) 1937 { 1938 uiNumSegments = 2; 1939 pbMask = dmm4Segmentation->getPattern(); 1940 uiMaskStride = dmm4Segmentation->getStride(); 1941 } 1942 #endif 1943 1922 1944 // get DC prediction for each segment 1923 1945 Pel apDCPredValues[2]; … … 1931 1953 { 1932 1954 // remap reconstructed value to valid depth values 1955 #if QC_GENERIC_SDC_G0122 1956 Pel pDCRec = ( !bZeroResidual ) ? apDCOrigValues[uiSegment] : apDCPredValues[uiSegment]; 1957 #else 1933 1958 Pel pDCRec = bResidual?apDCOrigValues[uiSegment]:apDCPredValues[uiSegment]; 1934 1959 #endif 1935 1960 // get residual (idx) 1936 1961 #if H_3D_DIM_DLT … … 1939 1964 Pel pResidualIdx = pDCRec - apDCPredValues[uiSegment]; 1940 1965 #endif 1941 1966 #if QC_GENERIC_SDC_G0122 1967 if( !bZeroResidual ) 1968 { 1969 Pel pPredIdx = pcCU->getSlice()->getPPS()->getDLT()->depthValue2idx( pcCU->getSlice()->getLayerIdInVps(), apDCPredValues[uiSegment] ); 1970 Int pTestIdx = pPredIdx + pResidualIdx + iSDCDeltaResi; 1971 if( pTestIdx >= 0 && pTestIdx < pcCU->getSlice()->getPPS()->getDLT()->getNumDepthValues( pcCU->getSlice()->getLayerIdInVps() ) ) 1972 { 1973 pResidualIdx += iSDCDeltaResi; 1974 } 1975 } 1976 #endif 1942 1977 // save SDC DC offset 1943 1978 pcCU->setSDCSegmentDCOffset(pResidualIdx, uiSegment, uiAbsPartIdx); … … 2024 2059 #endif 2025 2060 dRDCost = m_pcRdCost->calcRdCost( uiBits, ruiDist ); 2061 #if QC_GENERIC_SDC_G0122 2062 dmm4Segmentation->destroy(); delete dmm4Segmentation; 2063 #endif 2026 2064 } 2027 2065 #endif … … 2901 2939 case( DMM4_IDX ): 2902 2940 { 2941 #if !QC_GENERIC_SDC_G0122 2903 2942 if( uiWidth > 4 ) 2943 #endif 2904 2944 { 2905 2945 biSegmentation = new TComWedgelet( uiWidth, uiHeight ); … … 2957 2997 { 2958 2998 pcCU->setSDCFlagSubParts( (uiSDC != 0), uiPartOffset, uiDepth + uiInitTrDepth ); 2999 #if QC_GENERIC_SDC_G0122 3000 for( Int iSDCDeltaResi = -2; iSDCDeltaResi <= 2; iSDCDeltaResi++ ) 3001 { 3002 if( ( uiSDC == 0 ) && iSDCDeltaResi != 0 ) 3003 { 3004 continue; 3005 } 3006 #endif 2959 3007 #endif 2960 3008 … … 2966 3014 #if H_3D_DIM_SDC 2967 3015 bTestZeroResi |= pcCU->getSDCFlag(uiPartOffset); 3016 #endif 3017 #if QC_GENERIC_SDC_G0122 3018 if( uiSDC != 0 && iSDCDeltaResi != 0 ) 3019 { 3020 bTestZeroResi = false; 3021 } 2968 3022 #endif 2969 3023 #endif … … 3000 3054 3001 3055 // start encoding with SDC 3056 #if QC_GENERIC_SDC_G0122 3057 xIntraCodingSDC(pcCU, uiPartOffset, pcOrgYuv, pcPredYuv, uiPUDistY, dPUCost, ( testZeroResi != 0 ), iSDCDeltaResi ); 3058 #else 3002 3059 xIntraCodingSDC(pcCU, uiPartOffset, pcOrgYuv, pcPredYuv, uiPUDistY, dPUCost, (testZeroResi!=0)); 3060 #endif 3003 3061 } 3004 3062 else … … 3073 3131 #if H_3D_DIM_ENC || H_3D_DIM_SDC 3074 3132 } 3133 #endif 3134 #if QC_GENERIC_SDC_G0122 3135 } // SDC residual loop 3075 3136 #endif 3076 3137 #if H_3D_DIM_SDC -
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSearch.h
r773 r781 353 353 #endif 354 354 #if H_3D_DIM_SDC 355 Void xIntraCodingSDC ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bResidual ); 355 Void xIntraCodingSDC ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, 356 #if QC_GENERIC_SDC_G0122 357 Bool bZeroResidual, Int iSDCDeltaResi 358 #else 359 Bool bResidual 360 #endif 361 ); 356 362 #endif 357 363 #endif
Note: See TracChangeset for help on using the changeset viewer.