Ignore:
Timestamp:
16 May 2013, 09:23:44 (12 years ago)
Author:
lg
Message:

D0135->D0092->D0091

Location:
branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r384 r408  
    265265    xParseDblParam( aps );   
    266266  }
     267#if !LGE_SAO_MIGRATION_D0091
    267268  READ_FLAG(uiCode, "aps_sao_interleaving_flag");      aps->setSaoInterleavingFlag( (uiCode==1)?true:false );
    268269  if(!aps->getSaoInterleavingFlag())
     
    275276  }
    276277  }
     278#endif
    277279  READ_FLAG(uiCode, "aps_adaptive_loop_filter_flag");      aps->setAlfEnabled( (uiCode==1)?true:false );
    278280  if(aps->getAlfEnabled())
     
    307309  }
    308310}
     311#if !LGE_SAO_MIGRATION_D0091
    309312/** parse SAO parameters
    310313 * \param pSaoParam
     
    532535  }
    533536}
    534 
     537#endif
    535538
    536539Void TDecCavlc::xParseAlfParam(AlfParamSet* pAlfParamSet, Bool bSentInAPS, Int firstLCUAddr, Bool acrossSlice, Int numLCUInWidth, Int numLCUInHeight)
     
    18661869      if (sps->getUseSAO())
    18671870      {
     1871#if LGE_SAO_MIGRATION_D0091
     1872        READ_FLAG(uiCode, "slice_sao_luma_flag");  rpcSlice->setSaoEnabledFlag((Bool)uiCode);
     1873        READ_FLAG(uiCode, "slice_sao_chroma_flag");  rpcSlice->setSaoEnabledFlagChroma((Bool)uiCode);
     1874#else
    18681875        READ_FLAG(uiCode, "slice_sao_interleaving_flag");        rpcSlice->setSaoInterleavingFlag(uiCode);
    18691876        READ_FLAG(uiCode, "slice_sample_adaptive_offset_flag");  rpcSlice->setSaoEnabledFlag((Bool)uiCode);
     
    18781885          rpcSlice->setSaoEnabledFlagCr(0);
    18791886        }
     1887#endif
    18801888      }
    18811889      READ_UVLC (    uiCode, "aps_id" );  rpcSlice->setAPSId(uiCode);
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecCAVLC.h

    r332 r408  
    177177protected:
    178178  Void  xParseDblParam       ( TComAPS* aps );
     179#if !LGE_SAO_MIGRATION_D0091
    179180  Void  xParseSaoParam       ( SAOParam* pSaoParam );
    180181  Void  xParseSaoOffset      (SaoLcuParam* saoLcuParam);
    181182  Void  xParseSaoUnit        (Int rx, Int ry, Int compIdx, SAOParam* saoParam, Bool& repeatedRow );
     183#endif
    182184  Void  xParseAlfParam(AlfParamSet* pAlfParamSet, Bool bSentInAPS = true, Int firstLCUAddr = 0, Bool acrossSlice = true, Int numLCUInWidth= -1, Int numLCUInHeight= -1);
    183185  Void  parseAlfParamSet(AlfParamSet* pAlfParamSet, Int firstLCUAddr, Bool alfAcrossSlice);
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecCu.cpp

    r384 r408  
    371371    UInt uiMergeIndex = pcCU->getMergeIndex(uiAbsPartIdx);
    372372#if MERL_VSP_C0152
     373#if LGE_VSP_INHERIT_D0092
     374    Int iVSPIndexTrue[MRG_MAX_NUM_CANDS_MEM];
     375    for (Int i=0; i<MRG_MAX_NUM_CANDS_MEM; i++)
     376    {
     377        iVSPIndexTrue[i] = 0;
     378    }
     379#else
    373380    Int iVSPIndexTrue[3] = {-1, -1, -1};
     381#endif
    374382    m_ppcCU[uiDepth]->getInterMergeCandidates( 0, 0, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, iVSPIndexTrue, uiMergeIndex );
    375383   
     
    383391    {
    384392      Int iVSPIdx = 0;
     393#if LGE_VSP_INHERIT_D0092
     394      if (iVSPIndexTrue[uiMergeIndex] == 1)
     395      {
     396          iVSPIdx = 1;
     397      }
     398#else
    385399      Int numVspIdx;
    386400      numVspIdx = 3;
     
    393407          }
    394408      }
     409#endif
    395410      pcCU->setVSPIndexSubParts( iVSPIdx, uiAbsPartIdx, 0, uiDepth );  //Initialize the VSP, may change later in get InterMergeCandidates()
    396 #if QC_BVSP_CleanUP_D0191
     411#if QC_BVSP_CleanUP_D0191 && !LGE_VSP_INHERIT_D0092
    397412      if(iVSPIdx != 0)
    398413      {
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecEntropy.cpp

    r384 r408  
    301301      UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
    302302#if MERL_VSP_C0152
     303#if LGE_VSP_INHERIT_D0092
     304      Int iVSPIndexTrue[MRG_MAX_NUM_CANDS_MEM];
     305      for (Int i=0; i<MRG_MAX_NUM_CANDS_MEM; i++)
     306      {
     307          iVSPIndexTrue[i] = 0;
     308      }
     309#else
    303310      Int iVSPIndexTrue[3] = {-1, -1, -1};
     311#endif
    304312      pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, iVSPIndexTrue, uiMergeIndex );
    305313
     
    326334      {
    327335        Int iVSPIdx = 0;
     336#if LGE_VSP_INHERIT_D0092
     337        if (iVSPIndexTrue[uiMergeIndex] == 1)
     338        {
     339            iVSPIdx = 1;
     340        }
     341#else
    328342        Int numVspIdx;
    329343        numVspIdx = 3;
     
    336350            }
    337351        }
     352#endif
    338353        pcCU->setVSPIndexSubParts( iVSPIdx, uiSubPartIdx, uiPartIdx, uiDepth );  //Initialize the VSP, may change later in get InterMergeCandidates()
    339 #if QC_BVSP_CleanUP_D0191
    340        if(iVSPIdx != 0)
     354#if QC_BVSP_CleanUP_D0191 && !LGE_VSP_INHERIT_D0092
     355       if(iVSPIdx != 0) 
    341356       {
    342357         Int iIVCIdx = pcCU->getSlice()->getRefPic(REF_PIC_LIST_0, 0)->getPOC()==pcCU->getSlice()->getPOC() ? 0: pcCU->getSlice()->getNewRefIdx(REF_PIC_LIST_0);
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecEntropy.h

    r332 r408  
    225225  Void setSliceGranularity (Int iSliceGranularity) {m_pcEntropyDecoderIf->setSliceGranularity(iSliceGranularity);}
    226226
     227#if !LGE_SAO_MIGRATION_D0091
    227228  Void decodeSaoParam         (SAOParam* saoParam);
    228229  void decodeSaoLcu(Int rx, Int ry, Int compIdx, SAOParam* saoParam, Bool &repeatedRow );
    229230  Void decodeSaoOneLcu(SaoLcuParam* saoLcuParam);
     231#endif
    230232
    231233  Void decodeFlush() { m_pcEntropyDecoderIf->decodeFlush(); }
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecGop.cpp

    r296 r408  
    372372    if( pcSlice->getSPS()->getUseSAO() )
    373373    {
     374#if LGE_SAO_MIGRATION_D0091
     375        if(pcSlice->getSaoEnabledFlag()||pcSlice->getSaoEnabledFlagChroma())
     376        {
     377            SAOParam *saoParam = pcSlice->getAPS()->getSaoParam();
     378            saoParam->bSaoFlag[0] = pcSlice->getSaoEnabledFlag();
     379            saoParam->bSaoFlag[1] = pcSlice->getSaoEnabledFlagChroma();
     380            m_pcSAO->setSaoLcuBasedOptimization(1);
     381            m_pcSAO->createPicSaoInfo(rpcPic, m_uiILSliceCount);
     382            m_pcSAO->SAOProcess(rpcPic, saoParam);
     383            m_pcSAO->PCMLFDisableProcess(rpcPic);
     384            m_pcSAO->destroyPicSaoInfo();
     385        }
     386#else
    374387      if(pcSlice->getSaoEnabledFlag())
    375388      {
     
    388401        m_pcSAO->destroyPicSaoInfo();
    389402      }
     403#endif
    390404    }
    391405
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecSbac.cpp

    r332 r408  
    8888, m_cALFSvlcSCModel           ( 1,             1,               NUM_ALF_SVLC_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    8989, m_cCUAMPSCModel             ( 1,             1,               NUM_CU_AMP_CTX                , m_contextModels + m_numContextModels, m_numContextModels)
     90#if LGE_SAO_MIGRATION_D0091
     91, m_cSaoMergeSCModel          ( 1,             1,               NUM_SAO_MERGE_FLAG_CTX        , m_contextModels + m_numContextModels, m_numContextModels)
     92, m_cSaoTypeIdxSCModel        ( 1,             1,               NUM_SAO_TYPE_IDX_CTX          , m_contextModels + m_numContextModels, m_numContextModels)
     93#else
    9094, m_cSaoFlagSCModel           ( 1,             1,               NUM_SAO_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    9195, m_cSaoUvlcSCModel           ( 1,             1,               NUM_SAO_UVLC_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     
    9498, m_cSaoMergeUpSCModel        ( 1,             1,               NUM_SAO_MERGE_UP_FLAG_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
    9599, m_cSaoTypeIdxSCModel        ( 1,             1,               NUM_SAO_TYPE_IDX_CTX          , m_contextModels + m_numContextModels, m_numContextModels)
     100#endif
    96101#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    97102, m_cDmmFlagSCModel           ( 1,             1,               NUM_DMM_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     
    184189  m_cALFUvlcSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_ALF_UVLC );
    185190  m_cALFSvlcSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_ALF_SVLC );
     191#if LGE_SAO_MIGRATION_D0091
     192  m_cSaoMergeSCModel.initBuffer          ( sliceType, qp, (UChar*)INIT_SAO_MERGE_FLAG );
     193  m_cSaoTypeIdxSCModel.initBuffer        ( sliceType, qp, (UChar*)INIT_SAO_TYPE_IDX );
     194#else
    186195  m_cSaoFlagSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_SAO_FLAG );
    187196  m_cSaoUvlcSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_SAO_UVLC );
     
    190199  m_cSaoMergeUpSCModel.initBuffer        ( sliceType, qp, (UChar*)INIT_SAO_MERGE_UP_FLAG );
    191200  m_cSaoTypeIdxSCModel.initBuffer        ( sliceType, qp, (UChar*)INIT_SAO_TYPE_IDX );
     201#endif
    192202
    193203  m_cCUTransSubdivFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_TRANS_SUBDIV_FLAG );
     
    271281  m_cALFUvlcSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_ALF_UVLC );
    272282  m_cALFSvlcSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_ALF_SVLC );
     283#if LGE_SAO_MIGRATION_D0091
     284  m_cSaoMergeSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_FLAG );
     285  m_cSaoTypeIdxSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX );
     286#else
    273287  m_cSaoFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_SAO_FLAG );
    274288  m_cSaoUvlcSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC );
     
    277291  m_cSaoMergeUpSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG );
    278292  m_cSaoTypeIdxSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX );
     293#endif
    279294  m_cCUTransSubdivFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_TRANS_SUBDIV_FLAG );
    280295#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     
    16721687}
    16731688
    1674 
     1689#if LGE_SAO_MIGRATION_D0091
     1690Void TDecSbac::parseSaoMaxUvlc ( UInt& val, UInt maxSymbol )
     1691{
     1692    if (maxSymbol == 0)
     1693    {
     1694        val = 0;
     1695        return;
     1696    }
     1697
     1698    UInt code;
     1699    Int  i;
     1700    m_pcTDecBinIf->decodeBinEP( code );
     1701    if ( code == 0 )
     1702    {
     1703        val = 0;
     1704        return;
     1705    }
     1706
     1707    i=1;
     1708    while (1)
     1709    {
     1710        m_pcTDecBinIf->decodeBinEP( code );
     1711        if ( code == 0 )
     1712        {
     1713            break;
     1714        }
     1715        i++;
     1716        if (i == maxSymbol)
     1717        {
     1718            break;
     1719        }
     1720    }   
     1721
     1722    val = i;
     1723}
     1724
     1725Void TDecSbac::parseSaoUflc (UInt uiLength, UInt&  riVal)
     1726{
     1727    m_pcTDecBinIf->decodeBinsEP ( riVal, uiLength );
     1728}
     1729
     1730Void TDecSbac::parseSaoMerge (UInt&  ruiVal)
     1731{
     1732    UInt uiCode;
     1733    m_pcTDecBinIf->decodeBin( uiCode, m_cSaoMergeSCModel.get( 0, 0, 0 ) );
     1734    ruiVal = (Int)uiCode;
     1735}
     1736
     1737Void TDecSbac::parseSaoTypeIdx (UInt&  ruiVal)
     1738{
     1739    UInt uiCode;
     1740    m_pcTDecBinIf->decodeBin( uiCode, m_cSaoTypeIdxSCModel.get( 0, 0, 0 ) );
     1741    if (uiCode == 0)
     1742    {
     1743        ruiVal = 0;
     1744    }
     1745    else
     1746    {
     1747        m_pcTDecBinIf->decodeBinEP( uiCode );
     1748        if (uiCode == 0)
     1749        {
     1750            ruiVal = 5;
     1751        }
     1752        else
     1753        {
     1754            ruiVal = 1;
     1755        }
     1756    }
     1757}
     1758
     1759inline Void copySaoOneLcuParam(SaoLcuParam* psDst,  SaoLcuParam* psSrc)
     1760{
     1761    Int i;
     1762    psDst->partIdx = psSrc->partIdx;
     1763    psDst->typeIdx = psSrc->typeIdx;
     1764    if (psDst->typeIdx != -1)
     1765    {
     1766        psDst->subTypeIdx = psSrc->subTypeIdx ;
     1767        psDst->length  = psSrc->length;
     1768        for (i=0;i<psDst->length;i++)
     1769        {
     1770            psDst->offset[i] = psSrc->offset[i];
     1771        }
     1772    }
     1773    else
     1774    {
     1775        psDst->length  = 0;
     1776        for (i=0;i<SAO_BO_LEN;i++)
     1777        {
     1778            psDst->offset[i] = 0;
     1779        }
     1780    }
     1781}
     1782
     1783Void TDecSbac::parseSaoOffset(SaoLcuParam* psSaoLcuParam, UInt compIdx)
     1784{
     1785    UInt uiSymbol;
     1786    static Int iTypeLength[MAX_NUM_SAO_TYPE] =
     1787    {
     1788        SAO_EO_LEN,
     1789        SAO_EO_LEN,
     1790        SAO_EO_LEN,
     1791        SAO_EO_LEN,
     1792        SAO_BO_LEN
     1793    };
     1794
     1795    if (compIdx==2)
     1796    {
     1797        uiSymbol = (UInt)( psSaoLcuParam->typeIdx + 1);
     1798    }
     1799    else
     1800    {
     1801        parseSaoTypeIdx(uiSymbol);
     1802    }
     1803    psSaoLcuParam->typeIdx = (Int)uiSymbol - 1;
     1804
     1805    if (uiSymbol)
     1806    {
     1807        psSaoLcuParam->length = iTypeLength[psSaoLcuParam->typeIdx];
     1808#if FULL_NBIT
     1809        Int offsetTh = 1 << ( min((Int)(g_uiBitDepth + (g_uiBitDepth-8)-5),5) );
     1810#else
     1811        Int offsetTh = 1 << ( min((Int)(g_uiBitDepth + g_uiBitIncrement-5),5) );
     1812#endif
     1813
     1814        if( psSaoLcuParam->typeIdx == SAO_BO )
     1815        {
     1816            for(Int i=0; i< psSaoLcuParam->length; i++)
     1817            {
     1818                parseSaoMaxUvlc(uiSymbol, offsetTh -1 );
     1819                psSaoLcuParam->offset[i] = uiSymbol;
     1820            }   
     1821            for(Int i=0; i< psSaoLcuParam->length; i++)
     1822            {
     1823                if (psSaoLcuParam->offset[i] != 0)
     1824                {
     1825                    m_pcTDecBinIf->decodeBinEP ( uiSymbol);
     1826                    if (uiSymbol)
     1827                    {
     1828                        psSaoLcuParam->offset[i] = -psSaoLcuParam->offset[i] ;
     1829                    }
     1830                }
     1831            }
     1832            parseSaoUflc(5, uiSymbol );
     1833            psSaoLcuParam->subTypeIdx = uiSymbol;
     1834        }
     1835        else if( psSaoLcuParam->typeIdx < 4 )
     1836        {
     1837            parseSaoMaxUvlc(uiSymbol, offsetTh -1 ); psSaoLcuParam->offset[0] = uiSymbol;   
     1838            parseSaoMaxUvlc(uiSymbol, offsetTh -1 ); psSaoLcuParam->offset[1] = uiSymbol;
     1839            parseSaoMaxUvlc(uiSymbol, offsetTh -1 ); psSaoLcuParam->offset[2] = -(Int)uiSymbol;
     1840            parseSaoMaxUvlc(uiSymbol, offsetTh -1 ); psSaoLcuParam->offset[3] = -(Int)uiSymbol;
     1841            if (compIdx != 2)
     1842            {
     1843                parseSaoUflc(2, uiSymbol );
     1844                psSaoLcuParam->subTypeIdx = uiSymbol;
     1845                psSaoLcuParam->typeIdx += psSaoLcuParam->subTypeIdx;
     1846            }
     1847        }
     1848    }
     1849    else
     1850    {
     1851        psSaoLcuParam->length = 0;
     1852    }
     1853}
     1854
     1855Void TDecSbac::parseSaoOneLcuInterleaving(Int rx, Int ry, SAOParam* pSaoParam, TComDataCU* pcCU, Int iCUAddrInSlice, Int iCUAddrUpInSlice, Int allowMergeLeft, Int allowMergeUp)
     1856{
     1857    Int iAddr = pcCU->getAddr();
     1858    UInt uiSymbol;
     1859
     1860    for (Int iCompIdx=0; iCompIdx<3; iCompIdx++)
     1861    {
     1862        pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeUpFlag    = 0;
     1863        pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeLeftFlag  = 0;
     1864        pSaoParam->saoLcuParam[iCompIdx][iAddr].subTypeIdx     = 0;
     1865        pSaoParam->saoLcuParam[iCompIdx][iAddr].typeIdx        =-1;
     1866        pSaoParam->saoLcuParam[iCompIdx][iAddr].offset[0]      = 0;
     1867        pSaoParam->saoLcuParam[iCompIdx][iAddr].offset[1]      = 0;
     1868        pSaoParam->saoLcuParam[iCompIdx][iAddr].offset[2]      = 0;
     1869        pSaoParam->saoLcuParam[iCompIdx][iAddr].offset[3]      = 0;
     1870    }
     1871    if (pSaoParam->bSaoFlag[0] || pSaoParam->bSaoFlag[1] )
     1872    {
     1873        if (rx>0 && iCUAddrInSlice!=0 && allowMergeLeft)
     1874        {
     1875            parseSaoMerge(uiSymbol);
     1876            pSaoParam->saoLcuParam[0][iAddr].mergeLeftFlag = (Bool)uiSymbol; 
     1877        }
     1878        if (pSaoParam->saoLcuParam[0][iAddr].mergeLeftFlag==0)
     1879        {
     1880            if ((ry > 0) && (iCUAddrUpInSlice>=0) && allowMergeUp)
     1881            {
     1882                parseSaoMerge(uiSymbol);
     1883                pSaoParam->saoLcuParam[0][iAddr].mergeUpFlag = (Bool)uiSymbol;
     1884            }
     1885        }
     1886    }
     1887
     1888    for (Int iCompIdx=0; iCompIdx<3; iCompIdx++)
     1889    {
     1890        if ((iCompIdx == 0  && pSaoParam->bSaoFlag[0]) || (iCompIdx > 0  && pSaoParam->bSaoFlag[1]) )
     1891        {
     1892            if (rx>0 && iCUAddrInSlice!=0 && allowMergeLeft)
     1893            {
     1894                pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeLeftFlag = pSaoParam->saoLcuParam[0][iAddr].mergeLeftFlag;
     1895            }
     1896            else
     1897            {
     1898                pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeLeftFlag = 0;
     1899            }
     1900
     1901            if (pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeLeftFlag==0)
     1902            {
     1903                if ((ry > 0) && (iCUAddrUpInSlice>=0) && allowMergeUp)
     1904                {
     1905                    pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeUpFlag = pSaoParam->saoLcuParam[0][iAddr].mergeUpFlag;
     1906                }
     1907                else
     1908                {
     1909                    pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeUpFlag = 0;
     1910                }
     1911   
     1912                if (!pSaoParam->saoLcuParam[iCompIdx][iAddr].mergeUpFlag)
     1913                {
     1914                    pSaoParam->saoLcuParam[2][iAddr].typeIdx = pSaoParam->saoLcuParam[1][iAddr].typeIdx;
     1915                    parseSaoOffset(&(pSaoParam->saoLcuParam[iCompIdx][iAddr]), iCompIdx);
     1916                }
     1917                else
     1918                {
     1919                    copySaoOneLcuParam(&pSaoParam->saoLcuParam[iCompIdx][iAddr], &pSaoParam->saoLcuParam[iCompIdx][iAddr-pSaoParam->numCuInWidth]);
     1920                }
     1921            }
     1922            else
     1923            {
     1924                copySaoOneLcuParam(&pSaoParam->saoLcuParam[iCompIdx][iAddr],  &pSaoParam->saoLcuParam[iCompIdx][iAddr-1]);
     1925            }
     1926        }
     1927        else
     1928        {
     1929            pSaoParam->saoLcuParam[iCompIdx][iAddr].typeIdx    = -1;
     1930            pSaoParam->saoLcuParam[iCompIdx][iAddr].subTypeIdx = 0;
     1931        }
     1932    }
     1933}
     1934#else
    16751935Void TDecSbac::parseSaoUvlc (UInt& ruiVal)
    16761936{
     
    19092169  }
    19102170}
     2171#endif
    19112172
    19122173/**
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecSbac.h

    r332 r408  
    110110#endif
    111111 
     112#if LGE_SAO_MIGRATION_D0091
     113  Void  parseSaoMaxUvlc           ( UInt& val, UInt maxSymbol );
     114  Void  parseSaoMerge             ( UInt&  ruiVal   );
     115  Void  parseSaoTypeIdx           ( UInt&  ruiVal  );
     116  Void  parseSaoUflc              ( UInt uiLength, UInt& ruiVal     );
     117  Void  parseSaoOneLcuInterleaving(Int rx, Int ry, SAOParam* pSaoParam, TComDataCU* pcCU, Int iCUAddrInSlice, Int iCUAddrUpInSlice, Int allowMergeLeft, Int allowMergeUp);
     118  Void  parseSaoOffset            (SaoLcuParam* psSaoLcuParam, UInt compIdx);
     119#else
    112120  Void  parseSaoUvlc              ( UInt& ruiVal           );
    113121  Void  parseSaoSvlc              ( Int&  riVal            );
     
    118126  Void  parseSaoOneLcuInterleaving(Int rx, Int ry, SAOParam* pSaoParam, TComDataCU* pcCU, Int iCUAddrInSlice, Int iCUAddrUpInSlice, Bool bLFCrossSliceBoundaryFlag);
    119127  Void  parseSaoOffset            (SaoLcuParam* psSaoLcuParam);
     128#endif
    120129 
    121130#if RWTH_SDC_DLT_B0036
     
    245254  ContextModel3DBuffer m_cALFSvlcSCModel;
    246255  ContextModel3DBuffer m_cCUAMPSCModel;
     256#if LGE_SAO_MIGRATION_D0091
     257  ContextModel3DBuffer m_cSaoMergeSCModel;
     258  ContextModel3DBuffer m_cSaoTypeIdxSCModel;
     259#else
    247260  ContextModel3DBuffer m_cSaoFlagSCModel;
    248261  ContextModel3DBuffer m_cSaoUvlcSCModel;
     
    251264  ContextModel3DBuffer m_cSaoMergeUpSCModel;
    252265  ContextModel3DBuffer m_cSaoTypeIdxSCModel;
     266#endif
    253267
    254268#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
  • branches/HTM-6.2-dev1-LG/source/Lib/TLibDecoder/TDecSlice.cpp

    r296 r408  
    286286    g_bJustDoIt = g_bEncDecTraceEnable;
    287287#endif
     288#if LGE_SAO_MIGRATION_D0091
     289    if ( pcSlice->getSPS()->getUseSAO() && (pcSlice->getSaoEnabledFlag()||pcSlice->getSaoEnabledFlagChroma()) )
     290    {
     291        SAOParam *saoParam =  pcSlice->getAPS()->getSaoParam();
     292        saoParam->bSaoFlag[0] = pcSlice->getSaoEnabledFlag();
     293    if (iCUAddr == iStartCUAddr)
     294    {
     295        saoParam->bSaoFlag[1] = pcSlice->getSaoEnabledFlagChroma();
     296    }
     297    Int numCuInWidth     = saoParam->numCuInWidth;
     298    Int cuAddrInSlice = iCUAddr - rpcPic->getPicSym()->getCUOrderMap(pcSlice->getSliceCurStartCUAddr()/rpcPic->getNumPartInCU());
     299    Int cuAddrUpInSlice  = cuAddrInSlice - numCuInWidth;
     300    Int rx = iCUAddr % numCuInWidth;
     301    Int ry = iCUAddr / numCuInWidth;
     302    Int allowMergeLeft = 1;
     303    Int allowMergeUp   = 1;
     304    if (rx!=0)
     305    {
     306        if (rpcPic->getPicSym()->getTileIdxMap(iCUAddr-1) != rpcPic->getPicSym()->getTileIdxMap(iCUAddr))
     307        {
     308            allowMergeLeft = 0;
     309        }
     310    }
     311    if (ry!=0)
     312    {
     313        if (rpcPic->getPicSym()->getTileIdxMap(iCUAddr-numCuInWidth) != rpcPic->getPicSym()->getTileIdxMap(iCUAddr))
     314        {
     315        allowMergeUp = 0;
     316        }
     317    }
     318    pcSbacDecoder->parseSaoOneLcuInterleaving(rx, ry, saoParam,pcCU, cuAddrInSlice, cuAddrUpInSlice, allowMergeLeft, allowMergeUp);
     319    }
     320#else
    288321    if ( pcSlice->getSPS()->getUseSAO() && pcSlice->getSaoInterleavingFlag() && pcSlice->getSaoEnabledFlag() )
    289322    {
     
    301334      pcSbacDecoder->parseSaoOneLcuInterleaving(rx, ry, pcSlice->getAPS()->getSaoParam(),pcCU, cuAddrInSlice, cuAddrUpInSlice, pcSlice->getSPS()->getLFCrossSliceBoundaryFlag() );
    302335    }
     336#endif
    303337
    304338    m_pcCuDecoder->decodeCU     ( pcCU, uiIsLast );
Note: See TracChangeset for help on using the changeset viewer.