Changeset 189 in 3DVCSoftware for trunk/source/Lib/TLibDecoder/TDecSbac.cpp
- Timestamp:
- 18 Nov 2012, 22:11:37 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibDecoder/TDecSbac.cpp
r100 r189 38 38 #include "TDecSbac.h" 39 39 40 #if RWTH_SDC_DLT_B0036 41 #define GetNumDepthValues() (pcCU->getSlice()->getSPS()->getNumDepthValues()) 42 #define GetBitsPerDepthValue() (pcCU->getSlice()->getSPS()->getBitsPerDepthValue()) 43 #endif 44 40 45 //! \ingroup TLibDecoder 41 46 //! \{ … … 52 57 , m_cCUSplitFlagSCModel ( 1, 1, NUM_SPLIT_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels ) 53 58 , m_cCUSkipFlagSCModel ( 1, 1, NUM_SKIP_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 59 #if LGE_ILLUCOMP_B0045 60 , m_cCUICFlagSCModel ( 1, 1, NUM_IC_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 61 #endif 54 62 , m_cCUMergeFlagExtSCModel ( 1, 1, NUM_MERGE_FLAG_EXT_CTX , m_contextModels + m_numContextModels, m_numContextModels) 55 63 , m_cCUMergeIdxExtSCModel ( 1, 1, NUM_MERGE_IDX_EXT_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 98 106 , m_cDmmDataSCModel ( 1, 1, NUM_DMM_DATA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 99 107 #endif 100 #if LGE_EDGE_INTRA 108 #if LGE_EDGE_INTRA_A0070 101 109 , m_cEdgeIntraSCModel ( 1, 1, NUM_EDGE_INTRA_CTX , m_contextModels + m_numContextModels, m_numContextModels) 102 110 #if LGE_EDGE_INTRA_DELTA_DC 103 111 , m_cEdgeIntraDeltaDCSCModel ( 1, 1, NUM_EDGE_INTRA_DELTA_DC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 104 112 #endif 113 #endif 114 #if RWTH_SDC_DLT_B0036 115 , m_cSDCFlagSCModel ( 1, 1, SDC_NUM_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 116 , m_cSDCResidualFlagSCModel ( 1, 2, SDC_NUM_RESIDUAL_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 117 , m_cSDCResidualSignFlagSCModel ( 1, 2, SDC_NUM_SIGN_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 118 , m_cSDCResidualSCModel ( 1, 2, SDC_NUM_RESIDUAL_CTX , m_contextModels + m_numContextModels, m_numContextModels) 119 , m_cSDCPredModeSCModel ( 1, 3, SDC_NUM_PRED_MODE_CTX , m_contextModels + m_numContextModels, m_numContextModels) 105 120 #endif 106 121 { … … 146 161 m_cCUSplitFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SPLIT_FLAG ); 147 162 m_cCUSkipFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SKIP_FLAG ); 163 #if LGE_ILLUCOMP_B0045 164 m_cCUICFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_IC_FLAG ); 165 #endif 148 166 m_cCUMergeFlagExtSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_MERGE_FLAG_EXT ); 149 167 m_cCUMergeIdxExtSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_MERGE_IDX_EXT ); … … 188 206 189 207 m_cCUTransSubdivFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_TRANS_SUBDIV_FLAG ); 190 #if LGE_EDGE_INTRA 208 #if LGE_EDGE_INTRA_A0070 191 209 m_cEdgeIntraSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_EDGE_INTRA ); 192 210 #if LGE_EDGE_INTRA_DELTA_DC … … 199 217 m_cDmmModeSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_DMM_MODE ); 200 218 m_cDmmDataSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_DMM_DATA ); 219 #endif 220 #if RWTH_SDC_DLT_B0036 221 m_cSDCFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SDC_FLAG ); 222 m_cSDCResidualFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SDC_RESIDUAL_FLAG ); 223 m_cSDCResidualSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SDC_RESIDUAL ); 224 m_cSDCResidualSignFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SDC_SIGN_FLAG ); 225 m_cSDCPredModeSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SDC_PRED_MODE ); 201 226 #endif 202 227 … … 230 255 m_cCUSplitFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SPLIT_FLAG ); 231 256 m_cCUSkipFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SKIP_FLAG ); 257 #if LGE_ILLUCOMP_B0045 258 m_cCUICFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_IC_FLAG ); 259 #endif 232 260 m_cCUMergeFlagExtSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_MERGE_FLAG_EXT ); 233 261 m_cCUMergeIdxExtSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_MERGE_IDX_EXT ); … … 276 304 m_cDmmDataSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_DATA ); 277 305 #endif 306 #if RWTH_SDC_DLT_B0036 307 m_cSDCFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG ); 308 m_cSDCResidualFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG ); 309 m_cSDCResidualSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL ); 310 m_cSDCResidualSignFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG ); 311 m_cSDCPredModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE ); 312 #endif 278 313 279 314 m_pcTDecBinIf->start(); … … 578 613 } 579 614 615 #if LGE_ILLUCOMP_B0045 616 /** parse illumination compensation flag 617 * \param pcCU 618 * \param uiAbsPartIdx 619 * \param uiDepth 620 * \returns Void 621 */ 622 Void TDecSbac::parseICFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 623 { 624 UInt uiSymbol = 0; 625 UInt uiCtxIC = pcCU->getCtxICFlag( uiAbsPartIdx ); 626 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUICFlagSCModel.get( 0, 0, uiCtxIC ) ); 627 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 628 DTRACE_CABAC_T( "\tICFlag" ); 629 DTRACE_CABAC_T( "\tuiCtxIC: "); 630 DTRACE_CABAC_V( uiCtxIC ); 631 DTRACE_CABAC_T( "\tuiSymbol: "); 632 DTRACE_CABAC_V( uiSymbol ); 633 DTRACE_CABAC_T( "\n"); 634 635 pcCU->setICFlagSubParts( uiSymbol ? true : false , uiAbsPartIdx, 0, uiDepth ); 636 } 637 #endif 638 639 580 640 /** parse merge flag 581 641 * \param pcCU … … 693 753 694 754 UInt uiSymbol; 695 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSplitFlagSCModel.get( 0, 0, pcCU->getCtxSplitFlag( uiAbsPartIdx, uiDepth ) ) ); 696 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 697 DTRACE_CABAC_T( "\tSplitFlag\n" ) 755 756 #if OL_QTLIMIT_PREDCODING_B0068 757 Bool bParseSplitFlag = true; 758 759 TComSPS *sps = pcCU->getPic()->getSlice(0)->getSPS(); 760 TComPic *pcTexture = pcCU->getSlice()->getTexturePic(); 761 Bool bDepthMapDetect = (pcTexture != NULL); 762 Bool bIntraSliceDetect = (pcCU->getSlice()->getSliceType() == I_SLICE); 763 764 if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC()) 765 { 766 TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr()); 767 assert(pcTextureCU->getDepth(uiAbsPartIdx) >= uiDepth); 768 bParseSplitFlag = (pcTextureCU->getDepth(uiAbsPartIdx) > uiDepth); 769 } 770 771 if(bParseSplitFlag) 772 { 773 #endif 774 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSplitFlagSCModel.get( 0, 0, pcCU->getCtxSplitFlag( uiAbsPartIdx, uiDepth ) ) ); 775 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 776 DTRACE_CABAC_T( "\tSplitFlag\n" ) 777 #if OL_QTLIMIT_PREDCODING_B0068 778 } 779 else 780 uiSymbol = 0; 781 #endif 782 698 783 pcCU->setDepthSubParts( uiDepth + uiSymbol, uiAbsPartIdx ); 699 784 … … 711 796 UInt uiSymbol, uiMode = 0; 712 797 PartSize eMode; 798 799 #if OL_QTLIMIT_PREDCODING_B0068 800 Bool bParsePartSize = true; 801 TComSPS *sps = pcCU->getPic()->getSlice(0)->getSPS(); 802 TComPic *pcTexture = pcCU->getSlice()->getTexturePic(); 803 Bool bDepthMapDetect = (pcTexture != NULL); 804 Bool bIntraSliceDetect = (pcCU->getSlice()->getSliceType() == I_SLICE); 805 806 if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC()) 807 { 808 TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr()); 809 assert(pcTextureCU->getDepth(uiAbsPartIdx) >= uiDepth); 810 if (pcTextureCU->getDepth(uiAbsPartIdx) == uiDepth && pcTextureCU->getPartitionSize( uiAbsPartIdx ) != SIZE_NxN) 811 { 812 bParsePartSize = false; 813 eMode = SIZE_2Nx2N; 814 } 815 } 816 #endif 713 817 714 818 if ( pcCU->isIntra( uiAbsPartIdx ) ) 715 819 { 716 uiSymbol = 1; 717 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth ) 718 { 719 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, 0) ); 720 } 721 eMode = uiSymbol ? SIZE_2Nx2N : SIZE_NxN; 820 #if OL_QTLIMIT_PREDCODING_B0068 821 if(bParsePartSize) 822 { 823 #endif 824 uiSymbol = 1; 825 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth ) 826 { 827 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, 0) ); 828 } 829 eMode = uiSymbol ? SIZE_2Nx2N : SIZE_NxN; 830 #if OL_QTLIMIT_PREDCODING_B0068 831 } 832 #endif 722 833 UInt uiTrLevel = 0; 723 834 UInt uiWidthInBit = g_aucConvertToBit[pcCU->getWidth(uiAbsPartIdx)]+2; … … 735 846 else 736 847 { 737 UInt uiMaxNumBits = 2; 738 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getSlice()->getSPS()->getDisInter4x4() && (g_uiMaxCUWidth>>uiDepth) == 8 && (g_uiMaxCUHeight>>uiDepth) == 8 ) ) 739 { 740 uiMaxNumBits ++; 741 } 742 for ( UInt ui = 0; ui < uiMaxNumBits; ui++ ) 743 { 744 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, ui) ); 745 if ( uiSymbol ) 746 { 747 break; 748 } 749 uiMode++; 750 } 751 eMode = (PartSize) uiMode; 752 if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) ) 753 { 754 if (eMode == SIZE_2NxN) 755 { 848 #if OL_QTLIMIT_PREDCODING_B0068 849 if(bParsePartSize) 850 { 851 #endif 852 UInt uiMaxNumBits = 2; 853 if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getSlice()->getSPS()->getDisInter4x4() && (g_uiMaxCUWidth>>uiDepth) == 8 && (g_uiMaxCUHeight>>uiDepth) == 8 ) ) 854 { 855 uiMaxNumBits ++; 856 } 857 for ( UInt ui = 0; ui < uiMaxNumBits; ui++ ) 858 { 859 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, ui) ); 860 if ( uiSymbol ) 861 { 862 break; 863 } 864 uiMode++; 865 } 866 eMode = (PartSize) uiMode; 867 if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) ) 868 { 869 if (eMode == SIZE_2NxN) 870 { 871 #if AMP_CTX 872 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 )); 873 #else 874 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 0 )); 875 #endif 876 if (uiSymbol == 0) 877 { 878 #if AMP_CTX 879 m_pcTDecBinIf->decodeBinEP(uiSymbol); 880 #else 881 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 1 )); 882 #endif 883 eMode = (uiSymbol == 0? SIZE_2NxnU : SIZE_2NxnD); 884 } 885 } 886 else if (eMode == SIZE_Nx2N) 887 { 756 888 #if AMP_CTX 757 889 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 )); 758 890 #else 759 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 0 ));760 #endif 761 if (uiSymbol == 0)762 {891 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 0 )); 892 #endif 893 if (uiSymbol == 0) 894 { 763 895 #if AMP_CTX 764 m_pcTDecBinIf->decodeBinEP(uiSymbol); 765 #else 766 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 1 )); 767 #endif 768 eMode = (uiSymbol == 0? SIZE_2NxnU : SIZE_2NxnD); 896 m_pcTDecBinIf->decodeBinEP(uiSymbol); 897 #else 898 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 1 )); 899 #endif 900 eMode = (uiSymbol == 0? SIZE_nLx2N : SIZE_nRx2N); 901 } 769 902 } 770 903 } 771 else if (eMode == SIZE_Nx2N) 772 { 773 #if AMP_CTX 774 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 )); 775 #else 776 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 0 )); 777 #endif 778 if (uiSymbol == 0) 779 { 780 #if AMP_CTX 781 m_pcTDecBinIf->decodeBinEP(uiSymbol); 782 #else 783 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 1 )); 784 #endif 785 eMode = (uiSymbol == 0? SIZE_nLx2N : SIZE_nRx2N); 786 } 787 } 788 } 904 #if OL_QTLIMIT_PREDCODING_B0068 905 } 906 #endif 789 907 } 790 908 pcCU->setPartSizeSubParts( eMode, uiAbsPartIdx, uiDepth ); … … 862 980 #endif 863 981 864 #if LGE_EDGE_INTRA 982 #if LGE_EDGE_INTRA_A0070 865 983 Bool bCodeEdgeIntra = false; 866 984 if( pcCU->getSlice()->getSPS()->isDepth() ) … … 878 996 #endif 879 997 Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); 880 #if LGE_EDGE_INTRA 998 #if LGE_EDGE_INTRA_A0070 881 999 UInt uiCheckBit = 0; 882 1000 #endif … … 903 1021 904 1022 m_pcTDecBinIf->decodeBinsEP( uiSymbol, 5 ); 905 #if LGE_EDGE_INTRA 1023 #if LGE_EDGE_INTRA_A0070 906 1024 if (bCodeEdgeIntra) 907 1025 { … … 939 1057 } 940 1058 #endif 941 #if LGE_EDGE_INTRA 1059 #if LGE_EDGE_INTRA_A0070 942 1060 if ( intraPredMode != EDGE_INTRA_IDX) 943 1061 { … … 947 1065 intraPredMode += ( intraPredMode >= uiPreds[i] ); 948 1066 } 949 #if LGE_EDGE_INTRA 950 } 951 #endif 952 } 953 954 #if LGE_EDGE_INTRA 1067 #if LGE_EDGE_INTRA_A0070 1068 } 1069 #endif 1070 } 1071 1072 #if LGE_EDGE_INTRA_A0070 955 1073 if( intraPredMode == EDGE_INTRA_IDX ) 956 1074 { … … 2096 2214 #endif 2097 2215 2098 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX || (LGE_EDGE_INTRA && LGE_EDGE_INTRA_DELTA_DC)2216 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX || (LGE_EDGE_INTRA_A0070 && LGE_EDGE_INTRA_DELTA_DC) 2099 2217 Void TDecSbac::xReadExGolombLevel( UInt& ruiSymbol, ContextModel& rcSCModel ) 2100 2218 { … … 2355 2473 #endif 2356 2474 2357 #if LGE_EDGE_INTRA 2475 #if LGE_EDGE_INTRA_A0070 2358 2476 Void TDecSbac::xParseEdgeIntraInfo( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 2359 2477 { … … 2452 2570 } 2453 2571 #endif 2572 2573 #if RWTH_SDC_DLT_B0036 2574 Void TDecSbac::parseSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 2575 { 2576 assert( pcCU->getSlice()->getSPS()->isDepth() ); 2577 2578 UInt uiSymbol = 0; 2579 UInt uiCtxSDCFlag = pcCU->getCtxSDCFlag( uiAbsPartIdx ); 2580 m_pcTDecBinIf->decodeBin( uiSymbol, m_cSDCFlagSCModel.get( 0, 0, uiCtxSDCFlag ) ); 2581 2582 if( uiSymbol == 1 ) 2583 { 2584 pcCU->setPartSizeSubParts(SIZE_2Nx2N, uiAbsPartIdx, uiDepth); 2585 2586 pcCU->setSDCFlagSubParts( true, uiAbsPartIdx, 0, uiDepth); 2587 pcCU->setTrIdxSubParts(0, uiAbsPartIdx, uiDepth); 2588 pcCU->setCbfSubParts(1, 1, 1, uiAbsPartIdx, uiDepth); 2589 } 2590 } 2591 2592 Void TDecSbac::parseSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 2593 { 2594 assert( pcCU->getSlice()->getSPS()->isDepth() ); 2595 assert( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2Nx2N ); 2596 2597 assert( pcCU->getSDCFlag(uiAbsPartIdx) ); 2598 2599 UInt uiCtx = 0; 2600 2601 UInt uiMPModeIdx = 0; 2602 2603 for(Int i=0; i<RWTH_SDC_NUM_PRED_MODES-1; i++) 2604 { 2605 UInt uiIsMostProb = 0; 2606 m_pcTDecBinIf->decodeBin( uiIsMostProb, m_cSDCPredModeSCModel.get( 0, i, uiCtx ) ); 2607 2608 if ( uiIsMostProb == 1 ) 2609 break; 2610 2611 // else: get next most probable pred mode 2612 uiMPModeIdx = (uiMPModeIdx+1)%RWTH_SDC_NUM_PRED_MODES; 2613 } 2614 2615 Int intraPredMode = g_auiSDCPredModes[uiMPModeIdx]; 2616 2617 #if HHI_DMM_WEDGE_INTRA 2618 if( intraPredMode == DMM_WEDGE_FULL_IDX ) { xParseWedgeFullInfo ( pcCU, uiAbsPartIdx, uiDepth ); } 2619 if( intraPredMode == DMM_WEDGE_PREDDIR_IDX ) { xParseWedgePredDirInfo ( pcCU, uiAbsPartIdx, uiDepth ); } 2620 #endif 2621 2622 pcCU->setLumaIntraDirSubParts((UChar)intraPredMode, uiAbsPartIdx, uiDepth); 2623 } 2624 2625 Void TDecSbac::parseSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiSegment ) 2626 { 2627 assert( pcCU->getSlice()->getSPS()->isDepth() ); 2628 assert( pcCU->getSDCFlag(uiAbsPartIdx) ); 2629 assert( uiSegment < 2 ); 2630 2631 UInt uiResidual = 0; 2632 UInt uiBit = 0; 2633 UInt uiAbsIdx = 0; 2634 UInt uiSign = 0; 2635 Int iIdx = 0; 2636 2637 UInt uiMaxResidualBits = GetBitsPerDepthValue(); 2638 assert( uiMaxResidualBits <= g_uiBitDepth ); 2639 2640 m_pcTDecBinIf->decodeBin(uiResidual, m_cSDCResidualFlagSCModel.get( 0, uiSegment, 0 ) ); 2641 2642 if (uiResidual) 2643 { 2644 // decode residual sign bit 2645 m_pcTDecBinIf->decodeBin(uiSign, m_cSDCResidualSignFlagSCModel.get( 0, uiSegment, 0 ) ); 2646 2647 // decode residual magnitude 2648 for (Int i=0; i<uiMaxResidualBits; i++) 2649 { 2650 m_pcTDecBinIf->decodeBin(uiBit, m_cSDCResidualSCModel.get( 0, uiSegment, i ) ); 2651 uiAbsIdx |= uiBit << i; 2652 } 2653 2654 uiAbsIdx += 1; 2655 iIdx =(Int)(uiSign ? -1 : 1)*uiAbsIdx; 2656 } 2657 2658 pcCU->setSDCSegmentDCOffset(iIdx, uiSegment, uiAbsPartIdx); 2659 } 2660 #endif 2454 2661 2455 2662 //! \}
Note: See TracChangeset for help on using the changeset viewer.