Changeset 781 in 3DVCSoftware for branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder
- Timestamp:
- 20 Jan 2014, 04:34:18 (11 years ago)
- Location:
- branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
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.