Changeset 1145 in 3DVCSoftware for branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder
- Timestamp:
- 25 Feb 2015, 10:53:42 (10 years ago)
- Location:
- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncCavlc.cpp
r1133 r1145 889 889 WRITE_FLAG( sps3dExt->getQtPredFlag( d ) ? 1 : 0 , "qt_pred_flag" ); 890 890 WRITE_FLAG( sps3dExt->getInterSdcFlag( d ) ? 1 : 0 , "inter_sdc_flag" ); 891 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 892 WRITE_FLAG( sps3dExt->getDepthIntraSkipFlag( d ) ? 1 : 0 , "depth_intra_skip_flag" ); 893 #else 891 894 WRITE_FLAG( sps3dExt->getIntraSingleFlag( d ) ? 1 : 0 , "intra_single_flag" ); 895 #endif 892 896 } 893 897 } … … 2435 2439 assert(0); 2436 2440 } 2441 2442 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2443 Void TEncCavlc::codeDIS( TComDataCU* pcCU, UInt uiAbsPartIdx ) 2444 { 2445 assert(0); 2446 } 2447 #else 2437 2448 #if H_3D_SINGLE_DEPTH 2438 2449 Void TEncCavlc::codeSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx ) … … 2441 2452 } 2442 2453 #endif 2454 #endif 2455 2443 2456 Void TEncCavlc::codeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 2444 2457 { -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncCavlc.h
r1133 r1145 127 127 Void codeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx ); 128 128 Void codeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 129 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 130 Void codeDIS ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 131 #else 129 132 #if H_3D_SINGLE_DEPTH 130 133 Void codeSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx ); 134 #endif 131 135 #endif 132 136 Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncCu.cpp
r1133 r1145 712 712 } 713 713 #endif 714 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 715 rpcTempCU->initEstData( uiDepth, iMinQP, isAddLowestQP ); 716 if( rpcBestCU->getSlice()->getDepthIntraSkipFlag() ) 717 { 718 xCheckRDCostDIS( rpcBestCU, rpcTempCU, SIZE_2Nx2N ); 719 rpcTempCU->initEstData( uiDepth, iMinQP, isAddLowestQP ); 720 } 721 #else 714 722 #if H_3D_SINGLE_DEPTH 715 723 rpcTempCU->initEstData( uiDepth, iMinQP, isAddLowestQP ); … … 719 727 rpcTempCU->initEstData( uiDepth, iMinQP, isAddLowestQP ); 720 728 } 729 #endif 721 730 #endif 722 731 if(!earlyDetectionSkipMode) … … 1577 1586 return; 1578 1587 } 1588 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 1589 m_pcEntropyCoder->encodeDIS( pcCU, uiAbsPartIdx ); 1590 if(!pcCU->getDISFlag(uiAbsPartIdx)) 1591 { 1592 #else 1579 1593 #if H_3D_SINGLE_DEPTH 1580 1594 m_pcEntropyCoder->encodeSingleDepthMode( pcCU, uiAbsPartIdx ); 1581 1595 if(!pcCU->getSingleDepthFlag(uiAbsPartIdx)) 1582 1596 { 1597 #endif 1583 1598 #endif 1584 1599 m_pcEntropyCoder->encodePredMode( pcCU, uiAbsPartIdx ); … … 1614 1629 m_pcEntropyCoder->encodeCoeff( pcCU, uiAbsPartIdx, uiDepth, pcCU->getWidth (uiAbsPartIdx), pcCU->getHeight(uiAbsPartIdx), bCodeDQP ); 1615 1630 setdQPFlag( bCodeDQP ); 1631 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 1632 } 1633 #else 1616 1634 #if H_3D_SINGLE_DEPTH 1617 1635 } 1636 #endif 1618 1637 #endif 1619 1638 // --- write terminating bit --- … … 2000 2019 2001 2020 rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth ); 2021 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2022 rpcTempCU->setDISFlagSubParts( false, 0, uhDepth ); 2023 #else 2002 2024 #if H_3D_SINGLE_DEPTH 2003 2025 rpcTempCU->setSingleDepthFlagSubParts( false, 0, uhDepth ); 2026 #endif 2004 2027 #endif 2005 2028 #if H_3D_VSP // possible bug fix … … 2042 2065 } 2043 2066 rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth ); 2067 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2068 rpcTempCU->setDISFlagSubParts( false, 0, uhDepth ); 2069 #else 2044 2070 #if H_3D_SINGLE_DEPTH 2045 2071 rpcTempCU->setSingleDepthFlagSubParts( false, 0, uhDepth ); 2072 #endif 2046 2073 #endif 2047 2074 rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth ); … … 2193 2220 2194 2221 rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth ); 2222 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2223 rpcTempCU->setDISFlagSubParts( false, 0, uhDepth ); 2224 #else 2195 2225 #if H_3D_SINGLE_DEPTH 2196 2226 rpcTempCU->setSingleDepthFlagSubParts( false, 0, uhDepth ); 2227 #endif 2197 2228 #endif 2198 2229 rpcTempCU->setPartSizeSubParts ( ePartSize, 0, uhDepth ); … … 2303 2334 } 2304 2335 rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth ); 2336 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2337 rpcTempCU->setDISFlagSubParts( false, 0, uhDepth ); 2338 #else 2305 2339 #if H_3D_SINGLE_DEPTH 2306 2340 rpcTempCU->setSingleDepthFlagSubParts( false, 0, uhDepth ); 2341 #endif 2307 2342 #endif 2308 2343 rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth ); … … 2413 2448 } 2414 2449 } 2450 2451 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2452 Void TEncCu::xCheckRDCostDIS( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize eSize ) 2453 { 2454 UInt uiDepth = rpcTempCU->getDepth( 0 ); 2455 if( !rpcBestCU->getSlice()->getIsDepth() || (eSize != SIZE_2Nx2N)) 2456 { 2457 return; 2458 } 2459 2460 #if H_3D_VSO // M5 2461 if( m_pcRdCost->getUseRenModel() ) 2462 { 2463 UInt uiWidth = m_ppcOrigYuv[uiDepth]->getWidth (); 2464 UInt uiHeight = m_ppcOrigYuv[uiDepth]->getHeight (); 2465 Pel* piSrc = m_ppcOrigYuv[uiDepth]->getLumaAddr(); 2466 UInt uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride (); 2467 m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight ); 2468 } 2469 #endif 2470 2471 rpcTempCU->setSkipFlagSubParts( false, 0, uiDepth ); 2472 rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth ); 2473 rpcTempCU->setPredModeSubParts( MODE_INTRA, 0, uiDepth ); 2474 rpcTempCU->setCUTransquantBypassSubParts( rpcTempCU->getCUTransquantBypass(0), 0, uiDepth ); 2475 2476 rpcTempCU->setTrIdxSubParts(0, 0, uiDepth); 2477 rpcTempCU->setCbfSubParts(0, 1, 1, 0, uiDepth); 2478 rpcTempCU->setDISFlagSubParts(true, 0, uiDepth); 2479 rpcTempCU->setLumaIntraDirSubParts (DC_IDX, 0, uiDepth); 2480 #if H_3D_DIM_SDC 2481 rpcTempCU->setSDCFlagSubParts( false, 0, uiDepth); 2482 #endif 2483 2484 UInt uiPreCalcDistC; 2485 m_pcPredSearch ->estIntraPredDIS ( rpcTempCU, m_ppcOrigYuv[uiDepth], m_ppcPredYuvTemp[uiDepth], m_ppcResiYuvTemp[uiDepth], m_ppcRecoYuvTemp[uiDepth], uiPreCalcDistC, false ); 2486 2487 2488 m_ppcRecoYuvTemp[uiDepth]->copyToPicLuma(rpcTempCU->getPic()->getPicYuvRec(), rpcTempCU->getAddr(), rpcTempCU->getZorderIdxInCU() ); 2489 2490 2491 m_pcEntropyCoder->resetBits(); 2492 if ( rpcTempCU->getSlice()->getPPS()->getTransquantBypassEnableFlag()) 2493 { 2494 m_pcEntropyCoder->encodeCUTransquantBypassFlag( rpcTempCU, 0, true ); 2495 } 2496 m_pcEntropyCoder->encodeSkipFlag ( rpcTempCU, 0, true ); 2497 m_pcEntropyCoder->encodeDIS( rpcTempCU, 0, true ); 2498 2499 2500 m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_TEMP_BEST]); 2501 2502 rpcTempCU->getTotalBits() = m_pcEntropyCoder->getNumberOfWrittenBits(); 2503 rpcTempCU->getTotalBins() = ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded(); 2504 2505 2506 #if H_3D_VSO // M6 2507 if( m_pcRdCost->getUseLambdaScaleVSO()) 2508 rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCostVSO( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() ); 2509 else 2510 #endif 2511 rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCost( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() ); 2512 2513 2514 xCheckDQP( rpcTempCU ); 2515 xCheckBestMode(rpcBestCU, rpcTempCU, uiDepth); 2516 } 2517 #else 2415 2518 #if H_3D_SINGLE_DEPTH 2416 2519 Void TEncCu::xCheckRDCostSingleDepth( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize eSize ) … … 2479 2582 xCheckBestMode(rpcBestCU, rpcTempCU, uiDepth); 2480 2583 } 2584 #endif 2481 2585 #endif 2482 2586 … … 2636 2740 2637 2741 rpcTempCU->setSkipFlagSubParts( false, 0, uiDepth ); 2742 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2743 rpcTempCU->setDISFlagSubParts( false, 0, uiDepth ); 2744 #else 2638 2745 #if H_3D_SINGLE_DEPTH 2639 2746 rpcTempCU->setSingleDepthFlagSubParts( false, 0, uiDepth ); 2747 #endif 2640 2748 #endif 2641 2749 rpcTempCU->setPartSizeSubParts( eSize, 0, uiDepth ); … … 2666 2774 } 2667 2775 m_pcEntropyCoder->encodeSkipFlag ( rpcTempCU, 0, true ); 2776 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2777 m_pcEntropyCoder->encodeDIS( rpcTempCU, 0, true ); 2778 if(!rpcTempCU->getDISFlag(0)) 2779 { 2780 #else 2668 2781 #if H_3D_SINGLE_DEPTH 2669 2782 m_pcEntropyCoder->encodeSingleDepthMode( rpcTempCU, 0, true ); 2670 2783 if(!rpcTempCU->getSingleDepthFlag(0)) 2671 2784 { 2785 #endif 2672 2786 #endif 2673 2787 m_pcEntropyCoder->encodePredMode( rpcTempCU, 0, true ); … … 2683 2797 m_pcEntropyCoder->encodeCoeff( rpcTempCU, 0, uiDepth, rpcTempCU->getWidth (0), rpcTempCU->getHeight(0), bCodeDQP ); 2684 2798 setdQPFlag( bCodeDQP ); 2799 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2800 } 2801 #else 2685 2802 #if H_3D_SINGLE_DEPTH 2686 2803 } 2687 #endif 2804 #endif 2805 #endif 2688 2806 m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_TEMP_BEST]); 2689 2807 … … 2713 2831 2714 2832 rpcTempCU->setSkipFlagSubParts( false, 0, uiDepth ); 2833 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2834 rpcTempCU->setDISFlagSubParts( false, 0, uiDepth ); 2835 #else 2715 2836 #if H_3D_SINGLE_DEPTH 2716 2837 rpcTempCU->setSingleDepthFlagSubParts( false, 0, uiDepth ); 2838 #endif 2717 2839 #endif 2718 2840 rpcTempCU->setIPCMFlag(0, true); … … 2732 2854 } 2733 2855 m_pcEntropyCoder->encodeSkipFlag ( rpcTempCU, 0, true ); 2856 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2857 m_pcEntropyCoder->encodeDIS( rpcTempCU, 0, true ); 2858 #else 2734 2859 #if H_3D_SINGLE_DEPTH 2735 2860 m_pcEntropyCoder->encodeSingleDepthMode( rpcTempCU, 0, true ); 2861 #endif 2736 2862 #endif 2737 2863 m_pcEntropyCoder->encodePredMode ( rpcTempCU, 0, true ); -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncCu.h
r1084 r1145 159 159 Void xCheckRDCostInterDBBP( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, Bool bUseMRG = false ); 160 160 #endif 161 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 162 Void xCheckRDCostDIS ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize ); 163 #else 161 164 #if H_3D_SINGLE_DEPTH 162 165 Void xCheckRDCostSingleDepth ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize ); 166 #endif 163 167 #endif 164 168 #if H_3D_DIM -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncEntropy.cpp
r1133 r1145 111 111 m_pcEntropyCoderIf->codeSkipFlag( pcCU, uiAbsPartIdx ); 112 112 } 113 114 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 115 Void TEncEntropy::encodeDIS( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD ) 116 { 117 if ( !pcCU->getSlice()->getIsDepth() ) 118 { 119 return; 120 } 121 if( bRD ) 122 { 123 uiAbsPartIdx = 0; 124 } 125 m_pcEntropyCoderIf->codeDIS( pcCU, uiAbsPartIdx ); 126 } 127 #else 113 128 #if H_3D_SINGLE_DEPTH 114 129 Void TEncEntropy::encodeSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD ) … … 125 140 } 126 141 #endif 142 #endif 143 127 144 /** encode merge flag 128 145 * \param pcCU -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncEntropy.h
r1133 r1145 82 82 virtual Void codeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0; 83 83 virtual Void codeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0; 84 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 85 virtual Void codeDIS ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0; 86 #else 84 87 #if H_3D_SINGLE_DEPTH 85 88 virtual Void codeSingleDepthMode ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0; 89 #endif 86 90 #endif 87 91 virtual Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0; … … 166 170 Void encodeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false ); 167 171 Void encodeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false ); 172 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 173 Void encodeDIS ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD=false ); 174 #else 168 175 #if H_3D_SINGLE_DEPTH 169 176 Void encodeSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD=false ); 177 #endif 170 178 #endif 171 179 Void encodePUWise ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false ); -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp
r1133 r1145 58 58 , m_cCUSplitFlagSCModel ( 1, 1, NUM_SPLIT_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels ) 59 59 , m_cCUSkipFlagSCModel ( 1, 1, NUM_SKIP_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 60 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 61 , m_cCUDISFlagSCModel ( 1, 1, NUM_DIS_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 62 , m_cCUDISTypeSCModel ( 1, 1, NUM_DIS_TYPE_CTX , m_contextModels + m_numContextModels, m_numContextModels) 63 #else 60 64 #if H_3D_SINGLE_DEPTH 61 65 , m_cCUSingleDepthFlagSCModel ( 1, 1, NUM_SINGLEDEPTH_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 62 66 , m_cSingleDepthValueSCModel ( 1, 1, NUM_SINGLE_DEPTH_VALUE_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 67 #endif 63 68 #endif 64 69 , m_cCUMergeFlagExtSCModel ( 1, 1, NUM_MERGE_FLAG_EXT_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 134 139 135 140 m_cCUSkipFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SKIP_FLAG ); 141 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 142 m_cCUDISFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DIS_FLAG ); 143 m_cCUDISTypeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DIS_TYPE ); 144 #else 136 145 #if H_3D_SINGLE_DEPTH 137 146 m_cCUSingleDepthFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SINGLEDEPTH_FLAG ); 138 147 m_cSingleDepthValueSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SINGLE_DEPTH_VALUE_DATA ); 148 #endif 139 149 #endif 140 150 m_cCUMergeFlagExtSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_MERGE_FLAG_EXT); … … 214 224 curCost = m_cCUSplitFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SPLIT_FLAG ); 215 225 curCost += m_cCUSkipFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SKIP_FLAG ); 226 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 227 curCost += m_cCUDISFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DIS_FLAG ); 228 curCost += m_cCUDISTypeSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_DIS_TYPE ); 229 #else 216 230 #if H_3D_SINGLE_DEPTH 217 231 curCost += m_cCUSingleDepthFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SINGLEDEPTH_FLAG ); 218 232 curCost += m_cSingleDepthValueSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SINGLE_DEPTH_VALUE_DATA ); 233 #endif 219 234 #endif 220 235 curCost += m_cCUMergeFlagExtSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_MERGE_FLAG_EXT); … … 287 302 288 303 m_cCUSkipFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SKIP_FLAG ); 304 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 305 m_cCUDISFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DIS_FLAG ); 306 m_cCUDISTypeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DIS_TYPE ); 307 #else 289 308 #if H_3D_SINGLE_DEPTH 290 309 m_cCUSingleDepthFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SINGLEDEPTH_FLAG ); 291 310 m_cSingleDepthValueSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SINGLE_DEPTH_VALUE_DATA ); 292 #endif 311 #endif 312 #endif 293 313 m_cCUMergeFlagExtSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_MERGE_FLAG_EXT); 294 314 m_cCUMergeIdxExtSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_MERGE_IDX_EXT); … … 446 466 m_pcBinIf->encodeBinsEP( bins, numBins ); 447 467 } 468 469 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 470 Void TEncSbac::codeDIS( TComDataCU* pcCU, UInt uiAbsPartIdx ) 471 { 472 UInt uiSymbol = pcCU->getDISFlag(uiAbsPartIdx ) ? 1 : 0; 473 m_pcBinIf->encodeBin( uiSymbol, m_cCUDISFlagSCModel.get( 0, 0, 0 ) ); 474 if(uiSymbol) 475 { 476 UInt uiUnaryIdx = (UInt) pcCU->getDISType(uiAbsPartIdx); 477 UInt uiNumCand = 4; 478 479 if ( uiNumCand > 1 ) 480 { 481 for( UInt ui = 0; ui < uiNumCand - 1; ++ui ) 482 { 483 const UInt uiSymbol2 = ui == uiUnaryIdx ? 0 : 1; 484 if ( ui == 0 ) 485 { 486 m_pcBinIf->encodeBin( uiSymbol2, m_cCUDISTypeSCModel.get( 0, 0, 0 ) ); 487 } 488 else 489 { 490 m_pcBinIf->encodeBinEP( uiSymbol2 ); 491 } 492 if( uiSymbol2 == 0 ) 493 { 494 break; 495 } 496 } 497 } 498 } 499 } 500 #else 448 501 #if H_3D_SINGLE_DEPTH 449 502 Void TEncSbac::codeSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx ) … … 477 530 } 478 531 #endif 532 #endif 533 479 534 /** Coding of coeff_abs_level_minus3 480 535 * \param uiSymbol value of coeff_abs_level_minus3 -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncSbac.h
r1133 r1145 146 146 Void codeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx ); 147 147 Void codeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 148 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 149 Void codeDIS ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 150 #else 148 151 #if H_3D_SINGLE_DEPTH 149 152 Void codeSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx ); 153 #endif 150 154 #endif 151 155 Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); … … 215 219 ContextModel3DBuffer m_cCUSplitFlagSCModel; 216 220 ContextModel3DBuffer m_cCUSkipFlagSCModel; 221 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 222 ContextModel3DBuffer m_cCUDISFlagSCModel; 223 ContextModel3DBuffer m_cCUDISTypeSCModel; 224 #else 217 225 #if H_3D_SINGLE_DEPTH 218 226 ContextModel3DBuffer m_cCUSingleDepthFlagSCModel; 219 227 ContextModel3DBuffer m_cSingleDepthValueSCModel; 228 #endif 220 229 #endif 221 230 ContextModel3DBuffer m_cCUMergeFlagExtSCModel; -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncSearch.cpp
r1133 r1145 915 915 } 916 916 m_pcEntropyCoder->encodeSkipFlag( pcCU, 0, true ); 917 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 918 m_pcEntropyCoder->encodeDIS(pcCU, 0, true ); 919 if(!pcCU->getDISFlag(uiAbsPartIdx)) 920 #else 917 921 #if H_3D_SINGLE_DEPTH 918 922 m_pcEntropyCoder->encodeSingleDepthMode(pcCU, 0, true ); 919 923 if(!pcCU->getSingleDepthFlag(uiAbsPartIdx)) 920 924 #endif 925 #endif 921 926 m_pcEntropyCoder->encodePredMode( pcCU, 0, true ); 922 927 } 928 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 929 else 930 { 931 m_pcEntropyCoder->encodeDIS(pcCU, 0, true ); 932 } 933 #else 923 934 #if H_3D_SINGLE_DEPTH 924 935 else … … 926 937 m_pcEntropyCoder->encodeSingleDepthMode(pcCU, 0, true ); 927 938 } 928 #endif 939 #endif 940 #endif 941 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 942 if(!pcCU->getDISFlag(uiAbsPartIdx)) 943 { 944 #else 929 945 #if H_3D_SINGLE_DEPTH 930 946 if(!pcCU->getSingleDepthFlag(uiAbsPartIdx)) 931 947 { 932 948 #endif 949 #endif 933 950 m_pcEntropyCoder ->encodePartSize( pcCU, 0, pcCU->getDepth(0), true ); 934 951 … … 945 962 } 946 963 } 964 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 965 } 966 #else 947 967 #if H_3D_SINGLE_DEPTH 948 968 } 949 969 #endif 950 } 970 #endif 971 } 972 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 973 if(!pcCU->getDISFlag(uiAbsPartIdx)) 974 { 975 #else 951 976 #if H_3D_SINGLE_DEPTH 952 977 if(!pcCU->getSingleDepthFlag(uiAbsPartIdx)) 953 978 { 979 #endif 954 980 #endif 955 981 // luma prediction mode … … 995 1021 } 996 1022 } 1023 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 1024 } 1025 #else 997 1026 #if H_3D_SINGLE_DEPTH 998 1027 } 1028 #endif 999 1029 #endif 1000 1030 } … … 1859 1889 dRDCost += dSingleCost; 1860 1890 } 1891 1892 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 1893 Void TEncSearch::xIntraCodingDIS( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, UInt uiPredMode ) 1894 { 1895 UInt uiWidth = pcCU ->getWidth ( 0 ); 1896 UInt uiHeight = pcCU ->getHeight ( 0 ); 1897 UInt uiStride = pcOrgYuv ->getStride (); 1898 Pel* piOrg = pcOrgYuv ->getLumaAddr( uiAbsPartIdx ); 1899 Pel* piPred = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 1900 1901 AOF( uiWidth == uiHeight ); 1902 AOF( uiAbsPartIdx == 0 ); 1903 pcCU->setDISTypeSubParts(uiPredMode, uiAbsPartIdx, 0, pcCU->getDepth(0)); 1904 //===== reconstruction ===== 1905 1906 Bool bAboveAvail = false; 1907 Bool bLeftAvail = false; 1908 pcCU->getPattern()->initPattern ( pcCU, 0, 0 ); 1909 pcCU->getPattern()->initAdiPattern( pcCU, 0, 0, m_piYuvExt, m_iYuvExtStride, m_iYuvExtHeight, bAboveAvail, bLeftAvail ); 1910 1911 if ( uiPredMode == 0 ) 1912 { 1913 predIntraLumaAng( pcCU->getPattern(), VER_IDX, piPred, uiStride, uiWidth, uiHeight, bAboveAvail, bLeftAvail ); 1914 } 1915 else if ( uiPredMode == 1 ) 1916 { 1917 predIntraLumaAng( pcCU->getPattern(), HOR_IDX, piPred, uiStride, uiWidth, uiHeight, bAboveAvail, bLeftAvail ); 1918 } 1919 else if ( uiPredMode == 2 ) 1920 { 1921 Pel pSingleDepth = 1 << ( g_bitDepthY - 1 ); 1922 pcCU->getNeighDepth ( 0, 0, &pSingleDepth, 0 ); 1923 for( UInt uiY = 0; uiY < uiHeight; uiY++ ) 1924 { 1925 for( UInt uiX = 0; uiX < uiWidth; uiX++ ) 1926 { 1927 piPred[ uiX ] = pSingleDepth; 1928 } 1929 piPred+= uiStride; 1930 } 1931 } 1932 else if ( uiPredMode == 3 ) 1933 { 1934 Pel pSingleDepth = 1 << ( g_bitDepthY - 1 ); 1935 pcCU->getNeighDepth ( 0, 0, &pSingleDepth, 1 ); 1936 for( UInt uiY = 0; uiY < uiHeight; uiY++ ) 1937 { 1938 for( UInt uiX = 0; uiX < uiWidth; uiX++ ) 1939 { 1940 piPred[ uiX ] = pSingleDepth; 1941 } 1942 piPred+= uiStride; 1943 } 1944 } 1945 1946 // clear UV 1947 UInt uiStrideC = pcPredYuv->getCStride(); 1948 Pel *pRecCb = pcPredYuv->getCbAddr(); 1949 Pel *pRecCr = pcPredYuv->getCrAddr(); 1950 1951 for (Int y=0; y<uiHeight/2; y++) 1952 { 1953 for (Int x=0; x<uiWidth/2; x++) 1954 { 1955 pRecCb[x] = 1<<(g_bitDepthC-1); 1956 pRecCr[x] = 1<<(g_bitDepthC-1); 1957 } 1958 1959 pRecCb += uiStrideC; 1960 pRecCr += uiStrideC; 1961 } 1962 1963 piPred = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 1964 //===== determine distortion ===== 1965 #if H_3D_VSO 1966 if ( m_pcRdCost->getUseVSO() ) 1967 ruiDist = m_pcRdCost->getDistPartVSO ( pcCU, uiAbsPartIdx, piPred, uiStride, piOrg, uiStride, uiWidth, uiHeight, false ); 1968 else 1969 #endif 1970 ruiDist = m_pcRdCost->getDistPart(g_bitDepthY, piPred, uiStride, piOrg, uiStride, uiWidth, uiHeight ); 1971 1972 //===== determine rate and r-d cost ===== 1973 m_pcEntropyCoder->resetBits(); 1974 m_pcEntropyCoder->encodeDIS( pcCU, 0, true ); 1975 UInt uiBits = m_pcEntropyCoder->getNumberOfWrittenBits(); 1976 1977 #if H_3D_VSO 1978 if ( m_pcRdCost->getUseLambdaScaleVSO()) 1979 dRDCost = m_pcRdCost->calcRdCostVSO( uiBits, ruiDist ); 1980 else 1981 #endif 1982 dRDCost = m_pcRdCost->calcRdCost( uiBits, ruiDist ); 1983 } 1984 #else 1861 1985 #if H_3D_SINGLE_DEPTH 1862 1986 Void TEncSearch::xIntraCodingSingleDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Int iTestDepthIdx, Pel *DepthNeighbor ) … … 1921 2045 } 1922 2046 #endif 2047 #endif 2048 1923 2049 #if H_3D_DIM_SDC 1924 2050 Void TEncSearch::xIntraCodingSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bZeroResidual, Int iSDCDeltaResi ) … … 2861 2987 pcCU->setChromIntraDirSubParts( uiBestMode, 0, pcCU->getDepth( 0 ) ); 2862 2988 } 2989 2990 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 2991 Void TEncSearch::estIntraPredDIS( TComDataCU* pcCU, 2992 TComYuv* pcOrgYuv, 2993 TComYuv* pcPredYuv, 2994 TComYuv* pcResiYuv, 2995 TComYuv* pcRecoYuv, 2996 UInt& ruiDistC, 2997 Bool bLumaOnly ) 2998 { 2999 UInt uiDepth = pcCU->getDepth(0); 3000 UInt uiWidth = pcCU->getWidth (0); 3001 UInt uiHeight = pcCU->getHeight(0); 3002 3003 3004 Pel* piOrg = pcOrgYuv ->getLumaAddr( 0, uiWidth ); 3005 UInt uiStride = pcPredYuv->getStride(); 3006 3007 Dist uiDist = 0; 3008 Double dCost = 0.0; 3009 Dist uiBestDist = 0; 3010 Double dBestCost = MAX_DOUBLE; 3011 UInt uiBestDISType = 0; 3012 3013 for( UInt uiPredMode = 0; uiPredMode < 4 ; uiPredMode++ ) 3014 { 3015 // set context models 3016 m_pcRDGoOnSbacCoder->load( m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST] ); 3017 3018 // determine residual for partition 3019 uiDist = 0; 3020 dCost = 0.0; 3021 #if H_3D_VSO // M36 3022 if( m_pcRdCost->getUseRenModel() ) 3023 { 3024 m_pcRdCost->setRenModelData( pcCU, 0, piOrg, uiStride, uiWidth, uiHeight ); 3025 } 3026 #endif 3027 xIntraCodingDIS(pcCU, 0, pcOrgYuv, pcPredYuv, uiDist, dCost, uiPredMode); 3028 // check r-d cost 3029 if( dCost < dBestCost ) 3030 { 3031 uiBestDist = uiDist; 3032 dBestCost = dCost; 3033 uiBestDISType = pcCU->getDISType(0); 3034 // copy reconstruction 3035 pcPredYuv->copyPartToPartYuv(pcRecoYuv, 0, uiWidth, uiHeight); 3036 } 3037 } 3038 3039 3040 pcCU->setDISTypeSubParts(uiBestDISType, 0, 0, uiDepth); 3041 assert(uiBestDISType >= 0); 3042 3043 //===== reset context models ===== 3044 m_pcRDGoOnSbacCoder->load(m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST]); 3045 3046 //===== set distortion (rate and r-d costs are determined later) ===== 3047 pcCU->getTotalDistortion() = uiBestDist; 3048 } 3049 #else 2863 3050 #if H_3D_SINGLE_DEPTH 2864 3051 Void … … 2950 3137 2951 3138 #endif 3139 #endif 3140 2952 3141 Void 2953 3142 TEncSearch::estIntraPredQT( TComDataCU* pcCU, … … 7261 7450 } 7262 7451 m_pcEntropyCoder->encodeSkipFlag ( pcCU, 0, true ); 7452 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 7453 m_pcEntropyCoder->encodeDIS ( pcCU, 0, true ); 7454 #else 7263 7455 #if H_3D_SINGLE_DEPTH 7264 7456 m_pcEntropyCoder->encodeSingleDepthMode ( pcCU, 0, true ); 7457 #endif 7265 7458 #endif 7266 7459 m_pcEntropyCoder->encodePredMode( pcCU, 0, true ); -
branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncSearch.h
r1084 r1145 191 191 TComYuv* pcRecoYuv, 192 192 UInt uiPreCalcDistC ); 193 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 194 Void estIntraPredDIS ( TComDataCU* pcCU, 195 TComYuv* pcOrgYuv, 196 TComYuv* pcPredYuv, 197 TComYuv* pcResiYuv, 198 TComYuv* pcRecoYuv, 199 UInt& ruiDistC, 200 Bool bLumaOnly ); 201 #else 193 202 #if H_3D_SINGLE_DEPTH 194 203 Void estIntraPredSingleDepth ( TComDataCU* pcCU, … … 199 208 UInt& ruiDistC, 200 209 Bool bLumaOnly ); 201 #endif 210 #endif 211 #endif 202 212 203 213 /// encoder estimation - inter prediction (non-skip) … … 354 364 UInt uiAbsPartIdx, 355 365 UInt stateU0V1Both2 ); 366 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033 367 Void xIntraCodingDIS ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, UInt uiPredMode ); 368 #else 356 369 #if H_3D_SINGLE_DEPTH 357 370 Void xIntraCodingSingleDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Int iTestDepthIdx, Pel * DepthNeighbor ); 371 #endif 358 372 #endif 359 373 #if H_3D_DIM
Note: See TracChangeset for help on using the changeset viewer.